@samitouri / QOS-React-2 / commits / 3e94bce765

Enable prefer-const lint rules (#18451)

* Enable prefer-const rule Stylistically I don't like this but Closure Compiler takes advantage of this information. * Auto-fix lints * Manually fix the remaining callsites

Sebastian Markbåge committed Apr 1, 2020 at 12:35 UTC 3e94bce765d355d74f6a60feb4addb6d196e3482
215 files changed +1576 -1584
.eslintrc.js
+1
@@ -126,6 +126,7 @@ module.exports = {
126 },
127 rules: {
128 'no-var': ERROR,
129 + 'prefer-const': ERROR,
130 strict: OFF,
131 },
132 },
packages/babel-plugin-react-jsx/src/TransformJSXToReactBabelPlugin.js
+1 -1
@@ -115,7 +115,7 @@ You can turn on the 'throwIfNamespace' flag to bypass this warning.`,
115 'Fragment tags are only supported in React 16 and up.',
116 );
117 }
118 - let callExpr = buildJSXFragmentCall(path, file);
118 + const callExpr = buildJSXFragmentCall(path, file);
119
120 if (callExpr) {
121 path.replaceWith(t.inherits(callExpr, path.node));
packages/eslint-plugin-react-hooks/src/ExhaustiveDeps.js
+31 -29
@@ -62,10 +62,10 @@ export default {
62 const scopeManager = context.getSourceCode().scopeManager;
63
64 // Should be shared between visitors.
65 - let setStateCallSites = new WeakMap();
66 - let stateVariables = new WeakSet();
67 - let staticKnownValueCache = new WeakMap();
68 - let functionWithoutCapturedValueCache = new WeakMap();
65 + const setStateCallSites = new WeakMap();
66 + const stateVariables = new WeakSet();
67 + const staticKnownValueCache = new WeakMap();
68 + const functionWithoutCapturedValueCache = new WeakMap();
69 function memoizeWithWeakMap(fn, map) {
70 return function(arg) {
71 if (map.has(arg)) {
@@ -400,12 +400,12 @@ export default {
400 // Search the direct component subscopes for
401 // top-level function definitions matching this reference.
402 const fnNode = def.node;
403 - let childScopes = componentScope.childScopes;
403 + const childScopes = componentScope.childScopes;
404 let fnScope = null;
405 let i;
406 for (i = 0; i < childScopes.length; i++) {
407 - let childScope = childScopes[i];
408 - let childScopeBlock = childScope.block;
407 + const childScope = childScopes[i];
408 + const childScopeBlock = childScope.block;
409 if (
410 // function handleChange() {}
411 (fnNode.type === 'FunctionDeclaration' &&
@@ -597,7 +597,7 @@ export default {
597
598 // Warn about assigning to variables in the outer scope.
599 // Those are usually bugs.
600 - let staleAssignments = new Set();
600 + const staleAssignments = new Set();
601 function reportStaleAssignment(writeExpr, key) {
602 if (staleAssignments.has(key)) {
603 return;
@@ -664,7 +664,7 @@ export default {
664 });
665 });
666 if (setStateInsideEffectWithoutDeps) {
667 - let {suggestedDependencies} = collectRecommendations({
667 + const {suggestedDependencies} = collectRecommendations({
668 dependencies,
669 declaredDependencies: [],
670 optionalDependencies,
@@ -789,7 +789,7 @@ export default {
789 });
790 }
791
792 - let {
792 + const {
793 suggestedDependencies,
794 unnecessaryDependencies,
795 missingDependencies,
@@ -802,6 +802,8 @@ export default {
802 isEffect,
803 });
804
805 + let suggestedDeps = suggestedDependencies;
806 +
807 const problemCount =
808 duplicateDependencies.size +
809 missingDependencies.size +
@@ -871,7 +873,7 @@ export default {
873 // for effects though because those have legit
874 // use cases for over-specifying deps.
875 if (!isEffect && missingDependencies.size > 0) {
874 - suggestedDependencies = collectRecommendations({
876 + suggestedDeps = collectRecommendations({
877 dependencies,
878 declaredDependencies: [], // Pretend we don't know
879 optionalDependencies,
@@ -890,7 +892,7 @@ export default {
892 return declaredDepKeys.join(',') === sortedDeclaredDepKeys.join(',');
893 }
894 if (areDeclaredDepsAlphabetized()) {
893 - suggestedDependencies.sort();
895 + suggestedDeps.sort();
896 }
897
898 function getWarningMessage(deps, singlePrefix, label, fixVerb) {
@@ -945,7 +947,7 @@ export default {
947 // a `this` value. This warning can be confusing.
948 // So if we're going to show it, append a clarification.
949 if (!extraWarning && missingDependencies.has('props')) {
948 - let propDep = dependencies.get('props');
950 + const propDep = dependencies.get('props');
951 if (propDep == null) {
952 return;
953 }
@@ -1146,14 +1148,14 @@ export default {
1148 extraWarning,
1149 suggest: [
1150 {
1149 - desc: `Update the dependencies array to be: [${suggestedDependencies.join(
1151 + desc: `Update the dependencies array to be: [${suggestedDeps.join(
1152 ', ',
1153 )}]`,
1154 fix(fixer) {
1155 // TODO: consider preserving the comments or formatting?
1156 return fixer.replaceText(
1157 declaredDependenciesNode,
1156 - `[${suggestedDependencies.join(', ')}]`,
1158 + `[${suggestedDeps.join(', ')}]`,
1159 );
1160 },
1161 },
@@ -1213,9 +1215,9 @@ function collectRecommendations({
1215
1216 // Tree manipulation helpers.
1217 function getOrCreateNodeByPath(rootNode, path) {
1216 - let keys = path.split('.');
1218 + const keys = path.split('.');
1219 let node = rootNode;
1218 - for (let key of keys) {
1220 + for (const key of keys) {
1221 let child = node.children.get(key);
1222 if (!child) {
1223 child = createDepTree();
@@ -1226,10 +1228,10 @@ function collectRecommendations({
1228 return node;
1229 }
1230 function markAllParentsByPath(rootNode, path, fn) {
1229 - let keys = path.split('.');
1231 + const keys = path.split('.');
1232 let node = rootNode;
1231 - for (let key of keys) {
1232 - let child = node.children.get(key);
1233 + for (const key of keys) {
1234 + const child = node.children.get(key);
1235 if (!child) {
1236 return;
1237 }
@@ -1239,8 +1241,8 @@ function collectRecommendations({
1241 }
1242
1243 // Now we can learn which dependencies are missing or necessary.
1242 - let missingDependencies = new Set();
1243 - let satisfyingDependencies = new Set();
1244 + const missingDependencies = new Set();
1245 + const satisfyingDependencies = new Set();
1246 scanTreeRecursively(
1247 depTree,
1248 missingDependencies,
@@ -1277,9 +1279,9 @@ function collectRecommendations({
1279 }
1280
1281 // Collect suggestions in the order they were originally specified.
1280 - let suggestedDependencies = [];
1281 - let unnecessaryDependencies = new Set();
1282 - let duplicateDependencies = new Set();
1282 + const suggestedDependencies = [];
1283 + const unnecessaryDependencies = new Set();
1284 + const duplicateDependencies = new Set();
1285 declaredDependencies.forEach(({key}) => {
1286 // Does this declared dep satisfy a real need?
1287 if (satisfyingDependencies.has(key)) {
@@ -1337,7 +1339,7 @@ function scanForDeclaredBareFunctions({
1339 if (fnRef == null) {
1340 return null;
1341 }
1340 - let fnNode = fnRef.defs[0];
1342 + const fnNode = fnRef.defs[0];
1343 if (fnNode == null) {
1344 return null;
1345 }
@@ -1461,7 +1463,7 @@ function getNodeWithoutReactNamespace(node, options) {
1463 // 1 for useImperativeHandle(ref, fn).
1464 // For additionally configured Hooks, assume that they're like useEffect (0).
1465 function getReactiveHookCallbackIndex(calleeNode, options) {
1464 - let node = getNodeWithoutReactNamespace(calleeNode);
1466 + const node = getNodeWithoutReactNamespace(calleeNode);
1467 if (node.type !== 'Identifier') {
1468 return -1;
1469 }
@@ -1507,7 +1509,7 @@ function getReactiveHookCallbackIndex(calleeNode, options) {
1509 * - agnostic to AST node types, it looks for `{ type: string, ... }`
1510 */
1511 function fastFindReferenceWithParent(start, target) {
1510 - let queue = [start];
1512 + const queue = [start];
1513 let item = null;
1514
1515 while (queue.length) {
@@ -1521,7 +1523,7 @@ function fastFindReferenceWithParent(start, target) {
1523 continue;
1524 }
1525
1524 - for (let [key, value] of Object.entries(item)) {
1526 + for (const [key, value] of Object.entries(item)) {
1527 if (key === 'parent') {
1528 continue;
1529 }
packages/eslint-plugin-react-hooks/src/RulesOfHooks.js
+1 -1
@@ -226,7 +226,7 @@ export default {
226 function countPathsToEnd(segment, pathHistory) {
227 const {cache} = countPathsToEnd;
228 let paths = cache.get(segment.id);
229 - let pathList = new Set(pathHistory);
229 + const pathList = new Set(pathHistory);
230
231 // If `pathList` includes the current segment then we've found a cycle!
232 // We need to fill `cyclic` with all segments inside cycle
packages/jest-react/src/JestReact.js
+1 -1
@@ -99,7 +99,7 @@ function jsonChildrenToJSXChildren(jsonChildren) {
99 if (jsonChildren.length === 1) {
100 return jsonChildToJSXChild(jsonChildren[0]);
101 } else if (jsonChildren.length > 1) {
102 - let jsxChildren = [];
102 + const jsxChildren = [];
103 let allJSXChildrenAreStrings = true;
104 let jsxChildrenString = '';
105 for (let i = 0; i < jsonChildren.length; i++) {
packages/legacy-events/getListener.js
+1 -3
@@ -46,8 +46,6 @@ function shouldPreventMouseEvent(name, type, props) {
46 * @return {?function} The stored callback.
47 */
48 export default function getListener(inst: Fiber, registrationName: string) {
49 - let listener;
50 -
49 // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not
50 // live here; needs to be moved to a better place soon
51 const stateNode = inst.stateNode;
@@ -60,7 +58,7 @@ export default function getListener(inst: Fiber, registrationName: string) {
58 // Work in progress.
59 return null;
60 }
63 - listener = props[registrationName];
61 + const listener = props[registrationName];
62 if (shouldPreventMouseEvent(registrationName, inst.type, props)) {
63 return null;
64 }
packages/react-art/src/ReactARTHostConfig.js
+2 -2
@@ -68,7 +68,7 @@ function createEventHandler(instance) {
68
69 function destroyEventListeners(instance) {
70 if (instance._subscriptions) {
71 - for (let type in instance._subscriptions) {
71 + for (const type in instance._subscriptions) {
72 instance._subscriptions[type]();
73 }
74 }
@@ -170,7 +170,7 @@ function applyNodeProps(instance, props, prevProps = {}) {
170 }
171 }
172
173 - for (let type in EVENT_TYPES) {
173 + for (const type in EVENT_TYPES) {
174 addEventListeners(instance, EVENT_TYPES[type], props[type]);
175 }
176 }
packages/react-cache/src/ReactCache.js
+1 -1
@@ -97,7 +97,7 @@ function accessResult<I, K, V>(
97 entriesForResource = new Map();
98 entries.set(resource, entriesForResource);
99 }
100 - let entry = entriesForResource.get(key);
100 + const entry = entriesForResource.get(key);
101 if (entry === undefined) {
102 const thenable = fetch(input);
103 thenable.then(
packages/react-cache/src/__tests__/ReactCache-test.internal.js
+1 -1
@@ -303,7 +303,7 @@ describe('ReactCache', () => {
303 const BadTextResource = createResource(
304 ([text, ms = 0]) => {
305 let listeners = null;
306 - let value = null;
306 + const value = null;
307 return {
308 then(resolve, reject) {
309 if (value !== null) {
packages/react-client/src/ReactFlightClient.js
+25 -25
@@ -62,7 +62,7 @@ function Chunk(status: any, value: any) {
62 this._value = value;
63 }
64 Chunk.prototype.then = function<T>(resolve: () => mixed) {
65 - let chunk: SomeChunk<T> = this;
65 + const chunk: SomeChunk<T> = this;
66 if (chunk._status === PENDING) {
67 if (chunk._value === null) {
68 chunk._value = [];
@@ -81,8 +81,8 @@ export type Response<T> = {
81 };
82
83 function readRoot<T>(): T {
84 - let response: Response<T> = this;
85 - let rootChunk = response.rootChunk;
84 + const response: Response<T> = this;
85 + const rootChunk = response.rootChunk;
86 if (rootChunk._status === RESOLVED) {
87 return rootChunk._value;
88 } else if (rootChunk._status === PENDING) {
@@ -94,10 +94,10 @@ function readRoot<T>(): T {
94 }
95
96 export function createResponse<T>(): Response<T> {
97 - let rootChunk: SomeChunk<any> = createPendingChunk();
98 - let chunks: Map<number, SomeChunk<any>> = new Map();
97 + const rootChunk: SomeChunk<any> = createPendingChunk();
98 + const chunks: Map<number, SomeChunk<any>> = new Map();
99 chunks.set(0, rootChunk);
100 - let response = {
100 + const response = {
101 partialRow: '',
102 rootChunk,
103 chunks: chunks,
@@ -117,7 +117,7 @@ function createErrorChunk(error: Error): ErroredChunk {
117 function wakeChunk(listeners: null | Array<() => mixed>) {
118 if (listeners !== null) {
119 for (let i = 0; i < listeners.length; i++) {
120 - let listener = listeners[i];
120 + const listener = listeners[i];
121 listener();
122 }
123 }
@@ -128,8 +128,8 @@ function triggerErrorOnChunk<T>(chunk: SomeChunk<T>, error: Error): void {
128 // We already resolved. We didn't expect to see this.
129 return;
130 }
131 - let listeners = chunk._value;
132 - let erroredChunk: ErroredChunk = (chunk: any);
131 + const listeners = chunk._value;
132 + const erroredChunk: ErroredChunk = (chunk: any);
133 erroredChunk._status = ERRORED;
134 erroredChunk._value = error;
135 wakeChunk(listeners);
@@ -144,8 +144,8 @@ function resolveChunk<T>(chunk: SomeChunk<T>, value: T): void {
144 // We already resolved. We didn't expect to see this.
145 return;
146 }
147 - let listeners = chunk._value;
148 - let resolvedChunk: ResolvedChunk<T> = (chunk: any);
147 + const listeners = chunk._value;
148 + const resolvedChunk: ResolvedChunk<T> = (chunk: any);
149 resolvedChunk._status = RESOLVED;
150 resolvedChunk._value = value;
151 wakeChunk(listeners);
@@ -170,7 +170,7 @@ function readMaybeChunk<T>(maybeChunk: SomeChunk<T> | T): T {
170 // $FlowFixMe
171 return maybeChunk;
172 }
173 - let chunk: SomeChunk<T> = (maybeChunk: any);
173 + const chunk: SomeChunk<T> = (maybeChunk: any);
174 if (chunk._status === RESOLVED) {
175 return chunk._value;
176 } else if (chunk._status === PENDING) {
@@ -232,18 +232,18 @@ function initializeBlock<Props, Data>(
232 tuple: UninitializedBlockPayload<Data>,
233 ): BlockComponent<Props, Data> {
234 // Require module first and then data. The ordering matters.
235 - let moduleMetaData: ModuleMetaData = readMaybeChunk(tuple[1]);
236 - let moduleReference: ModuleReference<
235 + const moduleMetaData: ModuleMetaData = readMaybeChunk(tuple[1]);
236 + const moduleReference: ModuleReference<
237 BlockRenderFunction<Props, Data>,
238 > = resolveModuleReference(moduleMetaData);
239 // TODO: Do this earlier, as the chunk is resolved.
240 preloadModule(moduleReference);
241
242 - let moduleExport = requireModule(moduleReference);
242 + const moduleExport = requireModule(moduleReference);
243
244 // The ordering here is important because this call might suspend.
245 // We don't want that to prevent the module graph for being initialized.
246 - let data: Data = readMaybeChunk(tuple[2]);
246 + const data: Data = readMaybeChunk(tuple[2]);
247
248 return {
249 $$typeof: REACT_BLOCK_TYPE,
@@ -256,7 +256,7 @@ function initializeBlock<Props, Data>(
256 function createLazyBlock<Props, Data>(
257 tuple: UninitializedBlockPayload<Data>,
258 ): LazyComponent<BlockComponent<Props, Data>, UninitializedBlockPayload<Data>> {
259 - let lazyType: LazyComponent<
259 + const lazyType: LazyComponent<
260 BlockComponent<Props, Data>,
261 UninitializedBlockPayload<Data>,
262 > = {
@@ -281,8 +281,8 @@ export function parseModelFromJSON<T>(
281 // This was an escaped string value.
282 return value.substring(1);
283 } else {
284 - let id = parseInt(value.substring(1), 16);
285 - let chunks = response.chunks;
284 + const id = parseInt(value.substring(1), 16);
285 + const chunks = response.chunks;
286 let chunk = chunks.get(id);
287 if (!chunk) {
288 chunk = createPendingChunk();
@@ -296,7 +296,7 @@ export function parseModelFromJSON<T>(
296 }
297 }
298 if (typeof value === 'object' && value !== null) {
299 - let tuple: [mixed, mixed, mixed, mixed] = (value: any);
299 + const tuple: [mixed, mixed, mixed, mixed] = (value: any);
300 switch (tuple[0]) {
301 case REACT_ELEMENT_TYPE: {
302 // TODO: Consider having React just directly accept these arrays as elements.
@@ -317,8 +317,8 @@ export function resolveModelChunk<T, M>(
317 id: number,
318 model: M,
319 ): void {
320 - let chunks = response.chunks;
321 - let chunk = chunks.get(id);
320 + const chunks = response.chunks;
321 + const chunk = chunks.get(id);
322 if (!chunk) {
323 chunks.set(id, createResolvedChunk(model));
324 } else {
@@ -332,10 +332,10 @@ export function resolveErrorChunk<T>(
332 message: string,
333 stack: string,
334 ): void {
335 - let error = new Error(message);
335 + const error = new Error(message);
336 error.stack = stack;
337 - let chunks = response.chunks;
338 - let chunk = chunks.get(id);
337 + const chunks = response.chunks;
338 + const chunk = chunks.get(id);
339 if (!chunk) {
340 chunks.set(id, createErrorChunk(error));
341 } else {
packages/react-client/src/ReactFlightClientStream.js
+14 -14
@@ -31,7 +31,7 @@ export type Response<T> = ResponseBase<T> & {
31 };
32
33 export function createResponse<T>(): Response<T> {
34 - let response: Response<T> = (createResponseImpl(): any);
34 + const response: Response<T> = (createResponseImpl(): any);
35 response.fromJSON = function(key: string, value: JSONValue) {
36 return parseModelFromJSON(response, this, key, value);
37 };
@@ -45,27 +45,27 @@ function processFullRow<T>(response: Response<T>, row: string): void {
45 if (row === '') {
46 return;
47 }
48 - let tag = row[0];
48 + const tag = row[0];
49 switch (tag) {
50 case 'J': {
51 - let colon = row.indexOf(':', 1);
52 - let id = parseInt(row.substring(1, colon), 16);
53 - let json = row.substring(colon + 1);
54 - let model = JSON.parse(json, response.fromJSON);
51 + const colon = row.indexOf(':', 1);
52 + const id = parseInt(row.substring(1, colon), 16);
53 + const json = row.substring(colon + 1);
54 + const model = JSON.parse(json, response.fromJSON);
55 resolveModelChunk(response, id, model);
56 return;
57 }
58 case 'E': {
59 - let colon = row.indexOf(':', 1);
60 - let id = parseInt(row.substring(1, colon), 16);
61 - let json = row.substring(colon + 1);
62 - let errorInfo = JSON.parse(json);
59 + const colon = row.indexOf(':', 1);
60 + const id = parseInt(row.substring(1, colon), 16);
61 + const json = row.substring(colon + 1);
62 + const errorInfo = JSON.parse(json);
63 resolveErrorChunk(response, id, errorInfo.message, errorInfo.stack);
64 return;
65 }
66 default: {
67 // Assume this is the root model.
68 - let model = JSON.parse(row, response.fromJSON);
68 + const model = JSON.parse(row, response.fromJSON);
69 resolveModelChunk(response, 0, model);
70 return;
71 }
@@ -79,7 +79,7 @@ export function processStringChunk<T>(
79 ): void {
80 let linebreak = chunk.indexOf('\n', offset);
81 while (linebreak > -1) {
82 - let fullrow = response.partialRow + chunk.substring(offset, linebreak);
82 + const fullrow = response.partialRow + chunk.substring(offset, linebreak);
83 processFullRow(response, fullrow);
84 response.partialRow = '';
85 offset = linebreak + 1;
@@ -95,10 +95,10 @@ export function processBinaryChunk<T>(
95 if (!supportsBinaryStreams) {
96 throw new Error("This environment don't support binary chunks.");
97 }
98 - let stringDecoder = response.stringDecoder;
98 + const stringDecoder = response.stringDecoder;
99 let linebreak = chunk.indexOf(10); // newline
100 while (linebreak > -1) {
101 - let fullrow =
101 + const fullrow =
102 response.partialRow +
103 readFinalStringChunk(stringDecoder, chunk.subarray(0, linebreak));
104 processFullRow(response, fullrow);
packages/react-client/src/__tests__/ReactFlight-test.js
+13 -13
@@ -38,7 +38,7 @@ describe('ReactFlight', () => {
38 };
39 }
40 return function(...args) {
41 - let curriedLoad = () => {
41 + const curriedLoad = () => {
42 return load(...args);
43 };
44 return ReactNoopFlightServerRuntime.serverBlock(render, curriedLoad);
@@ -58,10 +58,10 @@ describe('ReactFlight', () => {
58 ),
59 };
60 }
61 - let transport = ReactNoopFlightServer.render({
61 + const transport = ReactNoopFlightServer.render({
62 foo: <Foo />,
63 });
64 - let model = ReactNoopFlightClient.read(transport);
64 + const model = ReactNoopFlightClient.read(transport);
65 expect(model).toEqual({
66 foo: {
67 bar: (
@@ -84,16 +84,16 @@ describe('ReactFlight', () => {
84 </span>
85 );
86 }
87 - let loadUser = block(User);
88 - let model = {
87 + const loadUser = block(User);
88 + const model = {
89 User: loadUser('Seb', 'Smith'),
90 };
91
92 - let transport = ReactNoopFlightServer.render(model);
92 + const transport = ReactNoopFlightServer.render(model);
93
94 act(() => {
95 - let rootModel = ReactNoopFlightClient.read(transport);
96 - let UserClient = rootModel.User;
95 + const rootModel = ReactNoopFlightClient.read(transport);
96 + const UserClient = rootModel.User;
97 ReactNoop.render(<UserClient greeting="Hello" />);
98 });
99
@@ -111,16 +111,16 @@ describe('ReactFlight', () => {
111 </span>
112 );
113 }
114 - let loadUser = block(User, load);
115 - let model = {
114 + const loadUser = block(User, load);
115 + const model = {
116 User: loadUser('Seb', 'Smith'),
117 };
118
119 - let transport = ReactNoopFlightServer.render(model);
119 + const transport = ReactNoopFlightServer.render(model);
120
121 act(() => {
122 - let rootModel = ReactNoopFlightClient.read(transport);
123 - let UserClient = rootModel.User;
122 + const rootModel = ReactNoopFlightClient.read(transport);
123 + const UserClient = rootModel.User;
124 ReactNoop.render(<UserClient greeting="Hello" />);
125 });
126
packages/react-debug-tools/src/ReactDebugHooks.js
+34 -33
@@ -65,7 +65,7 @@ function getPrimitiveStackCache(): Map<string, Array<any>> {
65 // This initializes a cache of all primitive hooks so that the top
66 // most stack frames added by calling the primitive hook can be removed.
67 if (primitiveStackCache === null) {
68 - let cache = new Map();
68 + const cache = new Map();
69 let readHookLog;
70 try {
71 // Use all hooks here to add them to the hook log.
@@ -94,7 +94,7 @@ function getPrimitiveStackCache(): Map<string, Array<any>> {
94 hookLog = [];
95 }
96 for (let i = 0; i < readHookLog.length; i++) {
97 - let hook = readHookLog[i];
97 + const hook = readHookLog[i];
98 cache.set(hook.primitive, ErrorStackParser.parse(hook.stackError));
99 }
100 primitiveStackCache = cache;
@@ -104,7 +104,7 @@ function getPrimitiveStackCache(): Map<string, Array<any>> {
104
105 let currentHook: null | Hook = null;
106 function nextHook(): null | Hook {
107 - let hook = currentHook;
107 + const hook = currentHook;
108 if (hook !== null) {
109 currentHook = hook.next;
110 }
@@ -134,8 +134,8 @@ function useContext<T>(
134 function useState<S>(
135 initialState: (() => S) | S,
136 ): [S, Dispatch<BasicStateAction<S>>] {
137 - let hook = nextHook();
138 - let state: S =
137 + const hook = nextHook();
138 + const state: S =
139 hook !== null
140 ? hook.memoizedState
141 : typeof initialState === 'function'
@@ -151,7 +151,7 @@ function useReducer<S, I, A>(
151 initialArg: I,
152 init?: I => S,
153 ): [S, Dispatch<A>] {
154 - let hook = nextHook();
154 + const hook = nextHook();
155 let state;
156 if (hook !== null) {
157 state = hook.memoizedState;
@@ -167,8 +167,8 @@ function useReducer<S, I, A>(
167 }
168
169 function useRef<T>(initialValue: T): {|current: T|} {
170 - let hook = nextHook();
171 - let ref = hook !== null ? hook.memoizedState : {current: initialValue};
170 + const hook = nextHook();
171 + const ref = hook !== null ? hook.memoizedState : {current: initialValue};
172 hookLog.push({
173 primitive: 'Ref',
174 stackError: new Error(),
@@ -227,7 +227,7 @@ function useDebugValue(value: any, formatterFn: ?(value: any) => any) {
227 }
228
229 function useCallback<T>(callback: T, inputs: Array<mixed> | void | null): T {
230 - let hook = nextHook();
230 + const hook = nextHook();
231 hookLog.push({
232 primitive: 'Callback',
233 stackError: new Error(),
@@ -240,8 +240,8 @@ function useMemo<T>(
240 nextCreate: () => T,
241 inputs: Array<mixed> | void | null,
242 ): T {
243 - let hook = nextHook();
244 - let value = hook !== null ? hook.memoizedState[0] : nextCreate();
243 + const hook = nextHook();
244 + const value = hook !== null ? hook.memoizedState[0] : nextCreate();
245 hookLog.push({primitive: 'Memo', stackError: new Error(), value});
246 return value;
247 }
@@ -367,7 +367,7 @@ export type HooksTree = Array<HooksNode>;
367 let mostLikelyAncestorIndex = 0;
368
369 function findSharedIndex(hookStack, rootStack, rootIndex) {
370 - let source = rootStack[rootIndex].source;
370 + const source = rootStack[rootIndex].source;
371 hookSearch: for (let i = 0; i < hookStack.length; i++) {
372 if (hookStack[i].source === source) {
373 // This looks like a match. Validate that the rest of both stack match up.
@@ -412,7 +412,7 @@ function isReactWrapper(functionName, primitiveName) {
412 if (!functionName) {
413 return false;
414 }
415 - let expectedPrimitiveName = 'use' + primitiveName;
415 + const expectedPrimitiveName = 'use' + primitiveName;
416 if (functionName.length < expectedPrimitiveName.length) {
417 return false;
418 }
@@ -423,8 +423,8 @@ function isReactWrapper(functionName, primitiveName) {
423 }
424
425 function findPrimitiveIndex(hookStack, hook) {
426 - let stackCache = getPrimitiveStackCache();
427 - let primitiveStack = stackCache.get(hook.primitive);
426 + const stackCache = getPrimitiveStackCache();
427 + const primitiveStack = stackCache.get(hook.primitive);
428 if (primitiveStack === undefined) {
429 return -1;
430 }
@@ -453,9 +453,9 @@ function findPrimitiveIndex(hookStack, hook) {
453 function parseTrimmedStack(rootStack, hook) {
454 // Get the stack trace between the primitive hook function and
455 // the root function call. I.e. the stack frames of custom hooks.
456 - let hookStack = ErrorStackParser.parse(hook.stackError);
457 - let rootIndex = findCommonAncestorIndex(rootStack, hookStack);
458 - let primitiveIndex = findPrimitiveIndex(hookStack, hook);
456 + const hookStack = ErrorStackParser.parse(hook.stackError);
457 + const rootIndex = findCommonAncestorIndex(rootStack, hookStack);
458 + const primitiveIndex = findPrimitiveIndex(hookStack, hook);
459 if (
460 rootIndex === -1 ||
461 primitiveIndex === -1 ||
@@ -482,14 +482,14 @@ function parseCustomHookName(functionName: void | string): string {
482 }
483
484 function buildTree(rootStack, readHookLog): HooksTree {
485 - let rootChildren = [];
485 + const rootChildren = [];
486 let prevStack = null;
487 let levelChildren = rootChildren;
488 let nativeHookID = 0;
489 - let stackOfChildren = [];
489 + const stackOfChildren = [];
490 for (let i = 0; i < readHookLog.length; i++) {
491 - let hook = readHookLog[i];
492 - let stack = parseTrimmedStack(rootStack, hook);
491 + const hook = readHookLog[i];
492 + const stack = parseTrimmedStack(rootStack, hook);
493 if (stack !== null) {
494 // Note: The indices 0 <= n < length-1 will contain the names.
495 // The indices 1 <= n < length will contain the source locations.
@@ -499,8 +499,9 @@ function buildTree(rootStack, readHookLog): HooksTree {
499 if (prevStack !== null) {
500 // Compare the current level's stack to the new stack.
501 while (commonSteps < stack.length && commonSteps < prevStack.length) {
502 - let stackSource = stack[stack.length - commonSteps - 1].source;
503 - let prevSource = prevStack[prevStack.length - commonSteps - 1].source;
502 + const stackSource = stack[stack.length - commonSteps - 1].source;
503 + const prevSource =
504 + prevStack[prevStack.length - commonSteps - 1].source;
505 if (stackSource !== prevSource) {
506 break;
507 }
@@ -514,7 +515,7 @@ function buildTree(rootStack, readHookLog): HooksTree {
515 // The remaining part of the new stack are custom hooks. Push them
516 // to the tree.
517 for (let j = stack.length - commonSteps - 1; j >= 1; j--) {
517 - let children = [];
518 + const children = [];
519 levelChildren.push({
520 id: null,
521 isStateEditable: false,
@@ -563,7 +564,7 @@ function processDebugValues(
564 hooksTree: HooksTree,
565 parentHooksNode: HooksNode | null,
566 ): void {
566 - let debugValueHooksNodes: Array<HooksNode> = [];
567 + const debugValueHooksNodes: Array<HooksNode> = [];
568
569 for (let i = 0; i < hooksTree.length; i++) {
570 const hooksNode = hooksTree[i];
@@ -599,7 +600,7 @@ export function inspectHooks<Props>(
600 currentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
601 }
602
602 - let previousDispatcher = currentDispatcher.current;
603 + const previousDispatcher = currentDispatcher.current;
604 let readHookLog;
605 currentDispatcher.current = Dispatcher;
606 let ancestorStackError;
@@ -611,7 +612,7 @@ export function inspectHooks<Props>(
612 hookLog = [];
613 currentDispatcher.current = previousDispatcher;
614 }
614 - let rootStack = ErrorStackParser.parse(ancestorStackError);
615 + const rootStack = ErrorStackParser.parse(ancestorStackError);
616 return buildTree(rootStack, readHookLog);
617 }
618
@@ -642,7 +643,7 @@ function inspectHooksOfForwardRef<Props, Ref>(
643 ref: Ref,
644 currentDispatcher: CurrentDispatcherRef,
645 ): HooksTree {
645 - let previousDispatcher = currentDispatcher.current;
646 + const previousDispatcher = currentDispatcher.current;
647 let readHookLog;
648 currentDispatcher.current = Dispatcher;
649 let ancestorStackError;
@@ -654,7 +655,7 @@ function inspectHooksOfForwardRef<Props, Ref>(
655 hookLog = [];
656 currentDispatcher.current = previousDispatcher;
657 }
657 - let rootStack = ErrorStackParser.parse(ancestorStackError);
658 + const rootStack = ErrorStackParser.parse(ancestorStackError);
659 return buildTree(rootStack, readHookLog);
660 }
661
@@ -663,7 +664,7 @@ function resolveDefaultProps(Component, baseProps) {
664 // Resolve default props. Taken from ReactElement
665 const props = Object.assign({}, baseProps);
666 const defaultProps = Component.defaultProps;
666 - for (let propName in defaultProps) {
667 + for (const propName in defaultProps) {
668 if (props[propName] === undefined) {
669 props[propName] = defaultProps[propName];
670 }
@@ -695,7 +696,7 @@ export function inspectHooksOfFiber(
696 }
697 // Warm up the cache so that it doesn't consume the currentHook.
698 getPrimitiveStackCache();
698 - let type = fiber.type;
699 + const type = fiber.type;
700 let props = fiber.memoizedProps;
701 if (type !== fiber.elementType) {
702 props = resolveDefaultProps(type, props);
@@ -703,7 +704,7 @@ export function inspectHooksOfFiber(
704 // Set up the current hook so that we can step through and read the
705 // current state from them.
706 currentHook = (fiber.memoizedState: Hook);
706 - let contextMap = new Map();
707 + const contextMap = new Map();
708 try {
709 setupContexts(contextMap, fiber);
710 if (fiber.tag === ForwardRef) {
packages/react-debug-tools/src/__tests__/ReactHooksInspection-test.internal.js
+2 -2
@@ -39,7 +39,7 @@ describe('ReactHooksInspection', () => {
39 });
40 return <div DEPRECATED_flareListeners={listener}>Hello world</div>;
41 }
42 - let tree = ReactDebugTools.inspectHooks(Foo, {});
42 + const tree = ReactDebugTools.inspectHooks(Foo, {});
43 expect(tree).toEqual([
44 {
45 isStateEditable: false,
@@ -65,7 +65,7 @@ describe('ReactHooksInspection', () => {
65 React.useEffect(effect);
66 return <div ref={ref}>Hello world</div>;
67 }
68 - let tree = ReactDebugTools.inspectHooks(Foo, {});
68 + const tree = ReactDebugTools.inspectHooks(Foo, {});
69 expect(tree).toEqual([
70 {
71 isStateEditable: false,
packages/react-debug-tools/src/__tests__/ReactHooksInspection-test.js
+24 -24
@@ -22,10 +22,10 @@ describe('ReactHooksInspection', () => {
22
23 it('should inspect a simple useState hook', () => {
24 function Foo(props) {
25 - let [state] = React.useState('hello world');
25 + const [state] = React.useState('hello world');
26 return <div>{state}</div>;
27 }
28 - let tree = ReactDebugTools.inspectHooks(Foo, {});
28 + const tree = ReactDebugTools.inspectHooks(Foo, {});
29 expect(tree).toEqual([
30 {
31 isStateEditable: true,
@@ -39,15 +39,15 @@ describe('ReactHooksInspection', () => {
39
40 it('should inspect a simple custom hook', () => {
41 function useCustom(value) {
42 - let [state] = React.useState(value);
42 + const [state] = React.useState(value);
43 React.useDebugValue('custom hook label');
44 return state;
45 }
46 function Foo(props) {
47 - let value = useCustom('hello world');
47 + const value = useCustom('hello world');
48 return <div>{value}</div>;
49 }
50 - let tree = ReactDebugTools.inspectHooks(Foo, {});
50 + const tree = ReactDebugTools.inspectHooks(Foo, {});
51 expect(tree).toEqual([
52 {
53 isStateEditable: false,
@@ -70,20 +70,20 @@ describe('ReactHooksInspection', () => {
70 it('should inspect a tree of multiple hooks', () => {
71 function effect() {}
72 function useCustom(value) {
73 - let [state] = React.useState(value);
73 + const [state] = React.useState(value);
74 React.useEffect(effect);
75 return state;
76 }
77 function Foo(props) {
78 - let value1 = useCustom('hello');
79 - let value2 = useCustom('world');
78 + const value1 = useCustom('hello');
79 + const value2 = useCustom('world');
80 return (
81 <div>
82 {value1} {value2}
83 </div>
84 );
85 }
86 - let tree = ReactDebugTools.inspectHooks(Foo, {});
86 + const tree = ReactDebugTools.inspectHooks(Foo, {});
87 expect(tree).toEqual([
88 {
89 isStateEditable: false,
@@ -135,30 +135,30 @@ describe('ReactHooksInspection', () => {
135 it('should inspect a tree of multiple levels of hooks', () => {
136 function effect() {}
137 function useCustom(value) {
138 - let [state] = React.useReducer((s, a) => s, value);
138 + const [state] = React.useReducer((s, a) => s, value);
139 React.useEffect(effect);
140 return state;
141 }
142 function useBar(value) {
143 - let result = useCustom(value);
143 + const result = useCustom(value);
144 React.useLayoutEffect(effect);
145 return result;
146 }
147 function useBaz(value) {
148 React.useLayoutEffect(effect);
149 - let result = useCustom(value);
149 + const result = useCustom(value);
150 return result;
151 }
152 function Foo(props) {
153 - let value1 = useBar('hello');
154 - let value2 = useBaz('world');
153 + const value1 = useBar('hello');
154 + const value2 = useBaz('world');
155 return (
156 <div>
157 {value1} {value2}
158 </div>
159 );
160 }
161 - let tree = ReactDebugTools.inspectHooks(Foo, {});
161 + const tree = ReactDebugTools.inspectHooks(Foo, {});
162 expect(tree).toEqual([
163 {
164 isStateEditable: false,
@@ -238,12 +238,12 @@ describe('ReactHooksInspection', () => {
238 });
239
240 it('should inspect the default value using the useContext hook', () => {
241 - let MyContext = React.createContext('default');
241 + const MyContext = React.createContext('default');
242 function Foo(props) {
243 - let value = React.useContext(MyContext);
243 + const value = React.useContext(MyContext);
244 return <div>{value}</div>;
245 }
246 - let tree = ReactDebugTools.inspectHooks(Foo, {});
246 + const tree = ReactDebugTools.inspectHooks(Foo, {});
247 expect(tree).toEqual([
248 {
249 isStateEditable: false,
@@ -257,15 +257,15 @@ describe('ReactHooksInspection', () => {
257
258 it('should support an injected dispatcher', () => {
259 function Foo(props) {
260 - let [state] = React.useState('hello world');
260 + const [state] = React.useState('hello world');
261 return <div>{state}</div>;
262 }
263
264 - let initial = {};
264 + const initial = {};
265 let current = initial;
266 let getterCalls = 0;
267 - let setterCalls = [];
268 - let FakeDispatcherRef = {
267 + const setterCalls = [];
268 + const FakeDispatcherRef = {
269 get current() {
270 getterCalls++;
271 return current;
@@ -299,7 +299,7 @@ describe('ReactHooksInspection', () => {
299 React.useDebugValue('this is invalid');
300 return null;
301 }
302 - let tree = ReactDebugTools.inspectHooks(Foo, {});
302 + const tree = ReactDebugTools.inspectHooks(Foo, {});
303 expect(tree).toHaveLength(0);
304 });
305
@@ -312,7 +312,7 @@ describe('ReactHooksInspection', () => {
312 useCustom();
313 return null;
314 }
315 - let tree = ReactDebugTools.inspectHooks(Foo, {});
315 + const tree = ReactDebugTools.inspectHooks(Foo, {});
316 expect(tree).toEqual([
317 {
318 isStateEditable: false,
packages/react-debug-tools/src/__tests__/ReactHooksInspectionIntegration-test.js
+70 -70
@@ -27,17 +27,17 @@ describe('ReactHooksInspectionIntegration', () => {
27 });
28
29 it('should inspect the current state of useState hooks', () => {
30 - let useState = React.useState;
30 + const useState = React.useState;
31 function Foo(props) {
32 - let [state1, setState1] = useState('hello');
33 - let [state2, setState2] = useState('world');
32 + const [state1, setState1] = useState('hello');
33 + const [state2, setState2] = useState('world');
34 return (
35 <div onMouseDown={setState1} onMouseUp={setState2}>
36 {state1} {state2}
37 </div>
38 );
39 }
40 - let renderer = ReactTestRenderer.create(<Foo prop="prop" />);
40 + const renderer = ReactTestRenderer.create(<Foo prop="prop" />);
41
42 let childFiber = renderer.root.findByType(Foo)._currentFiber();
43 let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
@@ -58,7 +58,7 @@ describe('ReactHooksInspectionIntegration', () => {
58 },
59 ]);
60
61 - let {
61 + const {
62 onMouseDown: setStateA,
63 onMouseUp: setStateB,
64 } = renderer.root.findByType('div').props;
@@ -109,12 +109,12 @@ describe('ReactHooksInspectionIntegration', () => {
109 });
110
111 it('should inspect the current state of all stateful hooks', () => {
112 - let outsideRef = React.createRef();
112 + const outsideRef = React.createRef();
113 function effect() {}
114 function Foo(props) {
115 - let [state1, setState] = React.useState('a');
116 - let [state2, dispatch] = React.useReducer((s, a) => a.value, 'b');
117 - let ref = React.useRef('c');
115 + const [state1, setState] = React.useState('a');
116 + const [state2, dispatch] = React.useReducer((s, a) => a.value, 'b');
117 + const ref = React.useRef('c');
118
119 React.useLayoutEffect(effect);
120 React.useEffect(effect);
@@ -139,7 +139,7 @@ describe('ReactHooksInspectionIntegration', () => {
139 });
140 ref.current = 'C';
141 }
142 - let memoizedUpdate = React.useCallback(update, []);
142 + const memoizedUpdate = React.useCallback(update, []);
143 return (
144 <div onClick={memoizedUpdate}>
145 {state1} {state2}
@@ -153,7 +153,7 @@ describe('ReactHooksInspectionIntegration', () => {
153
154 let childFiber = renderer.root.findByType(Foo)._currentFiber();
155
156 - let {onClick: updateStates} = renderer.root.findByType('div').props;
156 + const {onClick: updateStates} = renderer.root.findByType('div').props;
157
158 let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
159 expect(tree).toEqual([
@@ -269,18 +269,18 @@ describe('ReactHooksInspectionIntegration', () => {
269 });
270
271 it('should inspect the value of the current provider in useContext', () => {
272 - let MyContext = React.createContext('default');
272 + const MyContext = React.createContext('default');
273 function Foo(props) {
274 - let value = React.useContext(MyContext);
274 + const value = React.useContext(MyContext);
275 return <div>{value}</div>;
276 }
277 - let renderer = ReactTestRenderer.create(
277 + const renderer = ReactTestRenderer.create(
278 <MyContext.Provider value="contextual">
279 <Foo prop="prop" />
280 </MyContext.Provider>,
281 );
282 - let childFiber = renderer.root.findByType(Foo)._currentFiber();
283 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
282 + const childFiber = renderer.root.findByType(Foo)._currentFiber();
283 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
284 expect(tree).toEqual([
285 {
286 isStateEditable: false,
@@ -293,16 +293,16 @@ describe('ReactHooksInspectionIntegration', () => {
293 });
294
295 it('should inspect forwardRef', () => {
296 - let obj = function() {};
297 - let Foo = React.forwardRef(function(props, ref) {
296 + const obj = function() {};
297 + const Foo = React.forwardRef(function(props, ref) {
298 React.useImperativeHandle(ref, () => obj);
299 return <div />;
300 });
301 - let ref = React.createRef();
302 - let renderer = ReactTestRenderer.create(<Foo ref={ref} />);
301 + const ref = React.createRef();
302 + const renderer = ReactTestRenderer.create(<Foo ref={ref} />);
303
304 - let childFiber = renderer.root.findByType(Foo)._currentFiber();
305 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
304 + const childFiber = renderer.root.findByType(Foo)._currentFiber();
305 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
306 expect(tree).toEqual([
307 {
308 isStateEditable: false,
@@ -316,14 +316,14 @@ describe('ReactHooksInspectionIntegration', () => {
316
317 it('should inspect memo', () => {
318 function InnerFoo(props) {
319 - let [value] = React.useState('hello');
319 + const [value] = React.useState('hello');
320 return <div>{value}</div>;
321 }
322 - let Foo = React.memo(InnerFoo);
323 - let renderer = ReactTestRenderer.create(<Foo />);
322 + const Foo = React.memo(InnerFoo);
323 + const renderer = ReactTestRenderer.create(<Foo />);
324 // TODO: Test renderer findByType is broken for memo. Have to search for the inner.
325 - let childFiber = renderer.root.findByType(InnerFoo)._currentFiber();
326 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
325 + const childFiber = renderer.root.findByType(InnerFoo)._currentFiber();
326 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
327 expect(tree).toEqual([
328 {
329 isStateEditable: true,
@@ -337,16 +337,16 @@ describe('ReactHooksInspectionIntegration', () => {
337
338 it('should inspect custom hooks', () => {
339 function useCustom() {
340 - let [value] = React.useState('hello');
340 + const [value] = React.useState('hello');
341 return value;
342 }
343 function Foo(props) {
344 - let value = useCustom();
344 + const value = useCustom();
345 return <div>{value}</div>;
346 }
347 - let renderer = ReactTestRenderer.create(<Foo />);
348 - let childFiber = renderer.root.findByType(Foo)._currentFiber();
349 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
347 + const renderer = ReactTestRenderer.create(<Foo />);
348 + const childFiber = renderer.root.findByType(Foo)._currentFiber();
349 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
350 expect(tree).toEqual([
351 {
352 isStateEditable: false,
@@ -373,9 +373,9 @@ describe('ReactHooksInspectionIntegration', () => {
373 const memoizedValue = React.useMemo(() => 'hello', []);
374 return <div>{memoizedValue}</div>;
375 }
376 - let renderer = ReactTestRenderer.create(<Foo />);
377 - let childFiber = renderer.root.findByType(Foo)._currentFiber();
378 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
376 + const renderer = ReactTestRenderer.create(<Foo />);
377 + const childFiber = renderer.root.findByType(Foo)._currentFiber();
378 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
379 expect(tree).toEqual([
380 {
381 id: 0,
@@ -402,9 +402,9 @@ describe('ReactHooksInspectionIntegration', () => {
402 const [state] = React.useState(() => 'hello', []);
403 return <div>{state}</div>;
404 }
405 - let renderer = ReactTestRenderer.create(<Foo />);
406 - let childFiber = renderer.root.findByType(Foo)._currentFiber();
407 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
405 + const renderer = ReactTestRenderer.create(<Foo />);
406 + const childFiber = renderer.root.findByType(Foo)._currentFiber();
407 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
408 expect(tree).toEqual([
409 {
410 id: 0,
@@ -427,12 +427,12 @@ describe('ReactHooksInspectionIntegration', () => {
427 describe('useDebugValue', () => {
428 it('should support inspectable values for multiple custom hooks', () => {
429 function useLabeledValue(label) {
430 - let [value] = React.useState(label);
430 + const [value] = React.useState(label);
431 React.useDebugValue(`custom label ${label}`);
432 return value;
433 }
434 function useAnonymous(label) {
435 - let [value] = React.useState(label);
435 + const [value] = React.useState(label);
436 return value;
437 }
438 function Example() {
@@ -442,9 +442,9 @@ describe('ReactHooksInspectionIntegration', () => {
442 useLabeledValue('d');
443 return null;
444 }
445 - let renderer = ReactTestRenderer.create(<Example />);
446 - let childFiber = renderer.root.findByType(Example)._currentFiber();
447 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
445 + const renderer = ReactTestRenderer.create(<Example />);
446 + const childFiber = renderer.root.findByType(Example)._currentFiber();
447 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
448 expect(tree).toEqual([
449 {
450 isStateEditable: false,
@@ -514,9 +514,9 @@ describe('ReactHooksInspectionIntegration', () => {
514 useOuter();
515 return null;
516 }
517 - let renderer = ReactTestRenderer.create(<Example />);
518 - let childFiber = renderer.root.findByType(Example)._currentFiber();
519 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
517 + const renderer = ReactTestRenderer.create(<Example />);
518 + const childFiber = renderer.root.findByType(Example)._currentFiber();
519 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
520 expect(tree).toEqual([
521 {
522 isStateEditable: false,
@@ -561,9 +561,9 @@ describe('ReactHooksInspectionIntegration', () => {
561 useSingleLabelCustom('two');
562 return null;
563 }
564 - let renderer = ReactTestRenderer.create(<Example />);
565 - let childFiber = renderer.root.findByType(Example)._currentFiber();
566 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
564 + const renderer = ReactTestRenderer.create(<Example />);
565 + const childFiber = renderer.root.findByType(Example)._currentFiber();
566 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
567 expect(tree).toEqual([
568 {
569 isStateEditable: false,
@@ -618,9 +618,9 @@ describe('ReactHooksInspectionIntegration', () => {
618 React.useDebugValue('this is invalid');
619 return null;
620 }
621 - let renderer = ReactTestRenderer.create(<Example />);
622 - let childFiber = renderer.root.findByType(Example)._currentFiber();
623 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
621 + const renderer = ReactTestRenderer.create(<Example />);
622 + const childFiber = renderer.root.findByType(Example)._currentFiber();
623 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
624 expect(tree).toHaveLength(0);
625 });
626
@@ -633,9 +633,9 @@ describe('ReactHooksInspectionIntegration', () => {
633 useCustom();
634 return null;
635 }
636 - let renderer = ReactTestRenderer.create(<Example />);
637 - let childFiber = renderer.root.findByType(Example)._currentFiber();
638 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
636 + const renderer = ReactTestRenderer.create(<Example />);
637 + const childFiber = renderer.root.findByType(Example)._currentFiber();
638 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
639 expect(tree).toEqual([
640 {
641 isStateEditable: false,
@@ -657,10 +657,10 @@ describe('ReactHooksInspectionIntegration', () => {
657 });
658
659 it('should support defaultProps and lazy', async () => {
660 - let Suspense = React.Suspense;
660 + const Suspense = React.Suspense;
661
662 function Foo(props) {
663 - let [value] = React.useState(props.defaultValue.substr(0, 3));
663 + const [value] = React.useState(props.defaultValue.substr(0, 3));
664 return <div>{value}</div>;
665 }
666 Foo.defaultProps = {
@@ -671,9 +671,9 @@ describe('ReactHooksInspectionIntegration', () => {
671 return {default: result};
672 }
673
674 - let LazyFoo = React.lazy(() => fakeImport(Foo));
674 + const LazyFoo = React.lazy(() => fakeImport(Foo));
675
676 - let renderer = ReactTestRenderer.create(
676 + const renderer = ReactTestRenderer.create(
677 <Suspense fallback="Loading...">
678 <LazyFoo />
679 </Suspense>,
@@ -683,8 +683,8 @@ describe('ReactHooksInspectionIntegration', () => {
683
684 Scheduler.unstable_flushAll();
685
686 - let childFiber = renderer.root._currentFiber();
687 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
686 + const childFiber = renderer.root._currentFiber();
687 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
688 expect(tree).toEqual([
689 {
690 isStateEditable: true,
@@ -698,15 +698,15 @@ describe('ReactHooksInspectionIntegration', () => {
698
699 it('should support an injected dispatcher', () => {
700 function Foo(props) {
701 - let [state] = React.useState('hello world');
701 + const [state] = React.useState('hello world');
702 return <div>{state}</div>;
703 }
704
705 - let initial = {};
705 + const initial = {};
706 let current = initial;
707 let getterCalls = 0;
708 - let setterCalls = [];
709 - let FakeDispatcherRef = {
708 + const setterCalls = [];
709 + const FakeDispatcherRef = {
710 get current() {
711 getterCalls++;
712 return current;
@@ -717,8 +717,8 @@ describe('ReactHooksInspectionIntegration', () => {
717 },
718 };
719
720 - let renderer = ReactTestRenderer.create(<Foo />);
721 - let childFiber = renderer.root._currentFiber();
720 + const renderer = ReactTestRenderer.create(<Foo />);
721 + const childFiber = renderer.root._currentFiber();
722 expect(() => {
723 ReactDebugTools.inspectHooksOfFiber(childFiber, FakeDispatcherRef);
724 }).toThrow(
@@ -798,9 +798,9 @@ describe('ReactHooksInspectionIntegration', () => {
798 React.useMemo(() => 'memo', []);
799 return <div />;
800 }
801 - let renderer = ReactTestRenderer.create(<Foo />);
802 - let childFiber = renderer.root.findByType(Foo)._currentFiber();
803 - let tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
801 + const renderer = ReactTestRenderer.create(<Foo />);
802 + const childFiber = renderer.root.findByType(Foo)._currentFiber();
803 + const tree = ReactDebugTools.inspectHooksOfFiber(childFiber);
804 expect(tree).toEqual([
805 {
806 id: 0,
packages/react-devtools-core/src/editor.js
+3 -1
@@ -156,11 +156,13 @@ export function launchEditor(
156 return;
157 }
158
159 - let [editor, ...args] = guessEditor();
159 + const [editor, ...destructuredArgs] = guessEditor();
160 if (!editor) {
161 return;
162 }
163
164 + let args = destructuredArgs;
165 +
166 if (lineNumber) {
167 args = args.concat(getArgumentsForLineNumber(editor, filePath, lineNumber));
168 } else {
packages/react-devtools-extensions/src/main.js
+2 -2
@@ -228,11 +228,11 @@ function createPanelIfReactLoaded() {
228 cloneStyleTags = () => {
229 const linkTags = [];
230 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
231 - for (let linkTag of document.getElementsByTagName('link')) {
231 + for (const linkTag of document.getElementsByTagName('link')) {
232 if (linkTag.rel === 'stylesheet') {
233 const newLinkTag = document.createElement('link');
234 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
235 - for (let attribute of linkTag.attributes) {
235 + for (const attribute of linkTag.attributes) {
236 newLinkTag.setAttribute(attribute.nodeName, attribute.nodeValue);
237 }
238 linkTags.push(newLinkTag);
packages/react-devtools-extensions/src/panel.js
+1 -1
@@ -12,7 +12,7 @@ window.injectStyles = getLinkTags => {
12 const linkTags = getLinkTags();
13
14 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
15 - for (let linkTag of linkTags) {
15 + for (const linkTag of linkTags) {
16 document.head.appendChild(linkTag);
17 }
18 }
packages/react-devtools-shared/src/__tests__/profilingCache-test.js
+1 -1
@@ -72,7 +72,7 @@ describe('ProfilingCache', () => {
72 utils.act(() => ReactDOM.render(<Parent count={0} />, containerA));
73 utils.act(() => store.profilerStore.stopProfiling());
74
75 - let allProfilingDataForRoots = [];
75 + const allProfilingDataForRoots = [];
76
77 function Validator({previousProfilingDataForRoot, rootID}) {
78 const profilingDataForRoot = store.profilerStore.getDataForRoot(rootID);
packages/react-devtools-shared/src/__tests__/storeStressSync-test.js
+7 -7
@@ -37,7 +37,7 @@ describe('StoreStress (Legacy Mode)', () => {
37 // We'll be manually flipping this component back and forth in the test.
38 // We only do this for a single node in order to verify that DevTools
39 // can handle a subtree switching alternates while other subtrees are memoized.
40 - let [showX, _setShowX] = React.useState(false);
40 + const [showX, _setShowX] = React.useState(false);
41 setShowX = _setShowX;
42 return showX ? <X /> : 'c';
43 };
@@ -87,7 +87,7 @@ describe('StoreStress (Legacy Mode)', () => {
87 // These cases are picked so that rendering them sequentially in the same
88 // container results in a combination of mounts, updates, unmounts, and reorders.
89 // prettier-ignore
90 - let cases = [
90 + const cases = [
91 [a, b, c, d, e],
92 [[a], b, c, d, e],
93 [[a, b], c, d, e],
@@ -183,7 +183,7 @@ describe('StoreStress (Legacy Mode)', () => {
183 const e = <E key="e" />;
184
185 // prettier-ignore
186 - let steps = [
186 + const steps = [
187 a,
188 b,
189 c,
@@ -207,7 +207,7 @@ describe('StoreStress (Legacy Mode)', () => {
207 };
208
209 // 1. Capture the expected render result.
210 - let snapshots = [];
210 + const snapshots = [];
211 let container = document.createElement('div');
212 for (let i = 0; i < steps.length; i++) {
213 act(() => ReactDOM.render(<Root>{steps[i]}</Root>, container));
@@ -308,7 +308,7 @@ describe('StoreStress (Legacy Mode)', () => {
308
309 // 1. For each step, check Suspense can render them as initial primary content.
310 // This is the only step where we use Jest snapshots.
311 - let snapshots = [];
311 + const snapshots = [];
312 let container = document.createElement('div');
313 for (let i = 0; i < steps.length; i++) {
314 act(() =>
@@ -719,7 +719,7 @@ describe('StoreStress (Legacy Mode)', () => {
719
720 // 1. For each step, check Suspense can render them as initial primary content.
721 // This is the only step where we use Jest snapshots.
722 - let snapshots = [];
722 + const snapshots = [];
723 let container = document.createElement('div');
724 for (let i = 0; i < steps.length; i++) {
725 act(() =>
@@ -744,7 +744,7 @@ describe('StoreStress (Legacy Mode)', () => {
744 // 2. Verify check Suspense can render same steps as initial fallback content.
745 // We don't actually assert here because the tree includes <MaybeSuspend>
746 // which is different from the snapshots above. So we take more snapshots.
747 - let fallbackSnapshots = [];
747 + const fallbackSnapshots = [];
748 for (let i = 0; i < steps.length; i++) {
749 act(() =>
750 ReactDOM.render(
packages/react-devtools-shared/src/__tests__/storeStressTestConcurrent-test.js
+7 -7
@@ -42,7 +42,7 @@ describe('StoreStressConcurrent', () => {
42 // We'll be manually flipping this component back and forth in the test.
43 // We only do this for a single node in order to verify that DevTools
44 // can handle a subtree switching alternates while other subtrees are memoized.
45 - let [showX, _setShowX] = React.useState(false);
45 + const [showX, _setShowX] = React.useState(false);
46 setShowX = _setShowX;
47 return showX ? <X /> : 'c';
48 };
@@ -115,7 +115,7 @@ describe('StoreStressConcurrent', () => {
115 // These cases are picked so that rendering them sequentially in the same
116 // container results in a combination of mounts, updates, unmounts, and reorders.
117 // prettier-ignore
118 - let cases = [
118 + const cases = [
119 [a, b, c, d, e],
120 [[a], b, c, d, e],
121 [[a, b], c, d, e],
@@ -215,7 +215,7 @@ describe('StoreStressConcurrent', () => {
215 const e = <E key="e" />;
216
217 // prettier-ignore
218 - let steps = [
218 + const steps = [
219 a,
220 b,
221 c,
@@ -239,7 +239,7 @@ describe('StoreStressConcurrent', () => {
239 };
240
241 // 1. Capture the expected render result.
242 - let snapshots = [];
242 + const snapshots = [];
243 let container = document.createElement('div');
244 // $FlowFixMe
245 let root = ReactDOM.createRoot(container);
@@ -401,7 +401,7 @@ describe('StoreStressConcurrent', () => {
401
402 // 1. For each step, check Suspense can render them as initial primary content.
403 // This is the only step where we use Jest snapshots.
404 - let snapshots = [];
404 + const snapshots = [];
405 let container = document.createElement('div');
406 // $FlowFixMe
407 let root = ReactDOM.createRoot(container);
@@ -890,7 +890,7 @@ describe('StoreStressConcurrent', () => {
890
891 // 1. For each step, check Suspense can render them as initial primary content.
892 // This is the only step where we use Jest snapshots.
893 - let snapshots = [];
893 + const snapshots = [];
894 let container = document.createElement('div');
895 // $FlowFixMe
896 let root = ReactDOM.createRoot(container);
@@ -915,7 +915,7 @@ describe('StoreStressConcurrent', () => {
915 // 2. Verify check Suspense can render same steps as initial fallback content.
916 // We don't actually assert here because the tree includes <MaybeSuspend>
917 // which is different from the snapshots above. So we take more snapshots.
918 - let fallbackSnapshots = [];
918 + const fallbackSnapshots = [];
919 for (let i = 0; i < steps.length; i++) {
920 act(() =>
921 root.render(
packages/react-devtools-shared/src/__tests__/treeContext-test.js
+4 -4
@@ -482,7 +482,7 @@ describe('TreeListContext', () => {
482 utils.act(() => (renderer = TestRenderer.create(<Contexts />)));
483 expect(state).toMatchSnapshot('1: initial state');
484
485 - let parentID = ((store.getElementIDAtIndex(1): any): number);
485 + const parentID = ((store.getElementIDAtIndex(1): any): number);
486 utils.act(() => dispatch({type: 'SELECT_OWNER', payload: parentID}));
487 utils.act(() => renderer.update(<Contexts />));
488 expect(state).toMatchSnapshot('2: parent owners tree');
@@ -507,7 +507,7 @@ describe('TreeListContext', () => {
507 utils.act(() => (renderer = TestRenderer.create(<Contexts />)));
508 expect(state).toMatchSnapshot('1: initial state');
509
510 - let parentID = ((store.getElementIDAtIndex(1): any): number);
510 + const parentID = ((store.getElementIDAtIndex(1): any): number);
511 utils.act(() => dispatch({type: 'SELECT_OWNER', payload: parentID}));
512 utils.act(() => renderer.update(<Contexts />));
513 expect(state).toMatchSnapshot('2: parent owners tree');
@@ -545,7 +545,7 @@ describe('TreeListContext', () => {
545 utils.act(() => (renderer = TestRenderer.create(<Contexts />)));
546 expect(state).toMatchSnapshot('1: initial state');
547
548 - let childID = ((store.getElementIDAtIndex(1): any): number);
548 + const childID = ((store.getElementIDAtIndex(1): any): number);
549 utils.act(() => dispatch({type: 'SELECT_OWNER', payload: childID}));
550 utils.act(() => renderer.update(<Contexts />));
551 expect(state).toMatchSnapshot('2: child owners tree');
@@ -553,7 +553,7 @@ describe('TreeListContext', () => {
553 await utils.actAsync(() => ReactDOM.render(<Parent />, container));
554 expect(state).toMatchSnapshot('3: remove child');
555
556 - let parentID = ((store.getElementIDAtIndex(0): any): number);
556 + const parentID = ((store.getElementIDAtIndex(0): any): number);
557 utils.act(() => dispatch({type: 'SELECT_OWNER', payload: parentID}));
558 utils.act(() => renderer.update(<Contexts />));
559 expect(state).toMatchSnapshot('4: parent owners tree');
packages/react-devtools-shared/src/backend/NativeStyleEditor/setupNativeStyleEditor.js
+1 -1
@@ -171,7 +171,7 @@ function measureStyle(
171
172 function shallowClone(object: Object): Object {
173 const cloned = {};
174 - for (let n in object) {
174 + for (const n in object) {
175 cloned[n] = object[n];
176 }
177 return cloned;
packages/react-devtools-shared/src/backend/agent.js
+5 -5
@@ -211,7 +211,7 @@ export default class Agent extends EventEmitter<{|
211 }
212
213 getIDForNode(node: Object): number | null {
214 - for (let rendererID in this._rendererInterfaces) {
214 + for (const rendererID in this._rendererInterfaces) {
215 const renderer = ((this._rendererInterfaces[
216 (rendererID: any)
217 ]: any): RendererInterface);
@@ -389,7 +389,7 @@ export default class Agent extends EventEmitter<{|
389
390 setTraceUpdatesEnabled(traceUpdatesEnabled);
391
392 - for (let rendererID in this._rendererInterfaces) {
392 + for (const rendererID in this._rendererInterfaces) {
393 const renderer = ((this._rendererInterfaces[
394 (rendererID: any)
395 ]: any): RendererInterface);
@@ -413,7 +413,7 @@ export default class Agent extends EventEmitter<{|
413 startProfiling = (recordChangeDescriptions: boolean) => {
414 this._recordChangeDescriptions = recordChangeDescriptions;
415 this._isProfiling = true;
416 - for (let rendererID in this._rendererInterfaces) {
416 + for (const rendererID in this._rendererInterfaces) {
417 const renderer = ((this._rendererInterfaces[
418 (rendererID: any)
419 ]: any): RendererInterface);
@@ -425,7 +425,7 @@ export default class Agent extends EventEmitter<{|
425 stopProfiling = () => {
426 this._isProfiling = false;
427 this._recordChangeDescriptions = false;
428 - for (let rendererID in this._rendererInterfaces) {
428 + for (const rendererID in this._rendererInterfaces) {
429 const renderer = ((this._rendererInterfaces[
430 (rendererID: any)
431 ]: any): RendererInterface);
@@ -456,7 +456,7 @@ export default class Agent extends EventEmitter<{|
456 };
457
458 updateComponentFilters = (componentFilters: Array<ComponentFilter>) => {
459 - for (let rendererID in this._rendererInterfaces) {
459 + for (const rendererID in this._rendererInterfaces) {
460 const renderer = ((this._rendererInterfaces[
461 (rendererID: any)
462 ]: any): RendererInterface);
packages/react-devtools-shared/src/backend/console.js
+4 -4
@@ -27,7 +27,7 @@ const injectedRenderers: Map<
27
28 let targetConsole: Object = console;
29 let targetConsoleMethods = {};
30 -for (let method in console) {
30 +for (const method in console) {
31 targetConsoleMethods[method] = console[method];
32 }
33
@@ -40,7 +40,7 @@ export function dangerous_setTargetConsoleForTesting(
40 targetConsole = targetConsoleForTesting;
41
42 targetConsoleMethods = {};
43 - for (let method in targetConsole) {
43 + for (const method in targetConsole) {
44 targetConsoleMethods[method] = console[method];
45 }
46 }
@@ -77,7 +77,7 @@ export function patch(): void {
77 const originalConsoleMethods = {};
78
79 unpatchFn = () => {
80 - for (let method in originalConsoleMethods) {
80 + for (const method in originalConsoleMethods) {
81 try {
82 // $FlowFixMe property error|warn is not writable.
83 targetConsole[method] = originalConsoleMethods[method];
@@ -101,7 +101,7 @@ export function patch(): void {
101 // If there's a component stack for at least one of the injected renderers, append it.
102 // We don't handle the edge case of stacks for more than one (e.g. interleaved renderers?)
103 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
104 - for (let {
104 + for (const {
105 getCurrentFiber,
106 getDisplayNameForFiber,
107 } of injectedRenderers.values()) {
packages/react-devtools-shared/src/backend/describeComponentFrame.js
+1 -1
@@ -21,7 +21,7 @@ export default function describeComponentFrame(
21 ) {
22 let sourceInfo = '';
23 if (source) {
24 - let path = source.fileName;
24 + const path = source.fileName;
25 let fileName = path.replace(BEFORE_SLASH_RE, '');
26 if (__DEV__) {
27 // In DEV, include code for a common special case:
packages/react-devtools-shared/src/backend/legacy/renderer.js
+7 -7
@@ -87,7 +87,7 @@ function getElementType(internalInstance: InternalInstance): ElementType {
87 }
88
89 function getChildren(internalInstance: Object): Array<any> {
90 - let children = [];
90 + const children = [];
91
92 // If the parent is a native node without rendered children, but with
93 // multiple string children, then the `element` that gets passed in here is
@@ -106,7 +106,7 @@ function getChildren(internalInstance: Object): Array<any> {
106 }
107 } else if (internalInstance._renderedChildren) {
108 const renderedChildren = internalInstance._renderedChildren;
109 - for (let name in renderedChildren) {
109 + for (const name in renderedChildren) {
110 const child = renderedChildren[name];
111 if (getElementType(child) !== ElementTypeOtherOrUnknown) {
112 children.push(child);
@@ -386,8 +386,8 @@ export function attach(
386 ? getID(internalInstance._currentElement._owner)
387 : 0;
388
389 - let displayNameStringID = getStringID(displayName);
390 - let keyStringID = getStringID(key);
389 + const displayNameStringID = getStringID(displayName);
390 + const keyStringID = getStringID(key);
391 pushOperation(TREE_OPERATION_ADD);
392 pushOperation(id);
393 pushOperation(type);
@@ -447,7 +447,7 @@ export function attach(
447 renderer.Mount._instancesByReactRootID ||
448 renderer.Mount._instancesByContainerID;
449
450 - for (let key in roots) {
450 + for (const key in roots) {
451 const internalInstance = roots[key];
452 const id = getID(internalInstance);
453 crawlAndRecordInitialMounts(id, 0, id);
@@ -455,8 +455,8 @@ export function attach(
455 }
456 }
457
458 - let pendingOperations: Array<number> = [];
459 - let pendingStringTable: Map<string, number> = new Map();
458 + const pendingOperations: Array<number> = [];
459 + const pendingStringTable: Map<string, number> = new Map();
460 let pendingUnmountedIDs: Array<number> = [];
461 let pendingStringTableLength: number = 0;
462 let pendingUnmountedRootID: number | null = null;
packages/react-devtools-shared/src/backend/legacy/utils.js
+1 -1
@@ -29,7 +29,7 @@ export function decorateMany(
29 }
30
31 export function restoreMany(source: Object, olds: Object): void {
32 - for (let name in olds) {
32 + for (const name in olds) {
33 source[name] = olds[name];
34 }
35 }
packages/react-devtools-shared/src/backend/renderer.js
+22 -22
@@ -543,7 +543,7 @@ export function attach(
543
544 // Highlight updates
545 let traceUpdatesEnabled: boolean = false;
546 - let traceUpdatesForNodes: Set<NativeType> = new Set();
546 + const traceUpdatesForNodes: Set<NativeType> = new Set();
547
548 function applyComponentFilters(componentFilters: Array<ComponentFilter>) {
549 hideElementsWithTypes.clear();
@@ -675,7 +675,7 @@ export function attach(
675 const displayName = getDisplayNameForFiber(fiber);
676 if (displayName != null) {
677 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
678 - for (let displayNameRegExp of hideElementsWithDisplayNames) {
678 + for (const displayNameRegExp of hideElementsWithDisplayNames) {
679 if (displayNameRegExp.test(displayName)) {
680 return true;
681 }
@@ -686,7 +686,7 @@ export function attach(
686 if (_debugSource != null && hideElementsWithPaths.size > 0) {
687 const {fileName} = _debugSource;
688 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
689 - for (let pathRegExp of hideElementsWithPaths) {
689 + for (const pathRegExp of hideElementsWithPaths) {
690 if (pathRegExp.test(fileName)) {
691 return true;
692 }
@@ -960,7 +960,7 @@ export function attach(
960 const keys = new Set([...Object.keys(prev), ...Object.keys(next)]);
961 const changedKeys = [];
962 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
963 - for (let key of keys) {
963 + for (const key of keys) {
964 if (prev[key] !== next[key]) {
965 changedKeys.push(key);
966 }
@@ -994,11 +994,11 @@ export function attach(
994 }
995 }
996
997 - let pendingOperations: Array<number> = [];
998 - let pendingRealUnmountedIDs: Array<number> = [];
999 - let pendingSimulatedUnmountedIDs: Array<number> = [];
997 + const pendingOperations: Array<number> = [];
998 + const pendingRealUnmountedIDs: Array<number> = [];
999 + const pendingSimulatedUnmountedIDs: Array<number> = [];
1000 let pendingOperationsQueue: Array<Array<number>> | null = [];
1001 - let pendingStringTable: Map<string, number> = new Map();
1001 + const pendingStringTable: Map<string, number> = new Map();
1002 let pendingStringTableLength: number = 0;
1003 let pendingUnmountedRootID: number | null = null;
1004
@@ -1173,12 +1173,12 @@ export function attach(
1173 ? getFiberID(getPrimaryFiber(parentFiber))
1174 : 0;
1175
1176 - let displayNameStringID = getStringID(displayName);
1176 + const displayNameStringID = getStringID(displayName);
1177
1178 // This check is a guard to handle a React element that has been modified
1179 // in such a way as to bypass the default stringification of the "key" property.
1180 - let keyString = key === null ? null : '' + key;
1181 - let keyStringID = getStringID(keyString);
1180 + const keyString = key === null ? null : '' + key;
1181 + const keyStringID = getStringID(keyString);
1182
1183 pushOperation(TREE_OPERATION_ADD);
1184 pushOperation(id);
@@ -1974,7 +1974,7 @@ export function attach(
1974 return null;
1975 }
1976
1977 - let alternate = fiber.alternate;
1977 + const alternate = fiber.alternate;
1978 if (!alternate) {
1979 // If there is no alternate, then we only need to check if it is mounted.
1980 const state = isFiberMountedImpl(fiber);
@@ -1992,12 +1992,12 @@ export function attach(
1992 let a: Fiber = fiber;
1993 let b: Fiber = alternate;
1994 while (true) {
1995 - let parentA = a.return;
1995 + const parentA = a.return;
1996 if (parentA === null) {
1997 // We're at the root.
1998 break;
1999 }
2000 - let parentB = parentA.alternate;
2000 + const parentB = parentA.alternate;
2001 if (parentB === null) {
2002 // There is no alternate. This is an unusual case. Currently, it only
2003 // happens when a Suspense component is hidden. An extra fragment fiber
@@ -2131,7 +2131,7 @@ export function attach(
2131 }
2132
2133 function prepareViewElementSource(id: number): void {
2134 - let fiber = idToFiberMap.get(id);
2134 + const fiber = idToFiberMap.get(id);
2135 if (fiber == null) {
2136 console.warn(`Could not find Fiber with id "${id}"`);
2137 return;
@@ -2163,7 +2163,7 @@ export function attach(
2163 }
2164
2165 function getOwnersList(id: number): Array<Owner> | null {
2166 - let fiber = findCurrentFiberUsingSlowPathById(id);
2166 + const fiber = findCurrentFiberUsingSlowPathById(id);
2167 if (fiber == null) {
2168 return null;
2169 }
@@ -2200,7 +2200,7 @@ export function attach(
2200 let instance = null;
2201 let style = null;
2202
2203 - let fiber = findCurrentFiberUsingSlowPathById(id);
2203 + const fiber = findCurrentFiberUsingSlowPathById(id);
2204 if (fiber !== null) {
2205 instance = fiber.stateNode;
2206
@@ -2213,7 +2213,7 @@ export function attach(
2213 }
2214
2215 function inspectElementRaw(id: number): InspectedElement | null {
2216 - let fiber = findCurrentFiberUsingSlowPathById(id);
2216 + const fiber = findCurrentFiberUsingSlowPathById(id);
2217 if (fiber == null) {
2218 return null;
2219 }
@@ -2328,7 +2328,7 @@ export function attach(
2328 const originalConsoleMethods = {};
2329
2330 // Temporarily disable all console logging before re-running the hook.
2331 - for (let method in console) {
2331 + for (const method in console) {
2332 try {
2333 originalConsoleMethods[method] = console[method];
2334 // $FlowFixMe property error|warn is not writable.
@@ -2343,7 +2343,7 @@ export function attach(
2343 );
2344 } finally {
2345 // Restore original console functionality.
2346 - for (let method in originalConsoleMethods) {
2346 + for (const method in originalConsoleMethods) {
2347 try {
2348 // $FlowFixMe property error|warn is not writable.
2349 console[method] = originalConsoleMethods[method];
@@ -2462,7 +2462,7 @@ export function attach(
2462 function updateSelectedElement(inspectedElement: InspectedElement): void {
2463 const {hooks, id, props} = inspectedElement;
2464
2465 - let fiber = idToFiberMap.get(id);
2465 + const fiber = idToFiberMap.get(id);
2466 if (fiber == null) {
2467 console.warn(`Could not find Fiber with id "${id}"`);
2468 return;
@@ -2912,7 +2912,7 @@ export function attach(
2912 return false;
2913 }
2914
2915 - let forceFallbackForSuspenseIDs = new Set();
2915 + const forceFallbackForSuspenseIDs = new Set();
2916 function shouldSuspendFiberAccordingToSet(fiber) {
2917 const id = getFiberID(getPrimaryFiber(((fiber: any): Fiber)));
2918 return forceFallbackForSuspenseIDs.has(id);
packages/react-devtools-shared/src/backend/views/Highlighter/Overlay.js
+2 -2
@@ -155,11 +155,11 @@ export default class Overlay {
155
156 constructor() {
157 // Find the root window, because overlays are positioned relative to it.
158 - let currentWindow = window.__REACT_DEVTOOLS_TARGET_WINDOW__ || window;
158 + const currentWindow = window.__REACT_DEVTOOLS_TARGET_WINDOW__ || window;
159 this.window = currentWindow;
160
161 // When opened in shells/dev, the tooltip should be bound by the app iframe, not by the topmost window.
162 - let tipBoundsWindow = window.__REACT_DEVTOOLS_TARGET_WINDOW__ || window;
162 + const tipBoundsWindow = window.__REACT_DEVTOOLS_TARGET_WINDOW__ || window;
163 this.tipBoundsWindow = tipBoundsWindow;
164
165 const doc = currentWindow.document;
packages/react-devtools-shared/src/backend/views/TraceUpdates/index.js
+1 -1
@@ -135,7 +135,7 @@ function measureNode(node: Object): Rect | null {
135 return null;
136 }
137
138 - let currentWindow = window.__REACT_DEVTOOLS_TARGET_WINDOW__ || window;
138 + const currentWindow = window.__REACT_DEVTOOLS_TARGET_WINDOW__ || window;
139
140 return getNestedBoundingClientRect(node, currentWindow);
141 }
packages/react-devtools-shared/src/devtools/ProfilerStore.js
+1 -1
@@ -297,7 +297,7 @@ export default class ProfilerStore extends EventEmitter<{|
297
298 // Record all renderer IDs initially too (in case of unmount)
299 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
300 - for (let rendererID of this._store.rootIDToRendererID.values()) {
300 + for (const rendererID of this._store.rootIDToRendererID.values()) {
301 if (!this._initialRendererIDs.has(rendererID)) {
302 this._initialRendererIDs.add(rendererID);
303 }
packages/react-devtools-shared/src/devtools/store.js
+1 -1
@@ -479,7 +479,7 @@ export default class Store extends EventEmitter<{|
479
480 getOwnersListForElement(ownerID: number): Array<Element> {
481 const list = [];
482 - let element = this._idToElement.get(ownerID);
482 + const element = this._idToElement.get(ownerID);
483 if (element != null) {
484 list.push({
485 ...element,
packages/react-devtools-shared/src/devtools/utils.js
+2 -1
@@ -44,7 +44,8 @@ export function printElement(element: Element, includeWeight: boolean = false) {
44 }
45 }
46
47 - let hocs = hocDisplayNames === null ? '' : ` [${hocDisplayNames.join('][')}]`;
47 + const hocs =
48 + hocDisplayNames === null ? '' : ` [${hocDisplayNames.join('][')}]`;
49
50 let suffix = '';
51 if (includeWeight) {
packages/react-devtools-shared/src/devtools/views/Components/InspectedElementContext.js
+8 -5
@@ -76,7 +76,7 @@ const resource: Resource<
76 InspectedElementFrontend,
77 > = createResource(
78 (element: Element) => {
79 - let request = inProgressRequests.get(element);
79 + const request = inProgressRequests.get(element);
80 if (request != null) {
81 return request.promise;
82 }
@@ -351,16 +351,19 @@ function hydrateHelper(
351 path?: Array<string | number>,
352 ): Object | null {
353 if (dehydratedData !== null) {
354 - let {cleaned, data, unserializable} = dehydratedData;
354 + const {cleaned, data, unserializable} = dehydratedData;
355
356 if (path) {
357 const {length} = path;
358 if (length > 0) {
359 // Hydration helper requires full paths, but inspection dehydrates with relative paths.
360 // In that event it's important that we adjust the "cleaned" paths to match.
361 - cleaned = cleaned.map(cleanedPath => cleanedPath.slice(length));
362 - unserializable = unserializable.map(unserializablePath =>
363 - unserializablePath.slice(length),
361 + return hydrate(
362 + data,
363 + cleaned.map(cleanedPath => cleanedPath.slice(length)),
364 + unserializable.map(unserializablePath =>
365 + unserializablePath.slice(length),
366 + ),
367 );
368 }
369 }
packages/react-devtools-shared/src/devtools/views/Components/KeyValue.js
+1 -1
@@ -217,7 +217,7 @@ export default function KeyValue({
217 const hasChildren = entries.length > 0;
218 const displayName = getMetaValueLabel(value);
219
220 - let areChildrenReadOnly = isReadOnly || !!value[meta.readonly];
220 + const areChildrenReadOnly = isReadOnly || !!value[meta.readonly];
221 children = entries.map<Element<any>>(([key, keyValue]) => (
222 <KeyValue
223 key={key}
packages/react-devtools-shared/src/devtools/views/Components/NativeStyleEditor/context.js
+2 -2
@@ -57,7 +57,7 @@ const resource: Resource<
57 StyleAndLayoutFrontend,
58 > = createResource(
59 (element: Element) => {
60 - let request = inProgressRequests.get(element);
60 + const request = inProgressRequests.get(element);
61 if (request != null) {
62 return request.promise;
63 }
@@ -108,7 +108,7 @@ function NativeStyleContextController({children}: Props) {
108 // This effect handler invalidates the suspense cache and schedules rendering updates with React.
109 useEffect(() => {
110 const onStyleAndLayout = ({id, layout, style}: StyleAndLayoutBackend) => {
111 - let element = store.getElementByID(id);
111 + const element = store.getElementByID(id);
112 if (element !== null) {
113 const styleAndLayout: StyleAndLayoutFrontend = {
114 layout,
packages/react-devtools-shared/src/devtools/views/Components/OwnersListContext.js
+1 -1
@@ -35,7 +35,7 @@ type InProgressRequest = {|
35 const inProgressRequests: WeakMap<Element, InProgressRequest> = new WeakMap();
36 const resource: Resource<Element, Element, Array<Owner>> = createResource(
37 (element: Element) => {
38 - let request = inProgressRequests.get(element);
38 + const request = inProgressRequests.get(element);
39 if (request != null) {
40 return request.promise;
41 }
packages/react-devtools-shared/src/devtools/views/Components/Tree.js
+1 -1
@@ -409,7 +409,7 @@ function updateIndentationSizeVar(
409 let maxIndentationSize: number = indentationSizeRef.current;
410
411 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
412 - for (let child of innerDiv.children) {
412 + for (const child of innerDiv.children) {
413 const depth = parseInt(child.getAttribute('data-depth'), 10) || 0;
414
415 let childWidth: number = 0;
packages/react-devtools-shared/src/devtools/views/Components/TreeContext.js
+5 -6
@@ -157,7 +157,8 @@ type State = {|
157 |};
158
159 function reduceTreeState(store: Store, state: State, action: Action): State {
160 - let {numElements, ownerID, selectedElementIndex, selectedElementID} = state;
160 + let {numElements, selectedElementIndex, selectedElementID} = state;
161 + const ownerID = state.ownerID;
162
163 let lookupIDForIndex = true;
164
@@ -277,13 +278,13 @@ function reduceTreeState(store: Store, state: State, action: Action): State {
278
279 function reduceSearchState(store: Store, state: State, action: Action): State {
280 let {
280 - ownerID,
281 searchIndex,
282 searchResults,
283 searchText,
284 selectedElementID,
285 selectedElementIndex,
286 } = state;
287 + const ownerID = state.ownerID;
288
289 const prevSearchIndex = searchIndex;
290 const prevSearchText = searchText;
@@ -452,10 +453,8 @@ function reduceOwnersState(store: Store, state: State, action: Action): State {
453 selectedElementIndex,
454 ownerID,
455 ownerFlatTree,
455 - searchIndex,
456 - searchResults,
457 - searchText,
456 } = state;
457 + const {searchIndex, searchResults, searchText} = state;
458
459 let prevSelectedElementIndex = selectedElementIndex;
460
@@ -734,7 +733,7 @@ function TreeContextController({
733 prevSelectedElementID.current = state.selectedElementID;
734
735 if (state.selectedElementID !== null) {
737 - let element = store.getElementByID(state.selectedElementID);
736 + const element = store.getElementByID(state.selectedElementID);
737 if (element !== null && element.parentID > 0) {
738 store.toggleIsCollapsed(element.parentID, false);
739 }
packages/react-devtools-shared/src/devtools/views/DevTools.js
+3 -1
@@ -107,11 +107,13 @@ export default function DevTools({
107 viewAttributeSourceFunction,
108 viewElementSourceFunction,
109 }: Props) {
110 - let [tab, setTab] = useLocalStorage<TabID>(
110 + const [currentTab, setTab] = useLocalStorage<TabID>(
111 'React::DevTools::defaultTab',
112 defaultTab,
113 );
114
115 + let tab = currentTab;
116 +
117 if (overrideTab != null) {
118 tab = overrideTab;
119 }
packages/react-devtools-shared/src/devtools/views/Profiler/CommitFlamegraphListItem.js
+1 -1
@@ -64,7 +64,7 @@ function CommitFlamegraphListItem({data, index, style}: Props) {
64
65 const row = rows[index];
66
67 - let selectedNodeOffset = scaleX(
67 + const selectedNodeOffset = scaleX(
68 selectedChartNode !== null ? selectedChartNode.offset : 0,
69 width,
70 );
packages/react-devtools-shared/src/events.js
+1 -1
@@ -14,7 +14,7 @@ export default class EventEmitter<Events: Object> {
14 event: Event,
15 listener: (...$ElementType<Events, Event>) => any,
16 ): void {
17 - let listeners = this.listenersMap.get(event);
17 + const listeners = this.listenersMap.get(event);
18 if (listeners === undefined) {
19 this.listenersMap.set(event, [listener]);
20 } else {
packages/react-devtools-shared/src/hydration.js
+1 -1
@@ -287,7 +287,7 @@ export function dehydrate(
287 return createDehydrated(type, true, data, cleaned, path);
288 } else {
289 const object = {};
290 - for (let name in data) {
290 + for (const name in data) {
291 object[name] = dehydrate(
292 data[name],
293 cleaned,
packages/react-devtools-shared/src/utils.js
+4 -4
@@ -49,7 +49,7 @@ const cachedDisplayNames: WeakMap<Function, string> = new WeakMap();
49
50 // On large trees, encoding takes significant time.
51 // Try to reuse the already encoded strings.
52 -let encodedStringCache = new LRU({max: 1000});
52 +const encodedStringCache = new LRU({max: 1000});
53
54 export function alphaSortKeys(a: string, b: string): number {
55 if (a > b) {
@@ -96,7 +96,7 @@ export function utfDecodeString(array: Array<number>): string {
96 }
97
98 export function utfEncodeString(string: string): Array<number> {
99 - let cached = encodedStringCache.get(string);
99 + const cached = encodedStringCache.get(string);
100 if (cached !== undefined) {
101 return cached;
102 }
@@ -281,12 +281,12 @@ export function separateDisplayNameAndHOCs(
281 // Pulled from react-compat
282 // https://github.com/developit/preact-compat/blob/7c5de00e7c85e2ffd011bf3af02899b63f699d3a/src/index.js#L349
283 export function shallowDiffers(prev: Object, next: Object): boolean {
284 - for (let attribute in prev) {
284 + for (const attribute in prev) {
285 if (!(attribute in next)) {
286 return true;
287 }
288 }
289 - for (let attribute in next) {
289 + for (const attribute in next) {
290 if (prev[attribute] !== next[attribute]) {
291 return true;
292 }
packages/react-devtools-shell/src/app/SuspenseTree/index.js
+3 -3
@@ -47,13 +47,13 @@ function PrimaryFallbackTest({initialSuspend}) {
47 }
48
49 function useTestSequence(label, T1, T2) {
50 - let [step, setStep] = useState(0);
51 - let next = (
50 + const [step, setStep] = useState(0);
51 + const next = (
52 <button onClick={() => setStep(s => (s + 1) % allSteps.length)}>
53 next {label} content
54 </button>
55 );
56 - let allSteps = [
56 + const allSteps = [
57 <Fragment>{next}</Fragment>,
58 <Fragment>
59 {next} <T1 prop={step}>mount</T1>
packages/react-dom/src/__tests__/ReactCompositeComponentState-test.js
+4 -6
@@ -143,7 +143,7 @@ describe('ReactCompositeComponent-state', () => {
143
144 ReactDOM.unmountComponentAtNode(container);
145
146 - let expected = [
146 + const expected = [
147 // there is no state when getInitialState() is called
148 ['getInitialState', null],
149 ['componentWillMount-start', 'red'],
@@ -283,8 +283,6 @@ describe('ReactCompositeComponent-state', () => {
283 });
284
285 it('should batch unmounts', () => {
286 - let outer;
287 -
286 class Inner extends React.Component {
287 render() {
288 return <div />;
@@ -306,7 +304,7 @@ describe('ReactCompositeComponent-state', () => {
304 }
305
306 const container = document.createElement('div');
309 - outer = ReactDOM.render(<Outer />, container);
307 + const outer = ReactDOM.render(<Outer />, container);
308 expect(() => {
309 ReactDOM.unmountComponentAtNode(container);
310 }).not.toThrow();
@@ -380,7 +378,7 @@ describe('ReactCompositeComponent-state', () => {
378 });
379
380 it('should treat assigning to this.state inside cWRP as a replaceState, with a warning', () => {
383 - let ops = [];
381 + const ops = [];
382 class Test extends React.Component {
383 state = {step: 1, extra: true};
384 UNSAFE_componentWillReceiveProps() {
@@ -423,7 +421,7 @@ describe('ReactCompositeComponent-state', () => {
421 });
422
423 it('should treat assigning to this.state inside cWM as a replaceState, with a warning', () => {
426 - let ops = [];
424 + const ops = [];
425 class Test extends React.Component {
426 state = {step: 1, extra: true};
427 UNSAFE_componentWillMount() {
packages/react-dom/src/__tests__/ReactDOMComponent-test.js
+9 -9
@@ -564,8 +564,8 @@ describe('ReactDOMComponent', () => {
564 {'></div><script>alert("hi")</script>': 'selected'},
565 null,
566 );
567 - let result1 = ReactDOMServer.renderToString(element1);
568 - let result2 = ReactDOMServer.renderToString(element2);
567 + const result1 = ReactDOMServer.renderToString(element1);
568 + const result2 = ReactDOMServer.renderToString(element2);
569 expect(result1.toLowerCase()).not.toContain('onclick');
570 expect(result2.toLowerCase()).not.toContain('script');
571 }
@@ -588,8 +588,8 @@ describe('ReactDOMComponent', () => {
588 {'></x-foo-component><script>alert("hi")</script>': 'selected'},
589 null,
590 );
591 - let result1 = ReactDOMServer.renderToString(element1);
592 - let result2 = ReactDOMServer.renderToString(element2);
591 + const result1 = ReactDOMServer.renderToString(element1);
592 + const result2 = ReactDOMServer.renderToString(element2);
593 expect(result1.toLowerCase()).not.toContain('onclick');
594 expect(result2.toLowerCase()).not.toContain('script');
595 }
@@ -1166,7 +1166,7 @@ describe('ReactDOMComponent', () => {
1166 let realToString;
1167 try {
1168 realToString = Object.prototype.toString;
1169 - let wrappedToString = function() {
1169 + const wrappedToString = function() {
1170 // Emulate browser behavior which is missing in jsdom
1171 if (this instanceof window.HTMLUnknownElement) {
1172 return '[object HTMLUnknownElement]';
@@ -2553,10 +2553,10 @@ describe('ReactDOMComponent', () => {
2553 });
2554
2555 it('receives events in specific order', () => {
2556 - let eventOrder = [];
2557 - let track = tag => () => eventOrder.push(tag);
2558 - let outerRef = React.createRef();
2559 - let innerRef = React.createRef();
2556 + const eventOrder = [];
2557 + const track = tag => () => eventOrder.push(tag);
2558 + const outerRef = React.createRef();
2559 + const innerRef = React.createRef();
2560
2561 function OuterReactApp() {
2562 return (
packages/react-dom/src/__tests__/ReactDOMEventListener-test.js
+1 -1
@@ -12,7 +12,7 @@
12 describe('ReactDOMEventListener', () => {
13 let React;
14 let ReactDOM;
15 - let ReactFeatureFlags = require('shared/ReactFeatureFlags');
15 + const ReactFeatureFlags = require('shared/ReactFeatureFlags');
16
17 beforeEach(() => {
18 jest.resetModules();
packages/react-dom/src/__tests__/ReactDOMFiber-test.js
+2 -2
@@ -211,7 +211,7 @@ describe('ReactDOMFiber', () => {
211 };
212
213 const assertNamespacesMatch = function(tree) {
214 - let testContainer = document.createElement('div');
214 + const testContainer = document.createElement('div');
215 svgEls = [];
216 htmlEls = [];
217 mathEls = [];
@@ -1224,7 +1224,7 @@ describe('ReactDOMFiber', () => {
1224
1225 // Regression test for https://github.com/facebook/react/issues/12643#issuecomment-413727104
1226 it('should not diff memoized host components', () => {
1227 - let inputRef = React.createRef();
1227 + const inputRef = React.createRef();
1228 let didCallOnChange = false;
1229
1230 class Child extends React.Component {
packages/react-dom/src/__tests__/ReactDOMFiberAsync-test.internal.js
+20 -20
@@ -49,7 +49,7 @@ describe('ReactDOMFiberAsync', () => {
49 });
50
51 it('flushSync batches sync updates and flushes them at the end of the batch', () => {
52 - let ops = [];
52 + const ops = [];
53 let instance;
54
55 class Component extends React.Component {
@@ -87,7 +87,7 @@ describe('ReactDOMFiberAsync', () => {
87 });
88
89 it('flushSync flushes updates even if nested inside another flushSync', () => {
90 - let ops = [];
90 + const ops = [];
91 let instance;
92
93 class Component extends React.Component {
@@ -156,9 +156,9 @@ describe('ReactDOMFiberAsync', () => {
156 });
157
158 it.experimental('does not perform deferred updates synchronously', () => {
159 - let inputRef = React.createRef();
160 - let asyncValueRef = React.createRef();
161 - let syncValueRef = React.createRef();
159 + const inputRef = React.createRef();
160 + const asyncValueRef = React.createRef();
161 + const syncValueRef = React.createRef();
162
163 class Counter extends React.Component {
164 state = {asyncValue: '', syncValue: ''};
@@ -246,7 +246,7 @@ describe('ReactDOMFiberAsync', () => {
246 });
247
248 it.experimental('flushSync flushes updates before end of the tick', () => {
249 - let ops = [];
249 + const ops = [];
250 let instance;
251
252 class Component extends React.Component {
@@ -317,7 +317,7 @@ describe('ReactDOMFiberAsync', () => {
317 Scheduler.unstable_flushAll();
318 expect(container.textContent).toEqual('1');
319
320 - let ops = [];
320 + const ops = [];
321 ReactDOM.unstable_flushControlled(() => {
322 inst.increment();
323 ReactDOM.unstable_flushControlled(() => {
@@ -350,7 +350,7 @@ describe('ReactDOMFiberAsync', () => {
350 }
351 ReactDOM.render(<Counter />, container);
352
353 - let ops = [];
353 + const ops = [];
354 ReactDOM.unstable_batchedUpdates(() => {
355 inst.increment();
356 ReactDOM.unstable_flushControlled(() => {
@@ -428,22 +428,22 @@ describe('ReactDOMFiberAsync', () => {
428 // Flush
429 Scheduler.unstable_flushAll();
430
431 - let disableButton = disableButtonRef.current;
431 + const disableButton = disableButtonRef.current;
432 expect(disableButton.tagName).toBe('BUTTON');
433
434 // Dispatch a click event on the Disable-button.
435 - let firstEvent = document.createEvent('Event');
435 + const firstEvent = document.createEvent('Event');
436 firstEvent.initEvent('click', true, true);
437 disableButton.dispatchEvent(firstEvent);
438
439 // There should now be a pending update to disable the form.
440
441 // This should not have flushed yet since it's in concurrent mode.
442 - let submitButton = submitButtonRef.current;
442 + const submitButton = submitButtonRef.current;
443 expect(submitButton.tagName).toBe('BUTTON');
444
445 // In the meantime, we can dispatch a new client event on the submit button.
446 - let secondEvent = document.createEvent('Event');
446 + const secondEvent = document.createEvent('Event');
447 secondEvent.initEvent('click', true, true);
448 // This should force the pending update to flush which disables the submit button before the event is invoked.
449 submitButton.dispatchEvent(secondEvent);
@@ -499,22 +499,22 @@ describe('ReactDOMFiberAsync', () => {
499 // Flush
500 Scheduler.unstable_flushAll();
501
502 - let disableButton = disableButtonRef.current;
502 + const disableButton = disableButtonRef.current;
503 expect(disableButton.tagName).toBe('BUTTON');
504
505 // Dispatch a click event on the Disable-button.
506 - let firstEvent = document.createEvent('Event');
506 + const firstEvent = document.createEvent('Event');
507 firstEvent.initEvent('click', true, true);
508 disableButton.dispatchEvent(firstEvent);
509
510 // There should now be a pending update to disable the form.
511
512 // This should not have flushed yet since it's in concurrent mode.
513 - let submitButton = submitButtonRef.current;
513 + const submitButton = submitButtonRef.current;
514 expect(submitButton.tagName).toBe('BUTTON');
515
516 // In the meantime, we can dispatch a new client event on the submit button.
517 - let secondEvent = document.createEvent('Event');
517 + const secondEvent = document.createEvent('Event');
518 secondEvent.initEvent('click', true, true);
519 // This should force the pending update to flush which disables the submit button before the event is invoked.
520 submitButton.dispatchEvent(secondEvent);
@@ -562,22 +562,22 @@ describe('ReactDOMFiberAsync', () => {
562 // Flush
563 Scheduler.unstable_flushAll();
564
565 - let enableButton = enableButtonRef.current;
565 + const enableButton = enableButtonRef.current;
566 expect(enableButton.tagName).toBe('BUTTON');
567
568 // Dispatch a click event on the Enable-button.
569 - let firstEvent = document.createEvent('Event');
569 + const firstEvent = document.createEvent('Event');
570 firstEvent.initEvent('click', true, true);
571 enableButton.dispatchEvent(firstEvent);
572
573 // There should now be a pending update to enable the form.
574
575 // This should not have flushed yet since it's in concurrent mode.
576 - let submitButton = submitButtonRef.current;
576 + const submitButton = submitButtonRef.current;
577 expect(submitButton.tagName).toBe('BUTTON');
578
579 // In the meantime, we can dispatch a new client event on the submit button.
580 - let secondEvent = document.createEvent('Event');
580 + const secondEvent = document.createEvent('Event');
581 secondEvent.initEvent('click', true, true);
582 // This should force the pending update to flush which enables the submit button before the event is invoked.
583 submitButton.dispatchEvent(secondEvent);
packages/react-dom/src/__tests__/ReactDOMFizzServerBrowser-test.js
+4 -4
@@ -24,10 +24,10 @@ describe('ReactDOMFizzServer', () => {
24 });
25
26 async function readResult(stream) {
27 - let reader = stream.getReader();
27 + const reader = stream.getReader();
28 let result = '';
29 while (true) {
30 - let {done, value} = await reader.read();
30 + const {done, value} = await reader.read();
31 if (done) {
32 return result;
33 }
@@ -36,10 +36,10 @@ describe('ReactDOMFizzServer', () => {
36 }
37
38 it('should call renderToReadableStream', async () => {
39 - let stream = ReactDOMFizzServer.renderToReadableStream(
39 + const stream = ReactDOMFizzServer.renderToReadableStream(
40 <div>hello world</div>,
41 );
42 - let result = await readResult(stream);
42 + const result = await readResult(stream);
43 expect(result).toBe('<div>hello world</div>');
44 });
45 });
packages/react-dom/src/__tests__/ReactDOMFizzServerNode-test.js
+2 -2
@@ -23,7 +23,7 @@ describe('ReactDOMFizzServer', () => {
23 });
24
25 function getTestWritable() {
26 - let writable = new Stream.PassThrough();
26 + const writable = new Stream.PassThrough();
27 writable.setEncoding('utf8');
28 writable.result = '';
29 writable.on('data', chunk => (writable.result += chunk));
@@ -31,7 +31,7 @@ describe('ReactDOMFizzServer', () => {
31 }
32
33 it('should call pipeToNodeWritable', () => {
34 - let writable = getTestWritable();
34 + const writable = getTestWritable();
35 ReactDOMFizzServer.pipeToNodeWritable(<div>hello world</div>, writable);
36 jest.runAllTimers();
37 expect(writable.result).toBe('<div>hello world</div>');
packages/react-dom/src/__tests__/ReactDOMHooks-test.js
+2 -2
@@ -32,8 +32,8 @@ describe('ReactDOMHooks', () => {
32 });
33
34 it('can ReactDOM.render() from useEffect', () => {
35 - let container2 = document.createElement('div');
36 - let container3 = document.createElement('div');
35 + const container2 = document.createElement('div');
36 + const container3 = document.createElement('div');
37
38 function Example1({n}) {
39 React.useEffect(() => {
packages/react-dom/src/__tests__/ReactDOMInput-test.js
+11 -11
@@ -383,7 +383,7 @@ describe('ReactDOMInput', () => {
383 });
384
385 it('should display `defaultValue` of number 0', () => {
386 - let stub = <input type="text" defaultValue={0} />;
386 + const stub = <input type="text" defaultValue={0} />;
387 const node = ReactDOM.render(stub, container);
388
389 expect(node.getAttribute('value')).toBe('0');
@@ -415,14 +415,14 @@ describe('ReactDOMInput', () => {
415 });
416
417 it('should display "true" for `defaultValue` of `true`', () => {
418 - let stub = <input type="text" defaultValue={true} />;
418 + const stub = <input type="text" defaultValue={true} />;
419 const node = ReactDOM.render(stub, container);
420
421 expect(node.value).toBe('true');
422 });
423
424 it('should display "false" for `defaultValue` of `false`', () => {
425 - let stub = <input type="text" defaultValue={false} />;
425 + const stub = <input type="text" defaultValue={false} />;
426 const node = ReactDOM.render(stub, container);
427
428 expect(node.value).toBe('false');
@@ -887,7 +887,7 @@ describe('ReactDOMInput', () => {
887 });
888
889 it('should set a value on a submit input', () => {
890 - let stub = <input type="submit" value="banana" />;
890 + const stub = <input type="submit" value="banana" />;
891 ReactDOM.render(stub, container);
892 const node = container.firstChild;
893
@@ -895,7 +895,7 @@ describe('ReactDOMInput', () => {
895 });
896
897 it('should not set an undefined value on a submit input', () => {
898 - let stub = <input type="submit" value={undefined} />;
898 + const stub = <input type="submit" value={undefined} />;
899 ReactDOM.render(stub, container);
900 const node = container.firstChild;
901
@@ -908,7 +908,7 @@ describe('ReactDOMInput', () => {
908 });
909
910 it('should not set an undefined value on a reset input', () => {
911 - let stub = <input type="reset" value={undefined} />;
911 + const stub = <input type="reset" value={undefined} />;
912 ReactDOM.render(stub, container);
913 const node = container.firstChild;
914
@@ -921,7 +921,7 @@ describe('ReactDOMInput', () => {
921 });
922
923 it('should not set a null value on a submit input', () => {
924 - let stub = <input type="submit" value={null} />;
924 + const stub = <input type="submit" value={null} />;
925 expect(() => {
926 ReactDOM.render(stub, container);
927 }).toErrorDev('`value` prop on `input` should not be null');
@@ -936,7 +936,7 @@ describe('ReactDOMInput', () => {
936 });
937
938 it('should not set a null value on a reset input', () => {
939 - let stub = <input type="reset" value={null} />;
939 + const stub = <input type="reset" value={null} />;
940 expect(() => {
941 ReactDOM.render(stub, container);
942 }).toErrorDev('`value` prop on `input` should not be null');
@@ -951,7 +951,7 @@ describe('ReactDOMInput', () => {
951 });
952
953 it('should set a value on a reset input', () => {
954 - let stub = <input type="reset" value="banana" />;
954 + const stub = <input type="reset" value="banana" />;
955 ReactDOM.render(stub, container);
956 const node = container.firstChild;
957
@@ -959,7 +959,7 @@ describe('ReactDOMInput', () => {
959 });
960
961 it('should set an empty string value on a submit input', () => {
962 - let stub = <input type="submit" value="" />;
962 + const stub = <input type="submit" value="" />;
963 ReactDOM.render(stub, container);
964 const node = container.firstChild;
965
@@ -967,7 +967,7 @@ describe('ReactDOMInput', () => {
967 });
968
969 it('should set an empty string value on a reset input', () => {
970 - let stub = <input type="reset" value="" />;
970 + const stub = <input type="reset" value="" />;
971 ReactDOM.render(stub, container);
972 const node = container.firstChild;
973
packages/react-dom/src/__tests__/ReactDOMOption-test.js
+5 -5
@@ -22,7 +22,7 @@ describe('ReactDOMOption', () => {
22 });
23
24 it('should flatten children to a string', () => {
25 - let stub = (
25 + const stub = (
26 <option>
27 {1} {'foo'}
28 </option>
@@ -50,7 +50,7 @@ describe('ReactDOMOption', () => {
50 });
51
52 it('should ignore null/undefined/false children without warning', () => {
53 - let stub = (
53 + const stub = (
54 <option>
55 {1} {false}
56 {true}
@@ -92,7 +92,7 @@ describe('ReactDOMOption', () => {
92 it('should support element-ish child', () => {
93 // This is similar to <fbt>.
94 // It's important that we toString it.
95 - let obj = {
95 + const obj = {
96 $$typeof: Symbol.for('react.element'),
97 type: props => props.content,
98 ref: null,
@@ -134,7 +134,7 @@ describe('ReactDOMOption', () => {
134 });
135
136 it('should be able to use dangerouslySetInnerHTML on option', () => {
137 - let stub = <option dangerouslySetInnerHTML={{__html: 'foobar'}} />;
137 + const stub = <option dangerouslySetInnerHTML={{__html: 'foobar'}} />;
138 const node = ReactTestUtils.renderIntoDocument(stub);
139
140 expect(node.innerHTML).toBe('foobar');
@@ -153,7 +153,7 @@ describe('ReactDOMOption', () => {
153
154 it('should allow ignoring `value` on option', () => {
155 const a = 'a';
156 - let stub = (
156 + const stub = (
157 <select value="giraffe" onChange={() => {}}>
158 <option>monkey</option>
159 <option>gir{a}ffe</option>
packages/react-dom/src/__tests__/ReactDOMSelect-test.js
+15 -15
@@ -26,7 +26,7 @@ describe('ReactDOMSelect', () => {
26 });
27
28 it('should allow setting `defaultValue`', () => {
29 - let stub = (
29 + const stub = (
30 <select defaultValue="giraffe">
31 <option value="monkey">A monkey!</option>
32 <option value="giraffe">A giraffe!</option>
@@ -75,7 +75,7 @@ describe('ReactDOMSelect', () => {
75 });
76
77 it('should allow setting `defaultValue` with multiple', () => {
78 - let stub = (
78 + const stub = (
79 <select multiple={true} defaultValue={['giraffe', 'gorilla']}>
80 <option value="monkey">A monkey!</option>
81 <option value="giraffe">A giraffe!</option>
@@ -104,7 +104,7 @@ describe('ReactDOMSelect', () => {
104 });
105
106 it('should allow setting `value`', () => {
107 - let stub = (
107 + const stub = (
108 <select value="giraffe" onChange={noop}>
109 <option value="monkey">A monkey!</option>
110 <option value="giraffe">A giraffe!</option>
@@ -128,7 +128,7 @@ describe('ReactDOMSelect', () => {
128 });
129
130 it('should default to the first non-disabled option', () => {
131 - let stub = (
131 + const stub = (
132 <select defaultValue="">
133 <option disabled={true}>Disabled</option>
134 <option disabled={true}>Still Disabled</option>
@@ -143,7 +143,7 @@ describe('ReactDOMSelect', () => {
143 });
144
145 it('should allow setting `value` to __proto__', () => {
146 - let stub = (
146 + const stub = (
147 <select value="__proto__" onChange={noop}>
148 <option value="monkey">A monkey!</option>
149 <option value="__proto__">A giraffe!</option>
@@ -175,7 +175,7 @@ describe('ReactDOMSelect', () => {
175 });
176
177 it('should allow setting `value` with multiple', () => {
178 - let stub = (
178 + const stub = (
179 <select multiple={true} value={['giraffe', 'gorilla']} onChange={noop}>
180 <option value="monkey">A monkey!</option>
181 <option value="giraffe">A giraffe!</option>
@@ -204,7 +204,7 @@ describe('ReactDOMSelect', () => {
204 });
205
206 it('should allow setting `value` to __proto__ with multiple', () => {
207 - let stub = (
207 + const stub = (
208 <select multiple={true} value={['__proto__', 'gorilla']} onChange={noop}>
209 <option value="monkey">A monkey!</option>
210 <option value="__proto__">A __proto__!</option>
@@ -233,7 +233,7 @@ describe('ReactDOMSelect', () => {
233 });
234
235 it('should not select other options automatically', () => {
236 - let stub = (
236 + const stub = (
237 <select multiple={true} value={['12']} onChange={noop}>
238 <option value="1">one</option>
239 <option value="2">two</option>
@@ -248,7 +248,7 @@ describe('ReactDOMSelect', () => {
248 });
249
250 it('should reset child options selected when they are changed and `value` is set', () => {
251 - let stub = <select multiple={true} value={['a', 'b']} onChange={noop} />;
251 + const stub = <select multiple={true} value={['a', 'b']} onChange={noop} />;
252 const container = document.createElement('div');
253 const node = ReactDOM.render(stub, container);
254
@@ -306,7 +306,7 @@ describe('ReactDOMSelect', () => {
306 });
307
308 it('should allow switching to multiple', () => {
309 - let stub = (
309 + const stub = (
310 <select defaultValue="giraffe">
311 <option value="monkey">A monkey!</option>
312 <option value="giraffe">A giraffe!</option>
@@ -335,7 +335,7 @@ describe('ReactDOMSelect', () => {
335 });
336
337 it('should allow switching from multiple', () => {
338 - let stub = (
338 + const stub = (
339 <select multiple={true} defaultValue={['giraffe', 'gorilla']}>
340 <option value="monkey">A monkey!</option>
341 <option value="giraffe">A giraffe!</option>
@@ -389,7 +389,7 @@ describe('ReactDOMSelect', () => {
389 });
390
391 it('should remember value when switching to uncontrolled', () => {
392 - let stub = (
392 + const stub = (
393 <select value={'giraffe'} onChange={noop}>
394 <option value="monkey">A monkey!</option>
395 <option value="giraffe">A giraffe!</option>
@@ -412,7 +412,7 @@ describe('ReactDOMSelect', () => {
412 });
413
414 it('should remember updated value when switching to uncontrolled', () => {
415 - let stub = (
415 + const stub = (
416 <select value={'giraffe'} onChange={noop}>
417 <option value="monkey">A monkey!</option>
418 <option value="giraffe">A giraffe!</option>
@@ -663,7 +663,7 @@ describe('ReactDOMSelect', () => {
663 });
664
665 it('should refresh state on change', () => {
666 - let stub = (
666 + const stub = (
667 <select value="giraffe" onChange={noop}>
668 <option value="monkey">A monkey!</option>
669 <option value="giraffe">A giraffe!</option>
@@ -725,7 +725,7 @@ describe('ReactDOMSelect', () => {
725 }
726
727 const container = document.createElement('div');
728 - let stub = (
728 + const stub = (
729 <select value="giraffe" onChange={changeView}>
730 <option value="monkey">A monkey!</option>
731 <option value="giraffe">A giraffe!</option>
packages/react-dom/src/__tests__/ReactDOMSelection-test.internal.js
+1 -1
@@ -60,7 +60,7 @@ describe('ReactDOMSelection', () => {
60 if (i === node.childNodes.length) {
61 break;
62 }
63 - let n = node.childNodes[i];
63 + const n = node.childNodes[i];
64 traverse(n);
65 }
66 }
packages/react-dom/src/__tests__/ReactDOMServerIntegrationBasic-test.js
+13 -13
@@ -63,37 +63,37 @@ describe('ReactDOMServerIntegration', () => {
63 });
64
65 itRenders('a string', async render => {
66 - let e = await render('Hello');
66 + const e = await render('Hello');
67 expect(e.nodeType).toBe(3);
68 expect(e.nodeValue).toMatch('Hello');
69 });
70
71 itRenders('a number', async render => {
72 - let e = await render(42);
72 + const e = await render(42);
73 expect(e.nodeType).toBe(3);
74 expect(e.nodeValue).toMatch('42');
75 });
76
77 itRenders('an array with one child', async render => {
78 - let e = await render([<div key={1}>text1</div>]);
79 - let parent = e.parentNode;
78 + const e = await render([<div key={1}>text1</div>]);
79 + const parent = e.parentNode;
80 expect(parent.childNodes[0].tagName).toBe('DIV');
81 });
82
83 itRenders('an array with several children', async render => {
84 - let Header = props => {
84 + const Header = props => {
85 return <p>header</p>;
86 };
87 - let Footer = props => {
87 + const Footer = props => {
88 return [<h2 key={1}>footer</h2>, <h3 key={2}>about</h3>];
89 };
90 - let e = await render([
90 + const e = await render([
91 <div key={1}>text1</div>,
92 <span key={2}>text2</span>,
93 <Header key={3} />,
94 <Footer key={4} />,
95 ]);
96 - let parent = e.parentNode;
96 + const parent = e.parentNode;
97 expect(parent.childNodes[0].tagName).toBe('DIV');
98 expect(parent.childNodes[1].tagName).toBe('SPAN');
99 expect(parent.childNodes[2].tagName).toBe('P');
@@ -102,12 +102,12 @@ describe('ReactDOMServerIntegration', () => {
102 });
103
104 itRenders('a nested array', async render => {
105 - let e = await render([
105 + const e = await render([
106 [<div key={1}>text1</div>],
107 <span key={1}>text2</span>,
108 [[[null, <p key={1} />], false]],
109 ]);
110 - let parent = e.parentNode;
110 + const parent = e.parentNode;
111 expect(parent.childNodes[0].tagName).toBe('DIV');
112 expect(parent.childNodes[1].tagName).toBe('SPAN');
113 expect(parent.childNodes[2].tagName).toBe('P');
@@ -128,8 +128,8 @@ describe('ReactDOMServerIntegration', () => {
128 };
129 },
130 };
131 - let e = await render(threeDivIterable);
132 - let parent = e.parentNode;
131 + const e = await render(threeDivIterable);
132 + const parent = e.parentNode;
133 expect(parent.childNodes.length).toBe(3);
134 expect(parent.childNodes[0].tagName).toBe('DIV');
135 expect(parent.childNodes[1].tagName).toBe('DIV');
@@ -137,7 +137,7 @@ describe('ReactDOMServerIntegration', () => {
137 });
138
139 itRenders('emptyish values', async render => {
140 - let e = await render(0);
140 + const e = await render(0);
141 expect(e.nodeType).toBe(TEXT_NODE_TYPE);
142 expect(e.nodeValue).toMatch('0');
143
packages/react-dom/src/__tests__/ReactDOMServerIntegrationClassContextType-test.js
+1 -1
@@ -257,7 +257,7 @@ describe('ReactDOMServerIntegration', () => {
257 </LanguageConsumer>
258 </div>
259 );
260 - let e = await render(<App />);
260 + const e = await render(<App />);
261 expect(e.querySelector('#theme1').textContent).toBe('dark');
262 expect(e.querySelector('#theme2').textContent).toBe('light');
263 expect(e.querySelector('#theme3').textContent).toBe('blue');
packages/react-dom/src/__tests__/ReactDOMServerIntegrationElements-test.js
+11 -14
@@ -128,9 +128,8 @@ describe('ReactDOMServerIntegration', () => {
128 Text<span>More Text</span>
129 </div>,
130 );
131 - let spanNode;
131 expect(e.childNodes.length).toBe(2);
133 - spanNode = e.childNodes[1];
132 + const spanNode = e.childNodes[1];
133 expectTextNode(e.childNodes[0], 'Text');
134 expect(spanNode.tagName).toBe('SPAN');
135 expect(spanNode.childNodes.length).toBe(1);
@@ -397,7 +396,7 @@ describe('ReactDOMServerIntegration', () => {
396 });
397
398 itRenders('svg child element with an attribute', async render => {
400 - let e = await render(<svg viewBox="0 0 0 0" />);
399 + const e = await render(<svg viewBox="0 0 0 0" />);
400 expect(e.childNodes.length).toBe(0);
401 expect(e.tagName).toBe('svg');
402 expect(e.namespaceURI).toBe('http://www.w3.org/2000/svg');
@@ -439,14 +438,14 @@ describe('ReactDOMServerIntegration', () => {
438 });
439
440 itRenders('svg element with a tabIndex attribute', async render => {
442 - let e = await render(<svg tabIndex="1" />);
441 + const e = await render(<svg tabIndex="1" />);
442 expect(e.tabIndex).toBe(1);
443 });
444
445 itRenders(
446 'svg element with a badly cased tabIndex attribute',
447 async render => {
449 - let e = await render(<svg tabindex="1" />, 1);
448 + const e = await render(<svg tabindex="1" />, 1);
449 expect(e.tabIndex).toBe(1);
450 },
451 );
@@ -758,11 +757,10 @@ describe('ReactDOMServerIntegration', () => {
757 </div>,
758 );
759 expect(e.id).toBe('parent');
761 - let child1, child2, textNode;
760 expect(e.childNodes.length).toBe(3);
763 - child1 = e.childNodes[0];
764 - textNode = e.childNodes[1];
765 - child2 = e.childNodes[2];
761 + const child1 = e.childNodes[0];
762 + const textNode = e.childNodes[1];
763 + const child2 = e.childNodes[2];
764 expect(child1.id).toBe('child1');
765 expect(child1.childNodes.length).toBe(0);
766 expectTextNode(textNode, ' ');
@@ -776,11 +774,10 @@ describe('ReactDOMServerIntegration', () => {
774 async render => {
775 // prettier-ignore
776 const e = await render(<div id="parent"> <div id="child" /> </div>); // eslint-disable-line no-multi-spaces
779 - let textNode1, child, textNode2;
777 expect(e.childNodes.length).toBe(3);
781 - textNode1 = e.childNodes[0];
782 - child = e.childNodes[1];
783 - textNode2 = e.childNodes[2];
778 + const textNode1 = e.childNodes[0];
779 + const child = e.childNodes[1];
780 + const textNode2 = e.childNodes[2];
781 expect(e.id).toBe('parent');
782 expectTextNode(textNode1, ' ');
783 expect(child.id).toBe('child');
@@ -795,7 +792,7 @@ describe('ReactDOMServerIntegration', () => {
792 <Component>{['a', 'b', [undefined], [[false, 'c']]]}</Component>,
793 );
794
798 - let parent = e.parentNode;
795 + const parent = e.parentNode;
796 if (
797 render === serverRender ||
798 render === clientRenderOnServerString ||
packages/react-dom/src/__tests__/ReactDOMServerIntegrationFragment-test.js
+8 -8
@@ -41,20 +41,20 @@ describe('ReactDOMServerIntegration', () => {
41
42 describe('React.Fragment', () => {
43 itRenders('a fragment with one child', async render => {
44 - let e = await render(
44 + const e = await render(
45 <>
46 <div>text1</div>
47 </>,
48 );
49 - let parent = e.parentNode;
49 + const parent = e.parentNode;
50 expect(parent.childNodes[0].tagName).toBe('DIV');
51 });
52
53 itRenders('a fragment with several children', async render => {
54 - let Header = props => {
54 + const Header = props => {
55 return <p>header</p>;
56 };
57 - let Footer = props => {
57 + const Footer = props => {
58 return (
59 <>
60 <h2>footer</h2>
@@ -62,7 +62,7 @@ describe('ReactDOMServerIntegration', () => {
62 </>
63 );
64 };
65 - let e = await render(
65 + const e = await render(
66 <>
67 <div>text1</div>
68 <span>text2</span>
@@ -70,7 +70,7 @@ describe('ReactDOMServerIntegration', () => {
70 <Footer />
71 </>,
72 );
73 - let parent = e.parentNode;
73 + const parent = e.parentNode;
74 expect(parent.childNodes[0].tagName).toBe('DIV');
75 expect(parent.childNodes[1].tagName).toBe('SPAN');
76 expect(parent.childNodes[2].tagName).toBe('P');
@@ -79,7 +79,7 @@ describe('ReactDOMServerIntegration', () => {
79 });
80
81 itRenders('a nested fragment', async render => {
82 - let e = await render(
82 + const e = await render(
83 <>
84 <>
85 <div>text1</div>
@@ -96,7 +96,7 @@ describe('ReactDOMServerIntegration', () => {
96 </>
97 </>,
98 );
99 - let parent = e.parentNode;
99 + const parent = e.parentNode;
100 expect(parent.childNodes[0].tagName).toBe('DIV');
101 expect(parent.childNodes[1].tagName).toBe('SPAN');
102 expect(parent.childNodes[2].tagName).toBe('P');
packages/react-dom/src/__tests__/ReactDOMServerIntegrationHooks-test.internal.js
+14 -14
@@ -121,7 +121,7 @@ describe('ReactDOMServerHooks', () => {
121 return <span>{children}</span>;
122 }
123 function Counter() {
124 - let [count, setCount] = useState(0);
124 + const [count, setCount] = useState(0);
125 return (
126 <div>
127 <UpdateCount setCount={setCount} count={count}>
@@ -140,7 +140,7 @@ describe('ReactDOMServerHooks', () => {
140 async render => {
141 class Counter extends React.Component {
142 render() {
143 - let [count] = useState(0);
143 + const [count] = useState(0);
144 return <Text text={count} />;
145 }
146 }
@@ -157,7 +157,7 @@ describe('ReactDOMServerHooks', () => {
157
158 itRenders('multiple times when an updater is called', async render => {
159 function Counter() {
160 - let [count, setCount] = useState(0);
160 + const [count, setCount] = useState(0);
161 if (count < 12) {
162 setCount(c => c + 1);
163 setCount(c => c + 1);
@@ -172,7 +172,7 @@ describe('ReactDOMServerHooks', () => {
172
173 itRenders('until there are no more new updates', async render => {
174 function Counter() {
175 - let [count, setCount] = useState(0);
175 + const [count, setCount] = useState(0);
176 if (count < 3) {
177 setCount(count + 1);
178 }
@@ -187,7 +187,7 @@ describe('ReactDOMServerHooks', () => {
187 'after too many iterations',
188 async render => {
189 function Counter() {
190 - let [count, setCount] = useState(0);
190 + const [count, setCount] = useState(0);
191 setCount(count + 1);
192 return <span>{count}</span>;
193 }
@@ -204,7 +204,7 @@ describe('ReactDOMServerHooks', () => {
204 return action === 'increment' ? state + 1 : state;
205 }
206 function Counter() {
207 - let [count] = useReducer(reducer, 0);
207 + const [count] = useReducer(reducer, 0);
208 yieldValue('Render: ' + count);
209 return <Text text={count} />;
210 }
@@ -221,7 +221,7 @@ describe('ReactDOMServerHooks', () => {
221 return action === 'increment' ? state + 1 : state;
222 }
223 function Counter() {
224 - let [count] = useReducer(reducer, 0, c => c + 1);
224 + const [count] = useReducer(reducer, 0, c => c + 1);
225 yieldValue('Render: ' + count);
226 return <Text text={count} />;
227 }
@@ -240,7 +240,7 @@ describe('ReactDOMServerHooks', () => {
240 return action === 'increment' ? state + 1 : state;
241 }
242 function Counter() {
243 - let [count, dispatch] = useReducer(reducer, 0);
243 + const [count, dispatch] = useReducer(reducer, 0);
244 if (count < 3) {
245 dispatch('increment');
246 }
@@ -286,8 +286,8 @@ describe('ReactDOMServerHooks', () => {
286 }
287
288 function Counter() {
289 - let [reducer, setReducer] = useState(() => reducerA);
290 - let [count, dispatch] = useReducer(reducer, 0);
289 + const [reducer, setReducer] = useState(() => reducerA);
290 + const [count, dispatch] = useReducer(reducer, 0);
291 if (count < 20) {
292 dispatch('increment');
293 // Swap reducers each time we increment
@@ -630,7 +630,7 @@ describe('ReactDOMServerHooks', () => {
630 const Context = React.createContext({}, () => {});
631 class Counter extends React.Component {
632 render() {
633 - let [count] = useContext(Context);
633 + const [count] = useContext(Context);
634 return <Text text={count} />;
635 }
636 }
@@ -705,7 +705,7 @@ describe('ReactDOMServerHooks', () => {
705 );
706
707 itRenders('warns when bitmask is passed to useContext', async render => {
708 - let Context = React.createContext('Hi');
708 + const Context = React.createContext('Hi');
709
710 function Foo() {
711 return <span>{useContext(Context, 1)}</span>;
@@ -815,12 +815,12 @@ describe('ReactDOMServerHooks', () => {
815 const Context = React.createContext(42);
816
817 function ReadInMemo(props) {
818 - let count = React.useMemo(() => readContext(Context), []);
818 + const count = React.useMemo(() => readContext(Context), []);
819 return <Text text={count} />;
820 }
821
822 function ReadInReducer(props) {
823 - let [count, dispatch] = React.useReducer(() => readContext(Context));
823 + const [count, dispatch] = React.useReducer(() => readContext(Context));
824 if (count !== 42) {
825 dispatch();
826 }
packages/react-dom/src/__tests__/ReactDOMServerIntegrationLegacyContextDisabled-test.internal.js
+3 -3
@@ -69,7 +69,7 @@ describe('ReactDOMServerIntegrationLegacyContextDisabled', () => {
69 }
70 }
71
72 - let lifecycleContextLog = [];
72 + const lifecycleContextLog = [];
73 class LegacyClsConsumer extends React.Component {
74 static contextTypes = {
75 foo() {},
@@ -113,7 +113,7 @@ describe('ReactDOMServerIntegrationLegacyContextDisabled', () => {
113 });
114
115 itRenders('modern context', async render => {
116 - let Ctx = React.createContext();
116 + const Ctx = React.createContext();
117
118 class Provider extends React.Component {
119 render() {
@@ -131,7 +131,7 @@ describe('ReactDOMServerIntegrationLegacyContextDisabled', () => {
131 }
132 }
133
134 - let lifecycleContextLog = [];
134 + const lifecycleContextLog = [];
135 class ContextTypeConsumer extends React.Component {
136 static contextType = Ctx;
137 shouldComponentUpdate(nextProps, nextState, nextContext) {
packages/react-dom/src/__tests__/ReactDOMServerIntegrationModes-test.js
+8 -8
@@ -41,20 +41,20 @@ describe('ReactDOMServerIntegration', () => {
41
42 describe('React.StrictMode', () => {
43 itRenders('a strict mode with one child', async render => {
44 - let e = await render(
44 + const e = await render(
45 <React.StrictMode>
46 <div>text1</div>
47 </React.StrictMode>,
48 );
49 - let parent = e.parentNode;
49 + const parent = e.parentNode;
50 expect(parent.childNodes[0].tagName).toBe('DIV');
51 });
52
53 itRenders('a strict mode with several children', async render => {
54 - let Header = props => {
54 + const Header = props => {
55 return <p>header</p>;
56 };
57 - let Footer = props => {
57 + const Footer = props => {
58 return (
59 <React.StrictMode>
60 <h2>footer</h2>
@@ -62,7 +62,7 @@ describe('ReactDOMServerIntegration', () => {
62 </React.StrictMode>
63 );
64 };
65 - let e = await render(
65 + const e = await render(
66 <React.StrictMode>
67 <div>text1</div>
68 <span>text2</span>
@@ -70,7 +70,7 @@ describe('ReactDOMServerIntegration', () => {
70 <Footer />
71 </React.StrictMode>,
72 );
73 - let parent = e.parentNode;
73 + const parent = e.parentNode;
74 expect(parent.childNodes[0].tagName).toBe('DIV');
75 expect(parent.childNodes[1].tagName).toBe('SPAN');
76 expect(parent.childNodes[2].tagName).toBe('P');
@@ -79,7 +79,7 @@ describe('ReactDOMServerIntegration', () => {
79 });
80
81 itRenders('a nested strict mode', async render => {
82 - let e = await render(
82 + const e = await render(
83 <React.StrictMode>
84 <React.StrictMode>
85 <div>text1</div>
@@ -96,7 +96,7 @@ describe('ReactDOMServerIntegration', () => {
96 </React.StrictMode>
97 </React.StrictMode>,
98 );
99 - let parent = e.parentNode;
99 + const parent = e.parentNode;
100 expect(parent.childNodes[0].tagName).toBe('DIV');
101 expect(parent.childNodes[1].tagName).toBe('SPAN');
102 expect(parent.childNodes[2].tagName).toBe('P');
packages/react-dom/src/__tests__/ReactDOMServerIntegrationNewContext-test.js
+3 -3
@@ -287,7 +287,7 @@ describe('ReactDOMServerIntegration', () => {
287 </Language.Consumer>
288 </div>
289 );
290 - let e = await render(<App />);
290 + const e = await render(<App />);
291 expect(e.querySelector('#theme1').textContent).toBe('dark');
292 expect(e.querySelector('#theme2').textContent).toBe('light');
293 expect(e.querySelector('#theme3').textContent).toBe('blue');
@@ -442,11 +442,11 @@ describe('ReactDOMServerIntegration', () => {
442 </CurrentIndex.Provider>
443 );
444
445 - let streams = [];
445 + const streams = [];
446
447 // Test with more than 32 streams to test that growing the thread count
448 // works properly.
449 - let streamCount = 34;
449 + const streamCount = 34;
450
451 for (let i = 0; i < streamCount; i++) {
452 streams[i] = ReactDOMServer.renderToNodeStream(
packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.internal.js
+3 -3
@@ -139,7 +139,7 @@ function runTests(itRenders, itRejectsRendering, expectToReject) {
139 );
140
141 it('rejects a javascript protocol href if it is added during an update', () => {
142 - let container = document.createElement('div');
142 + const container = document.createElement('div');
143 ReactDOM.render(<a href="thisisfine">click me</a>, container);
144 expectToReject(() => {
145 ReactDOM.render(<a href="javascript:notfine">click me</a>, container);
@@ -244,7 +244,7 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
244 }
245
246 let toStringCalls = 0;
247 - let firstIsSafe = {
247 + const firstIsSafe = {
248 toString() {
249 // This tries to avoid the validation by pretending to be safe
250 // the first times it is called and then becomes dangerous.
@@ -262,7 +262,7 @@ describe('ReactDOMServerIntegration - Untrusted URLs - disableJavaScriptURLs', (
262 });
263
264 it('rejects a javascript protocol href if it is added during an update twice', () => {
265 - let container = document.createElement('div');
265 + const container = document.createElement('div');
266 ReactDOM.render(<a href="thisisfine">click me</a>, container);
267 expectToReject(() => {
268 ReactDOM.render(<a href="javascript:notfine">click me</a>, container);
packages/react-dom/src/__tests__/ReactDOMServerPartialHydration-test.internal.js
+224 -220
@@ -96,8 +96,8 @@ describe('ReactDOMServerPartialHydration', () => {
96 it('hydrates a parent even if a child Suspense boundary is blocked', async () => {
97 let suspend = false;
98 let resolve;
99 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
100 - let ref = React.createRef();
99 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
100 + const ref = React.createRef();
101
102 function Child() {
103 if (suspend) {
@@ -123,17 +123,17 @@ describe('ReactDOMServerPartialHydration', () => {
123 // this may have suspense points on the server but here we want
124 // to test the completed HTML. Don't suspend on the server.
125 suspend = false;
126 - let finalHTML = ReactDOMServer.renderToString(<App />);
126 + const finalHTML = ReactDOMServer.renderToString(<App />);
127
128 - let container = document.createElement('div');
128 + const container = document.createElement('div');
129 container.innerHTML = finalHTML;
130
131 - let span = container.getElementsByTagName('span')[0];
131 + const span = container.getElementsByTagName('span')[0];
132
133 // On the client we don't have all data yet but we want to start
134 // hydrating anyway.
135 suspend = true;
136 - let root = ReactDOM.createRoot(container, {hydrate: true});
136 + const root = ReactDOM.createRoot(container, {hydrate: true});
137 root.render(<App />);
138 Scheduler.unstable_flushAll();
139 jest.runAllTimers();
@@ -154,7 +154,7 @@ describe('ReactDOMServerPartialHydration', () => {
154 it('calls the hydration callbacks after hydration or deletion', async () => {
155 let suspend = false;
156 let resolve;
157 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
157 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
158 function Child() {
159 if (suspend) {
160 throw promise;
@@ -164,7 +164,7 @@ describe('ReactDOMServerPartialHydration', () => {
164 }
165
166 let suspend2 = false;
167 - let promise2 = new Promise(() => {});
167 + const promise2 = new Promise(() => {});
168 function Child2() {
169 if (suspend2) {
170 throw promise2;
@@ -191,19 +191,19 @@ describe('ReactDOMServerPartialHydration', () => {
191 // to test the completed HTML. Don't suspend on the server.
192 suspend = false;
193 suspend2 = false;
194 - let finalHTML = ReactDOMServer.renderToString(<App />);
194 + const finalHTML = ReactDOMServer.renderToString(<App />);
195
196 - let container = document.createElement('div');
196 + const container = document.createElement('div');
197 container.innerHTML = finalHTML;
198
199 - let hydrated = [];
200 - let deleted = [];
199 + const hydrated = [];
200 + const deleted = [];
201
202 // On the client we don't have all data yet but we want to start
203 // hydrating anyway.
204 suspend = true;
205 suspend2 = true;
206 - let root = ReactDOM.createRoot(container, {
206 + const root = ReactDOM.createRoot(container, {
207 hydrate: true,
208 hydrationOptions: {
209 onHydrated(node) {
@@ -243,7 +243,7 @@ describe('ReactDOMServerPartialHydration', () => {
243
244 it('calls the onDeleted hydration callback if the parent gets deleted', async () => {
245 let suspend = false;
246 - let promise = new Promise(() => {});
246 + const promise = new Promise(() => {});
247 function Child() {
248 if (suspend) {
249 throw promise;
@@ -266,17 +266,17 @@ describe('ReactDOMServerPartialHydration', () => {
266 }
267
268 suspend = false;
269 - let finalHTML = ReactDOMServer.renderToString(<App />);
269 + const finalHTML = ReactDOMServer.renderToString(<App />);
270
271 - let container = document.createElement('div');
271 + const container = document.createElement('div');
272 container.innerHTML = finalHTML;
273
274 - let deleted = [];
274 + const deleted = [];
275
276 // On the client we don't have all data yet but we want to start
277 // hydrating anyway.
278 suspend = true;
279 - let root = ReactDOM.createRoot(container, {
279 + const root = ReactDOM.createRoot(container, {
280 hydrate: true,
281 hydrationOptions: {
282 onDeleted(node) {
@@ -301,8 +301,8 @@ describe('ReactDOMServerPartialHydration', () => {
301 it('warns and replaces the boundary content in legacy mode', async () => {
302 let suspend = false;
303 let resolve;
304 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
305 - let ref = React.createRef();
304 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
305 + const ref = React.createRef();
306
307 function Child() {
308 if (suspend) {
@@ -326,12 +326,12 @@ describe('ReactDOMServerPartialHydration', () => {
326
327 // Don't suspend on the server.
328 suspend = false;
329 - let finalHTML = ReactDOMServer.renderToString(<App />);
329 + const finalHTML = ReactDOMServer.renderToString(<App />);
330
331 - let container = document.createElement('div');
331 + const container = document.createElement('div');
332 container.innerHTML = finalHTML;
333
334 - let span = container.getElementsByTagName('span')[0];
334 + const span = container.getElementsByTagName('span')[0];
335
336 // On the client we try to hydrate.
337 suspend = true;
@@ -353,7 +353,7 @@ describe('ReactDOMServerPartialHydration', () => {
353 // We're now in loading state.
354 expect(container.textContent).toBe('Loading...');
355
356 - let span2 = container.getElementsByTagName('span')[0];
356 + const span2 = container.getElementsByTagName('span')[0];
357 // This is a new node.
358 expect(span).not.toBe(span2);
359 expect(ref.current).toBe(span2);
@@ -371,7 +371,7 @@ describe('ReactDOMServerPartialHydration', () => {
371
372 it('can insert siblings before the dehydrated boundary', () => {
373 let suspend = false;
374 - let promise = new Promise(() => {});
374 + const promise = new Promise(() => {});
375 let showSibling;
376
377 function Child() {
@@ -383,7 +383,7 @@ describe('ReactDOMServerPartialHydration', () => {
383 }
384
385 function Sibling() {
386 - let [visible, setVisibilty] = React.useState(false);
386 + const [visible, setVisibilty] = React.useState(false);
387 showSibling = () => setVisibilty(true);
388 if (visible) {
389 return <div>First</div>;
@@ -405,8 +405,8 @@ describe('ReactDOMServerPartialHydration', () => {
405 }
406
407 suspend = false;
408 - let finalHTML = ReactDOMServer.renderToString(<App />);
409 - let container = document.createElement('div');
408 + const finalHTML = ReactDOMServer.renderToString(<App />);
409 + const container = document.createElement('div');
410 container.innerHTML = finalHTML;
411
412 // On the client we don't have all data yet but we want to start
@@ -414,7 +414,7 @@ describe('ReactDOMServerPartialHydration', () => {
414 suspend = true;
415
416 act(() => {
417 - let root = ReactDOM.createRoot(container, {hydrate: true});
417 + const root = ReactDOM.createRoot(container, {hydrate: true});
418 root.render(<App />);
419 });
420
@@ -429,7 +429,7 @@ describe('ReactDOMServerPartialHydration', () => {
429
430 it('can delete the dehydrated boundary before it is hydrated', () => {
431 let suspend = false;
432 - let promise = new Promise(() => {});
432 + const promise = new Promise(() => {});
433 let hideMiddle;
434
435 function Child() {
@@ -446,7 +446,7 @@ describe('ReactDOMServerPartialHydration', () => {
446 }
447
448 function App() {
449 - let [visible, setVisibilty] = React.useState(true);
449 + const [visible, setVisibilty] = React.useState(true);
450 hideMiddle = () => setVisibilty(false);
451
452 return (
@@ -463,15 +463,15 @@ describe('ReactDOMServerPartialHydration', () => {
463 }
464
465 suspend = false;
466 - let finalHTML = ReactDOMServer.renderToString(<App />);
467 - let container = document.createElement('div');
466 + const finalHTML = ReactDOMServer.renderToString(<App />);
467 + const container = document.createElement('div');
468 container.innerHTML = finalHTML;
469
470 // On the client we don't have all data yet but we want to start
471 // hydrating anyway.
472 suspend = true;
473 act(() => {
474 - let root = ReactDOM.createRoot(container, {hydrate: true});
474 + const root = ReactDOM.createRoot(container, {hydrate: true});
475 root.render(<App />);
476 });
477
@@ -486,8 +486,8 @@ describe('ReactDOMServerPartialHydration', () => {
486 it('blocks updates to hydrate the content first if props have changed', async () => {
487 let suspend = false;
488 let resolve;
489 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
490 - let ref = React.createRef();
489 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
490 + const ref = React.createRef();
491
492 function Child({text}) {
493 if (suspend) {
@@ -510,18 +510,18 @@ describe('ReactDOMServerPartialHydration', () => {
510 }
511
512 suspend = false;
513 - let finalHTML = ReactDOMServer.renderToString(
513 + const finalHTML = ReactDOMServer.renderToString(
514 <App text="Hello" className="hello" />,
515 );
516 - let container = document.createElement('div');
516 + const container = document.createElement('div');
517 container.innerHTML = finalHTML;
518
519 - let span = container.getElementsByTagName('span')[0];
519 + const span = container.getElementsByTagName('span')[0];
520
521 // On the client we don't have all data yet but we want to start
522 // hydrating anyway.
523 suspend = true;
524 - let root = ReactDOM.createRoot(container, {hydrate: true});
524 + const root = ReactDOM.createRoot(container, {hydrate: true});
525 root.render(<App text="Hello" className="hello" />);
526 Scheduler.unstable_flushAll();
527 jest.runAllTimers();
@@ -543,7 +543,7 @@ describe('ReactDOMServerPartialHydration', () => {
543
544 // The new span should be the same since we should have successfully hydrated
545 // before changing it.
546 - let newSpan = container.getElementsByTagName('span')[0];
546 + const newSpan = container.getElementsByTagName('span')[0];
547 expect(span).toBe(newSpan);
548
549 // We should now have fully rendered with a ref on the new span.
@@ -557,8 +557,8 @@ describe('ReactDOMServerPartialHydration', () => {
557 it('shows the fallback if props have changed before hydration completes and is still suspended', async () => {
558 let suspend = false;
559 let resolve;
560 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
561 - let ref = React.createRef();
560 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
561 + const ref = React.createRef();
562
563 function Child({text}) {
564 if (suspend) {
@@ -581,16 +581,16 @@ describe('ReactDOMServerPartialHydration', () => {
581 }
582
583 suspend = false;
584 - let finalHTML = ReactDOMServer.renderToString(
584 + const finalHTML = ReactDOMServer.renderToString(
585 <App text="Hello" className="hello" />,
586 );
587 - let container = document.createElement('div');
587 + const container = document.createElement('div');
588 container.innerHTML = finalHTML;
589
590 // On the client we don't have all data yet but we want to start
591 // hydrating anyway.
592 suspend = true;
593 - let root = ReactDOM.createRoot(container, {hydrate: true});
593 + const root = ReactDOM.createRoot(container, {hydrate: true});
594 root.render(<App text="Hello" className="hello" />);
595 Scheduler.unstable_flushAll();
596 jest.runAllTimers();
@@ -616,7 +616,7 @@ describe('ReactDOMServerPartialHydration', () => {
616 Scheduler.unstable_flushAll();
617 jest.runAllTimers();
618
619 - let span = container.getElementsByTagName('span')[0];
619 + const span = container.getElementsByTagName('span')[0];
620 expect(span.textContent).toBe('Hi');
621 expect(span.className).toBe('hi');
622 expect(ref.current).toBe(span);
@@ -628,8 +628,8 @@ describe('ReactDOMServerPartialHydration', () => {
628 // This should be a noop.
629 let suspend = false;
630 let resolve;
631 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
632 - let ref = React.createRef();
631 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
632 + const ref = React.createRef();
633
634 function Child({text}) {
635 if (suspend) {
@@ -654,16 +654,16 @@ describe('ReactDOMServerPartialHydration', () => {
654 }
655
656 suspend = false;
657 - let finalHTML = ReactDOMServer.renderToString(
657 + const finalHTML = ReactDOMServer.renderToString(
658 <App text="Hello" className="hello" />,
659 );
660 - let container = document.createElement('div');
660 + const container = document.createElement('div');
661 container.innerHTML = finalHTML;
662
663 // On the client we don't have all data yet but we want to start
664 // hydrating anyway.
665 suspend = true;
666 - let root = ReactDOM.createRoot(container, {hydrate: true});
666 + const root = ReactDOM.createRoot(container, {hydrate: true});
667 root.render(<App text="Hello" className="hello" />);
668 Scheduler.unstable_flushAll();
669 jest.runAllTimers();
@@ -689,7 +689,7 @@ describe('ReactDOMServerPartialHydration', () => {
689 Scheduler.unstable_flushAll();
690 jest.runAllTimers();
691
692 - let span = container.getElementsByTagName('span')[0];
692 + const span = container.getElementsByTagName('span')[0];
693 expect(span.textContent).toBe('Hi');
694 expect(span.className).toBe('hi');
695 expect(ref.current).toBe(span);
@@ -699,8 +699,8 @@ describe('ReactDOMServerPartialHydration', () => {
699 it('clears nested suspense boundaries if they did not hydrate yet', async () => {
700 let suspend = false;
701 let resolve;
702 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
703 - let ref = React.createRef();
702 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
703 + const ref = React.createRef();
704
705 function Child({text}) {
706 if (suspend) {
@@ -726,16 +726,16 @@ describe('ReactDOMServerPartialHydration', () => {
726 }
727
728 suspend = false;
729 - let finalHTML = ReactDOMServer.renderToString(
729 + const finalHTML = ReactDOMServer.renderToString(
730 <App text="Hello" className="hello" />,
731 );
732 - let container = document.createElement('div');
732 + const container = document.createElement('div');
733 container.innerHTML = finalHTML;
734
735 // On the client we don't have all data yet but we want to start
736 // hydrating anyway.
737 suspend = true;
738 - let root = ReactDOM.createRoot(container, {hydrate: true});
738 + const root = ReactDOM.createRoot(container, {hydrate: true});
739 root.render(<App text="Hello" className="hello" />);
740 Scheduler.unstable_flushAll();
741 jest.runAllTimers();
@@ -761,7 +761,7 @@ describe('ReactDOMServerPartialHydration', () => {
761 Scheduler.unstable_flushAll();
762 jest.runAllTimers();
763
764 - let span = container.getElementsByTagName('span')[0];
764 + const span = container.getElementsByTagName('span')[0];
765 expect(span.textContent).toBe('Hi');
766 expect(span.className).toBe('hi');
767 expect(ref.current).toBe(span);
@@ -771,8 +771,8 @@ describe('ReactDOMServerPartialHydration', () => {
771 it('hydrates first if props changed but we are able to resolve within a timeout', async () => {
772 let suspend = false;
773 let resolve;
774 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
775 - let ref = React.createRef();
774 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
775 + const ref = React.createRef();
776
777 function Child({text}) {
778 if (suspend) {
@@ -795,18 +795,18 @@ describe('ReactDOMServerPartialHydration', () => {
795 }
796
797 suspend = false;
798 - let finalHTML = ReactDOMServer.renderToString(
798 + const finalHTML = ReactDOMServer.renderToString(
799 <App text="Hello" className="hello" />,
800 );
801 - let container = document.createElement('div');
801 + const container = document.createElement('div');
802 container.innerHTML = finalHTML;
803
804 - let span = container.getElementsByTagName('span')[0];
804 + const span = container.getElementsByTagName('span')[0];
805
806 // On the client we don't have all data yet but we want to start
807 // hydrating anyway.
808 suspend = true;
809 - let root = ReactDOM.createRoot(container, {hydrate: true});
809 + const root = ReactDOM.createRoot(container, {hydrate: true});
810 root.render(<App text="Hello" className="hello" />);
811 Scheduler.unstable_flushAll();
812 jest.runAllTimers();
@@ -837,7 +837,7 @@ describe('ReactDOMServerPartialHydration', () => {
837
838 // The new span should be the same since we should have successfully hydrated
839 // before changing it.
840 - let newSpan = container.getElementsByTagName('span')[0];
840 + const newSpan = container.getElementsByTagName('span')[0];
841 expect(span).toBe(newSpan);
842
843 // We should now have fully rendered with a ref on the new span.
@@ -851,12 +851,12 @@ describe('ReactDOMServerPartialHydration', () => {
851 it('blocks the update to hydrate first if context has changed', async () => {
852 let suspend = false;
853 let resolve;
854 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
855 - let ref = React.createRef();
856 - let Context = React.createContext(null);
854 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
855 + const ref = React.createRef();
856 + const Context = React.createContext(null);
857
858 function Child() {
859 - let {text, className} = React.useContext(Context);
859 + const {text, className} = React.useContext(Context);
860 if (suspend) {
861 throw promise;
862 } else {
@@ -879,20 +879,20 @@ describe('ReactDOMServerPartialHydration', () => {
879 });
880
881 suspend = false;
882 - let finalHTML = ReactDOMServer.renderToString(
882 + const finalHTML = ReactDOMServer.renderToString(
883 <Context.Provider value={{text: 'Hello', className: 'hello'}}>
884 <App />
885 </Context.Provider>,
886 );
887 - let container = document.createElement('div');
887 + const container = document.createElement('div');
888 container.innerHTML = finalHTML;
889
890 - let span = container.getElementsByTagName('span')[0];
890 + const span = container.getElementsByTagName('span')[0];
891
892 // On the client we don't have all data yet but we want to start
893 // hydrating anyway.
894 suspend = true;
895 - let root = ReactDOM.createRoot(container, {hydrate: true});
895 + const root = ReactDOM.createRoot(container, {hydrate: true});
896 root.render(
897 <Context.Provider value={{text: 'Hello', className: 'hello'}}>
898 <App />
@@ -921,7 +921,7 @@ describe('ReactDOMServerPartialHydration', () => {
921 jest.runAllTimers();
922
923 // Since this should have been hydrated, this should still be the same span.
924 - let newSpan = container.getElementsByTagName('span')[0];
924 + const newSpan = container.getElementsByTagName('span')[0];
925 expect(newSpan).toBe(span);
926
927 // We should now have fully rendered with a ref on the new span.
@@ -935,12 +935,12 @@ describe('ReactDOMServerPartialHydration', () => {
935 it('shows the fallback if context has changed before hydration completes and is still suspended', async () => {
936 let suspend = false;
937 let resolve;
938 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
939 - let ref = React.createRef();
940 - let Context = React.createContext(null);
938 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
939 + const ref = React.createRef();
940 + const Context = React.createContext(null);
941
942 function Child() {
943 - let {text, className} = React.useContext(Context);
943 + const {text, className} = React.useContext(Context);
944 if (suspend) {
945 throw promise;
946 } else {
@@ -963,18 +963,18 @@ describe('ReactDOMServerPartialHydration', () => {
963 });
964
965 suspend = false;
966 - let finalHTML = ReactDOMServer.renderToString(
966 + const finalHTML = ReactDOMServer.renderToString(
967 <Context.Provider value={{text: 'Hello', className: 'hello'}}>
968 <App />
969 </Context.Provider>,
970 );
971 - let container = document.createElement('div');
971 + const container = document.createElement('div');
972 container.innerHTML = finalHTML;
973
974 // On the client we don't have all data yet but we want to start
975 // hydrating anyway.
976 suspend = true;
977 - let root = ReactDOM.createRoot(container, {hydrate: true});
977 + const root = ReactDOM.createRoot(container, {hydrate: true});
978 root.render(
979 <Context.Provider value={{text: 'Hello', className: 'hello'}}>
980 <App />
@@ -1008,7 +1008,7 @@ describe('ReactDOMServerPartialHydration', () => {
1008 Scheduler.unstable_flushAll();
1009 jest.runAllTimers();
1010
1011 - let span = container.getElementsByTagName('span')[0];
1011 + const span = container.getElementsByTagName('span')[0];
1012 expect(span.textContent).toBe('Hi');
1013 expect(span.className).toBe('hi');
1014 expect(ref.current).toBe(span);
@@ -1017,8 +1017,8 @@ describe('ReactDOMServerPartialHydration', () => {
1017
1018 it('replaces the fallback with client content if it is not rendered by the server', async () => {
1019 let suspend = false;
1020 - let promise = new Promise(resolvePromise => {});
1021 - let ref = React.createRef();
1020 + const promise = new Promise(resolvePromise => {});
1021 + const ref = React.createRef();
1022
1023 function Child() {
1024 if (suspend) {
@@ -1044,29 +1044,29 @@ describe('ReactDOMServerPartialHydration', () => {
1044 // this may have suspense points on the server but here we want
1045 // to test the completed HTML. Don't suspend on the server.
1046 suspend = true;
1047 - let finalHTML = ReactDOMServer.renderToString(<App />);
1048 - let container = document.createElement('div');
1047 + const finalHTML = ReactDOMServer.renderToString(<App />);
1048 + const container = document.createElement('div');
1049 container.innerHTML = finalHTML;
1050
1051 expect(container.getElementsByTagName('span').length).toBe(0);
1052
1053 // On the client we have the data available quickly for some reason.
1054 suspend = false;
1055 - let root = ReactDOM.createRoot(container, {hydrate: true});
1055 + const root = ReactDOM.createRoot(container, {hydrate: true});
1056 root.render(<App />);
1057 Scheduler.unstable_flushAll();
1058 jest.runAllTimers();
1059
1060 expect(container.textContent).toBe('Hello');
1061
1062 - let span = container.getElementsByTagName('span')[0];
1062 + const span = container.getElementsByTagName('span')[0];
1063 expect(ref.current).toBe(span);
1064 });
1065
1066 it('replaces the fallback within the suspended time if there is a nested suspense', async () => {
1067 let suspend = false;
1068 - let promise = new Promise(resolvePromise => {});
1069 - let ref = React.createRef();
1068 + const promise = new Promise(resolvePromise => {});
1069 + const ref = React.createRef();
1070
1071 function Child() {
1072 if (suspend) {
@@ -1100,15 +1100,15 @@ describe('ReactDOMServerPartialHydration', () => {
1100 // this may have suspense points on the server but here we want
1101 // to test the completed HTML. Don't suspend on the server.
1102 suspend = true;
1103 - let finalHTML = ReactDOMServer.renderToString(<App />);
1104 - let container = document.createElement('div');
1103 + const finalHTML = ReactDOMServer.renderToString(<App />);
1104 + const container = document.createElement('div');
1105 container.innerHTML = finalHTML;
1106
1107 expect(container.getElementsByTagName('span').length).toBe(0);
1108
1109 // On the client we have the data available quickly for some reason.
1110 suspend = false;
1111 - let root = ReactDOM.createRoot(container, {hydrate: true});
1111 + const root = ReactDOM.createRoot(container, {hydrate: true});
1112 root.render(<App />);
1113 Scheduler.unstable_flushAll();
1114 // This will have exceeded the suspended time so we should timeout.
@@ -1118,14 +1118,14 @@ describe('ReactDOMServerPartialHydration', () => {
1118
1119 expect(container.textContent).toBe('Hello');
1120
1121 - let span = container.getElementsByTagName('span')[0];
1121 + const span = container.getElementsByTagName('span')[0];
1122 expect(ref.current).toBe(span);
1123 });
1124
1125 it('replaces the fallback within the suspended time if there is a nested suspense in a nested suspense', async () => {
1126 let suspend = false;
1127 - let promise = new Promise(resolvePromise => {});
1128 - let ref = React.createRef();
1127 + const promise = new Promise(resolvePromise => {});
1128 + const ref = React.createRef();
1129
1130 function Child() {
1131 if (suspend) {
@@ -1161,15 +1161,15 @@ describe('ReactDOMServerPartialHydration', () => {
1161 // this may have suspense points on the server but here we want
1162 // to test the completed HTML. Don't suspend on the server.
1163 suspend = true;
1164 - let finalHTML = ReactDOMServer.renderToString(<App />);
1165 - let container = document.createElement('div');
1164 + const finalHTML = ReactDOMServer.renderToString(<App />);
1165 + const container = document.createElement('div');
1166 container.innerHTML = finalHTML;
1167
1168 expect(container.getElementsByTagName('span').length).toBe(0);
1169
1170 // On the client we have the data available quickly for some reason.
1171 suspend = false;
1172 - let root = ReactDOM.createRoot(container, {hydrate: true});
1172 + const root = ReactDOM.createRoot(container, {hydrate: true});
1173 root.render(<App />);
1174 Scheduler.unstable_flushAll();
1175 // This will have exceeded the suspended time so we should timeout.
@@ -1179,14 +1179,14 @@ describe('ReactDOMServerPartialHydration', () => {
1179
1180 expect(container.textContent).toBe('Hello');
1181
1182 - let span = container.getElementsByTagName('span')[0];
1182 + const span = container.getElementsByTagName('span')[0];
1183 expect(ref.current).toBe(span);
1184 });
1185
1186 it('waits for pending content to come in from the server and then hydrates it', async () => {
1187 let suspend = false;
1188 - let promise = new Promise(resolvePromise => {});
1189 - let ref = React.createRef();
1188 + const promise = new Promise(resolvePromise => {});
1189 + const ref = React.createRef();
1190
1191 function Child() {
1192 if (suspend) {
@@ -1212,15 +1212,15 @@ describe('ReactDOMServerPartialHydration', () => {
1212
1213 // First we generate the HTML of the loading state.
1214 suspend = true;
1215 - let loadingHTML = ReactDOMServer.renderToString(<App />);
1215 + const loadingHTML = ReactDOMServer.renderToString(<App />);
1216 // Then we generate the HTML of the final content.
1217 suspend = false;
1218 - let finalHTML = ReactDOMServer.renderToString(<App />);
1218 + const finalHTML = ReactDOMServer.renderToString(<App />);
1219
1220 - let container = document.createElement('div');
1220 + const container = document.createElement('div');
1221 container.innerHTML = loadingHTML;
1222
1223 - let suspenseNode = container.firstChild.firstChild;
1223 + const suspenseNode = container.firstChild.firstChild;
1224 expect(suspenseNode.nodeType).toBe(8);
1225 // Put the suspense node in hydration state.
1226 suspenseNode.data = '$?';
@@ -1228,11 +1228,11 @@ describe('ReactDOMServerPartialHydration', () => {
1228 // This will simulates new content streaming into the document and
1229 // replacing the fallback with final content.
1230 function streamInContent() {
1231 - let temp = document.createElement('div');
1231 + const temp = document.createElement('div');
1232 temp.innerHTML = finalHTML;
1233 - let finalSuspenseNode = temp.firstChild.firstChild;
1234 - let fallbackContent = suspenseNode.nextSibling;
1235 - let finalContent = finalSuspenseNode.nextSibling;
1233 + const finalSuspenseNode = temp.firstChild.firstChild;
1234 + const fallbackContent = suspenseNode.nextSibling;
1235 + const finalContent = finalSuspenseNode.nextSibling;
1236 suspenseNode.parentNode.replaceChild(finalContent, fallbackContent);
1237 suspenseNode.data = '$';
1238 if (suspenseNode._reactRetry) {
@@ -1245,7 +1245,7 @@ describe('ReactDOMServerPartialHydration', () => {
1245
1246 // Attempt to hydrate the content.
1247 suspend = false;
1248 - let root = ReactDOM.createRoot(container, {hydrate: true});
1248 + const root = ReactDOM.createRoot(container, {hydrate: true});
1249 root.render(<App />);
1250 Scheduler.unstable_flushAll();
1251 jest.runAllTimers();
@@ -1258,7 +1258,7 @@ describe('ReactDOMServerPartialHydration', () => {
1258
1259 // The final HTML is now in place.
1260 expect(container.textContent).toBe('Hello');
1261 - let span = container.getElementsByTagName('span')[0];
1261 + const span = container.getElementsByTagName('span')[0];
1262
1263 // But it is not yet hydrated.
1264 expect(ref.current).toBe(null);
@@ -1272,8 +1272,8 @@ describe('ReactDOMServerPartialHydration', () => {
1272
1273 it('handles an error on the client if the server ends up erroring', async () => {
1274 let suspend = false;
1275 - let promise = new Promise(resolvePromise => {});
1276 - let ref = React.createRef();
1275 + const promise = new Promise(resolvePromise => {});
1276 + const ref = React.createRef();
1277
1278 function Child() {
1279 if (suspend) {
@@ -1314,12 +1314,12 @@ describe('ReactDOMServerPartialHydration', () => {
1314
1315 // First we generate the HTML of the loading state.
1316 suspend = true;
1317 - let loadingHTML = ReactDOMServer.renderToString(<App />);
1317 + const loadingHTML = ReactDOMServer.renderToString(<App />);
1318
1319 - let container = document.createElement('div');
1319 + const container = document.createElement('div');
1320 container.innerHTML = loadingHTML;
1321
1322 - let suspenseNode = container.firstChild.firstChild;
1322 + const suspenseNode = container.firstChild.firstChild;
1323 expect(suspenseNode.nodeType).toBe(8);
1324 // Put the suspense node in hydration state.
1325 suspenseNode.data = '$?';
@@ -1338,7 +1338,7 @@ describe('ReactDOMServerPartialHydration', () => {
1338
1339 // Attempt to hydrate the content.
1340 suspend = false;
1341 - let root = ReactDOM.createRoot(container, {hydrate: true});
1341 + const root = ReactDOM.createRoot(container, {hydrate: true});
1342 root.render(<App />);
1343 Scheduler.unstable_flushAll();
1344 jest.runAllTimers();
@@ -1360,15 +1360,15 @@ describe('ReactDOMServerPartialHydration', () => {
1360 // Hydrating should've generated an error and replaced the suspense boundary.
1361 expect(container.textContent).toBe('Error Message');
1362
1363 - let div = container.getElementsByTagName('div')[0];
1363 + const div = container.getElementsByTagName('div')[0];
1364 expect(ref.current).toBe(div);
1365 });
1366
1367 it('shows inserted items in a SuspenseList before content is hydrated', async () => {
1368 let suspend = false;
1369 let resolve;
1370 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
1371 - let ref = React.createRef();
1370 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
1371 + const ref = React.createRef();
1372
1373 function Child({children}) {
1374 if (suspend) {
@@ -1409,14 +1409,14 @@ describe('ReactDOMServerPartialHydration', () => {
1409 }
1410
1411 suspend = false;
1412 - let html = ReactDOMServer.renderToString(<App showMore={false} />);
1412 + const html = ReactDOMServer.renderToString(<App showMore={false} />);
1413
1414 - let container = document.createElement('div');
1414 + const container = document.createElement('div');
1415 container.innerHTML = html;
1416
1417 - let spanB = container.getElementsByTagName('span')[1];
1417 + const spanB = container.getElementsByTagName('span')[1];
1418
1419 - let root = ReactDOM.createRoot(container, {hydrate: true});
1419 + const root = ReactDOM.createRoot(container, {hydrate: true});
1420
1421 suspend = true;
1422 act(() => {
@@ -1452,8 +1452,8 @@ describe('ReactDOMServerPartialHydration', () => {
1452 it('shows is able to hydrate boundaries even if others in a list are pending', async () => {
1453 let suspend = false;
1454 let resolve;
1455 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
1456 - let ref = React.createRef();
1455 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
1456 + const ref = React.createRef();
1457
1458 function Child({children}) {
1459 if (suspend) {
@@ -1463,7 +1463,7 @@ describe('ReactDOMServerPartialHydration', () => {
1463 }
1464 }
1465
1466 - let promise2 = new Promise(() => {});
1466 + const promise2 = new Promise(() => {});
1467 function AlwaysSuspend() {
1468 throw promise2;
1469 }
@@ -1491,14 +1491,14 @@ describe('ReactDOMServerPartialHydration', () => {
1491 }
1492
1493 suspend = false;
1494 - let html = ReactDOMServer.renderToString(<App showMore={false} />);
1494 + const html = ReactDOMServer.renderToString(<App showMore={false} />);
1495
1496 - let container = document.createElement('div');
1496 + const container = document.createElement('div');
1497 container.innerHTML = html;
1498
1499 - let spanA = container.getElementsByTagName('span')[0];
1499 + const spanA = container.getElementsByTagName('span')[0];
1500
1501 - let root = ReactDOM.createRoot(container, {hydrate: true});
1501 + const root = ReactDOM.createRoot(container, {hydrate: true});
1502
1503 suspend = true;
1504 act(() => {
@@ -1526,8 +1526,8 @@ describe('ReactDOMServerPartialHydration', () => {
1526 it('shows inserted items before pending in a SuspenseList as fallbacks', async () => {
1527 let suspend = false;
1528 let resolve;
1529 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
1530 - let ref = React.createRef();
1529 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
1530 + const ref = React.createRef();
1531
1532 function Child({children}) {
1533 if (suspend) {
@@ -1568,17 +1568,17 @@ describe('ReactDOMServerPartialHydration', () => {
1568 }
1569
1570 suspend = false;
1571 - let html = ReactDOMServer.renderToString(<App showMore={false} />);
1571 + const html = ReactDOMServer.renderToString(<App showMore={false} />);
1572
1573 - let container = document.createElement('div');
1573 + const container = document.createElement('div');
1574 container.innerHTML = html;
1575
1576 - let suspenseNode = container.firstChild;
1576 + const suspenseNode = container.firstChild;
1577 expect(suspenseNode.nodeType).toBe(8);
1578 // Put the suspense node in pending state.
1579 suspenseNode.data = '$?';
1580
1581 - let root = ReactDOM.createRoot(container, {hydrate: true});
1581 + const root = ReactDOM.createRoot(container, {hydrate: true});
1582
1583 suspend = true;
1584 act(() => {
@@ -1616,8 +1616,8 @@ describe('ReactDOMServerPartialHydration', () => {
1616
1617 it('can client render nested boundaries', async () => {
1618 let suspend = false;
1619 - let promise = new Promise(() => {});
1620 - let ref = React.createRef();
1619 + const promise = new Promise(() => {});
1620 + const ref = React.createRef();
1621
1622 function Child() {
1623 if (suspend) {
@@ -1647,15 +1647,15 @@ describe('ReactDOMServerPartialHydration', () => {
1647 }
1648
1649 suspend = true;
1650 - let html = ReactDOMServer.renderToString(<App />);
1650 + const html = ReactDOMServer.renderToString(<App />);
1651
1652 - let container = document.createElement('div');
1652 + const container = document.createElement('div');
1653 container.innerHTML = html + '<!--unrelated comment-->';
1654
1655 - let span = container.getElementsByTagName('span')[1];
1655 + const span = container.getElementsByTagName('span')[1];
1656
1657 suspend = false;
1658 - let root = ReactDOM.createRoot(container, {hydrate: true});
1658 + const root = ReactDOM.createRoot(container, {hydrate: true});
1659 root.render(<App />);
1660 Scheduler.unstable_flushAll();
1661 jest.runAllTimers();
@@ -1669,8 +1669,8 @@ describe('ReactDOMServerPartialHydration', () => {
1669 });
1670
1671 it('can hydrate TWO suspense boundaries', async () => {
1672 - let ref1 = React.createRef();
1673 - let ref2 = React.createRef();
1672 + const ref1 = React.createRef();
1673 + const ref2 = React.createRef();
1674
1675 function App() {
1676 return (
@@ -1688,17 +1688,17 @@ describe('ReactDOMServerPartialHydration', () => {
1688 // First we render the final HTML. With the streaming renderer
1689 // this may have suspense points on the server but here we want
1690 // to test the completed HTML. Don't suspend on the server.
1691 - let finalHTML = ReactDOMServer.renderToString(<App />);
1691 + const finalHTML = ReactDOMServer.renderToString(<App />);
1692
1693 - let container = document.createElement('div');
1693 + const container = document.createElement('div');
1694 container.innerHTML = finalHTML;
1695
1696 - let span1 = container.getElementsByTagName('span')[0];
1697 - let span2 = container.getElementsByTagName('span')[1];
1696 + const span1 = container.getElementsByTagName('span')[0];
1697 + const span2 = container.getElementsByTagName('span')[1];
1698
1699 // On the client we don't have all data yet but we want to start
1700 // hydrating anyway.
1701 - let root = ReactDOM.createRoot(container, {hydrate: true});
1701 + const root = ReactDOM.createRoot(container, {hydrate: true});
1702 root.render(<App />);
1703 Scheduler.unstable_flushAll();
1704 jest.runAllTimers();
@@ -1709,12 +1709,12 @@ describe('ReactDOMServerPartialHydration', () => {
1709
1710 it('regenerates if it cannot hydrate before changes to props/context expire', async () => {
1711 let suspend = false;
1712 - let promise = new Promise(resolvePromise => {});
1713 - let ref = React.createRef();
1714 - let ClassName = React.createContext(null);
1712 + const promise = new Promise(resolvePromise => {});
1713 + const ref = React.createRef();
1714 + const ClassName = React.createContext(null);
1715
1716 function Child({text}) {
1717 - let className = React.useContext(ClassName);
1717 + const className = React.useContext(ClassName);
1718 if (suspend && className !== 'hi' && text !== 'Hi') {
1719 // Never suspends on the newer data.
1720 throw promise;
@@ -1738,20 +1738,20 @@ describe('ReactDOMServerPartialHydration', () => {
1738 }
1739
1740 suspend = false;
1741 - let finalHTML = ReactDOMServer.renderToString(
1741 + const finalHTML = ReactDOMServer.renderToString(
1742 <ClassName.Provider value={'hello'}>
1743 <App text="Hello" />
1744 </ClassName.Provider>,
1745 );
1746 - let container = document.createElement('div');
1746 + const container = document.createElement('div');
1747 container.innerHTML = finalHTML;
1748
1749 - let span = container.getElementsByTagName('span')[0];
1749 + const span = container.getElementsByTagName('span')[0];
1750
1751 // On the client we don't have all data yet but we want to start
1752 // hydrating anyway.
1753 suspend = true;
1754 - let root = ReactDOM.createRoot(container, {hydrate: true});
1754 + const root = ReactDOM.createRoot(container, {hydrate: true});
1755 root.render(
1756 <ClassName.Provider value={'hello'}>
1757 <App text="Hello" />
@@ -1777,7 +1777,7 @@ describe('ReactDOMServerPartialHydration', () => {
1777 jest.runAllTimers();
1778
1779 // This will now be a new span because we weren't able to hydrate before
1780 - let newSpan = container.getElementsByTagName('span')[0];
1780 + const newSpan = container.getElementsByTagName('span')[0];
1781 expect(newSpan).not.toBe(span);
1782
1783 // We should now have fully rendered with a ref on the new span.
@@ -1791,7 +1791,7 @@ describe('ReactDOMServerPartialHydration', () => {
1791 it('does not invoke an event on a hydrated node until it commits', async () => {
1792 let suspend = false;
1793 let resolve;
1794 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
1794 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
1795
1796 function Sibling({text}) {
1797 if (suspend) {
@@ -1804,7 +1804,7 @@ describe('ReactDOMServerPartialHydration', () => {
1804 let clicks = 0;
1805
1806 function Button() {
1807 - let [clicked, setClicked] = React.useState(false);
1807 + const [clicked, setClicked] = React.useState(false);
1808 if (clicked) {
1809 return null;
1810 }
@@ -1831,19 +1831,19 @@ describe('ReactDOMServerPartialHydration', () => {
1831 }
1832
1833 suspend = false;
1834 - let finalHTML = ReactDOMServer.renderToString(<App />);
1835 - let container = document.createElement('div');
1834 + const finalHTML = ReactDOMServer.renderToString(<App />);
1835 + const container = document.createElement('div');
1836 container.innerHTML = finalHTML;
1837
1838 // We need this to be in the document since we'll dispatch events on it.
1839 document.body.appendChild(container);
1840
1841 - let a = container.getElementsByTagName('a')[0];
1841 + const a = container.getElementsByTagName('a')[0];
1842
1843 // On the client we don't have all data yet but we want to start
1844 // hydrating anyway.
1845 suspend = true;
1846 - let root = ReactDOM.createRoot(container, {hydrate: true});
1846 + const root = ReactDOM.createRoot(container, {hydrate: true});
1847 root.render(<App />);
1848 Scheduler.unstable_flushAll();
1849 jest.runAllTimers();
@@ -1872,7 +1872,7 @@ describe('ReactDOMServerPartialHydration', () => {
1872 it('does not invoke an event on a hydrated EventResponder until it commits', async () => {
1873 let suspend = false;
1874 let resolve;
1875 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
1875 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
1876
1877 function Sibling({text}) {
1878 if (suspend) {
@@ -1892,7 +1892,7 @@ describe('ReactDOMServerPartialHydration', () => {
1892 );
1893
1894 function Button() {
1895 - let listener = React.DEPRECATED_useResponder(TestResponder, {});
1895 + const listener = React.DEPRECATED_useResponder(TestResponder, {});
1896 return <a DEPRECATED_flareListeners={listener}>Click me</a>;
1897 }
1898
@@ -1908,19 +1908,19 @@ describe('ReactDOMServerPartialHydration', () => {
1908 }
1909
1910 suspend = false;
1911 - let finalHTML = ReactDOMServer.renderToString(<App />);
1912 - let container = document.createElement('div');
1911 + const finalHTML = ReactDOMServer.renderToString(<App />);
1912 + const container = document.createElement('div');
1913 container.innerHTML = finalHTML;
1914
1915 // We need this to be in the document since we'll dispatch events on it.
1916 document.body.appendChild(container);
1917
1918 - let a = container.getElementsByTagName('a')[0];
1918 + const a = container.getElementsByTagName('a')[0];
1919
1920 // On the client we don't have all data yet but we want to start
1921 // hydrating anyway.
1922 suspend = true;
1923 - let root = ReactDOM.createRoot(container, {hydrate: true});
1923 + const root = ReactDOM.createRoot(container, {hydrate: true});
1924 root.render(<App />);
1925
1926 // We'll do one click before hydrating.
@@ -1953,7 +1953,7 @@ describe('ReactDOMServerPartialHydration', () => {
1953 it('invokes discrete events on nested suspense boundaries in a root (legacy system)', async () => {
1954 let suspend = false;
1955 let resolve;
1956 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
1956 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
1957
1958 let clicks = 0;
1959
@@ -1989,19 +1989,19 @@ describe('ReactDOMServerPartialHydration', () => {
1989 }
1990
1991 suspend = false;
1992 - let finalHTML = ReactDOMServer.renderToString(<App />);
1993 - let container = document.createElement('div');
1992 + const finalHTML = ReactDOMServer.renderToString(<App />);
1993 + const container = document.createElement('div');
1994 container.innerHTML = finalHTML;
1995
1996 // We need this to be in the document since we'll dispatch events on it.
1997 document.body.appendChild(container);
1998
1999 - let a = container.getElementsByTagName('a')[0];
1999 + const a = container.getElementsByTagName('a')[0];
2000
2001 // On the client we don't have all data yet but we want to start
2002 // hydrating anyway.
2003 suspend = true;
2004 - let root = ReactDOM.createRoot(container, {hydrate: true});
2004 + const root = ReactDOM.createRoot(container, {hydrate: true});
2005 root.render(<App />);
2006
2007 // We'll do one click before hydrating.
@@ -2032,7 +2032,7 @@ describe('ReactDOMServerPartialHydration', () => {
2032 it('invokes discrete events on nested suspense boundaries in a root (responder system)', async () => {
2033 let suspend = false;
2034 let resolve;
2035 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
2035 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
2036
2037 const onEvent = jest.fn();
2038 const TestResponder = React.DEPRECATED_createResponder(
@@ -2044,7 +2044,7 @@ describe('ReactDOMServerPartialHydration', () => {
2044 );
2045
2046 function Button() {
2047 - let listener = React.DEPRECATED_useResponder(TestResponder, {});
2047 + const listener = React.DEPRECATED_useResponder(TestResponder, {});
2048 return <a DEPRECATED_flareListeners={listener}>Click me</a>;
2049 }
2050
@@ -2069,19 +2069,19 @@ describe('ReactDOMServerPartialHydration', () => {
2069 }
2070
2071 suspend = false;
2072 - let finalHTML = ReactDOMServer.renderToString(<App />);
2073 - let container = document.createElement('div');
2072 + const finalHTML = ReactDOMServer.renderToString(<App />);
2073 + const container = document.createElement('div');
2074 container.innerHTML = finalHTML;
2075
2076 // We need this to be in the document since we'll dispatch events on it.
2077 document.body.appendChild(container);
2078
2079 - let a = container.getElementsByTagName('a')[0];
2079 + const a = container.getElementsByTagName('a')[0];
2080
2081 // On the client we don't have all data yet but we want to start
2082 // hydrating anyway.
2083 suspend = true;
2084 - let root = ReactDOM.createRoot(container, {hydrate: true});
2084 + const root = ReactDOM.createRoot(container, {hydrate: true});
2085 root.render(<App />);
2086
2087 // We'll do one click before hydrating.
@@ -2114,7 +2114,7 @@ describe('ReactDOMServerPartialHydration', () => {
2114 it('does not invoke the parent of dehydrated boundary event', async () => {
2115 let suspend = false;
2116 let resolve;
2117 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
2117 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
2118
2119 let clicksOnParent = 0;
2120 let clicksOnChild = 0;
@@ -2148,19 +2148,19 @@ describe('ReactDOMServerPartialHydration', () => {
2148 }
2149
2150 suspend = false;
2151 - let finalHTML = ReactDOMServer.renderToString(<App />);
2152 - let container = document.createElement('div');
2151 + const finalHTML = ReactDOMServer.renderToString(<App />);
2152 + const container = document.createElement('div');
2153 container.innerHTML = finalHTML;
2154
2155 // We need this to be in the document since we'll dispatch events on it.
2156 document.body.appendChild(container);
2157
2158 - let span = container.getElementsByTagName('span')[0];
2158 + const span = container.getElementsByTagName('span')[0];
2159
2160 // On the client we don't have all data yet but we want to start
2161 // hydrating anyway.
2162 suspend = true;
2163 - let root = ReactDOM.createRoot(container, {hydrate: true});
2163 + const root = ReactDOM.createRoot(container, {hydrate: true});
2164 root.render(<App />);
2165 Scheduler.unstable_flushAll();
2166 jest.runAllTimers();
@@ -2188,10 +2188,10 @@ describe('ReactDOMServerPartialHydration', () => {
2188 it('does not invoke an event on a parent tree when a subtree is dehydrated', async () => {
2189 let suspend = false;
2190 let resolve;
2191 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
2191 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
2192
2193 let clicks = 0;
2194 - let childSlotRef = React.createRef();
2194 + const childSlotRef = React.createRef();
2195
2196 function Parent() {
2197 return <div onClick={() => clicks++} ref={childSlotRef} />;
@@ -2215,17 +2215,17 @@ describe('ReactDOMServerPartialHydration', () => {
2215 }
2216
2217 suspend = false;
2218 - let finalHTML = ReactDOMServer.renderToString(<App />);
2218 + const finalHTML = ReactDOMServer.renderToString(<App />);
2219
2220 - let parentContainer = document.createElement('div');
2221 - let childContainer = document.createElement('div');
2220 + const parentContainer = document.createElement('div');
2221 + const childContainer = document.createElement('div');
2222
2223 // We need this to be in the document since we'll dispatch events on it.
2224 document.body.appendChild(parentContainer);
2225
2226 // We're going to use a different root as a parent.
2227 // This lets us detect whether an event goes through React's event system.
2228 - let parentRoot = ReactDOM.createRoot(parentContainer);
2228 + const parentRoot = ReactDOM.createRoot(parentContainer);
2229 parentRoot.render(<Parent />);
2230 Scheduler.unstable_flushAll();
2231
@@ -2233,12 +2233,12 @@ describe('ReactDOMServerPartialHydration', () => {
2233
2234 childContainer.innerHTML = finalHTML;
2235
2236 - let a = childContainer.getElementsByTagName('a')[0];
2236 + const a = childContainer.getElementsByTagName('a')[0];
2237
2238 suspend = true;
2239
2240 // Hydrate asynchronously.
2241 - let root = ReactDOM.createRoot(childContainer, {hydrate: true});
2241 + const root = ReactDOM.createRoot(childContainer, {hydrate: true});
2242 root.render(<App />);
2243 jest.runAllTimers();
2244 Scheduler.unstable_flushAll();
@@ -2265,10 +2265,10 @@ describe('ReactDOMServerPartialHydration', () => {
2265 it('blocks only on the last continuous event (legacy system)', async () => {
2266 let suspend1 = false;
2267 let resolve1;
2268 - let promise1 = new Promise(resolvePromise => (resolve1 = resolvePromise));
2268 + const promise1 = new Promise(resolvePromise => (resolve1 = resolvePromise));
2269 let suspend2 = false;
2270 let resolve2;
2271 - let promise2 = new Promise(resolvePromise => (resolve2 = resolvePromise));
2271 + const promise2 = new Promise(resolvePromise => (resolve2 = resolvePromise));
2272
2273 function First({text}) {
2274 if (suspend1) {
@@ -2286,7 +2286,7 @@ describe('ReactDOMServerPartialHydration', () => {
2286 }
2287 }
2288
2289 - let ops = [];
2289 + const ops = [];
2290
2291 function App() {
2292 return (
@@ -2311,16 +2311,16 @@ describe('ReactDOMServerPartialHydration', () => {
2311 );
2312 }
2313
2314 - let finalHTML = ReactDOMServer.renderToString(<App />);
2315 - let container = document.createElement('div');
2314 + const finalHTML = ReactDOMServer.renderToString(<App />);
2315 + const container = document.createElement('div');
2316 container.innerHTML = finalHTML;
2317
2318 // We need this to be in the document since we'll dispatch events on it.
2319 document.body.appendChild(container);
2320
2321 - let appDiv = container.getElementsByTagName('div')[0];
2322 - let firstSpan = appDiv.getElementsByTagName('span')[0];
2323 - let secondSpan = appDiv.getElementsByTagName('span')[1];
2321 + const appDiv = container.getElementsByTagName('div')[0];
2322 + const firstSpan = appDiv.getElementsByTagName('span')[0];
2323 + const secondSpan = appDiv.getElementsByTagName('span')[1];
2324 expect(firstSpan.textContent).toBe('');
2325 expect(secondSpan.textContent).toBe('World');
2326
@@ -2328,7 +2328,7 @@ describe('ReactDOMServerPartialHydration', () => {
2328 // hydrating anyway.
2329 suspend1 = true;
2330 suspend2 = true;
2331 - let root = ReactDOM.createRoot(container, {hydrate: true});
2331 + const root = ReactDOM.createRoot(container, {hydrate: true});
2332 root.render(<App />);
2333
2334 Scheduler.unstable_flushAll();
@@ -2372,10 +2372,14 @@ describe('ReactDOMServerPartialHydration', () => {
2372
2373 let suspend1 = false;
2374 let resolve1;
2375 - let promise1 = new Promise(resolvePromise => (resolve1 = resolvePromise));
2375 + const promise1 = new Promise(
2376 + resolvePromise => (resolve1 = resolvePromise),
2377 + );
2378 let suspend2 = false;
2379 let resolve2;
2378 - let promise2 = new Promise(resolvePromise => (resolve2 = resolvePromise));
2380 + const promise2 = new Promise(
2381 + resolvePromise => (resolve2 = resolvePromise),
2382 + );
2383
2384 function First({text}) {
2385 if (suspend1) {
@@ -2393,7 +2397,7 @@ describe('ReactDOMServerPartialHydration', () => {
2397 }
2398 }
2399
2396 - let ops = [];
2400 + const ops = [];
2401
2402 function App() {
2403 const listener1 = useHover({
@@ -2429,16 +2433,16 @@ describe('ReactDOMServerPartialHydration', () => {
2433 );
2434 }
2435
2432 - let finalHTML = ReactDOMServer.renderToString(<App />);
2433 - let container = document.createElement('div');
2436 + const finalHTML = ReactDOMServer.renderToString(<App />);
2437 + const container = document.createElement('div');
2438 container.innerHTML = finalHTML;
2439
2440 // We need this to be in the document since we'll dispatch events on it.
2441 document.body.appendChild(container);
2442
2439 - let appDiv = container.getElementsByTagName('div')[0];
2440 - let firstSpan = appDiv.getElementsByTagName('span')[0];
2441 - let secondSpan = appDiv.getElementsByTagName('span')[1];
2443 + const appDiv = container.getElementsByTagName('div')[0];
2444 + const firstSpan = appDiv.getElementsByTagName('span')[0];
2445 + const secondSpan = appDiv.getElementsByTagName('span')[1];
2446 expect(firstSpan.textContent).toBe('');
2447 expect(secondSpan.textContent).toBe('World');
2448
@@ -2446,7 +2450,7 @@ describe('ReactDOMServerPartialHydration', () => {
2450 // hydrating anyway.
2451 suspend1 = true;
2452 suspend2 = true;
2449 - let root = ReactDOM.createRoot(container, {hydrate: true});
2453 + const root = ReactDOM.createRoot(container, {hydrate: true});
2454 root.render(<App />);
2455
2456 Scheduler.unstable_flushAll();
@@ -2488,8 +2492,8 @@ describe('ReactDOMServerPartialHydration', () => {
2492 it('finishes normal pri work before continuing to hydrate a retry', async () => {
2493 let suspend = false;
2494 let resolve;
2491 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
2492 - let ref = React.createRef();
2495 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
2496 + const ref = React.createRef();
2497
2498 function Child() {
2499 if (suspend) {
@@ -2527,14 +2531,14 @@ describe('ReactDOMServerPartialHydration', () => {
2531 }
2532
2533 suspend = false;
2530 - let finalHTML = ReactDOMServer.renderToString(<App />);
2534 + const finalHTML = ReactDOMServer.renderToString(<App />);
2535 expect(Scheduler).toHaveYielded(['Child']);
2536
2533 - let container = document.createElement('div');
2537 + const container = document.createElement('div');
2538 container.innerHTML = finalHTML;
2539
2540 suspend = true;
2537 - let root = ReactDOM.createRoot(container, {hydrate: true});
2541 + const root = ReactDOM.createRoot(container, {hydrate: true});
2542 root.render(<App showSibling={false} />);
2543 expect(Scheduler).toFlushAndYield([]);
2544
packages/react-dom/src/__tests__/ReactDOMServerSelectiveHydration-test.internal.js
+68 -68
@@ -95,7 +95,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
95 beforeEach(() => {
96 jest.resetModuleRegistry();
97
98 - let ReactFeatureFlags = require('shared/ReactFeatureFlags');
98 + const ReactFeatureFlags = require('shared/ReactFeatureFlags');
99 ReactFeatureFlags.enableDeprecatedFlareAPI = true;
100 ReactFeatureFlags.debugRenderPhaseSideEffectsForStrictMode = false;
101
@@ -140,19 +140,19 @@ describe('ReactDOMServerSelectiveHydration', () => {
140 );
141 }
142
143 - let finalHTML = ReactDOMServer.renderToString(<App />);
143 + const finalHTML = ReactDOMServer.renderToString(<App />);
144
145 expect(Scheduler).toHaveYielded(['App', 'A', 'B']);
146
147 - let container = document.createElement('div');
147 + const container = document.createElement('div');
148 // We need this to be in the document since we'll dispatch events on it.
149 document.body.appendChild(container);
150
151 container.innerHTML = finalHTML;
152
153 - let span = container.getElementsByTagName('span')[1];
153 + const span = container.getElementsByTagName('span')[1];
154
155 - let root = ReactDOM.createRoot(container, {hydrate: true});
155 + const root = ReactDOM.createRoot(container, {hydrate: true});
156 root.render(<App />);
157
158 // Nothing has been hydrated so far.
@@ -160,7 +160,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
160
161 // This should synchronously hydrate the root App and the second suspense
162 // boundary.
163 - let result = dispatchClickEvent(span);
163 + const result = dispatchClickEvent(span);
164
165 // The event should have been canceled because we called preventDefault.
166 expect(result).toBe(false);
@@ -177,7 +177,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
177 it('hydrates at higher pri if sync did not work first time', async () => {
178 let suspend = false;
179 let resolve;
180 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
180 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
181
182 function Child({text}) {
183 if ((text === 'A' || text === 'D') && suspend) {
@@ -215,30 +215,30 @@ describe('ReactDOMServerSelectiveHydration', () => {
215 );
216 }
217
218 - let finalHTML = ReactDOMServer.renderToString(<App />);
218 + const finalHTML = ReactDOMServer.renderToString(<App />);
219
220 expect(Scheduler).toHaveYielded(['App', 'A', 'B', 'C', 'D']);
221
222 - let container = document.createElement('div');
222 + const container = document.createElement('div');
223 // We need this to be in the document since we'll dispatch events on it.
224 document.body.appendChild(container);
225
226 container.innerHTML = finalHTML;
227
228 - let spanD = container.getElementsByTagName('span')[3];
228 + const spanD = container.getElementsByTagName('span')[3];
229
230 suspend = true;
231
232 // A and D will be suspended. We'll click on D which should take
233 // priority, after we unsuspend.
234 - let root = ReactDOM.createRoot(container, {hydrate: true});
234 + const root = ReactDOM.createRoot(container, {hydrate: true});
235 root.render(<App />);
236
237 // Nothing has been hydrated so far.
238 expect(Scheduler).toHaveYielded([]);
239
240 // This click target cannot be hydrated yet because it's suspended.
241 - let result = dispatchClickEvent(spanD);
241 + const result = dispatchClickEvent(spanD);
242
243 expect(Scheduler).toHaveYielded(['App']);
244
@@ -261,7 +261,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
261 it('hydrates at higher pri for secondary discrete events', async () => {
262 let suspend = false;
263 let resolve;
264 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
264 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
265
266 function Child({text}) {
267 if ((text === 'A' || text === 'D') && suspend) {
@@ -299,25 +299,25 @@ describe('ReactDOMServerSelectiveHydration', () => {
299 );
300 }
301
302 - let finalHTML = ReactDOMServer.renderToString(<App />);
302 + const finalHTML = ReactDOMServer.renderToString(<App />);
303
304 expect(Scheduler).toHaveYielded(['App', 'A', 'B', 'C', 'D']);
305
306 - let container = document.createElement('div');
306 + const container = document.createElement('div');
307 // We need this to be in the document since we'll dispatch events on it.
308 document.body.appendChild(container);
309
310 container.innerHTML = finalHTML;
311
312 - let spanA = container.getElementsByTagName('span')[0];
313 - let spanC = container.getElementsByTagName('span')[2];
314 - let spanD = container.getElementsByTagName('span')[3];
312 + const spanA = container.getElementsByTagName('span')[0];
313 + const spanC = container.getElementsByTagName('span')[2];
314 + const spanD = container.getElementsByTagName('span')[3];
315
316 suspend = true;
317
318 // A and D will be suspended. We'll click on D which should take
319 // priority, after we unsuspend.
320 - let root = ReactDOM.createRoot(container, {hydrate: true});
320 + const root = ReactDOM.createRoot(container, {hydrate: true});
321 root.render(<App />);
322
323 // Nothing has been hydrated so far.
@@ -352,7 +352,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
352
353 if (__EXPERIMENTAL__) {
354 it('hydrates the target boundary synchronously during a click (flare)', async () => {
355 - let usePress = require('react-interactions/events/press').usePress;
355 + const usePress = require('react-interactions/events/press').usePress;
356
357 function Child({text}) {
358 Scheduler.unstable_yieldValue(text);
@@ -379,29 +379,29 @@ describe('ReactDOMServerSelectiveHydration', () => {
379 );
380 }
381
382 - let finalHTML = ReactDOMServer.renderToString(<App />);
382 + const finalHTML = ReactDOMServer.renderToString(<App />);
383
384 expect(Scheduler).toHaveYielded(['App', 'A', 'B']);
385
386 - let container = document.createElement('div');
386 + const container = document.createElement('div');
387 // We need this to be in the document since we'll dispatch events on it.
388 document.body.appendChild(container);
389
390 container.innerHTML = finalHTML;
391
392 - let root = ReactDOM.createRoot(container, {hydrate: true});
392 + const root = ReactDOM.createRoot(container, {hydrate: true});
393 root.render(<App />);
394
395 // Nothing has been hydrated so far.
396 expect(Scheduler).toHaveYielded([]);
397
398 - let span = container.getElementsByTagName('span')[1];
398 + const span = container.getElementsByTagName('span')[1];
399
400 - let target = createEventTarget(span);
400 + const target = createEventTarget(span);
401
402 // This should synchronously hydrate the root App and the second suspense
403 // boundary.
404 - let preventDefault = jest.fn();
404 + const preventDefault = jest.fn();
405 target.virtualclick({preventDefault});
406
407 // The event should have been canceled because we called preventDefault.
@@ -417,10 +417,10 @@ describe('ReactDOMServerSelectiveHydration', () => {
417 });
418
419 it('hydrates at higher pri if sync did not work first time (flare)', async () => {
420 - let usePress = require('react-interactions/events/press').usePress;
420 + const usePress = require('react-interactions/events/press').usePress;
421 let suspend = false;
422 let resolve;
423 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
423 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
424
425 function Child({text}) {
426 if ((text === 'A' || text === 'D') && suspend) {
@@ -456,30 +456,30 @@ describe('ReactDOMServerSelectiveHydration', () => {
456 );
457 }
458
459 - let finalHTML = ReactDOMServer.renderToString(<App />);
459 + const finalHTML = ReactDOMServer.renderToString(<App />);
460
461 expect(Scheduler).toHaveYielded(['App', 'A', 'B', 'C', 'D']);
462
463 - let container = document.createElement('div');
463 + const container = document.createElement('div');
464 // We need this to be in the document since we'll dispatch events on it.
465 document.body.appendChild(container);
466
467 container.innerHTML = finalHTML;
468
469 - let spanD = container.getElementsByTagName('span')[3];
469 + const spanD = container.getElementsByTagName('span')[3];
470
471 suspend = true;
472
473 // A and D will be suspended. We'll click on D which should take
474 // priority, after we unsuspend.
475 - let root = ReactDOM.createRoot(container, {hydrate: true});
475 + const root = ReactDOM.createRoot(container, {hydrate: true});
476 root.render(<App />);
477
478 // Nothing has been hydrated so far.
479 expect(Scheduler).toHaveYielded([]);
480
481 // This click target cannot be hydrated yet because it's suspended.
482 - let result = dispatchClickEvent(spanD);
482 + const result = dispatchClickEvent(spanD);
483
484 expect(Scheduler).toHaveYielded(['App']);
485
@@ -500,10 +500,10 @@ describe('ReactDOMServerSelectiveHydration', () => {
500 });
501
502 it('hydrates at higher pri for secondary discrete events (flare)', async () => {
503 - let usePress = require('react-interactions/events/press').usePress;
503 + const usePress = require('react-interactions/events/press').usePress;
504 let suspend = false;
505 let resolve;
506 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
506 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
507
508 function Child({text}) {
509 if ((text === 'A' || text === 'D') && suspend) {
@@ -539,25 +539,25 @@ describe('ReactDOMServerSelectiveHydration', () => {
539 );
540 }
541
542 - let finalHTML = ReactDOMServer.renderToString(<App />);
542 + const finalHTML = ReactDOMServer.renderToString(<App />);
543
544 expect(Scheduler).toHaveYielded(['App', 'A', 'B', 'C', 'D']);
545
546 - let container = document.createElement('div');
546 + const container = document.createElement('div');
547 // We need this to be in the document since we'll dispatch events on it.
548 document.body.appendChild(container);
549
550 container.innerHTML = finalHTML;
551
552 - let spanA = container.getElementsByTagName('span')[0];
553 - let spanC = container.getElementsByTagName('span')[2];
554 - let spanD = container.getElementsByTagName('span')[3];
552 + const spanA = container.getElementsByTagName('span')[0];
553 + const spanC = container.getElementsByTagName('span')[2];
554 + const spanD = container.getElementsByTagName('span')[3];
555
556 suspend = true;
557
558 // A and D will be suspended. We'll click on D which should take
559 // priority, after we unsuspend.
560 - let root = ReactDOM.createRoot(container, {hydrate: true});
560 + const root = ReactDOM.createRoot(container, {hydrate: true});
561 root.render(<App />);
562
563 // Nothing has been hydrated so far.
@@ -594,7 +594,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
594 it('hydrates the hovered targets as higher priority for continuous events', async () => {
595 let suspend = false;
596 let resolve;
597 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
597 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
598
599 function Child({text}) {
600 if ((text === 'A' || text === 'D') && suspend) {
@@ -636,25 +636,25 @@ describe('ReactDOMServerSelectiveHydration', () => {
636 );
637 }
638
639 - let finalHTML = ReactDOMServer.renderToString(<App />);
639 + const finalHTML = ReactDOMServer.renderToString(<App />);
640
641 expect(Scheduler).toHaveYielded(['App', 'A', 'B', 'C', 'D']);
642
643 - let container = document.createElement('div');
643 + const container = document.createElement('div');
644 // We need this to be in the document since we'll dispatch events on it.
645 document.body.appendChild(container);
646
647 container.innerHTML = finalHTML;
648
649 - let spanB = container.getElementsByTagName('span')[1];
650 - let spanC = container.getElementsByTagName('span')[2];
651 - let spanD = container.getElementsByTagName('span')[3];
649 + const spanB = container.getElementsByTagName('span')[1];
650 + const spanC = container.getElementsByTagName('span')[2];
651 + const spanD = container.getElementsByTagName('span')[3];
652
653 suspend = true;
654
655 // A and D will be suspended. We'll click on D which should take
656 // priority, after we unsuspend.
657 - let root = ReactDOM.createRoot(container, {hydrate: true});
657 + const root = ReactDOM.createRoot(container, {hydrate: true});
658 root.render(<App />);
659
660 // Nothing has been hydrated so far.
@@ -694,7 +694,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
694 it('hydrates the last target path first for continuous events', async () => {
695 let suspend = false;
696 let resolve;
697 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
697 + const promise = new Promise(resolvePromise => (resolve = resolvePromise));
698
699 function Child({text}) {
700 if ((text === 'A' || text === 'D') && suspend) {
@@ -734,25 +734,25 @@ describe('ReactDOMServerSelectiveHydration', () => {
734 );
735 }
736
737 - let finalHTML = ReactDOMServer.renderToString(<App />);
737 + const finalHTML = ReactDOMServer.renderToString(<App />);
738
739 expect(Scheduler).toHaveYielded(['App', 'A', 'B', 'C', 'D']);
740
741 - let container = document.createElement('div');
741 + const container = document.createElement('div');
742 // We need this to be in the document since we'll dispatch events on it.
743 document.body.appendChild(container);
744
745 container.innerHTML = finalHTML;
746
747 - let spanB = container.getElementsByTagName('span')[1];
748 - let spanC = container.getElementsByTagName('span')[2];
749 - let spanD = container.getElementsByTagName('span')[3];
747 + const spanB = container.getElementsByTagName('span')[1];
748 + const spanC = container.getElementsByTagName('span')[2];
749 + const spanD = container.getElementsByTagName('span')[3];
750
751 suspend = true;
752
753 // A and D will be suspended. We'll click on D which should take
754 // priority, after we unsuspend.
755 - let root = ReactDOM.createRoot(container, {hydrate: true});
755 + const root = ReactDOM.createRoot(container, {hydrate: true});
756 root.render(<App />);
757
758 // Nothing has been hydrated so far.
@@ -799,17 +799,17 @@ describe('ReactDOMServerSelectiveHydration', () => {
799 );
800 }
801
802 - let finalHTML = ReactDOMServer.renderToString(<App />);
802 + const finalHTML = ReactDOMServer.renderToString(<App />);
803
804 expect(Scheduler).toHaveYielded(['App', 'A', 'B', 'C']);
805
806 - let container = document.createElement('div');
806 + const container = document.createElement('div');
807 container.innerHTML = finalHTML;
808
809 - let spanB = container.getElementsByTagName('span')[1];
810 - let spanC = container.getElementsByTagName('span')[2];
809 + const spanB = container.getElementsByTagName('span')[1];
810 + const spanC = container.getElementsByTagName('span')[2];
811
812 - let root = ReactDOM.createRoot(container, {hydrate: true});
812 + const root = ReactDOM.createRoot(container, {hydrate: true});
813 root.render(<App />);
814
815 // Nothing has been hydrated so far.
@@ -829,7 +829,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
829 Scheduler.unstable_yieldValue(text);
830 return <span>{text}</span>;
831 }
832 - let ChildWithBoundary = React.memo(function({text}) {
832 + const ChildWithBoundary = React.memo(function({text}) {
833 return (
834 <Suspense fallback="Loading...">
835 <Child text={text} />
@@ -852,21 +852,21 @@ describe('ReactDOMServerSelectiveHydration', () => {
852 );
853 }
854
855 - let finalHTML = ReactDOMServer.renderToString(<App a="A" />);
855 + const finalHTML = ReactDOMServer.renderToString(<App a="A" />);
856
857 expect(Scheduler).toHaveYielded(['App', 'A', 'a', 'B', 'b', 'C', 'c']);
858
859 - let container = document.createElement('div');
859 + const container = document.createElement('div');
860 container.innerHTML = finalHTML;
861
862 // We need this to be in the document since we'll dispatch events on it.
863 document.body.appendChild(container);
864
865 - let spanA = container.getElementsByTagName('span')[0];
866 - let spanB = container.getElementsByTagName('span')[2];
867 - let spanC = container.getElementsByTagName('span')[4];
865 + const spanA = container.getElementsByTagName('span')[0];
866 + const spanB = container.getElementsByTagName('span')[2];
867 + const spanC = container.getElementsByTagName('span')[4];
868
869 - let root = ReactDOM.createRoot(container, {hydrate: true});
869 + const root = ReactDOM.createRoot(container, {hydrate: true});
870 ReactTestUtils.act(() => {
871 root.render(<App a="A" />);
872
@@ -923,7 +923,7 @@ describe('ReactDOMServerSelectiveHydration', () => {
923 ]);
924 });
925
926 - let spanA2 = container.getElementsByTagName('span')[0];
926 + const spanA2 = container.getElementsByTagName('span')[0];
927 // This is supposed to have been hydrated, not replaced.
928 expect(spanA).toBe(spanA2);
929
packages/react-dom/src/__tests__/ReactDOMSuspensePlaceholder-test.js
+2 -2
@@ -72,7 +72,7 @@ describe('ReactDOMSuspensePlaceholder', () => {
72 }
73
74 it('hides and unhides timed out DOM elements', async () => {
75 - let divs = [
75 + const divs = [
76 React.createRef(null),
77 React.createRef(null),
78 React.createRef(null),
@@ -244,7 +244,7 @@ describe('ReactDOMSuspensePlaceholder', () => {
244 let suspendOnce = Promise.resolve();
245 function Suspend() {
246 if (suspendOnce) {
247 - let promise = suspendOnce;
247 + const promise = suspendOnce;
248 suspendOnce = null;
249 throw promise;
250 }
packages/react-dom/src/__tests__/ReactDOMTextComponent-test.js
+8 -8
@@ -41,8 +41,8 @@ describe('ReactDOMTextComponent', () => {
41 );
42 let nodes = filterOutComments(inst.childNodes);
43
44 - let foo = nodes[1];
45 - let bar = nodes[2];
44 + const foo = nodes[1];
45 + const bar = nodes[2];
46 expect(foo.data).toBe('foo');
47 expect(bar.data).toBe('bar');
48
@@ -75,7 +75,7 @@ describe('ReactDOMTextComponent', () => {
75 );
76
77 let childNodes = filterOutComments(inst.childNodes);
78 - let childDiv = childNodes[1];
78 + const childDiv = childNodes[1];
79
80 inst = ReactDOM.render(
81 <div>
@@ -200,8 +200,8 @@ describe('ReactDOMTextComponent', () => {
200 el,
201 );
202
203 - let childNodes = filterOutComments(inst.childNodes);
204 - let textNode = childNodes[1];
203 + const childNodes = filterOutComments(inst.childNodes);
204 + const textNode = childNodes[1];
205 textNode.textContent = 'foo';
206 inst.insertBefore(
207 document.createTextNode('bar'),
@@ -237,8 +237,8 @@ describe('ReactDOMTextComponent', () => {
237 el,
238 );
239
240 - let childNodes = filterOutComments(inst.childNodes);
241 - let textNode = childNodes[3];
240 + const childNodes = filterOutComments(inst.childNodes);
241 + const textNode = childNodes[3];
242 textNode.textContent = 'foo';
243 inst.insertBefore(
244 document.createTextNode('bar'),
@@ -248,7 +248,7 @@ describe('ReactDOMTextComponent', () => {
248 document.createTextNode('baz'),
249 childNodes[3].nextSibling,
250 );
251 - let secondTextNode = childNodes[5];
251 + const secondTextNode = childNodes[5];
252 secondTextNode.textContent = 'bar';
253 inst.insertBefore(
254 document.createTextNode('foo'),
packages/react-dom/src/__tests__/ReactErrorBoundaries-test.internal.js
+4 -4
@@ -1043,8 +1043,8 @@ describe('ReactErrorBoundaries', () => {
1043 });
1044
1045 it('resets object refs if mounting aborts', () => {
1046 - let childRef = React.createRef();
1047 - let errorMessageRef = React.createRef();
1046 + const childRef = React.createRef();
1047 + const errorMessageRef = React.createRef();
1048
1049 const container = document.createElement('div');
1050 ReactDOM.render(
@@ -2073,7 +2073,7 @@ describe('ReactErrorBoundaries', () => {
2073 let err2;
2074
2075 try {
2076 - let container = document.createElement('div');
2076 + const container = document.createElement('div');
2077 expect(() => ReactDOM.render(<X />, container)).toErrorDev(
2078 'React.createElement: type is invalid -- expected a string ' +
2079 '(for built-in components) or a class/function ' +
@@ -2083,7 +2083,7 @@ describe('ReactErrorBoundaries', () => {
2083 err1 = err;
2084 }
2085 try {
2086 - let container = document.createElement('div');
2086 + const container = document.createElement('div');
2087 expect(() => ReactDOM.render(<Y />, container)).toErrorDev(
2088 'React.createElement: type is invalid -- expected a string ' +
2089 '(for built-in components) or a class/function ' +
packages/react-dom/src/__tests__/ReactErrorLoggingRecovery-test.js
+1 -1
@@ -39,7 +39,7 @@ class Bad extends React.Component {
39 }
40
41 describe('ReactErrorLoggingRecovery', () => {
42 - let originalConsoleError = console.error;
42 + const originalConsoleError = console.error;
43
44 beforeEach(() => {
45 console.error = error => {
packages/react-dom/src/__tests__/ReactLegacyContextDisabled-test.internal.js
+3 -3
@@ -51,7 +51,7 @@ describe('ReactLegacyContextDisabled', () => {
51 }
52 }
53
54 - let lifecycleContextLog = [];
54 + const lifecycleContextLog = [];
55 class LegacyClsConsumer extends React.Component {
56 static contextTypes = {
57 foo() {},
@@ -146,7 +146,7 @@ describe('ReactLegacyContextDisabled', () => {
146 });
147
148 it('renders a tree with modern context', () => {
149 - let Ctx = React.createContext();
149 + const Ctx = React.createContext();
150
151 class Provider extends React.Component {
152 render() {
@@ -164,7 +164,7 @@ describe('ReactLegacyContextDisabled', () => {
164 }
165 }
166
167 - let lifecycleContextLog = [];
167 + const lifecycleContextLog = [];
168 class ContextTypeConsumer extends React.Component {
169 static contextType = Ctx;
170 shouldComponentUpdate(nextProps, nextState, nextContext) {
packages/react-dom/src/__tests__/ReactLegacyErrorBoundaries-test.internal.js
+4 -4
@@ -1093,8 +1093,8 @@ describe('ReactLegacyErrorBoundaries', () => {
1093 });
1094
1095 it('resets object refs if mounting aborts', () => {
1096 - let childRef = React.createRef();
1097 - let errorMessageRef = React.createRef();
1096 + const childRef = React.createRef();
1097 + const errorMessageRef = React.createRef();
1098
1099 const container = document.createElement('div');
1100 ReactDOM.render(
@@ -2080,7 +2080,7 @@ describe('ReactLegacyErrorBoundaries', () => {
2080 let err2;
2081
2082 try {
2083 - let container = document.createElement('div');
2083 + const container = document.createElement('div');
2084 expect(() => ReactDOM.render(<X />, container)).toErrorDev(
2085 'React.createElement: type is invalid -- expected a string ' +
2086 '(for built-in components) or a class/function ' +
@@ -2090,7 +2090,7 @@ describe('ReactLegacyErrorBoundaries', () => {
2090 err1 = err;
2091 }
2092 try {
2093 - let container = document.createElement('div');
2093 + const container = document.createElement('div');
2094 expect(() => ReactDOM.render(<Y />, container)).toErrorDev(
2095 'React.createElement: type is invalid -- expected a string ' +
2096 '(for built-in components) or a class/function ' +
packages/react-dom/src/__tests__/ReactServerRendering-test.js
+1 -1
@@ -14,7 +14,7 @@ let React;
14 let ReactDOMServer;
15 let PropTypes;
16 let ReactCurrentDispatcher;
17 -let enableSuspenseServerRenderer = require('shared/ReactFeatureFlags')
17 +const enableSuspenseServerRenderer = require('shared/ReactFeatureFlags')
18 .enableSuspenseServerRenderer;
19
20 function normalizeCodeLocInfo(str) {
packages/react-dom/src/__tests__/ReactServerRenderingHydration-test.js
+7 -7
@@ -494,10 +494,10 @@ describe('ReactDOMServerHydration', () => {
494 it.experimental(
495 'does not re-enter hydration after committing the first one',
496 () => {
497 - let finalHTML = ReactDOMServer.renderToString(<div />);
498 - let container = document.createElement('div');
497 + const finalHTML = ReactDOMServer.renderToString(<div />);
498 + const container = document.createElement('div');
499 container.innerHTML = finalHTML;
500 - let root = ReactDOM.createRoot(container, {hydrate: true});
500 + const root = ReactDOM.createRoot(container, {hydrate: true});
501 root.render(<div />);
502 Scheduler.unstable_flushAll();
503 root.render(null);
@@ -512,8 +512,8 @@ describe('ReactDOMServerHydration', () => {
512 it('Suspense + hydration in legacy mode', () => {
513 const element = document.createElement('div');
514 element.innerHTML = '<div>Hello World</div>';
515 - let div = element.firstChild;
516 - let ref = React.createRef();
515 + const div = element.firstChild;
516 + const ref = React.createRef();
517 expect(() =>
518 ReactDOM.hydrate(
519 <React.Suspense fallback={null}>
@@ -536,8 +536,8 @@ describe('ReactDOMServerHydration', () => {
536 it('Suspense + hydration in legacy mode with no fallback', () => {
537 const element = document.createElement('div');
538 element.innerHTML = '<div>Hello World</div>';
539 - let div = element.firstChild;
540 - let ref = React.createRef();
539 + const div = element.firstChild;
540 + const ref = React.createRef();
541 ReactDOM.hydrate(
542 <React.Suspense>
543 <div ref={ref}>Hello World</div>
packages/react-dom/src/__tests__/ReactTestUtilsAct-test.js
+12 -12
@@ -186,7 +186,7 @@ function runActTests(label, render, unmount, rerender) {
186
187 it('flushes effects on every call', () => {
188 function App() {
189 - let [ctr, setCtr] = React.useState(0);
189 + const [ctr, setCtr] = React.useState(0);
190 React.useEffect(() => {
191 Scheduler.unstable_yieldValue(ctr);
192 });
@@ -222,7 +222,7 @@ function runActTests(label, render, unmount, rerender) {
222
223 it("should keep flushing effects until the're done", () => {
224 function App() {
225 - let [ctr, setCtr] = React.useState(0);
225 + const [ctr, setCtr] = React.useState(0);
226 React.useEffect(() => {
227 if (ctr < 5) {
228 setCtr(x => x + 1);
@@ -261,7 +261,7 @@ function runActTests(label, render, unmount, rerender) {
261 it('warns if a setState is called outside of act(...)', () => {
262 let setValue = null;
263 function App() {
264 - let [value, _setValue] = React.useState(0);
264 + const [value, _setValue] = React.useState(0);
265 setValue = _setValue;
266 return value;
267 }
@@ -286,9 +286,9 @@ function runActTests(label, render, unmount, rerender) {
286
287 it('lets a ticker update', () => {
288 function App() {
289 - let [toggle, setToggle] = React.useState(0);
289 + const [toggle, setToggle] = React.useState(0);
290 React.useEffect(() => {
291 - let timeout = setTimeout(() => {
291 + const timeout = setTimeout(() => {
292 setToggle(1);
293 }, 200);
294 return () => clearTimeout(timeout);
@@ -308,7 +308,7 @@ function runActTests(label, render, unmount, rerender) {
308
309 it('can use the async version to catch microtasks', async () => {
310 function App() {
311 - let [toggle, setToggle] = React.useState(0);
311 + const [toggle, setToggle] = React.useState(0);
312 React.useEffect(() => {
313 // just like the previous test, except we
314 // use a promise and schedule the update
@@ -332,7 +332,7 @@ function runActTests(label, render, unmount, rerender) {
332 // this component triggers an effect, that waits a tick,
333 // then sets state. repeats this 5 times.
334 function App() {
335 - let [state, setState] = React.useState(0);
335 + const [state, setState] = React.useState(0);
336 async function ticker() {
337 await null;
338 setState(x => x + 1);
@@ -353,7 +353,7 @@ function runActTests(label, render, unmount, rerender) {
353
354 it('flushes immediate re-renders with act', () => {
355 function App() {
356 - let [ctr, setCtr] = React.useState(0);
356 + const [ctr, setCtr] = React.useState(0);
357 React.useEffect(() => {
358 if (ctr === 0) {
359 setCtr(1);
@@ -408,7 +408,7 @@ function runActTests(label, render, unmount, rerender) {
408 describe('asynchronous tests', () => {
409 it('works with timeouts', async () => {
410 function App() {
411 - let [ctr, setCtr] = React.useState(0);
411 + const [ctr, setCtr] = React.useState(0);
412 function doSomething() {
413 setTimeout(() => {
414 setCtr(1);
@@ -432,7 +432,7 @@ function runActTests(label, render, unmount, rerender) {
432
433 it('flushes microtasks before exiting', async () => {
434 function App() {
435 - let [ctr, setCtr] = React.useState(0);
435 + const [ctr, setCtr] = React.useState(0);
436 async function someAsyncFunction() {
437 // queue a bunch of promises to be sure they all flush
438 await null;
@@ -486,7 +486,7 @@ function runActTests(label, render, unmount, rerender) {
486
487 it('async commits and effects are guaranteed to be flushed', async () => {
488 function App() {
489 - let [state, setState] = React.useState(0);
489 + const [state, setState] = React.useState(0);
490 async function something() {
491 await null;
492 setState(1);
@@ -513,7 +513,7 @@ function runActTests(label, render, unmount, rerender) {
513 // this component triggers an effect, that waits a tick,
514 // then sets state. repeats this 5 times.
515 function App() {
516 - let [state, setState] = React.useState(0);
516 + const [state, setState] = React.useState(0);
517 async function ticker() {
518 await null;
519 setState(x => x + 1);
packages/react-dom/src/__tests__/ReactTestUtilsActUnmockedScheduler-test.js
+3 -3
@@ -64,7 +64,7 @@ it('can use act to flush effects', () => {
64
65 it('flushes effects on every call', () => {
66 function App() {
67 - let [ctr, setCtr] = React.useState(0);
67 + const [ctr, setCtr] = React.useState(0);
68 React.useEffect(() => {
69 yields.push(ctr);
70 });
@@ -102,7 +102,7 @@ it('flushes effects on every call', () => {
102
103 it("should keep flushing effects until the're done", () => {
104 function App() {
105 - let [ctr, setCtr] = React.useState(0);
105 + const [ctr, setCtr] = React.useState(0);
106 React.useEffect(() => {
107 if (ctr < 5) {
108 setCtr(x => x + 1);
@@ -142,7 +142,7 @@ it('can handle cascading promises', async () => {
142 // this component triggers an effect, that waits a tick,
143 // then sets state. repeats this 5 times.
144 function App() {
145 - let [state, setState] = React.useState(0);
145 + const [state, setState] = React.useState(0);
146 async function ticker() {
147 await null;
148 setState(x => x + 1);
packages/react-dom/src/__tests__/ReactTreeTraversal-test.js
+1 -1
@@ -11,7 +11,7 @@
11
12 let React;
13 let ReactDOM;
14 -let ReactFeatureFlags = require('shared/ReactFeatureFlags');
14 +const ReactFeatureFlags = require('shared/ReactFeatureFlags');
15
16 const ChildComponent = ({id, eventHandler}) => (
17 <div
packages/react-dom/src/__tests__/ReactUpdates-test.js
+8 -12
@@ -526,7 +526,6 @@ describe('ReactUpdates', () => {
526
527 const bContainer = document.createElement('div');
528
529 - let a;
529 let b;
530
531 let aUpdated = false;
@@ -560,7 +559,7 @@ describe('ReactUpdates', () => {
559 }
560 }
561
563 - a = ReactTestUtils.renderIntoDocument(<A />);
562 + const a = ReactTestUtils.renderIntoDocument(<A />);
563 ReactDOM.unstable_batchedUpdates(function() {
564 a.setState({x: 1});
565 b.setState({x: 1});
@@ -733,11 +732,8 @@ describe('ReactUpdates', () => {
732 }
733 }
734
736 - let x;
737 - let y;
738 -
739 - x = ReactTestUtils.renderIntoDocument(<X />);
740 - y = ReactTestUtils.renderIntoDocument(<Y />);
735 + const x = ReactTestUtils.renderIntoDocument(<X />);
736 + const y = ReactTestUtils.renderIntoDocument(<Y />);
737 expect(ReactDOM.findDOMNode(x).textContent).toBe('0');
738
739 y.forceUpdate();
@@ -1102,7 +1098,7 @@ describe('ReactUpdates', () => {
1098 'in legacy mode, updates in componentWillUpdate and componentDidUpdate ' +
1099 'should both flush in the immediately subsequent commit',
1100 () => {
1105 - let ops = [];
1101 + const ops = [];
1102 class Foo extends React.Component {
1103 state = {a: false, b: false};
1104 UNSAFE_componentWillUpdate(_, nextState) {
@@ -1145,7 +1141,7 @@ describe('ReactUpdates', () => {
1141 'in legacy mode, updates in componentWillUpdate and componentDidUpdate ' +
1142 '(on a sibling) should both flush in the immediately subsequent commit',
1143 () => {
1148 - let ops = [];
1144 + const ops = [];
1145 class Foo extends React.Component {
1146 state = {a: false};
1147 UNSAFE_componentWillUpdate(_, nextState) {
@@ -1213,7 +1209,7 @@ describe('ReactUpdates', () => {
1209 );
1210
1211 it('uses correct base state for setState inside render phase', () => {
1216 - let ops = [];
1212 + const ops = [];
1213
1214 class Foo extends React.Component {
1215 state = {step: 0};
@@ -1236,7 +1232,7 @@ describe('ReactUpdates', () => {
1232 });
1233
1234 it('does not re-render if state update is null', () => {
1239 - let container = document.createElement('div');
1235 + const container = document.createElement('div');
1236
1237 let instance;
1238 let ops = [];
@@ -1626,7 +1622,7 @@ describe('ReactUpdates', () => {
1622
1623 let error = null;
1624 let stack = null;
1629 - let originalConsoleError = console.error;
1625 + const originalConsoleError = console.error;
1626 console.error = (e, s) => {
1627 error = e;
1628 stack = s;
packages/react-dom/src/__tests__/utils/ReactDOMServerIntegrationTestUtils.js
+3 -3
@@ -145,7 +145,7 @@ module.exports = function(initModules) {
145 return await expectErrors(
146 () =>
147 new Promise(resolve => {
148 - let writable = new DrainWritable();
148 + const writable = new DrainWritable();
149 ReactDOMServer.renderToNodeStream(reactElement).pipe(writable);
150 writable.on('finish', () => resolve(writable.buffer));
151 }),
@@ -174,7 +174,7 @@ module.exports = function(initModules) {
174 const markup = await renderIntoString(element, errorCount);
175 resetModules();
176
177 - let container = getContainerFromMarkup(element, markup);
177 + const container = getContainerFromMarkup(element, markup);
178 let serverNode = container.firstChild;
179
180 const firstClientNode = await renderIntoDom(
@@ -205,7 +205,7 @@ module.exports = function(initModules) {
205 const clientRenderOnBadMarkup = async (element, errorCount = 0) => {
206 // First we render the top of bad mark up.
207
208 - let container = getContainerFromMarkup(
208 + const container = getContainerFromMarkup(
209 element,
210 shouldUseDocument(element)
211 ? '<html><body><div id="badIdWhichWillCauseMismatch" /></body></html>'
packages/react-dom/src/client/ReactDOMComponentTree.js
+1 -1
@@ -114,7 +114,7 @@ export function getClosestInstanceFromNode(targetNode: Node): null | Fiber {
114 // have had an internalInstanceKey on it.
115 // Let's get the fiber associated with the SuspenseComponent
116 // as the deepest instance.
117 - let targetSuspenseInst = suspenseInstance[internalInstanceKey];
117 + const targetSuspenseInst = suspenseInstance[internalInstanceKey];
118 if (targetSuspenseInst) {
119 return targetSuspenseInst;
120 }
packages/react-dom/src/client/ReactDOMHostConfig.js
+5 -5
@@ -191,7 +191,7 @@ export function getRootHostContext(
191 case DOCUMENT_NODE:
192 case DOCUMENT_FRAGMENT_NODE: {
193 type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';
194 - let root = (rootContainerInstance: any).documentElement;
194 + const root = (rootContainerInstance: any).documentElement;
195 namespace = root ? root.namespaceURI : getChildNamespace(null, '');
196 break;
197 }
@@ -620,10 +620,10 @@ export function clearSuspenseBoundary(
620 // deep we are and only break out when we're back on top.
621 let depth = 0;
622 do {
623 - let nextNode = node.nextSibling;
623 + const nextNode = node.nextSibling;
624 parentInstance.removeChild(node);
625 if (nextNode && nextNode.nodeType === COMMENT_NODE) {
626 - let data = ((nextNode: any).data: string);
626 + const data = ((nextNode: any).data: string);
627 if (data === SUSPENSE_END_DATA) {
628 if (depth === 0) {
629 parentInstance.removeChild(nextNode);
@@ -867,7 +867,7 @@ export function getNextHydratableInstanceAfterSuspenseInstance(
867 let depth = 0;
868 while (node) {
869 if (node.nodeType === COMMENT_NODE) {
870 - let data = ((node: any).data: string);
870 + const data = ((node: any).data: string);
871 if (data === SUSPENSE_END_DATA) {
872 if (depth === 0) {
873 return getNextHydratableSibling((node: any));
@@ -901,7 +901,7 @@ export function getParentSuspenseInstance(
901 let depth = 0;
902 while (node) {
903 if (node.nodeType === COMMENT_NODE) {
904 - let data = ((node: any).data: string);
904 + const data = ((node: any).data: string);
905 if (
906 data === SUSPENSE_START_DATA ||
907 data === SUSPENSE_FALLBACK_START_DATA ||
packages/react-dom/src/client/ReactDOMLegacy.js
+1 -1
@@ -225,7 +225,7 @@ export function findDOMNode(
225 componentOrElement: Element | ?React$Component<any, any>,
226 ): null | Element | Text {
227 if (__DEV__) {
228 - let owner = (ReactCurrentOwner.current: any);
228 + const owner = (ReactCurrentOwner.current: any);
229 if (owner !== null && owner.stateNode !== null) {
230 const warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;
231 if (!warnedAboutRefsInRender) {
packages/react-dom/src/client/ReactDOMSelect.js
+3 -3
@@ -78,8 +78,8 @@ function updateOptions(
78 const options: IndexableHTMLOptionsCollection = node.options;
79
80 if (multiple) {
81 - let selectedValues = (propValue: Array<string>);
82 - let selectedValue = {};
81 + const selectedValues = (propValue: Array<string>);
82 + const selectedValue = {};
83 for (let i = 0; i < selectedValues.length; i++) {
84 // Prefix to avoid chaos with special keys.
85 selectedValue['$' + selectedValues[i]] = true;
@@ -96,7 +96,7 @@ function updateOptions(
96 } else {
97 // Do not set `select.value` as exact behavior isn't consistent across all
98 // browsers for all cases.
99 - let selectedValue = toString(getToStringValue((propValue: any)));
99 + const selectedValue = toString(getToStringValue((propValue: any)));
100 let defaultSelected = null;
101 for (let i = 0; i < options.length; i++) {
102 if (options[i].value === selectedValue) {
packages/react-dom/src/client/ReactDOMSelection.js
+1 -1
@@ -169,7 +169,7 @@ export function setOffsets(node, offsets) {
169 // IE 11 uses modern selection, but doesn't support the extend method.
170 // Flip backward selections, so we can set with a single range.
171 if (!selection.extend && start > end) {
172 - let temp = end;
172 + const temp = end;
173 end = start;
174 start = temp;
175 }
packages/react-dom/src/client/ReactInputSelection.js
+2 -1
@@ -181,7 +181,8 @@ export function getSelection(input) {
181 * -@offsets Object of same form that is returned from get*
182 */
183 export function setSelection(input, offsets) {
184 - let {start, end} = offsets;
184 + const start = offsets.start;
185 + let end = offsets.end;
186 if (end === undefined) {
187 end = start;
188 }
packages/react-dom/src/client/__tests__/trustedTypes-test.internal.js
+4 -4
@@ -54,7 +54,7 @@ describe('when Trusted Types are available in global object', () => {
54 });
55
56 it('should not stringify trusted values for dangerouslySetInnerHTML', () => {
57 - let innerHTMLDescriptor = Object.getOwnPropertyDescriptor(
57 + const innerHTMLDescriptor = Object.getOwnPropertyDescriptor(
58 Element.prototype,
59 'innerHTML',
60 );
@@ -97,7 +97,7 @@ describe('when Trusted Types are available in global object', () => {
97 });
98
99 it('should not stringify trusted values for setAttribute (unknown attribute)', () => {
100 - let setAttribute = Element.prototype.setAttribute;
100 + const setAttribute = Element.prototype.setAttribute;
101 try {
102 const setAttributeCalls = [];
103 Element.prototype.setAttribute = function(name, value) {
@@ -125,7 +125,7 @@ describe('when Trusted Types are available in global object', () => {
125 });
126
127 it('should not stringify trusted values for setAttribute (known attribute)', () => {
128 - let setAttribute = Element.prototype.setAttribute;
128 + const setAttribute = Element.prototype.setAttribute;
129 try {
130 const setAttributeCalls = [];
131 Element.prototype.setAttribute = function(name, value) {
@@ -153,7 +153,7 @@ describe('when Trusted Types are available in global object', () => {
153 });
154
155 it('should not stringify trusted values for setAttributeNS', () => {
156 - let setAttributeNS = Element.prototype.setAttributeNS;
156 + const setAttributeNS = Element.prototype.setAttributeNS;
157 try {
158 const setAttributeNSCalls = [];
159 Element.prototype.setAttributeNS = function(ns, name, value) {
packages/react-dom/src/client/setTextContent.js
+2 -2
@@ -18,9 +18,9 @@ import {TEXT_NODE} from '../shared/HTMLNodeType';
18 * @param {string} text
19 * @internal
20 */
21 -let setTextContent = function(node: Element, text: string): void {
21 +const setTextContent = function(node: Element, text: string): void {
22 if (text) {
23 - let firstChild = node.firstChild;
23 + const firstChild = node.firstChild;
24
25 if (
26 firstChild &&
packages/react-dom/src/client/validateDOMNesting.js
+2 -2
@@ -159,8 +159,8 @@ if (__DEV__) {
159 };
160
161 updatedAncestorInfo = function(oldInfo, tag) {
162 - let ancestorInfo = {...(oldInfo || emptyAncestorInfo)};
163 - let info = {tag};
162 + const ancestorInfo = {...(oldInfo || emptyAncestorInfo)};
163 + const info = {tag};
164
165 if (inScopeTags.indexOf(tag) !== -1) {
166 ancestorInfo.aTagInScope = null;
packages/react-dom/src/events/ChangeEventPlugin.js
+1 -1
@@ -234,7 +234,7 @@ function getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {
234 }
235
236 function handleControlledInputBlur(node) {
237 - let state = node._wrapperState;
237 + const state = node._wrapperState;
238
239 if (
240 !state ||
packages/react-dom/src/events/DOMModernPluginEventSystem.js
+1 -1
@@ -452,7 +452,7 @@ function getNearestRootOrPortalContainer(instance: Element): Element {
452 }
453
454 function addEventTypeToDispatchConfig(type: DOMTopLevelEventType): void {
455 - let dispatchConfig = topLevelEventsToDispatchConfig.get(type);
455 + const dispatchConfig = topLevelEventsToDispatchConfig.get(type);
456 // If we don't have a dispatchConfig, then we're dealing with
457 // an event type that React does not know about (i.e. a custom event).
458 // We need to register an event config for this or the SimpleEventPlugin
packages/react-dom/src/events/DeprecatedDOMEventResponderSystem.js
+4 -4
@@ -175,10 +175,10 @@ const eventResponderContext: ReactDOMResponderContext = {
175 validateResponderContext();
176 for (let i = 0; i < rootEventTypes.length; i++) {
177 const rootEventType = rootEventTypes[i];
178 - let rootEventResponders = rootEventTypesToEventResponderInstances.get(
178 + const rootEventResponders = rootEventTypesToEventResponderInstances.get(
179 rootEventType,
180 );
181 - let rootEventTypesSet = ((currentInstance: any): ReactDOMEventResponderInstance)
181 + const rootEventTypesSet = ((currentInstance: any): ReactDOMEventResponderInstance)
182 .rootEventTypes;
183 if (rootEventTypesSet !== null) {
184 rootEventTypesSet.delete(rootEventType);
@@ -462,7 +462,7 @@ export function unmountEventResponder(
462 const responder = ((responderInstance.responder: any): ReactDOMEventResponder);
463 const onUnmount = responder.onUnmount;
464 if (onUnmount !== null) {
465 - let {props, state} = responderInstance;
465 + const {props, state} = responderInstance;
466 const previousInstance = currentInstance;
467 currentInstance = responderInstance;
468 try {
@@ -477,7 +477,7 @@ export function unmountEventResponder(
477
478 for (let i = 0; i < rootEventTypes.length; i++) {
479 const topLevelEventType = rootEventTypes[i];
480 - let rootEventResponderInstances = rootEventTypesToEventResponderInstances.get(
480 + const rootEventResponderInstances = rootEventTypesToEventResponderInstances.get(
481 topLevelEventType,
482 );
483 if (rootEventResponderInstances !== undefined) {
packages/react-dom/src/events/ReactDOMEventListener.js
+2 -2
@@ -424,14 +424,14 @@ export function attemptToDispatchEvent(
424 let targetInst = getClosestInstanceFromNode(nativeEventTarget);
425
426 if (targetInst !== null) {
427 - let nearestMounted = getNearestMountedFiber(targetInst);
427 + const nearestMounted = getNearestMountedFiber(targetInst);
428 if (nearestMounted === null) {
429 // This tree has been unmounted already. Dispatch without a target.
430 targetInst = null;
431 } else {
432 const tag = nearestMounted.tag;
433 if (tag === SuspenseComponent) {
434 - let instance = getSuspenseInstanceFromFiber(nearestMounted);
434 + const instance = getSuspenseInstanceFromFiber(nearestMounted);
435 if (instance !== null) {
436 // Queue the event to be replayed later. Abort dispatching since we
437 // don't want this event dispatched twice through the event system.
packages/react-dom/src/events/ReactDOMEventReplaying.js
+26 -26
@@ -133,18 +133,18 @@ type QueuedReplayableEvent = {|
133 let hasScheduledReplayAttempt = false;
134
135 // The queue of discrete events to be replayed.
136 -let queuedDiscreteEvents: Array<QueuedReplayableEvent> = [];
136 +const queuedDiscreteEvents: Array<QueuedReplayableEvent> = [];
137
138 // Indicates if any continuous event targets are non-null for early bailout.
139 -let hasAnyQueuedContinuousEvents: boolean = false;
139 +const hasAnyQueuedContinuousEvents: boolean = false;
140 // The last of each continuous event type. We only need to replay the last one
141 // if the last target was dehydrated.
142 let queuedFocus: null | QueuedReplayableEvent = null;
143 let queuedDrag: null | QueuedReplayableEvent = null;
144 let queuedMouse: null | QueuedReplayableEvent = null;
145 // For pointer events there can be one latest event per pointerId.
146 -let queuedPointers: Map<number, QueuedReplayableEvent> = new Map();
147 -let queuedPointerCaptures: Map<number, QueuedReplayableEvent> = new Map();
146 +const queuedPointers: Map<number, QueuedReplayableEvent> = new Map();
147 +const queuedPointerCaptures: Map<number, QueuedReplayableEvent> = new Map();
148 // We could consider replaying selectionchange and touchmoves too.
149
150 type QueuedHydrationTarget = {|
@@ -152,7 +152,7 @@ type QueuedHydrationTarget = {|
152 target: Node,
153 priority: number,
154 |};
155 -let queuedExplicitHydrationTargets: Array<QueuedHydrationTarget> = [];
155 +const queuedExplicitHydrationTargets: Array<QueuedHydrationTarget> = [];
156
157 export function hasQueuedDiscreteEvents(): boolean {
158 return queuedDiscreteEvents.length > 0;
@@ -318,7 +318,7 @@ export function queueDiscreteEvent(
318 // If this was the first discrete event, we might be able to
319 // synchronously unblock it so that preventDefault still works.
320 while (queuedEvent.blockedOn !== null) {
321 - let fiber = getInstanceFromNode(queuedEvent.blockedOn);
321 + const fiber = getInstanceFromNode(queuedEvent.blockedOn);
322 if (fiber === null) {
323 break;
324 }
@@ -359,13 +359,13 @@ export function clearIfContinuousEvent(
359 break;
360 case TOP_POINTER_OVER:
361 case TOP_POINTER_OUT: {
362 - let pointerId = ((nativeEvent: any): PointerEvent).pointerId;
362 + const pointerId = ((nativeEvent: any): PointerEvent).pointerId;
363 queuedPointers.delete(pointerId);
364 break;
365 }
366 case TOP_GOT_POINTER_CAPTURE:
367 case TOP_LOST_POINTER_CAPTURE: {
368 - let pointerId = ((nativeEvent: any): PointerEvent).pointerId;
368 + const pointerId = ((nativeEvent: any): PointerEvent).pointerId;
369 queuedPointerCaptures.delete(pointerId);
370 break;
371 }
@@ -384,7 +384,7 @@ function accumulateOrCreateContinuousQueuedReplayableEvent(
384 existingQueuedEvent === null ||
385 existingQueuedEvent.nativeEvent !== nativeEvent
386 ) {
387 - let queuedEvent = createQueuedReplayableEvent(
387 + const queuedEvent = createQueuedReplayableEvent(
388 blockedOn,
389 topLevelType,
390 eventSystemFlags,
@@ -392,7 +392,7 @@ function accumulateOrCreateContinuousQueuedReplayableEvent(
392 nativeEvent,
393 );
394 if (blockedOn !== null) {
395 - let fiber = getInstanceFromNode(blockedOn);
395 + const fiber = getInstanceFromNode(blockedOn);
396 if (fiber !== null) {
397 // Attempt to increase the priority of this target.
398 attemptContinuousHydration(fiber);
@@ -505,13 +505,13 @@ function attemptExplicitHydrationTarget(
505 // TODO: This function shares a lot of logic with attemptToDispatchEvent.
506 // Try to unify them. It's a bit tricky since it would require two return
507 // values.
508 - let targetInst = getClosestInstanceFromNode(queuedTarget.target);
508 + const targetInst = getClosestInstanceFromNode(queuedTarget.target);
509 if (targetInst !== null) {
510 - let nearestMounted = getNearestMountedFiber(targetInst);
510 + const nearestMounted = getNearestMountedFiber(targetInst);
511 if (nearestMounted !== null) {
512 const tag = nearestMounted.tag;
513 if (tag === SuspenseComponent) {
514 - let instance = getSuspenseInstanceFromFiber(nearestMounted);
514 + const instance = getSuspenseInstanceFromFiber(nearestMounted);
515 if (instance !== null) {
516 // We're blocked on hydrating this boundary.
517 // Increase its priority.
@@ -537,7 +537,7 @@ function attemptExplicitHydrationTarget(
537
538 export function queueExplicitHydrationTarget(target: Node): void {
539 if (enableSelectiveHydration) {
540 - let priority = getCurrentPriorityLevel();
540 + const priority = getCurrentPriorityLevel();
541 const queuedTarget: QueuedHydrationTarget = {
542 blockedOn: null,
543 target: target,
@@ -562,10 +562,10 @@ function attemptReplayContinuousQueuedEvent(
562 if (queuedEvent.blockedOn !== null) {
563 return false;
564 }
565 - let targetContainers = queuedEvent.targetContainers;
565 + const targetContainers = queuedEvent.targetContainers;
566 while (targetContainers.length > 0) {
567 - let targetContainer = targetContainers[0];
568 - let nextBlockedOn = attemptToDispatchEvent(
567 + const targetContainer = targetContainers[0];
568 + const nextBlockedOn = attemptToDispatchEvent(
569 queuedEvent.topLevelType,
570 queuedEvent.eventSystemFlags,
571 targetContainer,
@@ -573,7 +573,7 @@ function attemptReplayContinuousQueuedEvent(
573 );
574 if (nextBlockedOn !== null) {
575 // We're still blocked. Try again later.
576 - let fiber = getInstanceFromNode(nextBlockedOn);
576 + const fiber = getInstanceFromNode(nextBlockedOn);
577 if (fiber !== null) {
578 attemptContinuousHydration(fiber);
579 }
@@ -600,21 +600,21 @@ function replayUnblockedEvents() {
600 hasScheduledReplayAttempt = false;
601 // First replay discrete events.
602 while (queuedDiscreteEvents.length > 0) {
603 - let nextDiscreteEvent = queuedDiscreteEvents[0];
603 + const nextDiscreteEvent = queuedDiscreteEvents[0];
604 if (nextDiscreteEvent.blockedOn !== null) {
605 // We're still blocked.
606 // Increase the priority of this boundary to unblock
607 // the next discrete event.
608 - let fiber = getInstanceFromNode(nextDiscreteEvent.blockedOn);
608 + const fiber = getInstanceFromNode(nextDiscreteEvent.blockedOn);
609 if (fiber !== null) {
610 attemptUserBlockingHydration(fiber);
611 }
612 break;
613 }
614 - let targetContainers = nextDiscreteEvent.targetContainers;
614 + const targetContainers = nextDiscreteEvent.targetContainers;
615 while (targetContainers.length > 0) {
616 - let targetContainer = targetContainers[0];
617 - let nextBlockedOn = attemptToDispatchEvent(
616 + const targetContainer = targetContainers[0];
617 + const nextBlockedOn = attemptToDispatchEvent(
618 nextDiscreteEvent.topLevelType,
619 nextDiscreteEvent.eventSystemFlags,
620 targetContainer,
@@ -674,7 +674,7 @@ export function retryIfBlockedOn(
674 // worth it because we expect very few discrete events to queue up and once
675 // we are actually fully unblocked it will be fast to replay them.
676 for (let i = 1; i < queuedDiscreteEvents.length; i++) {
677 - let queuedEvent = queuedDiscreteEvents[i];
677 + const queuedEvent = queuedDiscreteEvents[i];
678 if (queuedEvent.blockedOn === unblocked) {
679 queuedEvent.blockedOn = null;
680 }
@@ -696,14 +696,14 @@ export function retryIfBlockedOn(
696 queuedPointerCaptures.forEach(unblock);
697
698 for (let i = 0; i < queuedExplicitHydrationTargets.length; i++) {
699 - let queuedTarget = queuedExplicitHydrationTargets[i];
699 + const queuedTarget = queuedExplicitHydrationTargets[i];
700 if (queuedTarget.blockedOn === unblocked) {
701 queuedTarget.blockedOn = null;
702 }
703 }
704
705 while (queuedExplicitHydrationTargets.length > 0) {
706 - let nextExplicitTarget = queuedExplicitHydrationTargets[0];
706 + const nextExplicitTarget = queuedExplicitHydrationTargets[0];
707 if (nextExplicitTarget.blockedOn !== null) {
708 // We're still blocked.
709 break;
packages/react-dom/src/events/__tests__/DOMModernPluginEventSystem-test.internal.js
+61 -61
@@ -28,7 +28,7 @@ function dispatchClickEvent(element) {
28 dispatchEvent(element, 'click');
29 }
30
31 -let eventListenersToClear = [];
31 +const eventListenersToClear = [];
32
33 function startNativeEventListenerClearDown() {
34 const nativeWindowEventListener = window.addEventListener;
@@ -106,7 +106,7 @@ describe('DOMModernPluginEventSystem', () => {
106
107 ReactDOM.render(<Test />, container);
108
109 - let buttonElement = buttonRef.current;
109 + const buttonElement = buttonRef.current;
110 dispatchClickEvent(buttonElement);
111
112 expect(onClick).toHaveBeenCalledTimes(1);
@@ -114,7 +114,7 @@ describe('DOMModernPluginEventSystem', () => {
114 expect(log[0]).toEqual(['capture', buttonElement]);
115 expect(log[1]).toEqual(['bubble', buttonElement]);
116
117 - let divElement = divRef.current;
117 + const divElement = divRef.current;
118 dispatchClickEvent(divElement);
119 expect(onClick).toHaveBeenCalledTimes(3);
120 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -159,14 +159,14 @@ describe('DOMModernPluginEventSystem', () => {
159 ReactDOM.render(<Parent />, container);
160 ReactDOM.render(<Child />, childRef.current);
161
162 - let buttonElement = buttonRef.current;
162 + const buttonElement = buttonRef.current;
163 dispatchClickEvent(buttonElement);
164 expect(onClick).toHaveBeenCalledTimes(1);
165 expect(onClickCapture).toHaveBeenCalledTimes(1);
166 expect(log[0]).toEqual(['capture', buttonElement]);
167 expect(log[1]).toEqual(['bubble', buttonElement]);
168
169 - let divElement = divRef.current;
169 + const divElement = divRef.current;
170 dispatchClickEvent(divElement);
171 expect(onClick).toHaveBeenCalledTimes(3);
172 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -211,14 +211,14 @@ describe('DOMModernPluginEventSystem', () => {
211 buttonRef.current.appendChild(disjointedNode);
212 ReactDOM.render(<Child />, disjointedNode);
213
214 - let buttonElement = buttonRef.current;
214 + const buttonElement = buttonRef.current;
215 dispatchClickEvent(buttonElement);
216 expect(onClick).toHaveBeenCalledTimes(1);
217 expect(onClickCapture).toHaveBeenCalledTimes(1);
218 expect(log[0]).toEqual(['capture', buttonElement]);
219 expect(log[1]).toEqual(['bubble', buttonElement]);
220
221 - let divElement = divRef.current;
221 + const divElement = divRef.current;
222 dispatchClickEvent(divElement);
223 expect(onClick).toHaveBeenCalledTimes(3);
224 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -266,14 +266,14 @@ describe('DOMModernPluginEventSystem', () => {
266 buttonRef.current.appendChild(disjointedNode);
267 ReactDOM.render(<Child />, disjointedNode);
268
269 - let buttonElement = buttonRef.current;
269 + const buttonElement = buttonRef.current;
270 dispatchClickEvent(buttonElement);
271 expect(onClick).toHaveBeenCalledTimes(1);
272 expect(onClickCapture).toHaveBeenCalledTimes(1);
273 expect(log[0]).toEqual(['capture', buttonElement]);
274 expect(log[1]).toEqual(['bubble', buttonElement]);
275
276 - let divElement = divRef.current;
276 + const divElement = divRef.current;
277 dispatchClickEvent(divElement);
278 expect(onClick).toHaveBeenCalledTimes(3);
279 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -323,14 +323,14 @@ describe('DOMModernPluginEventSystem', () => {
323 spanRef.current.appendChild(disjointedNode);
324 ReactDOM.render(<Child />, disjointedNode);
325
326 - let buttonElement = buttonRef.current;
326 + const buttonElement = buttonRef.current;
327 dispatchClickEvent(buttonElement);
328 expect(onClick).toHaveBeenCalledTimes(1);
329 expect(onClickCapture).toHaveBeenCalledTimes(1);
330 expect(log[0]).toEqual(['capture', buttonElement]);
331 expect(log[1]).toEqual(['bubble', buttonElement]);
332
333 - let divElement = divRef.current;
333 + const divElement = divRef.current;
334 dispatchClickEvent(divElement);
335 expect(onClick).toHaveBeenCalledTimes(3);
336 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -376,14 +376,14 @@ describe('DOMModernPluginEventSystem', () => {
376
377 ReactDOM.render(<Parent />, container);
378
379 - let buttonElement = buttonRef.current;
379 + const buttonElement = buttonRef.current;
380 dispatchClickEvent(buttonElement);
381 expect(onClick).toHaveBeenCalledTimes(1);
382 expect(onClickCapture).toHaveBeenCalledTimes(1);
383 expect(log[0]).toEqual(['capture', buttonElement]);
384 expect(log[1]).toEqual(['bubble', buttonElement]);
385
386 - let divElement = divRef.current;
386 + const divElement = divRef.current;
387 dispatchClickEvent(divElement);
388 expect(onClick).toHaveBeenCalledTimes(3);
389 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -437,12 +437,12 @@ describe('DOMModernPluginEventSystem', () => {
437 async () => {
438 let suspend = false;
439 let resolve;
440 - let promise = new Promise(
440 + const promise = new Promise(
441 resolvePromise => (resolve = resolvePromise),
442 );
443
444 let clicks = 0;
445 - let childSlotRef = React.createRef();
445 + const childSlotRef = React.createRef();
446
447 function Parent() {
448 return <div onClick={() => clicks++} ref={childSlotRef} />;
@@ -466,17 +466,17 @@ describe('DOMModernPluginEventSystem', () => {
466 }
467
468 suspend = false;
469 - let finalHTML = ReactDOMServer.renderToString(<App />);
469 + const finalHTML = ReactDOMServer.renderToString(<App />);
470
471 - let parentContainer = document.createElement('div');
472 - let childContainer = document.createElement('div');
471 + const parentContainer = document.createElement('div');
472 + const childContainer = document.createElement('div');
473
474 // We need this to be in the document since we'll dispatch events on it.
475 document.body.appendChild(parentContainer);
476
477 // We're going to use a different root as a parent.
478 // This lets us detect whether an event goes through React's event system.
479 - let parentRoot = ReactDOM.createRoot(parentContainer);
479 + const parentRoot = ReactDOM.createRoot(parentContainer);
480 parentRoot.render(<Parent />);
481 Scheduler.unstable_flushAll();
482
@@ -484,12 +484,12 @@ describe('DOMModernPluginEventSystem', () => {
484
485 childContainer.innerHTML = finalHTML;
486
487 - let a = childContainer.getElementsByTagName('a')[0];
487 + const a = childContainer.getElementsByTagName('a')[0];
488
489 suspend = true;
490
491 // Hydrate asynchronously.
492 - let root = ReactDOM.createRoot(childContainer, {hydrate: true});
492 + const root = ReactDOM.createRoot(childContainer, {hydrate: true});
493 root.render(<App />);
494 jest.runAllTimers();
495 Scheduler.unstable_flushAll();
@@ -641,14 +641,14 @@ describe('DOMModernPluginEventSystem', () => {
641
642 ReactDOM.render(<Parent />, container);
643
644 - let buttonElement = buttonRef.current;
644 + const buttonElement = buttonRef.current;
645 dispatchClickEvent(buttonElement);
646 expect(onClick).toHaveBeenCalledTimes(1);
647 expect(onClickCapture).toHaveBeenCalledTimes(1);
648 expect(log[0]).toEqual(['capture', buttonElement]);
649 expect(log[1]).toEqual(['bubble', buttonElement]);
650
651 - let divElement = divRef.current;
651 + const divElement = divRef.current;
652 dispatchClickEvent(divElement);
653 expect(onClick).toHaveBeenCalledTimes(1);
654 expect(onClickCapture).toHaveBeenCalledTimes(1);
@@ -684,14 +684,14 @@ describe('DOMModernPluginEventSystem', () => {
684
685 ReactDOM.render(<Test />, container);
686
687 - let buttonElement = buttonRef.current;
687 + const buttonElement = buttonRef.current;
688 buttonElement.focus();
689 expect(onFocus).toHaveBeenCalledTimes(1);
690 expect(onFocusCapture).toHaveBeenCalledTimes(1);
691 expect(log[0]).toEqual(['capture', buttonElement]);
692 expect(log[1]).toEqual(['bubble', buttonElement]);
693
694 - let divElement = divRef.current;
694 + const divElement = divRef.current;
695 divElement.focus();
696 expect(onFocus).toHaveBeenCalledTimes(3);
697 expect(onFocusCapture).toHaveBeenCalledTimes(3);
@@ -737,14 +737,14 @@ describe('DOMModernPluginEventSystem', () => {
737 ReactDOM.render(<Parent />, container);
738 ReactDOM.render(<Child />, childRef.current);
739
740 - let buttonElement = buttonRef.current;
740 + const buttonElement = buttonRef.current;
741 buttonElement.focus();
742 expect(onFocus).toHaveBeenCalledTimes(1);
743 expect(onFocusCapture).toHaveBeenCalledTimes(1);
744 expect(log[0]).toEqual(['capture', buttonElement]);
745 expect(log[1]).toEqual(['bubble', buttonElement]);
746
747 - let divElement = divRef.current;
747 + const divElement = divRef.current;
748 divElement.focus();
749 expect(onFocus).toHaveBeenCalledTimes(3);
750 expect(onFocusCapture).toHaveBeenCalledTimes(3);
@@ -791,14 +791,14 @@ describe('DOMModernPluginEventSystem', () => {
791
792 ReactDOM.render(<Parent />, container);
793
794 - let buttonElement = buttonRef.current;
794 + const buttonElement = buttonRef.current;
795 buttonElement.focus();
796 expect(onFocus).toHaveBeenCalledTimes(1);
797 expect(onFocusCapture).toHaveBeenCalledTimes(1);
798 expect(log[0]).toEqual(['capture', buttonElement]);
799 expect(log[1]).toEqual(['bubble', buttonElement]);
800
801 - let divElement = divRef.current;
801 + const divElement = divRef.current;
802 divElement.focus();
803 expect(onFocus).toHaveBeenCalledTimes(3);
804 expect(onFocusCapture).toHaveBeenCalledTimes(3);
@@ -858,14 +858,14 @@ describe('DOMModernPluginEventSystem', () => {
858
859 ReactDOM.render(<Parent />, container);
860
861 - let buttonElement = buttonRef.current;
861 + const buttonElement = buttonRef.current;
862 buttonElement.focus();
863 expect(onFocus).toHaveBeenCalledTimes(1);
864 expect(onFocusCapture).toHaveBeenCalledTimes(1);
865 expect(log[0]).toEqual(['capture', buttonElement]);
866 expect(log[1]).toEqual(['bubble', buttonElement]);
867
868 - let divElement = divRef.current;
868 + const divElement = divRef.current;
869 divElement.focus();
870 expect(onFocus).toHaveBeenCalledTimes(1);
871 expect(onFocusCapture).toHaveBeenCalledTimes(1);
@@ -906,7 +906,7 @@ describe('DOMModernPluginEventSystem', () => {
906
907 ReactDOM.render(<Parent />, container);
908
909 - let buttonElement = buttonRef.current;
909 + const buttonElement = buttonRef.current;
910 buttonElement.dispatchEvent(
911 new MouseEvent('mouseover', {
912 bubbles: true,
@@ -918,7 +918,7 @@ describe('DOMModernPluginEventSystem', () => {
918 expect(onMouseLeave).toHaveBeenCalledTimes(0);
919 expect(log[0]).toEqual(buttonElement);
920
921 - let divElement = divRef.current;
921 + const divElement = divRef.current;
922 buttonElement.dispatchEvent(
923 new MouseEvent('mouseout', {
924 bubbles: true,
@@ -977,7 +977,7 @@ describe('DOMModernPluginEventSystem', () => {
977
978 ReactDOM.render(<Parent />, container);
979
980 - let buttonElement = buttonRef.current;
980 + const buttonElement = buttonRef.current;
981 buttonElement.dispatchEvent(
982 new MouseEvent('mouseover', {
983 bubbles: true,
@@ -989,7 +989,7 @@ describe('DOMModernPluginEventSystem', () => {
989 expect(onMouseLeave).toHaveBeenCalledTimes(0);
990 expect(log[0]).toEqual(buttonElement);
991
992 - let divElement = divRef.current;
992 + const divElement = divRef.current;
993 buttonElement.dispatchEvent(
994 new MouseEvent('mouseout', {
995 bubbles: true,
@@ -1042,7 +1042,7 @@ describe('DOMModernPluginEventSystem', () => {
1042 );
1043
1044 function Root() {
1045 - let portalTargetRef = React.useRef(null);
1045 + const portalTargetRef = React.useRef(null);
1046 React.useLayoutEffect(() => {
1047 portalTargetRef.current.appendChild(portalContainer);
1048 });
@@ -1056,7 +1056,7 @@ describe('DOMModernPluginEventSystem', () => {
1056
1057 ReactDOM.render(<Root />, container);
1058
1059 - let divElement = targetRef.current;
1059 + const divElement = targetRef.current;
1060 dispatchClickEvent(divElement);
1061 expect(log).toEqual([
1062 'capture root',
@@ -1105,7 +1105,7 @@ describe('DOMModernPluginEventSystem', () => {
1105 }
1106
1107 it('should create the same event listener map', () => {
1108 - let listenerMaps = [];
1108 + const listenerMaps = [];
1109
1110 function Test() {
1111 const listenerMap = ReactDOM.unstable_useEvent('click');
@@ -1231,7 +1231,7 @@ describe('DOMModernPluginEventSystem', () => {
1231 log = [];
1232
1233 // Clicking the button should also work
1234 - let buttonElement = buttonRef.current;
1234 + const buttonElement = buttonRef.current;
1235 dispatchClickEvent(buttonElement);
1236 expect(log).toEqual([
1237 {
@@ -1334,7 +1334,7 @@ describe('DOMModernPluginEventSystem', () => {
1334 ReactDOM.render(<Test />, container);
1335 Scheduler.unstable_flushAll();
1336
1337 - let textNode = buttonRef.current.firstChild;
1337 + const textNode = buttonRef.current.firstChild;
1338 dispatchClickEvent(textNode);
1339 expect(clickEvent).toBeCalledTimes(1);
1340 });
@@ -1371,7 +1371,7 @@ describe('DOMModernPluginEventSystem', () => {
1371 ReactDOM.render(<Test />, container);
1372 Scheduler.unstable_flushAll();
1373
1374 - let buttonElement = buttonRef.current;
1374 + const buttonElement = buttonRef.current;
1375 dispatchClickEvent(buttonElement);
1376 expect(onClick).toHaveBeenCalledTimes(1);
1377 expect(onClickCapture).toHaveBeenCalledTimes(1);
@@ -1382,7 +1382,7 @@ describe('DOMModernPluginEventSystem', () => {
1382 onClick.mockClear();
1383 onClickCapture.mockClear();
1384
1385 - let divElement = divRef.current;
1385 + const divElement = divRef.current;
1386 dispatchClickEvent(divElement);
1387 expect(onClick).toHaveBeenCalledTimes(2);
1388 expect(onClickCapture).toHaveBeenCalledTimes(2);
@@ -1427,14 +1427,14 @@ describe('DOMModernPluginEventSystem', () => {
1427 ReactDOM.render(<Test />, container);
1428 Scheduler.unstable_flushAll();
1429
1430 - let buttonElement = buttonRef.current;
1430 + const buttonElement = buttonRef.current;
1431 dispatchClickEvent(buttonElement);
1432 expect(onClick).toHaveBeenCalledTimes(1);
1433 expect(onClickCapture).toHaveBeenCalledTimes(1);
1434 expect(log[0]).toEqual(['capture', buttonElement]);
1435 expect(log[1]).toEqual(['bubble', buttonElement]);
1436
1437 - let divElement = divRef.current;
1437 + const divElement = divRef.current;
1438 dispatchClickEvent(divElement);
1439 expect(onClick).toHaveBeenCalledTimes(3);
1440 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -1504,7 +1504,7 @@ describe('DOMModernPluginEventSystem', () => {
1504 expect(clickEvent).toBeCalledTimes(2);
1505
1506 // Clicking the button should not work
1507 - let buttonElement = buttonRef.current;
1507 + const buttonElement = buttonRef.current;
1508 dispatchClickEvent(buttonElement);
1509 expect(clickEvent).toBeCalledTimes(2);
1510 });
@@ -1577,7 +1577,7 @@ describe('DOMModernPluginEventSystem', () => {
1577 it('should correctly handle stopPropagation corrrectly for target events', () => {
1578 const buttonRef = React.createRef();
1579 const divRef = React.createRef();
1580 - let clickEvent = jest.fn();
1580 + const clickEvent = jest.fn();
1581
1582 function Test() {
1583 const click1 = ReactDOM.unstable_useEvent('click', {
@@ -1602,7 +1602,7 @@ describe('DOMModernPluginEventSystem', () => {
1602 ReactDOM.render(<Test />, container);
1603 Scheduler.unstable_flushAll();
1604
1605 - let divElement = divRef.current;
1605 + const divElement = divRef.current;
1606 dispatchClickEvent(divElement);
1607 expect(clickEvent).toHaveBeenCalledTimes(0);
1608 });
@@ -1633,7 +1633,7 @@ describe('DOMModernPluginEventSystem', () => {
1633 ReactDOM.render(<Test />, container);
1634 Scheduler.unstable_flushAll();
1635
1636 - let buttonElement = buttonRef.current;
1636 + const buttonElement = buttonRef.current;
1637 dispatchClickEvent(buttonElement);
1638 expect(targetListerner1).toHaveBeenCalledTimes(1);
1639 expect(targetListerner2).toHaveBeenCalledTimes(1);
@@ -1671,7 +1671,7 @@ describe('DOMModernPluginEventSystem', () => {
1671 ReactDOM.render(<Test />, container);
1672 Scheduler.unstable_flushAll();
1673
1674 - let buttonElement = buttonRef.current;
1674 + const buttonElement = buttonRef.current;
1675 dispatchClickEvent(buttonElement);
1676 expect(targetListerner1).toHaveBeenCalledTimes(1);
1677 expect(targetListerner2).toHaveBeenCalledTimes(1);
@@ -1698,7 +1698,7 @@ describe('DOMModernPluginEventSystem', () => {
1698 return <button ref={ref}>Press me</button>;
1699 }
1700
1701 - let root = ReactDOM.createRoot(container);
1701 + const root = ReactDOM.createRoot(container);
1702 root.render(<Test counter={0} />);
1703
1704 // Dev double-render
@@ -1926,7 +1926,7 @@ describe('DOMModernPluginEventSystem', () => {
1926 ReactDOM.render(<Test />, container);
1927 Scheduler.unstable_flushAll();
1928
1929 - let buttonElement = buttonRef.current;
1929 + const buttonElement = buttonRef.current;
1930 dispatchClickEvent(buttonElement);
1931 expect(onClick).toHaveBeenCalledTimes(2);
1932 expect(onClickCapture).toHaveBeenCalledTimes(2);
@@ -1939,7 +1939,7 @@ describe('DOMModernPluginEventSystem', () => {
1939 onClick.mockClear();
1940 onClickCapture.mockClear();
1941
1942 - let divElement = divRef.current;
1942 + const divElement = divRef.current;
1943 dispatchClickEvent(divElement);
1944 expect(onClick).toHaveBeenCalledTimes(3);
1945 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -1981,7 +1981,7 @@ describe('DOMModernPluginEventSystem', () => {
1981 ReactDOM.render(<Test />, container);
1982 Scheduler.unstable_flushAll();
1983
1984 - let buttonElement = buttonRef.current;
1984 + const buttonElement = buttonRef.current;
1985 dispatchClickEvent(buttonElement);
1986 expect(rootListerner1).toHaveBeenCalledTimes(1);
1987 expect(targetListerner1).toHaveBeenCalledTimes(0);
@@ -2020,7 +2020,7 @@ describe('DOMModernPluginEventSystem', () => {
2020
2021 Scheduler.unstable_flushAll();
2022
2023 - let buttonElement = buttonRef.current;
2023 + const buttonElement = buttonRef.current;
2024 dispatchClickEvent(buttonElement);
2025 expect(rootListerner1).toHaveBeenCalledTimes(1);
2026 expect(rootListerner2).toHaveBeenCalledTimes(1);
@@ -2064,7 +2064,7 @@ describe('DOMModernPluginEventSystem', () => {
2064 ReactDOM.render(<Test />, container);
2065 Scheduler.unstable_flushAll();
2066
2067 - let buttonElement = buttonRef.current;
2067 + const buttonElement = buttonRef.current;
2068 dispatchClickEvent(buttonElement);
2069 expect(onClick).toHaveBeenCalledTimes(3);
2070 expect(onClickCapture).toHaveBeenCalledTimes(3);
@@ -2079,7 +2079,7 @@ describe('DOMModernPluginEventSystem', () => {
2079 onClick.mockClear();
2080 onClickCapture.mockClear();
2081
2082 - let divElement = divRef.current;
2082 + const divElement = divRef.current;
2083 dispatchClickEvent(divElement);
2084 expect(onClick).toHaveBeenCalledTimes(4);
2085 expect(onClickCapture).toHaveBeenCalledTimes(4);
@@ -2150,14 +2150,14 @@ describe('DOMModernPluginEventSystem', () => {
2150 ReactDOM.render(<Test />, container);
2151 Scheduler.unstable_flushAll();
2152
2153 - let buttonElement = buttonRef.current;
2153 + const buttonElement = buttonRef.current;
2154 dispatchEvent(buttonElement, 'custom-event');
2155 expect(onCustomEvent).toHaveBeenCalledTimes(1);
2156 expect(onCustomEventCapture).toHaveBeenCalledTimes(1);
2157 expect(log[0]).toEqual(['capture', buttonElement]);
2158 expect(log[1]).toEqual(['bubble', buttonElement]);
2159
2160 - let divElement = divRef.current;
2160 + const divElement = divRef.current;
2161 dispatchEvent(divElement, 'custom-event');
2162 expect(onCustomEvent).toHaveBeenCalledTimes(3);
2163 expect(onCustomEventCapture).toHaveBeenCalledTimes(3);
@@ -2283,7 +2283,7 @@ describe('DOMModernPluginEventSystem', () => {
2283 const Suspense = React.Suspense;
2284 let suspend = false;
2285 let resolve;
2286 - let promise = new Promise(
2286 + const promise = new Promise(
2287 resolvePromise => (resolve = resolvePromise),
2288 );
2289
@@ -2319,7 +2319,7 @@ describe('DOMModernPluginEventSystem', () => {
2319 const container2 = document.createElement('div');
2320 document.body.appendChild(container2);
2321
2322 - let root = ReactDOM.createRoot(container2);
2322 + const root = ReactDOM.createRoot(container2);
2323
2324 ReactTestUtils.act(() => {
2325 root.render(<Component />);
@@ -2506,7 +2506,7 @@ describe('DOMModernPluginEventSystem', () => {
2506 ReactDOM.render(<Test />, container);
2507 Scheduler.unstable_flushAll();
2508
2509 - let textNode = buttonRef.current.firstChild;
2509 + const textNode = buttonRef.current.firstChild;
2510 dispatchClickEvent(textNode);
2511 // This should not work, as the target instance will be the
2512 // <button>, which is actually outside the scope.
packages/react-dom/src/events/__tests__/DeprecatedDOMEventResponderSystem-test.internal.js
+12 -12
@@ -149,7 +149,7 @@ describe('DOMEventResponderSystem', () => {
149
150 it('the event responders should fire on click event', () => {
151 let eventResponderFiredCount = 0;
152 - let eventLog = [];
152 + const eventLog = [];
153 const buttonRef = React.createRef();
154
155 const TestResponder = createEventResponder({
@@ -208,7 +208,7 @@ describe('DOMEventResponderSystem', () => {
208 const checkPassiveEvents = require('react-dom/src/events/checkPassiveEvents');
209 checkPassiveEvents.passiveBrowserEventsSupported = true;
210
211 - let eventLog = [];
211 + const eventLog = [];
212 const buttonRef = React.createRef();
213
214 const TestResponder = createEventResponder({
@@ -235,7 +235,7 @@ describe('DOMEventResponderSystem', () => {
235 ReactDOM.render(<Test />, container);
236
237 // Clicking the button should trigger the event responder onEvent()
238 - let buttonElement = buttonRef.current;
238 + const buttonElement = buttonRef.current;
239 dispatchClickEvent(buttonElement);
240 expect(eventLog.length).toBe(1);
241 expect(eventLog).toEqual([
@@ -393,7 +393,7 @@ describe('DOMEventResponderSystem', () => {
393 });
394
395 it('nested event responders should fire in the correct order #2', () => {
396 - let eventLog = [];
396 + const eventLog = [];
397 const buttonRef = React.createRef();
398
399 const TestResponder = createEventResponder({
@@ -422,14 +422,14 @@ describe('DOMEventResponderSystem', () => {
422 ReactDOM.render(<Test />, container);
423
424 // Clicking the button should trigger the event responder onEvent()
425 - let buttonElement = buttonRef.current;
425 + const buttonElement = buttonRef.current;
426 dispatchClickEvent(buttonElement);
427
428 expect(eventLog).toEqual(['B [bubble]']);
429 });
430
431 it('custom event dispatching for click -> magicClick works', () => {
432 - let eventLog = [];
432 + const eventLog = [];
433 const buttonRef = React.createRef();
434
435 const TestResponder = createEventResponder({
@@ -468,7 +468,7 @@ describe('DOMEventResponderSystem', () => {
468 ReactDOM.render(<Test />, container);
469
470 // Clicking the button should trigger the event responder onEvent()
471 - let buttonElement = buttonRef.current;
471 + const buttonElement = buttonRef.current;
472 dispatchClickEvent(buttonElement);
473
474 expect(eventLog).toEqual(['magic event fired', 'magicclick', 'bubble']);
@@ -626,7 +626,7 @@ describe('DOMEventResponderSystem', () => {
626 it('the event responder target listeners should correctly fire for only their events', () => {
627 let clickEventComponent1Fired = 0;
628 let clickEventComponent2Fired = 0;
629 - let eventLog = [];
629 + const eventLog = [];
630 const buttonRef = React.createRef();
631
632 const TestResponderA = createEventResponder({
@@ -666,7 +666,7 @@ describe('DOMEventResponderSystem', () => {
666
667 ReactDOM.render(<Test />, container);
668
669 - let buttonElement = buttonRef.current;
669 + const buttonElement = buttonRef.current;
670 dispatchClickEvent(buttonElement);
671
672 expect(clickEventComponent1Fired).toBe(1);
@@ -698,7 +698,7 @@ describe('DOMEventResponderSystem', () => {
698 });
699
700 let handler;
701 - let buttonRef = React.createRef();
701 + const buttonRef = React.createRef();
702 const Test = () => {
703 const listener = React.DEPRECATED_useResponder(TestResponder, {
704 onClick: handler,
@@ -811,7 +811,7 @@ describe('DOMEventResponderSystem', () => {
811 );
812 }
813
814 - let root = ReactDOM.createRoot(container);
814 + const root = ReactDOM.createRoot(container);
815 root.render(<Test counter={0} />);
816 expect(Scheduler).toFlushAndYield(__DEV__ ? ['Test', 'Test'] : ['Test']);
817
@@ -981,7 +981,7 @@ describe('DOMEventResponderSystem', () => {
981 ReactDOM.render(<Test />, container);
982 expect(container.innerHTML).toBe('<button>Click me!</button>');
983
984 - let buttonElement = buttonRef.current;
984 + const buttonElement = buttonRef.current;
985 dispatchClickEvent(buttonElement);
986 expect(eventResponderFiredCount).toBe(1);
987 dispatchClickEvent(buttonElement);
packages/react-dom/src/events/__tests__/EnterLeaveEventPlugin-test.js
+2 -2
@@ -40,7 +40,7 @@ describe('EnterLeaveEventPlugin', () => {
40 );
41 iframeDocument.close();
42
43 - let leaveEvents = [];
43 + const leaveEvents = [];
44 const node = ReactDOM.render(
45 <div
46 onMouseLeave={e => {
@@ -73,7 +73,7 @@ describe('EnterLeaveEventPlugin', () => {
73 );
74 iframeDocument.close();
75
76 - let enterEvents = [];
76 + const enterEvents = [];
77 const node = ReactDOM.render(
78 <div
79 onMouseEnter={e => {
packages/react-dom/src/events/__tests__/SimpleEventPlugin-test.internal.js
+1 -1
@@ -184,7 +184,7 @@ describe('SimpleEventPlugin', function() {
184 container = document.createElement('div');
185 document.body.appendChild(container);
186
187 - let ops = [];
187 + const ops = [];
188 let button;
189 class Button extends React.Component {
190 state = {count: 0};
packages/react-dom/src/events/__tests__/SyntheticEvent-test.js
+11 -22
@@ -29,7 +29,6 @@ describe('SyntheticEvent', () => {
29 });
30
31 it('should be able to `preventDefault`', () => {
32 - let node;
32 let expectedCount = 0;
33
34 const eventHandler = syntheticEvent => {
@@ -40,7 +39,7 @@ describe('SyntheticEvent', () => {
39
40 expectedCount++;
41 };
43 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
42 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
43
44 const event = document.createEvent('Event');
45 event.initEvent('click', true, true);
@@ -50,7 +49,6 @@ describe('SyntheticEvent', () => {
49 });
50
51 it('should be prevented if nativeEvent is prevented', () => {
53 - let node;
52 let expectedCount = 0;
53
54 const eventHandler = syntheticEvent => {
@@ -58,7 +56,7 @@ describe('SyntheticEvent', () => {
56
57 expectedCount++;
58 };
61 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
59 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
60
61 let event;
62 event = document.createEvent('Event');
@@ -83,7 +81,6 @@ describe('SyntheticEvent', () => {
81 });
82
83 it('should be able to `stopPropagation`', () => {
86 - let node;
84 let expectedCount = 0;
85
86 const eventHandler = syntheticEvent => {
@@ -93,7 +90,7 @@ describe('SyntheticEvent', () => {
90
91 expectedCount++;
92 };
96 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
93 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
94
95 const event = document.createEvent('Event');
96 event.initEvent('click', true, true);
@@ -103,7 +100,6 @@ describe('SyntheticEvent', () => {
100 });
101
102 it('should be able to `persist`', () => {
106 - let node;
103 let expectedCount = 0;
104 let syntheticEvent;
105
@@ -115,7 +111,7 @@ describe('SyntheticEvent', () => {
111
112 expectedCount++;
113 };
118 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
114 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
115
116 const event = document.createEvent('Event');
117 event.initEvent('click', true, true);
@@ -128,7 +124,6 @@ describe('SyntheticEvent', () => {
124 });
125
126 it('should be nullified and log warnings if the synthetic event has not been persisted', () => {
131 - let node;
127 let expectedCount = 0;
128 let syntheticEvent;
129
@@ -137,7 +132,7 @@ describe('SyntheticEvent', () => {
132
133 expectedCount++;
134 };
140 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
135 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
136
137 const event = document.createEvent('Event');
138 event.initEvent('click', true, true);
@@ -165,7 +160,6 @@ describe('SyntheticEvent', () => {
160 });
161
162 it('should warn when setting properties of a synthetic event that has not been persisted', () => {
168 - let node;
163 let expectedCount = 0;
164 let syntheticEvent;
165
@@ -174,7 +168,7 @@ describe('SyntheticEvent', () => {
168
169 expectedCount++;
170 };
177 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
171 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
172
173 const event = document.createEvent('Event');
174 event.initEvent('click', true, true);
@@ -194,7 +188,6 @@ describe('SyntheticEvent', () => {
188 });
189
190 it('should warn when calling `preventDefault` if the synthetic event has not been persisted', () => {
197 - let node;
191 let expectedCount = 0;
192 let syntheticEvent;
193
@@ -202,7 +195,7 @@ describe('SyntheticEvent', () => {
195 syntheticEvent = e;
196 expectedCount++;
197 };
205 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
198 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
199
200 const event = document.createEvent('Event');
201 event.initEvent('click', true, true);
@@ -222,7 +215,6 @@ describe('SyntheticEvent', () => {
215 });
216
217 it('should warn when calling `stopPropagation` if the synthetic event has not been persisted', () => {
225 - let node;
218 let expectedCount = 0;
219 let syntheticEvent;
220
@@ -230,7 +222,7 @@ describe('SyntheticEvent', () => {
222 syntheticEvent = e;
223 expectedCount++;
224 };
233 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
225 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
226
227 const event = document.createEvent('Event');
228 event.initEvent('click', true, true);
@@ -251,7 +243,6 @@ describe('SyntheticEvent', () => {
243 });
244
245 it('should warn when calling `isPropagationStopped` if the synthetic event has not been persisted', () => {
254 - let node;
246 let expectedCount = 0;
247 let syntheticEvent;
248
@@ -259,7 +250,7 @@ describe('SyntheticEvent', () => {
250 syntheticEvent = e;
251 expectedCount++;
252 };
262 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
253 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
254
255 const event = document.createEvent('Event');
256 event.initEvent('click', true, true);
@@ -279,7 +270,6 @@ describe('SyntheticEvent', () => {
270 });
271
272 it('should warn when calling `isDefaultPrevented` if the synthetic event has not been persisted', () => {
282 - let node;
273 let expectedCount = 0;
274 let syntheticEvent;
275
@@ -287,7 +277,7 @@ describe('SyntheticEvent', () => {
277 syntheticEvent = e;
278 expectedCount++;
279 };
290 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
280 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
281
282 const event = document.createEvent('Event');
283 event.initEvent('click', true, true);
@@ -332,7 +322,6 @@ describe('SyntheticEvent', () => {
322 // Or we might disallow this pattern altogether:
323 // https://github.com/facebook/react/issues/13224
324 xit('should warn if a property is added to the synthetic event', () => {
335 - let node;
325 let expectedCount = 0;
326 let syntheticEvent;
327
@@ -349,7 +338,7 @@ describe('SyntheticEvent', () => {
338 syntheticEvent = e;
339 expectedCount++;
340 };
352 - node = ReactDOM.render(<div onClick={eventHandler} />, container);
341 + const node = ReactDOM.render(<div onClick={eventHandler} />, container);
342
343 const event = document.createEvent('Event');
344 event.initEvent('click', true, true);
packages/react-dom/src/events/__tests__/SyntheticKeyboardEvent-test.js
+2 -2
@@ -466,7 +466,7 @@ describe('SyntheticKeyboardEvent', () => {
466 expect(event.isPropagationStopped()).toBe(true);
467 expectedCount++;
468 };
469 - let div = ReactDOM.render(
469 + const div = ReactDOM.render(
470 <div
471 onKeyDown={eventHandler}
472 onKeyUp={eventHandler}
@@ -508,7 +508,7 @@ describe('SyntheticKeyboardEvent', () => {
508 expect(event.isPersistent()).toBe(true);
509 persistentEvents.push(event);
510 };
511 - let div = ReactDOM.render(
511 + const div = ReactDOM.render(
512 <div
513 onKeyDown={eventHandler}
514 onKeyUp={eventHandler}
packages/react-dom/src/server/ReactDOMFizzServerNode.js
+1 -1
@@ -24,7 +24,7 @@ function pipeToNodeWritable(
24 children: ReactNodeList,
25 destination: Writable,
26 ): void {
27 - let request = createRequest(children, destination);
27 + const request = createRequest(children, destination);
28 destination.on('drain', createDrainHandler(destination, request));
29 startWork(request);
30 }
packages/react-dom/src/server/ReactPartialRenderer.js
+20 -20
@@ -88,9 +88,9 @@ const toArray = ((React.Children.toArray: any): toArrayType);
88 // Each entry is `this.stack` from a currently executing renderer instance.
89 // (There may be more than one because ReactDOMServer is reentrant).
90 // Each stack is an array of frames which may contain nested stacks of elements.
91 -let currentDebugStacks = [];
91 +const currentDebugStacks = [];
92
93 -let ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
93 +const ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;
94 let ReactDebugCurrentFrame;
95 let prevGetCurrentStackImpl = null;
96 let getCurrentServerStackImpl = () => '';
@@ -160,7 +160,7 @@ if (__DEV__) {
160 }
161 // ReactDOMServer is reentrant so there may be multiple calls at the same time.
162 // Take the frames from the innermost call which is the last in the array.
163 - let frames = currentDebugStacks[currentDebugStacks.length - 1];
163 + const frames = currentDebugStacks[currentDebugStacks.length - 1];
164 let stack = '';
165 // Go through every frame in the stack from the innermost one.
166 for (let i = frames.length - 1; i >= 0; i--) {
@@ -168,7 +168,7 @@ if (__DEV__) {
168 // Every frame might have more than one debug element stack entry associated with it.
169 // This is because single-child nesting doesn't create materialized frames.
170 // Instead it would push them through `pushElementToDebugStack()`.
171 - let debugElementStack = ((frame: any): FrameDev).debugElementStack;
171 + const debugElementStack = ((frame: any): FrameDev).debugElementStack;
172 for (let ii = debugElementStack.length - 1; ii >= 0; ii--) {
173 stack += describeStackFrame(debugElementStack[ii]);
174 }
@@ -416,8 +416,8 @@ function resolve(
416 |} {
417 while (React.isValidElement(child)) {
418 // Safe because we just checked it's an element.
419 - let element: ReactElement = (child: any);
420 - let Component = element.type;
419 + const element: ReactElement = (child: any);
420 + const Component = element.type;
421 if (__DEV__) {
422 pushElementToDebugStack(element);
423 }
@@ -434,7 +434,7 @@ function resolve(
434
435 let queue = [];
436 let replace = false;
437 - let updater = {
437 + const updater = {
438 isMounted: function(publicInstance) {
439 return false;
440 },
@@ -480,7 +480,7 @@ function resolve(
480 }
481 }
482
483 - let partialState = Component.getDerivedStateFromProps.call(
483 + const partialState = Component.getDerivedStateFromProps.call(
484 null,
485 element.props,
486 inst.state,
@@ -612,8 +612,8 @@ function resolve(
612 inst.UNSAFE_componentWillMount();
613 }
614 if (queue.length) {
615 - let oldQueue = queue;
616 - let oldReplace = replace;
615 + const oldQueue = queue;
616 + const oldReplace = replace;
617 queue = null;
618 replace = false;
619
@@ -623,8 +623,8 @@ function resolve(
623 let nextState = oldReplace ? oldQueue[0] : inst.state;
624 let dontMutate = true;
625 for (let i = oldReplace ? 1 : 0; i < oldQueue.length; i++) {
626 - let partial = oldQueue[i];
627 - let partialState =
626 + const partial = oldQueue[i];
627 + const partialState =
628 typeof partial === 'function'
629 ? partial.call(inst, nextState, element.props, publicContext)
630 : partial;
@@ -657,7 +657,7 @@ function resolve(
657 let childContext;
658 if (disableLegacyContext) {
659 if (__DEV__) {
660 - let childContextTypes = Component.childContextTypes;
660 + const childContextTypes = Component.childContextTypes;
661 if (childContextTypes !== undefined) {
662 console.error(
663 '%s uses the legacy childContextTypes API which is no longer supported. ' +
@@ -668,10 +668,10 @@ function resolve(
668 }
669 } else {
670 if (typeof inst.getChildContext === 'function') {
671 - let childContextTypes = Component.childContextTypes;
671 + const childContextTypes = Component.childContextTypes;
672 if (typeof childContextTypes === 'object') {
673 childContext = inst.getChildContext();
674 - for (let contextKey in childContext) {
674 + for (const contextKey in childContext) {
675 invariant(
676 contextKey in childContextTypes,
677 '%s.getChildContext(): key "%s" is not defined in childContextTypes.',
@@ -843,7 +843,7 @@ class ReactDOMServerRenderer {
843 try {
844 // Markup generated within <Suspense> ends up buffered until we know
845 // nothing in that boundary suspended
846 - let out = [''];
846 + const out = [''];
847 let suspended = false;
848 while (out[0].length < bytes) {
849 if (this.stack.length === 0) {
@@ -1112,7 +1112,7 @@ class ReactDOMServerRenderer {
1112 }
1113 case REACT_MEMO_TYPE: {
1114 const element: ReactElement = ((nextChild: any): ReactElement);
1115 - let nextChildren = [
1115 + const nextChildren = [
1116 React.createElement(
1117 elementType.type,
1118 Object.assign({ref: element.ref}, element.props),
@@ -1245,9 +1245,9 @@ class ReactDOMServerRenderer {
1245 // Attempt to initialize lazy component regardless of whether the
1246 // suspense server-side renderer is enabled so synchronously
1247 // resolved constructors are supported.
1248 - let payload = lazyComponent._payload;
1249 - let init = lazyComponent._init;
1250 - let result = init(payload);
1248 + const payload = lazyComponent._payload;
1249 + const init = lazyComponent._init;
1250 + const result = init(payload);
1251 const nextChildren = [
1252 React.createElement(
1253 result,
packages/react-dom/src/server/ReactPartialRendererContext.js
+1 -1
@@ -70,7 +70,7 @@ export function processContext(
70 const contextType = type.contextType;
71 if (__DEV__) {
72 if ('contextType' in (type: any)) {
73 - let isValid =
73 + const isValid =
74 // Allow null for conditional declaration
75 contextType === null ||
76 (contextType !== undefined &&
packages/react-dom/src/server/ReactPartialRendererHooks.js
+2 -2
@@ -223,7 +223,7 @@ function readContext<T>(
223 context: ReactContext<T>,
224 observedBits: void | number | boolean,
225 ): T {
226 - let threadID = currentThreadID;
226 + const threadID = currentThreadID;
227 validateContextBounds(context, threadID);
228 if (__DEV__) {
229 if (isInHookUserCodeInDev) {
@@ -246,7 +246,7 @@ function useContext<T>(
246 currentHookNameInDev = 'useContext';
247 }
248 resolveCurrentlyRenderingComponent();
249 - let threadID = currentThreadID;
249 + const threadID = currentThreadID;
250 validateContextBounds(context, threadID);
251 return context[threadID];
252 }
packages/react-dom/src/server/ReactThreadIDAllocator.js
+5 -5
@@ -22,9 +22,9 @@ for (let i = 0; i < 15; i++) {
22 nextAvailableThreadIDs[15] = 0;
23
24 function growThreadCountAndReturnNextAvailable() {
25 - let oldArray = nextAvailableThreadIDs;
26 - let oldSize = oldArray.length;
27 - let newSize = oldSize * 2;
25 + const oldArray = nextAvailableThreadIDs;
26 + const oldSize = oldArray.length;
27 + const newSize = oldSize * 2;
28 invariant(
29 newSize <= 0x10000,
30 'Maximum number of concurrent React renderers exceeded. ' +
@@ -32,7 +32,7 @@ function growThreadCountAndReturnNextAvailable() {
32 'Ensure that you call .destroy() on it if you no longer want to read from it, ' +
33 'and did not read to the end. If you use .pipe() this should be automatic.',
34 );
35 - let newArray = new Uint16Array(newSize);
35 + const newArray = new Uint16Array(newSize);
36 newArray.set(oldArray);
37 nextAvailableThreadIDs = newArray;
38 nextAvailableThreadIDs[0] = oldSize + 1;
@@ -44,7 +44,7 @@ function growThreadCountAndReturnNextAvailable() {
44 }
45
46 export function allocThreadID(): ThreadID {
47 - let nextID = nextAvailableThreadIDs[0];
47 + const nextID = nextAvailableThreadIDs[0];
48 if (nextID === 0) {
49 return growThreadCountAndReturnNextAvailable();
50 }
packages/react-dom/src/test-utils/ReactTestUtils.js
+2 -4
@@ -90,7 +90,7 @@ function findAllInRenderedFiberTreeInternal(fiber, test) {
90 return [];
91 }
92 let node = currentParent;
93 - let ret = [];
93 + const ret = [];
94 while (true) {
95 if (
96 node.tag === HostComponent ||
@@ -415,8 +415,6 @@ function shouldPreventMouseEvent(name, type, props) {
415 * @return {?function} The stored callback.
416 */
417 function getListener(inst: Fiber, registrationName: string) {
418 - let listener;
419 -
418 // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not
419 // live here; needs to be moved to a better place soon
420 const stateNode = inst.stateNode;
@@ -429,7 +427,7 @@ function getListener(inst: Fiber, registrationName: string) {
427 // Work in progress.
428 return null;
429 }
432 - listener = props[registrationName];
430 + const listener = props[registrationName];
431 if (shouldPreventMouseEvent(registrationName, inst.type, props)) {
432 return null;
433 }
packages/react-dom/src/test-utils/ReactTestUtilsAct.js
+3 -5
@@ -83,13 +83,11 @@ function act(callback: () => Thenable<mixed>): Thenable<void> {
83 );
84 }
85 }
86 - let previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
87 - let previousIsSomeRendererActing;
88 - let previousIsThisRendererActing;
86 + const previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
87 actingUpdatesScopeDepth++;
88
91 - previousIsSomeRendererActing = IsSomeRendererActing.current;
92 - previousIsThisRendererActing = IsThisRendererActing.current;
89 + const previousIsSomeRendererActing = IsSomeRendererActing.current;
90 + const previousIsThisRendererActing = IsThisRendererActing.current;
91 IsSomeRendererActing.current = true;
92 IsThisRendererActing.current = true;
93
packages/react-flight-dom-relay/src/ReactFlightDOMRelayClient.js
+1 -1
@@ -24,7 +24,7 @@ function parseModel<T>(response: Response<T>, targetObj, key, value) {
24 (value: any)[i] = parseModel(response, value, '' + i, value[i]);
25 }
26 } else {
27 - for (let innerKey in value) {
27 + for (const innerKey in value) {
28 (value: any)[innerKey] = parseModel(
29 response,
30 value,
packages/react-flight-dom-relay/src/ReactFlightDOMRelayServer.js
+1 -1
@@ -20,7 +20,7 @@ function render(
20 destination: Destination,
21 config: BundlerConfig,
22 ): void {
23 - let request = createRequest(model, destination, config);
23 + const request = createRequest(model, destination, config);
24 startWork(request);
25 }
26
packages/react-flight-dom-relay/src/ReactFlightDOMRelayServerHostConfig.js
+5 -5
@@ -84,17 +84,17 @@ function convertModelToJSON(
84 key: string,
85 model: ReactModel,
86 ): JSONValue {
87 - let json = resolveModelToJSON(request, parent, key, model);
87 + const json = resolveModelToJSON(request, parent, key, model);
88 if (typeof json === 'object' && json !== null) {
89 if (Array.isArray(json)) {
90 - let jsonArray: Array<JSONValue> = [];
90 + const jsonArray: Array<JSONValue> = [];
91 for (let i = 0; i < json.length; i++) {
92 jsonArray[i] = convertModelToJSON(request, json, '' + i, json[i]);
93 }
94 return jsonArray;
95 } else {
96 - let jsonObj: {[key: string]: JSONValue} = {};
97 - for (let nextKey in json) {
96 + const jsonObj: {[key: string]: JSONValue} = {};
97 + for (const nextKey in json) {
98 jsonObj[nextKey] = convertModelToJSON(
99 request,
100 json,
@@ -113,7 +113,7 @@ export function processModelChunk(
113 id: number,
114 model: ReactModel,
115 ): Chunk {
116 - let json = convertModelToJSON(request, {}, '', model);
116 + const json = convertModelToJSON(request, {}, '', model);
117 return {
118 type: 'json',
119 id: id,
packages/react-flight-dom-relay/src/__tests__/ReactFlightDOMRelay-test.internal.js
+13 -13
@@ -27,9 +27,9 @@ describe('ReactFlightDOMRelay', () => {
27 });
28
29 function readThrough(data) {
30 - let response = ReactDOMFlightRelayClient.createResponse();
30 + const response = ReactDOMFlightRelayClient.createResponse();
31 for (let i = 0; i < data.length; i++) {
32 - let chunk = data[i];
32 + const chunk = data[i];
33 if (chunk.type === 'json') {
34 ReactDOMFlightRelayClient.resolveModel(response, chunk.id, chunk.json);
35 } else {
@@ -42,7 +42,7 @@ describe('ReactFlightDOMRelay', () => {
42 }
43 }
44 ReactDOMFlightRelayClient.close(response);
45 - let model = response.readRoot();
45 + const model = response.readRoot();
46 return model;
47 }
48
@@ -51,7 +51,7 @@ describe('ReactFlightDOMRelay', () => {
51 return ReactDOMFlightRelayServerRuntime.serverBlock(render);
52 }
53 return function(...args) {
54 - let curriedLoad = () => {
54 + const curriedLoad = () => {
55 return load(...args);
56 };
57 return ReactDOMFlightRelayServerRuntime.serverBlock(render, curriedLoad);
@@ -71,7 +71,7 @@ describe('ReactFlightDOMRelay', () => {
71 ),
72 };
73 }
74 - let transport = [];
74 + const transport = [];
75 ReactDOMFlightRelayServer.render(
76 {
77 foo: <Foo />,
@@ -79,7 +79,7 @@ describe('ReactFlightDOMRelay', () => {
79 transport,
80 );
81
82 - let model = readThrough(transport);
82 + const model = readThrough(transport);
83 expect(model).toEqual({
84 foo: {
85 bar: (
@@ -104,20 +104,20 @@ describe('ReactFlightDOMRelay', () => {
104 </span>
105 );
106 }
107 - let loadUser = block(User, load);
108 - let model = {
107 + const loadUser = block(User, load);
108 + const model = {
109 User: loadUser('Seb', 'Smith'),
110 };
111
112 - let transport = [];
112 + const transport = [];
113 ReactDOMFlightRelayServer.render(model, transport);
114
115 - let modelClient = readThrough(transport);
115 + const modelClient = readThrough(transport);
116
117 - let container = document.createElement('div');
118 - let root = ReactDOM.createRoot(container);
117 + const container = document.createElement('div');
118 + const root = ReactDOM.createRoot(container);
119 act(() => {
120 - let UserClient = modelClient.User;
120 + const UserClient = modelClient.User;
121 root.render(<UserClient greeting="Hello" />);
122 });
123
packages/react-flight-dom-webpack/src/ReactFlightClientWebpackBundlerConfig.js
+9 -9
@@ -31,14 +31,14 @@ const chunkCache: Map<string, null | Promise<any> | Error> = new Map();
31 // Start preloading the modules since we might need them soon.
32 // This function doesn't suspend.
33 export function preloadModule<T>(moduleData: ModuleReference<T>): void {
34 - let chunks = moduleData.chunks;
34 + const chunks = moduleData.chunks;
35 for (let i = 0; i < chunks.length; i++) {
36 - let chunkId = chunks[i];
37 - let entry = chunkCache.get(chunkId);
36 + const chunkId = chunks[i];
37 + const entry = chunkCache.get(chunkId);
38 if (entry === undefined) {
39 - let thenable = __webpack_chunk_load__(chunkId);
40 - let resolve = chunkCache.set.bind(chunkCache, chunkId, null);
41 - let reject = chunkCache.set.bind(chunkCache, chunkId);
39 + const thenable = __webpack_chunk_load__(chunkId);
40 + const resolve = chunkCache.set.bind(chunkCache, chunkId, null);
41 + const reject = chunkCache.set.bind(chunkCache, chunkId);
42 thenable.then(resolve, reject);
43 chunkCache.set(chunkId, thenable);
44 }
@@ -48,10 +48,10 @@ export function preloadModule<T>(moduleData: ModuleReference<T>): void {
48 // Actually require the module or suspend if it's not yet ready.
49 // Increase priority if necessary.
50 export function requireModule<T>(moduleData: ModuleReference<T>): T {
51 - let chunks = moduleData.chunks;
51 + const chunks = moduleData.chunks;
52 for (let i = 0; i < chunks.length; i++) {
53 - let chunkId = chunks[i];
54 - let entry = chunkCache.get(chunkId);
53 + const chunkId = chunks[i];
54 + const entry = chunkCache.get(chunkId);
55 if (entry !== null) {
56 // We assume that preloadModule has been called before.
57 // So we don't expect to see entry being undefined here, that's an error.
packages/react-flight-dom-webpack/src/ReactFlightDOMClient.js
+6 -6
@@ -21,13 +21,13 @@ function startReadingFromStream<T>(
21 response: FlightResponse<T>,
22 stream: ReadableStream,
23 ): void {
24 - let reader = stream.getReader();
24 + const reader = stream.getReader();
25 function progress({done, value}) {
26 if (done) {
27 close(response);
28 return;
29 }
30 - let buffer: Uint8Array = (value: any);
30 + const buffer: Uint8Array = (value: any);
31 processBinaryChunk(response, buffer);
32 return reader.read().then(progress, error);
33 }
@@ -40,7 +40,7 @@ function startReadingFromStream<T>(
40 function createFromReadableStream<T>(
41 stream: ReadableStream,
42 ): FlightResponse<T> {
43 - let response: FlightResponse<T> = createResponse();
43 + const response: FlightResponse<T> = createResponse();
44 startReadingFromStream(response, stream);
45 return response;
46 }
@@ -48,7 +48,7 @@ function createFromReadableStream<T>(
48 function createFromFetch<T>(
49 promiseForResponse: Promise<Response>,
50 ): FlightResponse<T> {
51 - let response: FlightResponse<T> = createResponse();
51 + const response: FlightResponse<T> = createResponse();
52 promiseForResponse.then(
53 function(r) {
54 startReadingFromStream(response, (r.body: any));
@@ -61,10 +61,10 @@ function createFromFetch<T>(
61 }
62
63 function createFromXHR<T>(request: XMLHttpRequest): FlightResponse<T> {
64 - let response: FlightResponse<T> = createResponse();
64 + const response: FlightResponse<T> = createResponse();
65 let processedLength = 0;
66 function progress(e: ProgressEvent): void {
67 - let chunk = request.responseText;
67 + const chunk = request.responseText;
68 processStringChunk(response, chunk, processedLength);
69 processedLength = chunk.length;
70 }
packages/react-flight-dom-webpack/src/ReactFlightDOMServerNode.js
+1 -1
@@ -26,7 +26,7 @@ function pipeToNodeWritable(
26 destination: Writable,
27 webpackMap: BundlerConfig,
28 ): void {
29 - let request = createRequest(model, destination, webpackMap);
29 + const request = createRequest(model, destination, webpackMap);
30 destination.on('drain', createDrainHandler(destination, request));
31 startWork(request);
32 }
packages/react-flight-dom-webpack/src/__tests__/ReactFlightDOM-test.js
+32 -32
@@ -47,8 +47,8 @@ describe('ReactFlightDOM', () => {
47 });
48
49 function getTestStream() {
50 - let writable = new Stream.PassThrough();
51 - let readable = new ReadableStream({
50 + const writable = new Stream.PassThrough();
51 + const readable = new ReadableStream({
52 start(controller) {
53 writable.on('data', chunk => {
54 controller.enqueue(chunk);
@@ -65,7 +65,7 @@ describe('ReactFlightDOM', () => {
65 }
66
67 function block(render, load) {
68 - let idx = webpackModuleIdx++;
68 + const idx = webpackModuleIdx++;
69 webpackModules[idx] = {
70 d: render,
71 };
@@ -80,7 +80,7 @@ describe('ReactFlightDOM', () => {
80 };
81 }
82 return function(...args) {
83 - let curriedLoad = () => {
83 + const curriedLoad = () => {
84 return load(...args);
85 };
86 return ReactFlightDOMServerRuntime.serverBlock(
@@ -118,17 +118,17 @@ describe('ReactFlightDOM', () => {
118 }
119
120 function App() {
121 - let model = {
121 + const model = {
122 html: <HTML />,
123 };
124 return model;
125 }
126
127 - let {writable, readable} = getTestStream();
127 + const {writable, readable} = getTestStream();
128 ReactFlightDOMServer.pipeToNodeWritable(<App />, writable, webpackMap);
129 - let response = ReactFlightDOMClient.createFromReadableStream(readable);
129 + const response = ReactFlightDOMClient.createFromReadableStream(readable);
130 await waitForSuspense(() => {
131 - let model = response.readRoot();
131 + const model = response.readRoot();
132 expect(model).toEqual({
133 html: (
134 <div>
@@ -141,7 +141,7 @@ describe('ReactFlightDOM', () => {
141 });
142
143 it.experimental('should resolve the root', async () => {
144 - let {Suspense} = React;
144 + const {Suspense} = React;
145
146 // Model
147 function Text({children}) {
@@ -173,16 +173,16 @@ describe('ReactFlightDOM', () => {
173 );
174 }
175
176 - let {writable, readable} = getTestStream();
176 + const {writable, readable} = getTestStream();
177 ReactFlightDOMServer.pipeToNodeWritable(
178 <RootModel />,
179 writable,
180 webpackMap,
181 );
182 - let response = ReactFlightDOMClient.createFromReadableStream(readable);
182 + const response = ReactFlightDOMClient.createFromReadableStream(readable);
183
184 - let container = document.createElement('div');
185 - let root = ReactDOM.createRoot(container);
184 + const container = document.createElement('div');
185 + const root = ReactDOM.createRoot(container);
186 await act(async () => {
187 root.render(<App response={response} />);
188 });
@@ -192,7 +192,7 @@ describe('ReactFlightDOM', () => {
192 });
193
194 it.experimental('should not get confused by $', async () => {
195 - let {Suspense} = React;
195 + const {Suspense} = React;
196
197 // Model
198 function RootModel() {
@@ -211,16 +211,16 @@ describe('ReactFlightDOM', () => {
211 );
212 }
213
214 - let {writable, readable} = getTestStream();
214 + const {writable, readable} = getTestStream();
215 ReactFlightDOMServer.pipeToNodeWritable(
216 <RootModel />,
217 writable,
218 webpackMap,
219 );
220 - let response = ReactFlightDOMClient.createFromReadableStream(readable);
220 + const response = ReactFlightDOMClient.createFromReadableStream(readable);
221
222 - let container = document.createElement('div');
223 - let root = ReactDOM.createRoot(container);
222 + const container = document.createElement('div');
223 + const root = ReactDOM.createRoot(container);
224 await act(async () => {
225 root.render(<App response={response} />);
226 });
@@ -228,7 +228,7 @@ describe('ReactFlightDOM', () => {
228 });
229
230 it.experimental('should not get confused by @', async () => {
231 - let {Suspense} = React;
231 + const {Suspense} = React;
232
233 // Model
234 function RootModel() {
@@ -247,16 +247,16 @@ describe('ReactFlightDOM', () => {
247 );
248 }
249
250 - let {writable, readable} = getTestStream();
250 + const {writable, readable} = getTestStream();
251 ReactFlightDOMServer.pipeToNodeWritable(
252 <RootModel />,
253 writable,
254 webpackMap,
255 );
256 - let response = ReactFlightDOMClient.createFromReadableStream(readable);
256 + const response = ReactFlightDOMClient.createFromReadableStream(readable);
257
258 - let container = document.createElement('div');
259 - let root = ReactDOM.createRoot(container);
258 + const container = document.createElement('div');
259 + const root = ReactDOM.createRoot(container);
260 await act(async () => {
261 root.render(<App response={response} />);
262 });
@@ -264,7 +264,7 @@ describe('ReactFlightDOM', () => {
264 });
265
266 it.experimental('should progressively reveal Blocks', async () => {
267 - let {Suspense} = React;
267 + const {Suspense} = React;
268
269 class ErrorBoundary extends React.Component {
270 state = {hasError: false, error: null};
@@ -311,7 +311,7 @@ describe('ReactFlightDOM', () => {
311 function DelayedText({children}, data) {
312 return <Text>{children}</Text>;
313 }
314 - let loadBlock = block(DelayedText, load);
314 + const loadBlock = block(DelayedText, load);
315 return [loadBlock(), _resolve, _reject];
316 }
317
@@ -328,7 +328,7 @@ describe('ReactFlightDOM', () => {
328 games: <GamesModel>:games:</GamesModel>,
329 };
330 }
331 - let profileModel = {
331 + const profileModel = {
332 photos: <PhotosModel>:photos:</PhotosModel>,
333 name: <NameModel>:name:</NameModel>,
334 more: <ProfileMore />,
@@ -336,7 +336,7 @@ describe('ReactFlightDOM', () => {
336
337 // View
338 function ProfileDetails({response}) {
339 - let model = response.readRoot();
339 + const model = response.readRoot();
340 return (
341 <div>
342 {model.name}
@@ -345,7 +345,7 @@ describe('ReactFlightDOM', () => {
345 );
346 }
347 function ProfileSidebar({response}) {
348 - let model = response.readRoot();
348 + const model = response.readRoot();
349 return (
350 <div>
351 {model.photos}
@@ -380,12 +380,12 @@ describe('ReactFlightDOM', () => {
380 );
381 }
382
383 - let {writable, readable} = getTestStream();
383 + const {writable, readable} = getTestStream();
384 ReactFlightDOMServer.pipeToNodeWritable(profileModel, writable, webpackMap);
385 - let response = ReactFlightDOMClient.createFromReadableStream(readable);
385 + const response = ReactFlightDOMClient.createFromReadableStream(readable);
386
387 - let container = document.createElement('div');
388 - let root = ReactDOM.createRoot(container);
387 + const container = document.createElement('div');
388 + const root = ReactDOM.createRoot(container);
389 await act(async () => {
390 root.render(<ProfilePage response={response} />);
391 });
packages/react-flight-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js
+4 -4
@@ -55,16 +55,16 @@ describe('ReactFlightDOMBrowser', () => {
55 }
56
57 function App() {
58 - let model = {
58 + const model = {
59 html: <HTML />,
60 };
61 return model;
62 }
63
64 - let stream = ReactFlightDOMServer.renderToReadableStream(<App />);
65 - let response = ReactFlightDOMClient.createFromReadableStream(stream);
64 + const stream = ReactFlightDOMServer.renderToReadableStream(<App />);
65 + const response = ReactFlightDOMClient.createFromReadableStream(stream);
66 await waitForSuspense(() => {
67 - let model = response.readRoot();
67 + const model = response.readRoot();
68 expect(model).toEqual({
69 html: (
70 <div>
packages/react-interactions/events/src/dom/PressLegacy.js
+3 -3
@@ -174,8 +174,7 @@ function createPressEvent(
174 ({altKey, ctrlKey, metaKey, shiftKey} = nativeEvent);
175 // Only check for one property, checking for all of them is costly. We can assume
176 // if clientX exists, so do the rest.
177 - let eventObject;
178 - eventObject = (touchEvent: any) || (nativeEvent: any);
177 + const eventObject = (touchEvent: any) || (nativeEvent: any);
178 if (eventObject) {
179 ({clientX, clientY, pageX, pageY, screenX, screenY} = eventObject);
180 }
@@ -671,7 +670,8 @@ const pressResponderImpl = {
670 props: PressProps,
671 state: PressState,
672 ): void {
674 - let {pointerType, target, type} = event;
673 + const {pointerType, type} = event;
674 + let target = event.target;
675
676 const nativeEvent: any = event.nativeEvent;
677 const isPressed = state.isPressed;
packages/react-interactions/events/src/dom/__tests__/FocusWithin-test.internal.js
+4 -2
@@ -350,7 +350,9 @@ describe.each(table)('FocusWithin responder', hasPointerEvents => {
350 const Suspense = React.Suspense;
351 let suspend = false;
352 let resolve;
353 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
353 + const promise = new Promise(
354 + resolvePromise => (resolve = resolvePromise),
355 + );
356
357 function Child() {
358 if (suspend) {
@@ -378,7 +380,7 @@ describe.each(table)('FocusWithin responder', hasPointerEvents => {
380 const container2 = document.createElement('div');
381 document.body.appendChild(container2);
382
381 - let root = ReactDOM.createRoot(container2);
383 + const root = ReactDOM.createRoot(container2);
384 root.render(<Component />);
385 Scheduler.unstable_flushAll();
386 jest.runAllTimers();
packages/react-interactions/events/src/dom/__tests__/PressLegacy-test.internal.js
+1 -1
@@ -615,7 +615,7 @@ describe.each(environmentTable)('Press responder', hasPointerEvents => {
615 });
616
617 it('press retention offset can be configured', () => {
618 - let localEvents = [];
618 + const localEvents = [];
619 const localRef = React.createRef();
620 const createEventHandler = msg => () => {
621 localEvents.push(msg);
packages/react-native-renderer/src/ReactFabricComponentTree.js
+1 -1
@@ -12,7 +12,7 @@ function getInstanceFromInstance(instanceHandle) {
12 }
13
14 function getTagFromInstance(inst) {
15 - let nativeInstance = inst.stateNode.canonical;
15 + const nativeInstance = inst.stateNode.canonical;
16 invariant(
17 nativeInstance._nativeTag,
18 'All native instances should have a tag.',
packages/react-native-renderer/src/ReactNativeFiberHostComponent.js
+1 -1
@@ -82,7 +82,7 @@ class ReactNativeFiberHostComponent {
82 // Already a node handle
83 relativeNode = relativeToNativeNode;
84 } else {
85 - let nativeNode: ReactNativeFiberHostComponent = (relativeToNativeNode: any);
85 + const nativeNode: ReactNativeFiberHostComponent = (relativeToNativeNode: any);
86 if (nativeNode._nativeTag) {
87 relativeNode = nativeNode._nativeTag;
88 }
packages/react-native-renderer/src/ReactNativeRenderer.js
+1 -1
@@ -219,7 +219,7 @@ setBatchingImplementation(
219 );
220
221 function computeComponentStackForErrorReporting(reactTag: number): string {
222 - let fiber = getClosestInstanceFromNode(reactTag);
222 + const fiber = getClosestInstanceFromNode(reactTag);
223 if (!fiber) {
224 return '';
225 }
packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/InitializeNativeFabricUIManager.js
+2 -2
@@ -28,7 +28,7 @@ function dumpSubtree(info, indent) {
28
29 const RCTFabricUIManager = {
30 __dumpChildSetForJestTestsOnly: function(childSet) {
31 - let result = [];
31 + const result = [];
32 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
33 for (const child of childSet) {
34 result.push(dumpSubtree(child, 0));
@@ -36,7 +36,7 @@ const RCTFabricUIManager = {
36 return result.join('\n');
37 },
38 __dumpHierarchyForJestTestsOnly: function() {
39 - let result = [];
39 + const result = [];
40 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
41 for (const [rootTag, childSet] of roots) {
42 result.push(rootTag);
packages/react-native-renderer/src/__mocks__/react-native/Libraries/ReactPrivate/UIManager.js
+1 -1
@@ -15,7 +15,7 @@ import invariant from 'shared/invariant';
15
16 // Map of viewTag -> {children: [childTag], parent: ?parentTag}
17 const roots = [];
18 -let views = new Map();
18 +const views = new Map();
19
20 function autoCreateRoot(tag) {
21 // Seriously, this is how we distinguish roots in RN.
packages/react-native-renderer/src/__tests__/ReactFabric-test.internal.js
+6 -6
@@ -613,18 +613,18 @@ describe('ReactFabric', () => {
613 1,
614 );
615
616 - let [
616 + const [
617 ,
618 ,
619 ,
620 ,
621 instanceHandle,
622 ] = nativeFabricUIManager.createNode.mock.calls[0];
623 - let [
623 + const [
624 dispatchEvent,
625 ] = nativeFabricUIManager.registerEventHandler.mock.calls[0];
626
627 - let touchEvent = {
627 + const touchEvent = {
628 touches: [],
629 changedTouches: [],
630 };
@@ -708,7 +708,7 @@ describe('ReactFabric', () => {
708 1,
709 );
710
711 - let [
711 + const [
712 dispatchEvent,
713 ] = nativeFabricUIManager.registerEventHandler.mock.calls[0];
714
@@ -894,7 +894,7 @@ describe('ReactFabric', () => {
894 uiViewClassName: 'RCTView',
895 }));
896
897 - let viewRef = React.createRef();
897 + const viewRef = React.createRef();
898 ReactFabric.render(<View ref={viewRef} />, 11);
899
900 expect(TextInputState.blurTextInput).not.toBeCalled();
@@ -911,7 +911,7 @@ describe('ReactFabric', () => {
911 uiViewClassName: 'RCTView',
912 }));
913
914 - let viewRef = React.createRef();
914 + const viewRef = React.createRef();
915 ReactFabric.render(<View ref={viewRef} />, 11);
916
917 expect(TextInputState.focusTextInput).not.toBeCalled();
packages/react-native-renderer/src/__tests__/ReactFabricAndNative-test.internal.js
+10 -10
@@ -40,7 +40,7 @@ describe('created with ReactFabric called with ReactNative', () => {
40 uiViewClassName: 'RCTView',
41 }));
42
43 - let ref = React.createRef();
43 + const ref = React.createRef();
44
45 class Component extends React.Component {
46 render() {
@@ -50,7 +50,7 @@ describe('created with ReactFabric called with ReactNative', () => {
50
51 ReactFabric.render(<Component ref={ref} />, 11);
52
53 - let instance = ReactNative.findHostInstance_DEPRECATED(ref.current);
53 + const instance = ReactNative.findHostInstance_DEPRECATED(ref.current);
54 expect(instance._nativeTag).toBe(2);
55 });
56
@@ -60,7 +60,7 @@ describe('created with ReactFabric called with ReactNative', () => {
60 uiViewClassName: 'RCTView',
61 }));
62
63 - let ref = React.createRef();
63 + const ref = React.createRef();
64
65 class Component extends React.Component {
66 render() {
@@ -70,7 +70,7 @@ describe('created with ReactFabric called with ReactNative', () => {
70
71 ReactFabric.render(<Component ref={ref} />, 11);
72
73 - let handle = ReactNative.findNodeHandle(ref.current);
73 + const handle = ReactNative.findNodeHandle(ref.current);
74 expect(handle).toBe(2);
75 });
76
@@ -81,7 +81,7 @@ describe('created with ReactFabric called with ReactNative', () => {
81 uiViewClassName: 'RCTView',
82 }));
83
84 - let ref = React.createRef();
84 + const ref = React.createRef();
85
86 ReactFabric.render(<View title="bar" ref={ref} />, 11);
87 expect(nativeFabricUIManager.dispatchCommand).not.toBeCalled();
@@ -118,7 +118,7 @@ describe('created with ReactNative called with ReactFabric', () => {
118 uiViewClassName: 'RCTView',
119 }));
120
121 - let ref = React.createRef();
121 + const ref = React.createRef();
122
123 class Component extends React.Component {
124 render() {
@@ -128,7 +128,7 @@ describe('created with ReactNative called with ReactFabric', () => {
128
129 ReactNative.render(<Component ref={ref} />, 11);
130
131 - let instance = ReactFabric.findHostInstance_DEPRECATED(ref.current);
131 + const instance = ReactFabric.findHostInstance_DEPRECATED(ref.current);
132 expect(instance._nativeTag).toBe(3);
133 });
134
@@ -138,7 +138,7 @@ describe('created with ReactNative called with ReactFabric', () => {
138 uiViewClassName: 'RCTView',
139 }));
140
141 - let ref = React.createRef();
141 + const ref = React.createRef();
142
143 class Component extends React.Component {
144 render() {
@@ -148,7 +148,7 @@ describe('created with ReactNative called with ReactFabric', () => {
148
149 ReactNative.render(<Component ref={ref} />, 11);
150
151 - let handle = ReactFabric.findNodeHandle(ref.current);
151 + const handle = ReactFabric.findNodeHandle(ref.current);
152 expect(handle).toBe(3);
153 });
154
@@ -159,7 +159,7 @@ describe('created with ReactNative called with ReactFabric', () => {
159 uiViewClassName: 'RCTView',
160 }));
161
162 - let ref = React.createRef();
162 + const ref = React.createRef();
163
164 ReactNative.render(<View title="bar" ref={ref} />, 11);
165 expect(UIManager.dispatchViewManagerCommand).not.toBeCalled();
packages/react-native-renderer/src/__tests__/ReactNativeError-test.internal.js
+2 -2
@@ -68,9 +68,9 @@ describe('ReactNativeError', () => {
68
69 ReactNative.render(<ClassComponent />, 1);
70
71 - let reactTag = ReactNative.findNodeHandle(ref.current);
71 + const reactTag = ReactNative.findNodeHandle(ref.current);
72
73 - let componentStack = normalizeCodeLocInfo(
73 + const componentStack = normalizeCodeLocInfo(
74 computeComponentStackForErrorReporting(reactTag),
75 );
76
packages/react-native-renderer/src/__tests__/ReactNativeMount-test.internal.js
+2 -2
@@ -604,7 +604,7 @@ describe('ReactNative', () => {
604 uiViewClassName: 'RCTView',
605 }));
606
607 - let viewRef = React.createRef();
607 + const viewRef = React.createRef();
608 ReactNative.render(<View ref={viewRef} />, 11);
609
610 expect(TextInputState.blurTextInput).not.toBeCalled();
@@ -621,7 +621,7 @@ describe('ReactNative', () => {
621 uiViewClassName: 'RCTView',
622 }));
623
624 - let viewRef = React.createRef();
624 + const viewRef = React.createRef();
625 ReactNative.render(<View ref={viewRef} />, 11);
626
627 expect(TextInputState.focusTextInput).not.toBeCalled();
packages/react-noop-renderer/flight-modules.js
+2 -2
@@ -9,11 +9,11 @@
9
10 // This file is used as temporary storage for modules generated in Flight tests.
11 let moduleIdx = 0;
12 -let modules: Map<string, Function> = new Map();
12 +const modules: Map<string, Function> = new Map();
13
14 // This simulates what the compiler will do when it replaces render functions with server blocks.
15 export function saveModule(render: Function): string {
16 - let idx = '' + moduleIdx++;
16 + const idx = '' + moduleIdx++;
17 modules.set(idx, render);
18 return idx;
19 }
packages/react-noop-renderer/src/ReactNoopFlightClient.js
+1 -1
@@ -32,7 +32,7 @@ const {createResponse, processStringChunk, close} = ReactFlightClient({
32 });
33
34 function read<T>(source: Source): T {
35 - let response = createResponse(source);
35 + const response = createResponse(source);
36 for (let i = 0; i < source.length; i++) {
37 processStringChunk(response, source[i], 0);
38 }
packages/react-noop-renderer/src/ReactNoopFlightServer.js
+3 -3
@@ -48,9 +48,9 @@ const ReactNoopFlightServer = ReactFlightServer({
48 });
49
50 function render(model: ReactModel): Destination {
51 - let destination: Destination = [];
52 - let bundlerConfig = undefined;
53 - let request = ReactNoopFlightServer.createRequest(
51 + const destination: Destination = [];
52 + const bundlerConfig = undefined;
53 + const request = ReactNoopFlightServer.createRequest(
54 model,
55 destination,
56 bundlerConfig,
packages/react-noop-renderer/src/ReactNoopServer.js
+2 -2
@@ -41,8 +41,8 @@ const ReactNoopServer = ReactFizzServer({
41 });
42
43 function render(children: React$Element<any>): Destination {
44 - let destination: Destination = [];
45 - let request = ReactNoopServer.createRequest(children, destination);
44 + const destination: Destination = [];
45 + const request = ReactNoopServer.createRequest(children, destination);
46 ReactNoopServer.startWork(request);
47 return destination;
48 }
packages/react-noop-renderer/src/createReactNoop.js
+3 -3
@@ -958,7 +958,7 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
958 return;
959 }
960
961 - let bufferedLog = [];
961 + const bufferedLog = [];
962 function log(...args) {
963 bufferedLog.push(...args, '\n');
964 }
@@ -988,7 +988,7 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
988 function logUpdateQueue(updateQueue: UpdateQueue<mixed>, depth) {
989 log(' '.repeat(depth + 1) + 'QUEUED UPDATES');
990 const first = updateQueue.firstBaseUpdate;
991 - let update = first;
991 + const update = first;
992 if (update !== null) {
993 do {
994 log(
@@ -1001,7 +1001,7 @@ function createReactNoop(reconciler: Function, useMutation: boolean) {
1001 const lastPending = updateQueue.shared.pending;
1002 if (lastPending !== null) {
1003 const firstPending = lastPending.next;
1004 - let pendingUpdate = firstPending;
1004 + const pendingUpdate = firstPending;
1005 if (pendingUpdate !== null) {
1006 do {
1007 log(
packages/react-reconciler/src/ReactChildFiber.js
+3 -3
@@ -110,7 +110,7 @@ function coerceRef(
110 current: Fiber | null,
111 element: ReactElement,
112 ) {
113 - let mixedRef = element.ref;
113 + const mixedRef = element.ref;
114 if (
115 mixedRef !== null &&
116 typeof mixedRef !== 'function' &&
@@ -271,8 +271,8 @@ function resolveLazyType<T, P>(
271 ): LazyComponent<T, P> | T {
272 try {
273 // If we can, let's peek at the resulting type.
274 - let payload = lazyComponent._payload;
275 - let init = lazyComponent._init;
274 + const payload = lazyComponent._payload;
275 + const init = lazyComponent._init;
276 return init(payload);
277 } catch (x) {
278 // Leave it in place and let it throw again in the begin phase.
packages/react-reconciler/src/ReactFiber.js
+2 -4
@@ -528,7 +528,7 @@ export function resetWorkInProgress(
528 workInProgress.firstEffect = null;
529 workInProgress.lastEffect = null;
530
531 - let current = workInProgress.alternate;
531 + const current = workInProgress.alternate;
532 if (current === null) {
533 // Reset to createFiber's initial values.
534 workInProgress.childExpirationTime = NoWork;
@@ -610,8 +610,6 @@ export function createFiberFromTypeAndProps(
610 mode: TypeOfMode,
611 expirationTime: ExpirationTime,
612 ): Fiber {
613 - let fiber;
614 -
613 let fiberTag = IndeterminateComponent;
614 // The resolved type is set if we know what the final type will be. I.e. it's not lazy.
615 let resolvedType = type;
@@ -731,7 +729,7 @@ export function createFiberFromTypeAndProps(
729 }
730 }
731
734 - fiber = createFiber(fiberTag, pendingProps, key, mode);
732 + const fiber = createFiber(fiberTag, pendingProps, key, mode);
733 fiber.elementType = type;
734 fiber.type = resolvedType;
735 fiber.expirationTime = expirationTime;
packages/react-reconciler/src/ReactFiberBeginWork.js
+27 -26
@@ -370,7 +370,7 @@ function updateMemoComponent(
370 renderExpirationTime: ExpirationTime,
371 ): null | Fiber {
372 if (current === null) {
373 - let type = Component.type;
373 + const type = Component.type;
374 if (
375 isSimpleFunctionComponent(type) &&
376 Component.compare === null &&
@@ -411,7 +411,7 @@ function updateMemoComponent(
411 );
412 }
413 }
414 - let child = createFiberFromTypeAndProps(
414 + const child = createFiberFromTypeAndProps(
415 Component.type,
416 null,
417 nextProps,
@@ -438,7 +438,7 @@ function updateMemoComponent(
438 );
439 }
440 }
441 - let currentChild = ((current.child: any): Fiber); // This is always exactly one child
441 + const currentChild = ((current.child: any): Fiber); // This is always exactly one child
442 if (updateExpirationTime < renderExpirationTime) {
443 // This will be the props with resolved defaultProps,
444 // unlike current.memoizedProps which will be the unresolved ones.
@@ -456,7 +456,7 @@ function updateMemoComponent(
456 }
457 // React DevTools reads this flag.
458 workInProgress.effectTag |= PerformedWork;
459 - let newChild = createWorkInProgress(currentChild, nextProps);
459 + const newChild = createWorkInProgress(currentChild, nextProps);
460 newChild.ref = workInProgress.ref;
461 newChild.return = workInProgress;
462 workInProgress.child = newChild;
@@ -485,8 +485,8 @@ function updateSimpleMemoComponent(
485 // so let's just skip over it to find memo() outer wrapper.
486 // Inner props for memo are validated later.
487 const lazyComponent: LazyComponentType<any, any> = outerMemoType;
488 - let payload = lazyComponent._payload;
489 - let init = lazyComponent._init;
488 + const payload = lazyComponent._payload;
489 + const init = lazyComponent._init;
490 try {
491 outerMemoType = init(payload);
492 } catch (x) {
@@ -855,7 +855,7 @@ function updateClassComponent(
855 renderExpirationTime,
856 );
857 if (__DEV__) {
858 - let inst = workInProgress.stateNode;
858 + const inst = workInProgress.stateNode;
859 if (inst.props !== nextProps) {
860 if (!didWarnAboutReassigningProps) {
861 console.error(
@@ -1015,7 +1015,7 @@ function updateHostRoot(current, workInProgress, renderExpirationTime) {
1015 // be any children to hydrate which is effectively the same thing as
1016 // not hydrating.
1017
1018 - let child = mountChildFibers(
1018 + const child = mountChildFibers(
1019 workInProgress,
1020 null,
1021 nextChildren,
@@ -1127,9 +1127,9 @@ function mountLazyComponent(
1127 }
1128
1129 const props = workInProgress.pendingProps;
1130 - let lazyComponent: LazyComponentType<any, any> = elementType;
1131 - let payload = lazyComponent._payload;
1132 - let init = lazyComponent._init;
1130 + const lazyComponent: LazyComponentType<any, any> = elementType;
1131 + const payload = lazyComponent._payload;
1132 + const init = lazyComponent._init;
1133 let Component = init(payload);
1134 // Store the unwrapped component in the type.
1135 workInProgress.type = Component;
@@ -2194,9 +2194,9 @@ function mountDehydratedSuspenseComponent(
2194 // a protocol to transfer that time, we'll just estimate it by using the current
2195 // time. This will mean that Suspense timeouts are slightly shifted to later than
2196 // they should be.
2197 - let serverDisplayTime = requestCurrentTimeForUpdate();
2197 + const serverDisplayTime = requestCurrentTimeForUpdate();
2198 // Schedule a normal pri update to render this content.
2199 - let newExpirationTime = computeAsyncExpiration(serverDisplayTime);
2199 + const newExpirationTime = computeAsyncExpiration(serverDisplayTime);
2200 if (enableSchedulerTracing) {
2201 markSpawnedWork(newExpirationTime);
2202 }
@@ -2252,7 +2252,7 @@ function updateDehydratedSuspenseComponent(
2252 if (suspenseState.retryTime <= renderExpirationTime) {
2253 // This render is even higher pri than we've seen before, let's try again
2254 // at even higher pri.
2255 - let attemptHydrationAtExpirationTime = renderExpirationTime + 1;
2255 + const attemptHydrationAtExpirationTime = renderExpirationTime + 1;
2256 suspenseState.retryTime = attemptHydrationAtExpirationTime;
2257 scheduleUpdateOnFiber(current, attemptHydrationAtExpirationTime);
2258 // TODO: Early abort this render.
@@ -2332,7 +2332,7 @@ function scheduleWorkOnFiber(
2332 if (fiber.expirationTime < renderExpirationTime) {
2333 fiber.expirationTime = renderExpirationTime;
2334 }
2335 - let alternate = fiber.alternate;
2335 + const alternate = fiber.alternate;
2336 if (alternate !== null && alternate.expirationTime < renderExpirationTime) {
2337 alternate.expirationTime = renderExpirationTime;
2338 }
@@ -2391,7 +2391,7 @@ function findLastContentRow(firstChild: null | Fiber): null | Fiber {
2391 let row = firstChild;
2392 let lastContentRow: null | Fiber = null;
2393 while (row !== null) {
2394 - let currentRow = row.alternate;
2394 + const currentRow = row.alternate;
2395 // New rows can't be content rows.
2396 if (currentRow !== null && findFirstSuspended(currentRow) === null) {
2397 lastContentRow = row;
@@ -2483,10 +2483,11 @@ function validateTailOptions(
2483
2484 function validateSuspenseListNestedChild(childSlot: mixed, index: number) {
2485 if (__DEV__) {
2486 - let isArray = Array.isArray(childSlot);
2487 - let isIterable = !isArray && typeof getIteratorFn(childSlot) === 'function';
2486 + const isArray = Array.isArray(childSlot);
2487 + const isIterable =
2488 + !isArray && typeof getIteratorFn(childSlot) === 'function';
2489 if (isArray || isIterable) {
2489 - let type = isArray ? 'array' : 'iterable';
2490 + const type = isArray ? 'array' : 'iterable';
2491 console.error(
2492 'A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' +
2493 'an additional SuspenseList to configure its revealOrder: ' +
@@ -2521,7 +2522,7 @@ function validateSuspenseListChildren(
2522 }
2523 }
2524 } else {
2524 - let iteratorFn = getIteratorFn(children);
2525 + const iteratorFn = getIteratorFn(children);
2526 if (typeof iteratorFn === 'function') {
2527 const childrenIterator = iteratorFn.call(children);
2528 if (childrenIterator) {
@@ -2555,7 +2556,7 @@ function initSuspenseListRenderState(
2556 tailMode: SuspenseListTailMode,
2557 lastEffectBeforeRendering: null | Fiber,
2558 ): void {
2558 - let renderState: null | SuspenseListRenderState =
2559 + const renderState: null | SuspenseListRenderState =
2560 workInProgress.memoizedState;
2561 if (renderState === null) {
2562 workInProgress.memoizedState = ({
@@ -2606,7 +2607,7 @@ function updateSuspenseListComponent(
2607
2608 let suspenseContext: SuspenseContext = suspenseStackCursor.current;
2609
2609 - let shouldForceFallback = hasSuspenseContext(
2610 + const shouldForceFallback = hasSuspenseContext(
2611 suspenseContext,
2612 (ForceSuspenseFallback: SuspenseContext),
2613 );
@@ -2640,7 +2641,7 @@ function updateSuspenseListComponent(
2641 } else {
2642 switch (revealOrder) {
2643 case 'forwards': {
2643 - let lastContentRow = findLastContentRow(workInProgress.child);
2644 + const lastContentRow = findLastContentRow(workInProgress.child);
2645 let tail;
2646 if (lastContentRow === null) {
2647 // The whole list is part of the tail.
@@ -2672,14 +2673,14 @@ function updateSuspenseListComponent(
2673 let row = workInProgress.child;
2674 workInProgress.child = null;
2675 while (row !== null) {
2675 - let currentRow = row.alternate;
2676 + const currentRow = row.alternate;
2677 // New rows can't be content rows.
2678 if (currentRow !== null && findFirstSuspended(currentRow) === null) {
2679 // This is the beginning of the main content.
2680 workInProgress.child = row;
2681 break;
2682 }
2682 - let nextRow = row.sibling;
2683 + const nextRow = row.sibling;
2684 row.sibling = tail;
2685 tail = row;
2686 row = nextRow;
@@ -3227,7 +3228,7 @@ function beginWork(
3228 // If nothing suspended before and we're rendering the same children,
3229 // then the tail doesn't matter. Anything new that suspends will work
3230 // in the "together" mode, so we can continue from the state we had.
3230 - let renderState = workInProgress.memoizedState;
3231 + const renderState = workInProgress.memoizedState;
3232 if (renderState !== null) {
3233 // Reset to the "together" mode in case we've started a different
3234 // update in the past but didn't complete it.
packages/react-reconciler/src/ReactFiberClassComponent.js
+1 -1
@@ -540,7 +540,7 @@ function constructClassInstance(
540
541 if (__DEV__) {
542 if ('contextType' in ctor) {
543 - let isValid =
543 + const isValid =
544 // Allow null for conditional declaration
545 contextType === null ||
546 (contextType !== undefined &&
packages/react-reconciler/src/ReactFiberCommitWork.js
+4 -4
@@ -347,7 +347,7 @@ function commitBeforeMutationLifeCycles(
347
348 function commitHookEffectListUnmount(tag: number, finishedWork: Fiber) {
349 const updateQueue: FunctionComponentUpdateQueue | null = (finishedWork.updateQueue: any);
350 - let lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
350 + const lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
351 if (lastEffect !== null) {
352 const firstEffect = lastEffect.next;
353 let effect = firstEffect;
@@ -367,7 +367,7 @@ function commitHookEffectListUnmount(tag: number, finishedWork: Fiber) {
367
368 function commitHookEffectListMount(tag: number, finishedWork: Fiber) {
369 const updateQueue: FunctionComponentUpdateQueue | null = (finishedWork.updateQueue: any);
370 - let lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
370 + const lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
371 if (lastEffect !== null) {
372 const firstEffect = lastEffect.next;
373 let effect = firstEffect;
@@ -419,7 +419,7 @@ function commitHookEffectListMount(tag: number, finishedWork: Fiber) {
419 function schedulePassiveEffects(finishedWork: Fiber) {
420 if (runAllPassiveEffectDestroysBeforeCreates) {
421 const updateQueue: FunctionComponentUpdateQueue | null = (finishedWork.updateQueue: any);
422 - let lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
422 + const lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;
423 if (lastEffect !== null) {
424 const firstEffect = lastEffect.next;
425 let effect = firstEffect;
@@ -1755,7 +1755,7 @@ function commitWork(current: Fiber | null, finishedWork: Fiber): void {
1755 }
1756
1757 function commitSuspenseComponent(finishedWork: Fiber) {
1758 - let newState: SuspenseState | null = finishedWork.memoizedState;
1758 + const newState: SuspenseState | null = finishedWork.memoizedState;
1759
1760 let newDidTimeout;
1761 let primaryChildParent = finishedWork;
packages/react-reconciler/src/ReactFiberCompleteWork.js
+17 -17
@@ -443,7 +443,7 @@ if (supportsMutation) {
443 // No changes, just reuse the existing instance.
444 } else {
445 const container = portalOrRoot.containerInfo;
446 - let newChildSet = createContainerChildSet(container);
446 + const newChildSet = createContainerChildSet(container);
447 // If children might have changed, we have to add them all to the set.
448 appendAllChildrenToContainer(newChildSet, workInProgress, false, false);
449 portalOrRoot.pendingChildren = newChildSet;
@@ -489,7 +489,7 @@ if (supportsMutation) {
489 workInProgress.stateNode = currentInstance;
490 return;
491 }
492 - let newInstance = cloneInstance(
492 + const newInstance = cloneInstance(
493 currentInstance,
494 updatePayload,
495 type,
@@ -672,7 +672,7 @@ function completeWork(
672 if (current === null || current.child === null) {
673 // If we hydrated, pop so that we can delete any remaining children
674 // that weren't hydrated.
675 - let wasHydrated = popHydrationState(workInProgress);
675 + const wasHydrated = popHydrationState(workInProgress);
676 if (wasHydrated) {
677 // If we hydrated, then we'll need to schedule an update for
678 // the commit side-effects on the root.
@@ -722,7 +722,7 @@ function completeWork(
722 // "stack" as the parent. Then append children as we go in beginWork
723 // or completeWork depending on whether we want to add them top->down or
724 // bottom->up. Top->down is faster in IE11.
725 - let wasHydrated = popHydrationState(workInProgress);
725 + const wasHydrated = popHydrationState(workInProgress);
726 if (wasHydrated) {
727 // TODO: Move this and createInstance step into the beginPhase
728 // to consolidate.
@@ -748,7 +748,7 @@ function completeWork(
748 }
749 }
750 } else {
751 - let instance = createInstance(
751 + const instance = createInstance(
752 type,
753 newProps,
754 rootContainerInstance,
@@ -796,7 +796,7 @@ function completeWork(
796 return null;
797 }
798 case HostText: {
799 - let newText = newProps;
799 + const newText = newProps;
800 if (current && workInProgress.stateNode != null) {
801 const oldText = current.memoizedProps;
802 // If we have an alternate, that means this is an update and we need
@@ -813,7 +813,7 @@ function completeWork(
813 }
814 const rootContainerInstance = getRootHostContainer();
815 const currentHostContext = getHostContext();
816 - let wasHydrated = popHydrationState(workInProgress);
816 + const wasHydrated = popHydrationState(workInProgress);
817 if (wasHydrated) {
818 if (prepareToHydrateHostTextInstance(workInProgress)) {
819 markUpdate(workInProgress);
@@ -836,7 +836,7 @@ function completeWork(
836 if (enableSuspenseServerRenderer) {
837 if (nextState !== null && nextState.dehydrated !== null) {
838 if (current === null) {
839 - let wasHydrated = popHydrationState(workInProgress);
839 + const wasHydrated = popHydrationState(workInProgress);
840 invariant(
841 wasHydrated,
842 'A dehydrated suspense component was completed without a hydrated node. ' +
@@ -1002,7 +1002,7 @@ function completeWork(
1002 let didSuspendAlready =
1003 (workInProgress.effectTag & DidCapture) !== NoEffect;
1004
1005 - let renderedTail = renderState.rendering;
1005 + const renderedTail = renderState.rendering;
1006 if (renderedTail === null) {
1007 // We just rendered the head.
1008 if (!didSuspendAlready) {
@@ -1017,13 +1017,13 @@ function completeWork(
1017 // something in the previous committed pass suspended. Otherwise,
1018 // there's no chance so we can skip the expensive call to
1019 // findFirstSuspended.
1020 - let cannotBeSuspended =
1020 + const cannotBeSuspended =
1021 renderHasNotSuspendedYet() &&
1022 (current === null || (current.effectTag & DidCapture) === NoEffect);
1023 if (!cannotBeSuspended) {
1024 let row = workInProgress.child;
1025 while (row !== null) {
1026 - let suspended = findFirstSuspended(row);
1026 + const suspended = findFirstSuspended(row);
1027 if (suspended !== null) {
1028 didSuspendAlready = true;
1029 workInProgress.effectTag |= DidCapture;
@@ -1041,7 +1041,7 @@ function completeWork(
1041 // We might bail out of the loop before finding any but that
1042 // doesn't matter since that means that the other boundaries that
1043 // we did find already has their listeners attached.
1044 - let newThennables = suspended.updateQueue;
1044 + const newThennables = suspended.updateQueue;
1045 if (newThennables !== null) {
1046 workInProgress.updateQueue = newThennables;
1047 workInProgress.effectTag |= Update;
@@ -1078,14 +1078,14 @@ function completeWork(
1078 } else {
1079 // Append the rendered row to the child list.
1080 if (!didSuspendAlready) {
1081 - let suspended = findFirstSuspended(renderedTail);
1081 + const suspended = findFirstSuspended(renderedTail);
1082 if (suspended !== null) {
1083 workInProgress.effectTag |= DidCapture;
1084 didSuspendAlready = true;
1085
1086 // Ensure we transfer the update queue to the parent so that it doesn't
1087 // get lost if this row ends up dropped during a second pass.
1088 - let newThennables = suspended.updateQueue;
1088 + const newThennables = suspended.updateQueue;
1089 if (newThennables !== null) {
1090 workInProgress.updateQueue = newThennables;
1091 workInProgress.effectTag |= Update;
@@ -1101,7 +1101,7 @@ function completeWork(
1101 // We need to delete the row we just rendered.
1102 // Reset the effect list to what it was before we rendered this
1103 // child. The nested children have already appended themselves.
1104 - let lastEffect = (workInProgress.lastEffect =
1104 + const lastEffect = (workInProgress.lastEffect =
1105 renderState.lastEffect);
1106 // Remove any effects that were appended after this point.
1107 if (lastEffect !== null) {
@@ -1147,7 +1147,7 @@ function completeWork(
1147 renderedTail.sibling = workInProgress.child;
1148 workInProgress.child = renderedTail;
1149 } else {
1150 - let previousSibling = renderState.last;
1150 + const previousSibling = renderState.last;
1151 if (previousSibling !== null) {
1152 previousSibling.sibling = renderedTail;
1153 } else {
@@ -1172,7 +1172,7 @@ function completeWork(
1172 // It should probably use a global start time value instead.
1173 }
1174 // Pop a row.
1175 - let next = renderState.tail;
1175 + const next = renderState.tail;
1176 renderState.rendering = next;
1177 renderState.tail = next.sibling;
1178 renderState.lastEffect = workInProgress.lastEffect;
packages/react-reconciler/src/ReactFiberContext.js
+7 -6
@@ -31,9 +31,11 @@ if (__DEV__) {
31 }
32
33 // A cursor to the current merged context object on the stack.
34 -let contextStackCursor: StackCursor<Object> = createCursor(emptyContextObject);
34 +const contextStackCursor: StackCursor<Object> = createCursor(
35 + emptyContextObject,
36 +);
37 // A cursor to a boolean indicating whether the context has changed.
36 -let didPerformWorkStackCursor: StackCursor<boolean> = createCursor(false);
38 +const didPerformWorkStackCursor: StackCursor<boolean> = createCursor(false);
39 // Keep track of the previous context object that was on the stack.
40 // We use this to get access to the parent context after we have already
41 // pushed the next context provider, and now need to merge their contexts.
@@ -97,7 +99,7 @@ function getMaskedContext(
99 }
100
101 const context = {};
100 - for (let key in contextTypes) {
102 + for (const key in contextTypes) {
103 context[key] = unmaskedContext[key];
104 }
105
@@ -201,9 +203,8 @@ function processChildContext(
203 return parentContext;
204 }
205
204 - let childContext;
205 - childContext = instance.getChildContext();
206 - for (let contextKey in childContext) {
206 + const childContext = instance.getChildContext();
207 + for (const contextKey in childContext) {
208 invariant(
209 contextKey in childContextTypes,
210 '%s.getChildContext(): key "%s" is not defined in childContextTypes.',
packages/react-reconciler/src/ReactFiberHooks.js
+7 -6
@@ -597,7 +597,7 @@ function updateWorkInProgressHook(): Hook {
597 // the dispatcher used for mounts.
598 let nextCurrentHook: null | Hook;
599 if (currentHook === null) {
600 - let current = currentlyRenderingFiber.alternate;
600 + const current = currentlyRenderingFiber.alternate;
601 if (current !== null) {
602 nextCurrentHook = current.memoizedState;
603 } else {
@@ -708,14 +708,14 @@ function updateReducer<S, I, A>(
708 let baseQueue = current.baseQueue;
709
710 // The last pending update that hasn't been processed yet.
711 - let pendingQueue = queue.pending;
711 + const pendingQueue = queue.pending;
712 if (pendingQueue !== null) {
713 // We have new updates that haven't been processed yet.
714 // We'll add them to the base queue.
715 if (baseQueue !== null) {
716 // Merge the pending queue and the base queue.
717 - let baseFirst = baseQueue.next;
718 - let pendingFirst = pendingQueue.next;
717 + const baseFirst = baseQueue.next;
718 + const pendingFirst = pendingQueue.next;
719 baseQueue.next = pendingFirst;
720 pendingQueue.next = baseFirst;
721 }
@@ -735,7 +735,7 @@ function updateReducer<S, I, A>(
735
736 if (baseQueue !== null) {
737 // We have a queue to process.
738 - let first = baseQueue.next;
738 + const first = baseQueue.next;
739 let newState = current.baseState;
740
741 let newBaseState = null;
@@ -972,9 +972,10 @@ function useMutableSource<Source, Snapshot>(
972
973 const dispatcher = ReactCurrentDispatcher.current;
974
975 - let [snapshot, setSnapshot] = dispatcher.useState(() =>
975 + const [currentSnapshot, setSnapshot] = dispatcher.useState(() =>
976 readFromUnsubcribedMutableSource(root, source, getSnapshot),
977 );
978 + let snapshot = currentSnapshot;
979
980 // Grab a handle to the state hook as well.
981 // We use it to clear the pending update queue if we have a new source.
packages/react-reconciler/src/ReactFiberHostContext.js
+5 -5
@@ -19,15 +19,15 @@ import {createCursor, push, pop} from './ReactFiberStack';
19 declare class NoContextT {}
20 const NO_CONTEXT: NoContextT = ({}: any);
21
22 -let contextStackCursor: StackCursor<HostContext | NoContextT> = createCursor(
22 +const contextStackCursor: StackCursor<HostContext | NoContextT> = createCursor(
23 NO_CONTEXT,
24 );
25 -let contextFiberStackCursor: StackCursor<Fiber | NoContextT> = createCursor(
26 - NO_CONTEXT,
27 -);
28 -let rootInstanceStackCursor: StackCursor<Container | NoContextT> = createCursor(
25 +const contextFiberStackCursor: StackCursor<Fiber | NoContextT> = createCursor(
26 NO_CONTEXT,
27 );
28 +const rootInstanceStackCursor: StackCursor<
29 + Container | NoContextT,
30 +> = createCursor(NO_CONTEXT);
31
32 function requiredContext<Value>(c: Value | NoContextT): Value {
33 invariant(
packages/react-reconciler/src/ReactFiberHotReloading.js
+6 -6
@@ -62,7 +62,7 @@ let resolveFamily: RefreshHandler | null = null;
62 // $FlowFixMe Flow gets confused by a WeakSet feature check below.
63 let failedBoundaries: WeakSet<Fiber> | null = null;
64
65 -export let setRefreshHandler = (handler: RefreshHandler | null): void => {
65 +export const setRefreshHandler = (handler: RefreshHandler | null): void => {
66 if (__DEV__) {
67 resolveFamily = handler;
68 }
@@ -74,7 +74,7 @@ export function resolveFunctionForHotReloading(type: any): any {
74 // Hot reloading is disabled.
75 return type;
76 }
77 - let family = resolveFamily(type);
77 + const family = resolveFamily(type);
78 if (family === undefined) {
79 return type;
80 }
@@ -96,7 +96,7 @@ export function resolveForwardRefForHotReloading(type: any): any {
96 // Hot reloading is disabled.
97 return type;
98 }
99 - let family = resolveFamily(type);
99 + const family = resolveFamily(type);
100 if (family === undefined) {
101 // Check if we're dealing with a real forwardRef. Don't want to crash early.
102 if (
@@ -225,7 +225,7 @@ export function markFailedErrorBoundaryForHotReloading(fiber: Fiber) {
225 }
226 }
227
228 -export let scheduleRefresh: ScheduleRefresh = (
228 +export const scheduleRefresh: ScheduleRefresh = (
229 root: FiberRoot,
230 update: RefreshUpdate,
231 ): void => {
@@ -246,7 +246,7 @@ export let scheduleRefresh: ScheduleRefresh = (
246 }
247 };
248
249 -export let scheduleRoot: ScheduleRoot = (
249 +export const scheduleRoot: ScheduleRoot = (
250 root: FiberRoot,
251 element: ReactNodeList,
252 ): void => {
@@ -338,7 +338,7 @@ function scheduleFibersWithFamiliesRecursively(
338 }
339 }
340
341 -export let findHostInstancesForRefresh: FindHostInstancesForRefresh = (
341 +export const findHostInstancesForRefresh: FindHostInstancesForRefresh = (
342 root: FiberRoot,
343 families: Array<Family>,
344 ): Set<Instance> => {
packages/react-reconciler/src/ReactFiberHydrationContext.js
+4 -4
@@ -381,8 +381,8 @@ function prepareToHydrateHostSuspenseInstance(fiber: Fiber): void {
381 );
382 }
383
384 - let suspenseState: null | SuspenseState = fiber.memoizedState;
385 - let suspenseInstance: null | SuspenseInstance =
384 + const suspenseState: null | SuspenseState = fiber.memoizedState;
385 + const suspenseInstance: null | SuspenseInstance =
386 suspenseState !== null ? suspenseState.dehydrated : null;
387 invariant(
388 suspenseInstance,
@@ -402,8 +402,8 @@ function skipPastDehydratedSuspenseInstance(
402 'This error is likely caused by a bug in React. Please file an issue.',
403 );
404 }
405 - let suspenseState: null | SuspenseState = fiber.memoizedState;
406 - let suspenseInstance: null | SuspenseInstance =
405 + const suspenseState: null | SuspenseState = fiber.memoizedState;
406 + const suspenseInstance: null | SuspenseInstance =
407 suspenseState !== null ? suspenseState.dehydrated : null;
408 invariant(
409 suspenseInstance,
packages/react-reconciler/src/ReactFiberLazyComponent.js
+1 -1
@@ -12,7 +12,7 @@ export function resolveDefaultProps(Component: any, baseProps: Object): Object {
12 // Resolve default props. Taken from ReactElement
13 const props = Object.assign({}, baseProps);
14 const defaultProps = Component.defaultProps;
15 - for (let propName in defaultProps) {
15 + for (const propName in defaultProps) {
16 if (props[propName] === undefined) {
17 props[propName] = defaultProps[propName];
18 }
packages/react-reconciler/src/ReactFiberNewContext.js
+6 -6
@@ -164,7 +164,7 @@ export function scheduleWorkOnParentPath(
164 // the alternates.
165 let node = parent;
166 while (node !== null) {
167 - let alternate = node.alternate;
167 + const alternate = node.alternate;
168 if (node.childExpirationTime < renderExpirationTime) {
169 node.childExpirationTime = renderExpirationTime;
170 if (
@@ -229,7 +229,7 @@ export function propagateContextChange(
229 if (fiber.expirationTime < renderExpirationTime) {
230 fiber.expirationTime = renderExpirationTime;
231 }
232 - let alternate = fiber.alternate;
232 + const alternate = fiber.alternate;
233 if (
234 alternate !== null &&
235 alternate.expirationTime < renderExpirationTime
@@ -260,7 +260,7 @@ export function propagateContextChange(
260 // If a dehydrated suspense bounudary is in this subtree, we don't know
261 // if it will have any context consumers in it. The best we can do is
262 // mark it as having updates.
263 - let parentSuspense = fiber.return;
263 + const parentSuspense = fiber.return;
264 invariant(
265 parentSuspense !== null,
266 'We just came from a parent so we must have had a parent. This is a bug in React.',
@@ -268,7 +268,7 @@ export function propagateContextChange(
268 if (parentSuspense.expirationTime < renderExpirationTime) {
269 parentSuspense.expirationTime = renderExpirationTime;
270 }
271 - let alternate = parentSuspense.alternate;
271 + const alternate = parentSuspense.alternate;
272 if (
273 alternate !== null &&
274 alternate.expirationTime < renderExpirationTime
@@ -298,7 +298,7 @@ export function propagateContextChange(
298 nextFiber = null;
299 break;
300 }
301 - let sibling = nextFiber.sibling;
301 + const sibling = nextFiber.sibling;
302 if (sibling !== null) {
303 // Set the return pointer of the sibling to the work-in-progress fiber.
304 sibling.return = nextFiber.return;
@@ -369,7 +369,7 @@ export function readContext<T>(
369 resolvedObservedBits = observedBits;
370 }
371
372 - let contextItem = {
372 + const contextItem = {
373 context: ((context: any): ReactContext<mixed>),
374 observedBits: resolvedObservedBits,
375 next: null,
packages/react-reconciler/src/ReactFiberReconciler.old.js
+8 -10
@@ -331,7 +331,7 @@ export function getPublicRootInstance(
331 export function attemptSynchronousHydration(fiber: Fiber): void {
332 switch (fiber.tag) {
333 case HostRoot:
334 - let root: FiberRoot = fiber.stateNode;
334 + const root: FiberRoot = fiber.stateNode;
335 if (root.hydrate) {
336 // Flush the first scheduled "update".
337 flushRoot(root, root.firstPendingTime);
@@ -342,7 +342,7 @@ export function attemptSynchronousHydration(fiber: Fiber): void {
342 // If we're still blocked after this, we need to increase
343 // the priority of any promises resolving within this
344 // boundary so that they next attempt also has higher pri.
345 - let retryExpTime = computeInteractiveExpiration(
345 + const retryExpTime = computeInteractiveExpiration(
346 requestCurrentTimeForUpdate(),
347 );
348 markRetryTimeIfNotHydrated(fiber, retryExpTime);
@@ -351,7 +351,7 @@ export function attemptSynchronousHydration(fiber: Fiber): void {
351 }
352
353 function markRetryTimeImpl(fiber: Fiber, retryTime: ExpirationTime) {
354 - let suspenseState: null | SuspenseState = fiber.memoizedState;
354 + const suspenseState: null | SuspenseState = fiber.memoizedState;
355 if (suspenseState !== null && suspenseState.dehydrated !== null) {
356 if (suspenseState.retryTime < retryTime) {
357 suspenseState.retryTime = retryTime;
@@ -362,7 +362,7 @@ function markRetryTimeImpl(fiber: Fiber, retryTime: ExpirationTime) {
362 // Increases the priority of thennables when they resolve within this boundary.
363 function markRetryTimeIfNotHydrated(fiber: Fiber, retryTime: ExpirationTime) {
364 markRetryTimeImpl(fiber, retryTime);
365 - let alternate = fiber.alternate;
365 + const alternate = fiber.alternate;
366 if (alternate) {
367 markRetryTimeImpl(alternate, retryTime);
368 }
@@ -376,7 +376,7 @@ export function attemptUserBlockingHydration(fiber: Fiber): void {
376 // Suspense.
377 return;
378 }
379 - let expTime = computeInteractiveExpiration(requestCurrentTimeForUpdate());
379 + const expTime = computeInteractiveExpiration(requestCurrentTimeForUpdate());
380 scheduleUpdateOnFiber(fiber, expTime);
381 markRetryTimeIfNotHydrated(fiber, expTime);
382 }
@@ -591,13 +591,11 @@ export function act(callback: () => Thenable<mixed>): Thenable<void> {
591 }
592 }
593
594 - let previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
595 - let previousIsSomeRendererActing;
596 - let previousIsThisRendererActing;
594 + const previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
595 actingUpdatesScopeDepth++;
596
599 - previousIsSomeRendererActing = IsSomeRendererActing.current;
600 - previousIsThisRendererActing = IsThisRendererActing.current;
597 + const previousIsSomeRendererActing = IsSomeRendererActing.current;
598 + const previousIsThisRendererActing = IsThisRendererActing.current;
599 IsSomeRendererActing.current = true;
600 IsThisRendererActing.current = true;
601
packages/react-reconciler/src/ReactFiberSuspenseComponent.js
+1 -1
@@ -120,7 +120,7 @@ export function findFirstSuspended(row: Fiber): null | Fiber {
120 // keep track of whether it suspended or not.
121 node.memoizedProps.revealOrder !== undefined
122 ) {
123 - let didSuspend = (node.effectTag & DidCapture) !== NoEffect;
123 + const didSuspend = (node.effectTag & DidCapture) !== NoEffect;
124 if (didSuspend) {
125 return node;
126 }
packages/react-reconciler/src/ReactFiberThrow.js
+3 -3
@@ -164,7 +164,7 @@ function attachPingListener(
164 if (!threadIDs.has(renderExpirationTime)) {
165 // Memoize using the thread ID to prevent redundant listeners.
166 threadIDs.add(renderExpirationTime);
167 - let ping = pingSuspendedRoot.bind(
167 + const ping = pingSuspendedRoot.bind(
168 null,
169 root,
170 wakeable,
@@ -197,7 +197,7 @@ function throwException(
197 if ((sourceFiber.mode & BlockingMode) === NoMode) {
198 // Reset the memoizedState to what it was before we attempted
199 // to render it.
200 - let currentSource = sourceFiber.alternate;
200 + const currentSource = sourceFiber.alternate;
201 if (currentSource) {
202 sourceFiber.updateQueue = currentSource.updateQueue;
203 sourceFiber.memoizedState = currentSource.memoizedState;
@@ -208,7 +208,7 @@ function throwException(
208 }
209 }
210
211 - let hasInvisibleParentBoundary = hasSuspenseContext(
211 + const hasInvisibleParentBoundary = hasSuspenseContext(
212 suspenseStackCursor.current,
213 (InvisibleParentSuspenseContext: SuspenseContext),
214 );
packages/react-reconciler/src/ReactFiberTreeReflection.js
+3 -3
@@ -125,7 +125,7 @@ function assertIsMounted(fiber) {
125 }
126
127 export function findCurrentFiberUsingSlowPath(fiber: Fiber): Fiber | null {
128 - let alternate = fiber.alternate;
128 + const alternate = fiber.alternate;
129 if (!alternate) {
130 // If there is no alternate, then we only need to check if it is mounted.
131 const nearestMounted = getNearestMountedFiber(fiber);
@@ -144,12 +144,12 @@ export function findCurrentFiberUsingSlowPath(fiber: Fiber): Fiber | null {
144 let a: Fiber = fiber;
145 let b: Fiber = alternate;
146 while (true) {
147 - let parentA = a.return;
147 + const parentA = a.return;
148 if (parentA === null) {
149 // We're at the root.
150 break;
151 }
152 - let parentB = parentA.alternate;
152 + const parentB = parentA.alternate;
153 if (parentB === null) {
154 // There is no alternate. This is an unusual case. Currently, it only
155 // happens when a Suspense component is hidden. An extra fragment fiber
packages/react-reconciler/src/ReactFiberWorkLoop.js
+6 -6
@@ -740,7 +740,7 @@ function finishConcurrentRender(
740 // and after that's fixed it can only be a retry. We're going to
741 // throttle committing retries so that we don't show too many
742 // loading states too quickly.
743 - let msUntilTimeout =
743 + const msUntilTimeout =
744 globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now();
745 // Don't bother with a very short suspense time.
746 if (msUntilTimeout > 10) {
@@ -2064,7 +2064,7 @@ function commitMutationEffects(root: FiberRoot, renderPriorityLevel) {
2064 // updates, and deletions. To avoid needing to add a case for every possible
2065 // bitmap value, we remove the secondary effects from the effect tag and
2066 // switch on that value.
2067 - let primaryEffectTag =
2067 + const primaryEffectTag =
2068 effectTag & (Placement | Update | Deletion | Hydrating);
2069 switch (primaryEffectTag) {
2070 case Placement: {
@@ -2238,7 +2238,7 @@ function flushPassiveEffectsImpl() {
2238 // Layout effects have the same constraint.
2239
2240 // First pass: Destroy stale passive effects.
2241 - let unmountEffects = pendingPassiveHookEffectsUnmount;
2241 + const unmountEffects = pendingPassiveHookEffectsUnmount;
2242 pendingPassiveHookEffectsUnmount = [];
2243 for (let i = 0; i < unmountEffects.length; i += 2) {
2244 const effect = ((unmountEffects[i]: any): HookEffect);
@@ -2289,7 +2289,7 @@ function flushPassiveEffectsImpl() {
2289 }
2290 }
2291 // Second pass: Create new passive effects.
2292 - let mountEffects = pendingPassiveHookEffectsMount;
2292 + const mountEffects = pendingPassiveHookEffectsMount;
2293 pendingPassiveHookEffectsMount = [];
2294 for (let i = 0; i < mountEffects.length; i += 2) {
2295 const effect = ((mountEffects[i]: any): HookEffect);
@@ -2368,7 +2368,7 @@ function flushPassiveEffectsImpl() {
2368 }
2369
2370 if (enableProfilerTimer && enableProfilerCommitHooks) {
2371 - let profilerEffects = pendingPassiveProfilerEffects;
2371 + const profilerEffects = pendingPassiveProfilerEffects;
2372 pendingPassiveProfilerEffects = [];
2373 for (let i = 0; i < profilerEffects.length; i++) {
2374 const fiber = ((profilerEffects[i]: any): Fiber);
@@ -2765,7 +2765,7 @@ function warnAboutUpdateOnUnmountedFiberInDEV(fiber) {
2765
2766 let beginWork;
2767 if (__DEV__ && replayFailedUnitOfWorkWithInvokeGuardedCallback) {
2768 - let dummyFiber = null;
2768 + const dummyFiber = null;
2769 beginWork = (current, unitOfWork, expirationTime) => {
2770 // If a component throws an error, we replay it again in a synchronously
2771 // dispatched event, so that the debugger will treat it as an uncaught
packages/react-reconciler/src/ReactMutableSource.js
+2 -2
@@ -17,8 +17,8 @@ import {NoWork} from './ReactFiberExpirationTime';
17 // Work in progress version numbers only apply to a single render,
18 // and should be reset before starting a new render.
19 // This tracks which mutable sources need to be reset after a render.
20 -let workInProgressPrimarySources: Array<MutableSource<any>> = [];
21 -let workInProgressSecondarySources: Array<MutableSource<any>> = [];
20 +const workInProgressPrimarySources: Array<MutableSource<any>> = [];
21 +const workInProgressSecondarySources: Array<MutableSource<any>> = [];
22
23 let rendererSigil;
24 if (__DEV__) {
packages/react-reconciler/src/ReactUpdateQueue.js
+2 -2
@@ -188,7 +188,7 @@ export function createUpdate(
188 expirationTime: ExpirationTime,
189 suspenseConfig: null | SuspenseConfig,
190 ): Update<*> {
191 - let update: Update<*> = {
191 + const update: Update<*> = {
192 expirationTime,
193 suspenseConfig,
194
@@ -524,7 +524,7 @@ export function processUpdateQueue<State>(
524 const callback = update.callback;
525 if (callback !== null) {
526 workInProgress.effectTag |= Callback;
527 - let effects = queue.effects;
527 + const effects = queue.effects;
528 if (effects === null) {
529 queue.effects = [update];
530 } else {
packages/react-reconciler/src/SchedulerWithReactIntegration.js
+1 -1
@@ -69,7 +69,7 @@ export const requestPaint =
69 let syncQueue: Array<SchedulerCallback> | null = null;
70 let immediateQueueCallbackNode: mixed | null = null;
71 let isFlushingSyncQueue: boolean = false;
72 -let initialTimeMs: number = Scheduler_now();
72 +const initialTimeMs: number = Scheduler_now();
73
74 // If the initial timestamp is reasonably small, use Scheduler's `now` directly.
75 // This will be the case for modern browsers that support `performance.now`. In
packages/react-reconciler/src/__tests__/ReactBlocks-test.js
+9 -9
@@ -27,7 +27,7 @@ describe('ReactBlocks', () => {
27 block = React.block;
28 useState = React.useState;
29 Suspense = React.Suspense;
30 - let cache = new Map();
30 + const cache = new Map();
31 readString = function(text) {
32 let entry = cache.get(text);
33 if (!entry) {
@@ -62,7 +62,7 @@ describe('ReactBlocks', () => {
62 );
63 }
64
65 - let loadUser = block(User);
65 + const loadUser = block(User);
66
67 ReactNoop.act(() => {
68 ReactNoop.render(<App Component={loadUser()} />);
@@ -79,7 +79,7 @@ describe('ReactBlocks', () => {
79 }
80
81 function User(props, data) {
82 - let array = [<span>{data.name}</span>];
82 + const array = [<span>{data.name}</span>];
83 return <div>{array}</div>;
84 }
85
@@ -91,7 +91,7 @@ describe('ReactBlocks', () => {
91 );
92 }
93
94 - let loadUser = block(User, load);
94 + const loadUser = block(User, load);
95
96 expect(() => {
97 ReactNoop.act(() => {
@@ -124,7 +124,7 @@ describe('ReactBlocks', () => {
124 );
125 }
126
127 - let loadUser = block(Render, load);
127 + const loadUser = block(Render, load);
128
129 function App({User}) {
130 return (
@@ -165,7 +165,7 @@ describe('ReactBlocks', () => {
165 );
166 }
167
168 - let loadUser = block(Render, load);
168 + const loadUser = block(Render, load);
169
170 function App({User}) {
171 return (
@@ -176,7 +176,7 @@ describe('ReactBlocks', () => {
176 }
177
178 let resolveLazy;
179 - let LazyUser = React.lazy(
179 + const LazyUser = React.lazy(
180 () =>
181 new Promise(resolve => {
182 resolveLazy = function() {
@@ -216,7 +216,7 @@ describe('ReactBlocks', () => {
216 }
217
218 function Render(props, data) {
219 - let [initialName] = useState(data.name);
219 + const [initialName] = useState(data.name);
220 return (
221 <>
222 <span>Initial name: {initialName}</span>
@@ -225,7 +225,7 @@ describe('ReactBlocks', () => {
225 );
226 }
227
228 - let loadUser = block(Render, load);
228 + const loadUser = block(Render, load);
229
230 function App({User}) {
231 return (
packages/react-reconciler/src/__tests__/ReactDisableSchedulerTimeoutBasedOnReactExpirationTime-test.internal.js
+2 -2
@@ -29,14 +29,14 @@ describe('ReactSuspenseList', () => {
29
30 function createAsyncText(text) {
31 let resolved = false;
32 - let Component = function() {
32 + const Component = function() {
33 if (!resolved) {
34 Scheduler.unstable_yieldValue('Suspend! [' + text + ']');
35 throw promise;
36 }
37 return <Text text={text} />;
38 };
39 - let promise = new Promise(resolve => {
39 + const promise = new Promise(resolve => {
40 Component.resolve = function() {
41 resolved = true;
42 return resolve();
packages/react-reconciler/src/__tests__/ReactExpiration-test.internal.js
+2 -2
@@ -182,8 +182,8 @@ describe('ReactExpiration', () => {
182 );
183
184 it('cannot update at the same expiration time that is already rendering', () => {
185 - let store = {text: 'initial'};
186 - let subscribers = [];
185 + const store = {text: 'initial'};
186 + const subscribers = [];
187 class Connected extends React.Component {
188 state = {text: store.text};
189 componentDidMount() {
packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.internal.js
+1 -1
@@ -72,7 +72,7 @@ describe('ReactFiberHostContext', () => {
72 });
73
74 it('should send the context to prepareForCommit and resetAfterCommit', () => {
75 - let rootContext = {};
75 + const rootContext = {};
76 const Renderer = ReactFiberReconciler({
77 prepareForCommit: function(hostContext) {
78 expect(hostContext).toBe(rootContext);
packages/react-reconciler/src/__tests__/ReactHooks-test.internal.js
+7 -7
@@ -1287,7 +1287,7 @@ describe('ReactHooks', () => {
1287 };
1288 }
1289
1290 - let renderer = ReactTestRenderer.create(null);
1290 + const renderer = ReactTestRenderer.create(null);
1291
1292 renderCount = 0;
1293 renderer.update(<NoHooks />);
@@ -1485,7 +1485,7 @@ describe('ReactHooks', () => {
1485 // We don't include useImperativeHandleHelper in this set,
1486 // because it generates an additional warning about the inputs length changing.
1487 // We test it below with its own test.
1488 - let orderedHooks = [
1488 + const orderedHooks = [
1489 useCallbackHelper,
1490 useContextHelper,
1491 useDebugValueHelper,
@@ -1499,7 +1499,7 @@ describe('ReactHooks', () => {
1499
1500 // We don't include useContext or useDebugValue in this set,
1501 // because they aren't added to the hooks list and so won't throw.
1502 - let hooksInList = [
1502 + const hooksInList = [
1503 useCallbackHelper,
1504 useEffectHelper,
1505 useImperativeHandleHelper,
@@ -1692,7 +1692,7 @@ describe('ReactHooks', () => {
1692 return null;
1693 /* eslint-enable no-unused-vars */
1694 }
1695 - let root = ReactTestRenderer.create(<App update={false} />);
1695 + const root = ReactTestRenderer.create(<App update={false} />);
1696 expect(() => {
1697 try {
1698 root.update(<App update={true} />);
@@ -1738,7 +1738,7 @@ describe('ReactHooks', () => {
1738 return null;
1739 /* eslint-enable no-unused-vars */
1740 }
1741 - let root = ReactTestRenderer.create(<App update={false} />);
1741 + const root = ReactTestRenderer.create(<App update={false} />);
1742 expect(() => {
1743 expect(() => root.update(<App update={true} />)).toThrow(
1744 'custom error',
@@ -1757,7 +1757,7 @@ describe('ReactHooks', () => {
1757
1758 // Regression test for #14674
1759 it('does not swallow original error when updating another component in render phase', async () => {
1760 - let {useState} = React;
1760 + const {useState} = React;
1761 spyOnDev(console, 'error');
1762
1763 let _setState;
@@ -1795,7 +1795,7 @@ describe('ReactHooks', () => {
1795
1796 // Regression test for https://github.com/facebook/react/issues/15057
1797 it('does not fire a false positive warning when previous effect unmounts the component', () => {
1798 - let {useState, useEffect} = React;
1798 + const {useState, useEffect} = React;
1799 let globalListener;
1800
1801 function A() {
packages/react-reconciler/src/__tests__/ReactHooksWithNoopRenderer-test.internal.js
+18 -18
@@ -299,7 +299,7 @@ describe('ReactHooksWithNoopRenderer', () => {
299 });
300
301 it('returns the same updater function every time', () => {
302 - let updaters = [];
302 + const updaters = [];
303 function Counter() {
304 const [count, updateCount] = useState(0);
305 updaters.push(updateCount);
@@ -403,8 +403,8 @@ describe('ReactHooksWithNoopRenderer', () => {
403 describe('updates during the render phase', () => {
404 it('restarts the render function and applies the new updates on top', () => {
405 function ScrollView({row: newRow}) {
406 - let [isScrollingDown, setIsScrollingDown] = useState(false);
407 - let [row, setRow] = useState(null);
406 + const [isScrollingDown, setIsScrollingDown] = useState(false);
407 + const [row, setRow] = useState(null);
408
409 if (row !== newRow) {
410 // Row changed since last render. Update isScrollingDown.
@@ -497,7 +497,7 @@ describe('ReactHooksWithNoopRenderer', () => {
497
498 it('keeps restarting until there are no more new updates', () => {
499 function Counter({row: newRow}) {
500 - let [count, setCount] = useState(0);
500 + const [count, setCount] = useState(0);
501 if (count < 3) {
502 setCount(count + 1);
503 }
@@ -518,7 +518,7 @@ describe('ReactHooksWithNoopRenderer', () => {
518
519 it('updates multiple times within same render function', () => {
520 function Counter({row: newRow}) {
521 - let [count, setCount] = useState(0);
521 + const [count, setCount] = useState(0);
522 if (count < 12) {
523 setCount(c => c + 1);
524 setCount(c => c + 1);
@@ -543,7 +543,7 @@ describe('ReactHooksWithNoopRenderer', () => {
543
544 it('throws after too many iterations', () => {
545 function Counter({row: newRow}) {
546 - let [count, setCount] = useState(0);
546 + const [count, setCount] = useState(0);
547 setCount(count + 1);
548 Scheduler.unstable_yieldValue('Render: ' + count);
549 return <Text text={count} />;
@@ -560,7 +560,7 @@ describe('ReactHooksWithNoopRenderer', () => {
560 return action === 'increment' ? state + 1 : state;
561 }
562 function Counter({row: newRow}) {
563 - let [count, dispatch] = useReducer(reducer, 0);
563 + const [count, dispatch] = useReducer(reducer, 0);
564 if (count < 3) {
565 dispatch('increment');
566 }
@@ -601,8 +601,8 @@ describe('ReactHooksWithNoopRenderer', () => {
601 }
602
603 function Counter({row: newRow}, ref) {
604 - let [reducer, setReducer] = useState(() => reducerA);
605 - let [count, dispatch] = useReducer(reducer, 0);
604 + const [reducer, setReducer] = useState(() => reducerA);
605 + const [count, dispatch] = useReducer(reducer, 0);
606 useImperativeHandle(ref, () => ({dispatch}));
607 if (count < 20) {
608 dispatch('increment');
@@ -658,8 +658,8 @@ describe('ReactHooksWithNoopRenderer', () => {
658 }
659
660 function Bar({signal: newSignal}) {
661 - let [counter, setCounter] = useState(0);
662 - let [signal, setSignal] = useState(true);
661 + const [counter, setCounter] = useState(0);
662 + const [signal, setSignal] = useState(true);
663
664 // Increment a counter every time the signal changes
665 if (signal !== newSignal) {
@@ -703,7 +703,7 @@ describe('ReactHooksWithNoopRenderer', () => {
703
704 let setLabel;
705 function Bar({signal: newSignal}) {
706 - let [counter, setCounter] = useState(0);
706 + const [counter, setCounter] = useState(0);
707
708 if (counter === 1) {
709 // We're suspending during a render that includes render phase
@@ -712,7 +712,7 @@ describe('ReactHooksWithNoopRenderer', () => {
712 throw thenable;
713 }
714
715 - let [signal, setSignal] = useState(true);
715 + const [signal, setSignal] = useState(true);
716
717 // Increment a counter every time the signal changes
718 if (signal !== newSignal) {
@@ -720,7 +720,7 @@ describe('ReactHooksWithNoopRenderer', () => {
720 setSignal(newSignal);
721 }
722
723 - let [label, _setLabel] = useState('A');
723 + const [label, _setLabel] = useState('A');
724 setLabel = _setLabel;
725
726 return <Text text={`${label}:${counter}`} />;
@@ -754,8 +754,8 @@ describe('ReactHooksWithNoopRenderer', () => {
754 it.experimental('calling startTransition inside render phase', async () => {
755 let startTransition;
756 function App() {
757 - let [counter, setCounter] = useState(0);
758 - let [_startTransition] = useTransition();
757 + const [counter, setCounter] = useState(0);
758 + const [_startTransition] = useTransition();
759 startTransition = _startTransition;
760
761 if (counter === 0) {
@@ -937,7 +937,7 @@ describe('ReactHooksWithNoopRenderer', () => {
937 }, []);
938 return <Text text="Passive" />;
939 }
940 - let passive = <PassiveEffect key="p" />;
940 + const passive = <PassiveEffect key="p" />;
941 act(() => {
942 ReactNoop.render([<LayoutEffect key="l" />, passive]);
943 expect(Scheduler).toFlushAndYieldThrough([
@@ -967,7 +967,7 @@ describe('ReactHooksWithNoopRenderer', () => {
967 return <Text text="Passive" />;
968 }
969 function LayoutEffect(props) {
970 - let [count, setCount] = useState(0);
970 + const [count, setCount] = useState(0);
971 useLayoutEffect(() => {
972 // Scheduling work shouldn't interfere with the queued passive effect
973 if (count === 0) {
packages/react-reconciler/src/__tests__/ReactIncremental-test.internal.js
+8 -8
@@ -2476,10 +2476,10 @@ describe('ReactIncremental', () => {
2476 });
2477
2478 xit('should reuse memoized work if pointers are updated before calling lifecycles', () => {
2479 - let cduNextProps = [];
2480 - let cduPrevProps = [];
2481 - let scuNextProps = [];
2482 - let scuPrevProps = [];
2479 + const cduNextProps = [];
2480 + const cduPrevProps = [];
2481 + const scuNextProps = [];
2482 + const scuPrevProps = [];
2483 let renderCounter = 0;
2484
2485 function SecondChild(props) {
@@ -2559,7 +2559,7 @@ describe('ReactIncremental', () => {
2559 });
2560
2561 it('updates descendants with new context values', () => {
2562 - let rendered = [];
2562 + const rendered = [];
2563 let instance;
2564
2565 class TopContextProvider extends React.Component {
@@ -2616,7 +2616,7 @@ describe('ReactIncremental', () => {
2616 });
2617
2618 it('updates descendants with multiple context-providing ancestors with new context values', () => {
2619 - let rendered = [];
2619 + const rendered = [];
2620 let instance;
2621
2622 class TopContextProvider extends React.Component {
@@ -2679,7 +2679,7 @@ describe('ReactIncremental', () => {
2679 });
2680
2681 it('should not update descendants with new context values if shouldComponentUpdate returns false', () => {
2682 - let rendered = [];
2682 + const rendered = [];
2683 let instance;
2684
2685 class TopContextProvider extends React.Component {
@@ -2751,7 +2751,7 @@ describe('ReactIncremental', () => {
2751 });
2752
2753 it('should update descendants with new context values if setState() is called in the middle of the tree', () => {
2754 - let rendered = [];
2754 + const rendered = [];
2755 let middleInstance;
2756 let topInstance;
2757
packages/react-reconciler/src/__tests__/ReactIncrementalErrorHandling-test.internal.js
+1 -1
@@ -1451,7 +1451,7 @@ describe('ReactIncrementalErrorHandling', () => {
1451 it('error boundaries capture non-errors', () => {
1452 spyOnProd(console, 'error');
1453 spyOnDev(console, 'error');
1454 - let ops = [];
1454 + const ops = [];
1455
1456 class ErrorBoundary extends React.Component {
1457 state = {error: null};
packages/react-reconciler/src/__tests__/ReactIncrementalErrorReplay-test.internal.js
+1 -1
@@ -32,7 +32,7 @@ describe('ReactIncrementalErrorReplay-test', () => {
32 expect(realFiber).toEqual(stash);
33
34 // Mutate the original.
35 - for (let key in realFiber) {
35 + for (const key in realFiber) {
36 realFiber[key] = key + '_' + Math.random();
37 }
38 expect(realFiber).not.toEqual(stash);
packages/react-reconciler/src/__tests__/ReactIncrementalReflection-test.internal.js
+1 -1
@@ -143,7 +143,7 @@ describe('ReactIncrementalReflection', () => {
143 // We ignore warnings fired by findInstance because we are testing
144 // that the actual behavior still works as expected even though it
145 // is deprecated.
146 - let oldConsoleError = console.error;
146 + const oldConsoleError = console.error;
147 console.error = jest.fn();
148 try {
149 return ReactNoop.findInstance(inst);
packages/react-reconciler/src/__tests__/ReactIncrementalScheduling-test.internal.js
+1 -1
@@ -324,7 +324,7 @@ describe('ReactIncrementalScheduling', () => {
324
325 it('nested updates are always deferred, even inside unbatchedUpdates', () => {
326 let instance;
327 - let ops = [];
327 + const ops = [];
328 class Foo extends React.Component {
329 state = {step: 0};
330 componentDidUpdate() {
packages/react-reconciler/src/__tests__/ReactIncrementalTriangle-test.internal.js
+7 -7
@@ -167,7 +167,7 @@ describe('ReactIncrementalTriangle', () => {
167 }
168
169 function randomActions(n) {
170 - let actions = [];
170 + const actions = [];
171 for (let i = 0; i < n; i++) {
172 actions.push(randomAction());
173 }
@@ -180,7 +180,7 @@ describe('ReactIncrementalTriangle', () => {
180
181 let triangles = [];
182 let leafTriangles = [];
183 - let yieldAfterEachRender = false;
183 + const yieldAfterEachRender = false;
184 class Triangle extends React.Component {
185 constructor(props) {
186 super();
@@ -325,7 +325,7 @@ describe('ReactIncrementalTriangle', () => {
325 let expectedCounter = counter;
326
327 for (let i = 0; i < children.length; i++) {
328 - let child = children[i];
328 + const child = children[i];
329
330 const output = JSON.parse(child.prop);
331 const prop = output.prop;
@@ -376,8 +376,8 @@ describe('ReactIncrementalTriangle', () => {
376 const app = reset();
377 let expectedCounterAtEnd = app.state.counter;
378
379 - let activeIndices = new Set();
380 - let activeLeafIndices = new Set();
379 + const activeIndices = new Set();
380 + const activeLeafIndices = new Set();
381 let action;
382 while (true) {
383 action = yield;
@@ -441,7 +441,7 @@ describe('ReactIncrementalTriangle', () => {
441 // Call this once to prepare the generator
442 gen.next();
443 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
444 - for (let action of actions) {
444 + for (const action of actions) {
445 gen.next(action);
446 }
447 gen.next(STOP);
@@ -528,7 +528,7 @@ ${formatActions(actions)}
528 function simulateMultipleRoots(...actions) {
529 const roots = new Map();
530 // eslint-disable-next-line no-for-of-loops/no-for-of-loops
531 - for (let rootID of rootIDs) {
531 + for (const rootID of rootIDs) {
532 const simulator = TriangleSimulator(rootID);
533 const generator = simulator.simulateAndYield();
534 // Call this once to prepare the generator
packages/react-reconciler/src/__tests__/ReactIncrementalUpdates-test.internal.js
+2 -2
@@ -298,7 +298,7 @@ describe('ReactIncrementalUpdates', () => {
298 });
299
300 it('does not call callbacks that are scheduled by another callback until a later commit', () => {
301 - let ops = [];
301 + const ops = [];
302 class Foo extends React.Component {
303 state = {};
304 componentDidMount() {
@@ -366,7 +366,7 @@ describe('ReactIncrementalUpdates', () => {
366
367 it('enqueues setState inside an updater function as if the in-progress update is progressed (and warns)', () => {
368 let instance;
369 - let ops = [];
369 + const ops = [];
370 class Foo extends React.Component {
371 state = {};
372 render() {
packages/react-reconciler/src/__tests__/ReactNewContext-test.internal.js
+1 -1
@@ -1673,7 +1673,7 @@ describe('ReactNewContext', () => {
1673 }
1674
1675 function randomActions(n) {
1676 - let actions = [];
1676 + const actions = [];
1677 for (let i = 0; i < n; i++) {
1678 actions.push(randomAction());
1679 }
packages/react-reconciler/src/__tests__/ReactNoopRendererAct-test.js
+2 -2
@@ -21,7 +21,7 @@ describe('ReactNoop.act()', () => {
21 return null;
22 }
23
24 - let calledLog = [];
24 + const calledLog = [];
25 ReactNoop.act(() => {
26 ReactNoop.render(
27 <App
@@ -37,7 +37,7 @@ describe('ReactNoop.act()', () => {
37
38 it('should work with async/await', async () => {
39 function App() {
40 - let [ctr, setCtr] = React.useState(0);
40 + const [ctr, setCtr] = React.useState(0);
41 async function someAsyncFunction() {
42 Scheduler.unstable_yieldValue('stage 1');
43 await null;
packages/react-reconciler/src/__tests__/ReactScope-test.internal.js
+4 -4
@@ -345,17 +345,17 @@ describe('ReactScope', () => {
345 // this may have suspense points on the server but here we want
346 // to test the completed HTML. Don't suspend on the server.
347 suspend = false;
348 - let finalHTML = ReactDOMServer.renderToString(<App />);
348 + const finalHTML = ReactDOMServer.renderToString(<App />);
349
350 - let container2 = document.createElement('div');
350 + const container2 = document.createElement('div');
351 container2.innerHTML = finalHTML;
352
353 - let span = container2.getElementsByTagName('span')[0];
353 + const span = container2.getElementsByTagName('span')[0];
354
355 // On the client we don't have all data yet but we want to start
356 // hydrating anyway.
357 suspend = true;
358 - let root = ReactDOM.createRoot(container2, {hydrate: true});
358 + const root = ReactDOM.createRoot(container2, {hydrate: true});
359 root.render(<App />);
360 Scheduler.unstable_flushAll();
361 jest.runAllTimers();
packages/react-reconciler/src/__tests__/ReactSuspense-test.internal.js
+1 -1
@@ -199,7 +199,7 @@ describe('ReactSuspense', () => {
199
200 it('interrupts current render if promise resolves before current render phase', () => {
201 let didResolve = false;
202 - let listeners = [];
202 + const listeners = [];
203
204 const thenable = {
205 then(resolve) {
packages/react-reconciler/src/__tests__/ReactSuspenseCallback-test.internal.js
+4 -4
@@ -32,7 +32,7 @@ describe('ReactSuspense', () => {
32 function createThenable() {
33 let completed = false;
34 const resolveRef = {current: null};
35 - let promise = {
35 + const promise = {
36 then(resolve, reject) {
37 resolveRef.current = () => {
38 completed = true;
@@ -149,11 +149,11 @@ describe('ReactSuspense', () => {
149 it('nested suspense promises are reported only for their tier', () => {
150 const {promise, PromiseComp} = createThenable();
151
152 - let ops1 = [];
152 + const ops1 = [];
153 const suspenseCallback1 = thenables => {
154 ops1.push(thenables);
155 };
156 - let ops2 = [];
156 + const ops2 = [];
157 const suspenseCallback2 = thenables => {
158 ops2.push(thenables);
159 };
@@ -250,7 +250,7 @@ describe('ReactSuspense', () => {
250 // you can probably just delete it. It's not worth the hassle.
251 jest.resetModules();
252
253 - let errors = [];
253 + const errors = [];
254 let hasCaughtError = false;
255 jest.mock('shared/ReactErrorUtils', () => ({
256 invokeGuardedCallback(name, fn, context, ...args) {
packages/react-reconciler/src/__tests__/ReactSuspenseFuzz-test.internal.js
+2 -2
@@ -226,7 +226,7 @@ describe('ReactSuspenseFuzz', () => {
226 {value: 2, weight: 1},
227 ]);
228
229 - let updates = [];
229 + const updates = [];
230 for (let i = 0; i < numberOfUpdates; i++) {
231 updates.push({
232 beginAfter: rand.intBetween(0, 10000),
@@ -249,7 +249,7 @@ describe('ReactSuspenseFuzz', () => {
249 {value: 2, weight: 1},
250 ]);
251
252 - let updates = [];
252 + const updates = [];
253 for (let i = 0; i < numberOfUpdates; i++) {
254 updates.push({
255 remountAfter: rand.intBetween(0, 10000),
packages/react-reconciler/src/__tests__/ReactSuspenseList-test.internal.js
+88 -88
@@ -31,14 +31,14 @@ describe('ReactSuspenseList', () => {
31
32 function createAsyncText(text) {
33 let resolved = false;
34 - let Component = function() {
34 + const Component = function() {
35 if (!resolved) {
36 Scheduler.unstable_yieldValue('Suspend! [' + text + ']');
37 throw promise;
38 }
39 return <Text text={text} />;
40 };
41 - let promise = new Promise(resolve => {
41 + const promise = new Promise(resolve => {
42 Component.resolve = function() {
43 resolved = true;
44 return resolve();
@@ -185,9 +185,9 @@ describe('ReactSuspenseList', () => {
185 });
186
187 it('shows content independently by default', async () => {
188 - let A = createAsyncText('A');
189 - let B = createAsyncText('B');
190 - let C = createAsyncText('C');
188 + const A = createAsyncText('A');
189 + const B = createAsyncText('B');
190 + const C = createAsyncText('C');
191
192 function Foo() {
193 return (
@@ -251,9 +251,9 @@ describe('ReactSuspenseList', () => {
251 });
252
253 it('shows content independently in legacy mode regardless of option', async () => {
254 - let A = createAsyncText('A');
255 - let B = createAsyncText('B');
256 - let C = createAsyncText('C');
254 + const A = createAsyncText('A');
255 + const B = createAsyncText('B');
256 + const C = createAsyncText('C');
257
258 function Foo() {
259 return (
@@ -323,9 +323,9 @@ describe('ReactSuspenseList', () => {
323 });
324
325 it('displays all "together"', async () => {
326 - let A = createAsyncText('A');
327 - let B = createAsyncText('B');
328 - let C = createAsyncText('C');
326 + const A = createAsyncText('A');
327 + const B = createAsyncText('B');
328 + const C = createAsyncText('C');
329
330 function Foo() {
331 return (
@@ -392,9 +392,9 @@ describe('ReactSuspenseList', () => {
392 });
393
394 it('displays all "together" even when nested as siblings', async () => {
395 - let A = createAsyncText('A');
396 - let B = createAsyncText('B');
397 - let C = createAsyncText('C');
395 + const A = createAsyncText('A');
396 + const B = createAsyncText('B');
397 + const C = createAsyncText('C');
398
399 function Foo() {
400 return (
@@ -477,9 +477,9 @@ describe('ReactSuspenseList', () => {
477 });
478
479 it('displays all "together" in nested SuspenseLists', async () => {
480 - let A = createAsyncText('A');
481 - let B = createAsyncText('B');
482 - let C = createAsyncText('C');
480 + const A = createAsyncText('A');
481 + const B = createAsyncText('B');
482 + const C = createAsyncText('C');
483
484 function Foo() {
485 return (
@@ -538,9 +538,9 @@ describe('ReactSuspenseList', () => {
538 });
539
540 it('displays all "together" in nested SuspenseLists where the inner is default', async () => {
541 - let A = createAsyncText('A');
542 - let B = createAsyncText('B');
543 - let C = createAsyncText('C');
541 + const A = createAsyncText('A');
542 + const B = createAsyncText('B');
543 + const C = createAsyncText('C');
544
545 function Foo() {
546 return (
@@ -597,10 +597,10 @@ describe('ReactSuspenseList', () => {
597 });
598
599 it('displays all "together" during an update', async () => {
600 - let A = createAsyncText('A');
601 - let B = createAsyncText('B');
602 - let C = createAsyncText('C');
603 - let D = createAsyncText('D');
600 + const A = createAsyncText('A');
601 + const B = createAsyncText('B');
602 + const C = createAsyncText('C');
603 + const D = createAsyncText('D');
604
605 function Foo({step}) {
606 return (
@@ -681,9 +681,9 @@ describe('ReactSuspenseList', () => {
681 });
682
683 it('avoided boundaries can be coordinate with SuspenseList', async () => {
684 - let A = createAsyncText('A');
685 - let B = createAsyncText('B');
686 - let C = createAsyncText('C');
684 + const A = createAsyncText('A');
685 + const B = createAsyncText('B');
686 + const C = createAsyncText('C');
687
688 function Foo({showMore}) {
689 return (
@@ -779,9 +779,9 @@ describe('ReactSuspenseList', () => {
779 });
780
781 it('displays each items in "forwards" order', async () => {
782 - let A = createAsyncText('A');
783 - let B = createAsyncText('B');
784 - let C = createAsyncText('C');
782 + const A = createAsyncText('A');
783 + const B = createAsyncText('B');
784 + const C = createAsyncText('C');
785
786 function Foo() {
787 return (
@@ -844,9 +844,9 @@ describe('ReactSuspenseList', () => {
844 });
845
846 it('displays each items in "backwards" order', async () => {
847 - let A = createAsyncText('A');
848 - let B = createAsyncText('B');
849 - let C = createAsyncText('C');
847 + const A = createAsyncText('A');
848 + const B = createAsyncText('B');
849 + const C = createAsyncText('C');
850
851 function Foo() {
852 return (
@@ -909,12 +909,12 @@ describe('ReactSuspenseList', () => {
909 });
910
911 it('displays added row at the top "together" and the bottom in "forwards" order', async () => {
912 - let A = createAsyncText('A');
913 - let B = createAsyncText('B');
914 - let C = createAsyncText('C');
915 - let D = createAsyncText('D');
916 - let E = createAsyncText('E');
917 - let F = createAsyncText('F');
912 + const A = createAsyncText('A');
913 + const B = createAsyncText('B');
914 + const C = createAsyncText('C');
915 + const D = createAsyncText('D');
916 + const E = createAsyncText('E');
917 + const F = createAsyncText('F');
918
919 function Foo({items}) {
920 return (
@@ -1063,10 +1063,10 @@ describe('ReactSuspenseList', () => {
1063 });
1064
1065 it('displays added row at the top "together" and the bottom in "backwards" order', async () => {
1066 - let A = createAsyncText('A');
1067 - let B = createAsyncText('B');
1068 - let D = createAsyncText('D');
1069 - let F = createAsyncText('F');
1066 + const A = createAsyncText('A');
1067 + const B = createAsyncText('B');
1068 + const D = createAsyncText('D');
1069 + const F = createAsyncText('F');
1070
1071 function createSyncText(text) {
1072 return function() {
@@ -1074,12 +1074,12 @@ describe('ReactSuspenseList', () => {
1074 };
1075 }
1076
1077 - let As = createSyncText('A');
1078 - let Bs = createSyncText('B');
1079 - let Cs = createSyncText('C');
1080 - let Ds = createSyncText('D');
1081 - let Es = createSyncText('E');
1082 - let Fs = createSyncText('F');
1077 + const As = createSyncText('A');
1078 + const Bs = createSyncText('B');
1079 + const Cs = createSyncText('C');
1080 + const Ds = createSyncText('D');
1081 + const Es = createSyncText('E');
1082 + const Fs = createSyncText('F');
1083
1084 function Foo({items}) {
1085 return (
@@ -1309,9 +1309,9 @@ describe('ReactSuspenseList', () => {
1309 });
1310
1311 it('only shows one loading state at a time for "collapsed" tail insertions', async () => {
1312 - let A = createAsyncText('A');
1313 - let B = createAsyncText('B');
1314 - let C = createAsyncText('C');
1312 + const A = createAsyncText('A');
1313 + const B = createAsyncText('B');
1314 + const C = createAsyncText('C');
1315
1316 function Foo() {
1317 return (
@@ -1484,12 +1484,12 @@ describe('ReactSuspenseList', () => {
1484 });
1485
1486 it('adding to the middle does not collapse insertions (forwards)', async () => {
1487 - let A = createAsyncText('A');
1488 - let B = createAsyncText('B');
1489 - let C = createAsyncText('C');
1490 - let D = createAsyncText('D');
1491 - let E = createAsyncText('E');
1492 - let F = createAsyncText('F');
1487 + const A = createAsyncText('A');
1488 + const B = createAsyncText('B');
1489 + const C = createAsyncText('C');
1490 + const D = createAsyncText('D');
1491 + const E = createAsyncText('E');
1492 + const F = createAsyncText('F');
1493
1494 function Foo({items}) {
1495 return (
@@ -1626,12 +1626,12 @@ describe('ReactSuspenseList', () => {
1626 });
1627
1628 it('adding to the middle does not collapse insertions (backwards)', async () => {
1629 - let A = createAsyncText('A');
1630 - let B = createAsyncText('B');
1631 - let C = createAsyncText('C');
1632 - let D = createAsyncText('D');
1633 - let E = createAsyncText('E');
1634 - let F = createAsyncText('F');
1629 + const A = createAsyncText('A');
1630 + const B = createAsyncText('B');
1631 + const C = createAsyncText('C');
1632 + const D = createAsyncText('D');
1633 + const E = createAsyncText('E');
1634 + const F = createAsyncText('F');
1635
1636 function Foo({items}) {
1637 return (
@@ -1773,12 +1773,12 @@ describe('ReactSuspenseList', () => {
1773 });
1774
1775 it('adding to the middle of committed tail does not collapse insertions', async () => {
1776 - let A = createAsyncText('A');
1777 - let B = createAsyncText('B');
1778 - let C = createAsyncText('C');
1779 - let D = createAsyncText('D');
1780 - let E = createAsyncText('E');
1781 - let F = createAsyncText('F');
1776 + const A = createAsyncText('A');
1777 + const B = createAsyncText('B');
1778 + const C = createAsyncText('C');
1779 + const D = createAsyncText('D');
1780 + const E = createAsyncText('E');
1781 + const F = createAsyncText('F');
1782
1783 function SyncD() {
1784 return <Text text="D" />;
@@ -1930,9 +1930,9 @@ describe('ReactSuspenseList', () => {
1930 });
1931
1932 it('only shows no initial loading state "hidden" tail insertions', async () => {
1933 - let A = createAsyncText('A');
1934 - let B = createAsyncText('B');
1935 - let C = createAsyncText('C');
1933 + const A = createAsyncText('A');
1934 + const B = createAsyncText('B');
1935 + const C = createAsyncText('C');
1936
1937 function Foo() {
1938 return (
@@ -1993,7 +1993,7 @@ describe('ReactSuspenseList', () => {
1993 });
1994
1995 it('eventually resolves a nested forwards suspense list', async () => {
1996 - let B = createAsyncText('B');
1996 + const B = createAsyncText('B');
1997
1998 function Foo() {
1999 return (
@@ -2055,7 +2055,7 @@ describe('ReactSuspenseList', () => {
2055 });
2056
2057 it('eventually resolves a nested forwards suspense list with a hidden tail', async () => {
2058 - let B = createAsyncText('B');
2058 + const B = createAsyncText('B');
2059
2060 function Foo() {
2061 return (
@@ -2101,7 +2101,7 @@ describe('ReactSuspenseList', () => {
2101 });
2102
2103 it('eventually resolves two nested forwards suspense lists with a hidden tail', async () => {
2104 - let B = createAsyncText('B');
2104 + const B = createAsyncText('B');
2105
2106 function Foo({showB}) {
2107 return (
@@ -2170,7 +2170,7 @@ describe('ReactSuspenseList', () => {
2170 it('can do unrelated adjacent updates', async () => {
2171 let updateAdjacent;
2172 function Adjacent() {
2173 - let [text, setText] = React.useState('-');
2173 + const [text, setText] = React.useState('-');
2174 updateAdjacent = setText;
2175 return <Text text={text} />;
2176 }
@@ -2214,12 +2214,12 @@ describe('ReactSuspenseList', () => {
2214 });
2215
2216 it('is able to re-suspend the last rows during an update with hidden', async () => {
2217 - let AsyncB = createAsyncText('B');
2217 + const AsyncB = createAsyncText('B');
2218
2219 let setAsyncB;
2220
2221 function B() {
2222 - let [shouldBeAsync, setAsync] = React.useState(false);
2222 + const [shouldBeAsync, setAsync] = React.useState(false);
2223 setAsyncB = setAsync;
2224
2225 return shouldBeAsync ? (
@@ -2253,7 +2253,7 @@ describe('ReactSuspenseList', () => {
2253 </>,
2254 );
2255
2256 - let previousInst = setAsyncB;
2256 + const previousInst = setAsyncB;
2257
2258 // During an update we suspend on B.
2259 ReactNoop.act(() => setAsyncB(true));
@@ -2302,12 +2302,12 @@ describe('ReactSuspenseList', () => {
2302 });
2303
2304 it('is able to re-suspend the last rows during an update with hidden', async () => {
2305 - let AsyncB = createAsyncText('B');
2305 + const AsyncB = createAsyncText('B');
2306
2307 let setAsyncB;
2308
2309 function B() {
2310 - let [shouldBeAsync, setAsync] = React.useState(false);
2310 + const [shouldBeAsync, setAsync] = React.useState(false);
2311 setAsyncB = setAsync;
2312
2313 return shouldBeAsync ? (
@@ -2341,7 +2341,7 @@ describe('ReactSuspenseList', () => {
2341 </>,
2342 );
2343
2344 - let previousInst = setAsyncB;
2344 + const previousInst = setAsyncB;
2345
2346 // During an update we suspend on B.
2347 ReactNoop.act(() => setAsyncB(true));
@@ -2390,19 +2390,19 @@ describe('ReactSuspenseList', () => {
2390 });
2391
2392 it('is able to interrupt a partially rendered tree and continue later', async () => {
2393 - let AsyncA = createAsyncText('A');
2393 + const AsyncA = createAsyncText('A');
2394
2395 let updateLowPri;
2396 let updateHighPri;
2397
2398 function Bar() {
2399 - let [highPriState, setHighPriState] = React.useState(false);
2399 + const [highPriState, setHighPriState] = React.useState(false);
2400 updateHighPri = setHighPriState;
2401 return highPriState ? <AsyncA /> : null;
2402 }
2403
2404 function Foo() {
2405 - let [lowPriState, setLowPriState] = React.useState(false);
2405 + const [lowPriState, setLowPriState] = React.useState(false);
2406 updateLowPri = setLowPriState;
2407 return (
2408 <SuspenseList revealOrder="forwards" tail="hidden">
@@ -2487,8 +2487,8 @@ describe('ReactSuspenseList', () => {
2487 });
2488
2489 it('can resume class components when revealed together', async () => {
2490 - let A = createAsyncText('A');
2491 - let B = createAsyncText('B');
2490 + const A = createAsyncText('A');
2491 + const B = createAsyncText('B');
2492
2493 class ClassComponent extends React.Component {
2494 render() {
packages/react-reconciler/src/__tests__/ReactSuspenseWithNoopRenderer-test.internal.js
+9 -9
@@ -1467,7 +1467,7 @@ describe('ReactSuspenseWithNoopRenderer', () => {
1467 });
1468
1469 it('does not drop mounted effects', async () => {
1470 - let never = {then() {}};
1470 + const never = {then() {}};
1471
1472 let setShouldSuspend;
1473 function App() {
@@ -1974,7 +1974,7 @@ describe('ReactSuspenseWithNoopRenderer', () => {
1974 it('does not warn when a low priority update suspends inside a high priority update for functional components', async () => {
1975 let _setShow;
1976 function App() {
1977 - let [show, setShow] = React.useState(false);
1977 + const [show, setShow] = React.useState(false);
1978 _setShow = setShow;
1979 return (
1980 <Suspense fallback="Loading...">
@@ -2121,7 +2121,7 @@ describe('ReactSuspenseWithNoopRenderer', () => {
2121 it('normal priority updates suspending do not warn for functional components', async () => {
2122 let _setShow;
2123 function App() {
2124 - let [show, setShow] = React.useState(false);
2124 + const [show, setShow] = React.useState(false);
2125 _setShow = setShow;
2126 return (
2127 <Suspense fallback="Loading...">
@@ -2388,7 +2388,7 @@ describe('ReactSuspenseWithNoopRenderer', () => {
2388 it('hooks', async () => {
2389 let transitionToPage;
2390 function App() {
2391 - let [page, setPage] = React.useState('none');
2391 + const [page, setPage] = React.useState('none');
2392 transitionToPage = setPage;
2393 if (page === 'none') {
2394 return null;
@@ -2458,7 +2458,7 @@ describe('ReactSuspenseWithNoopRenderer', () => {
2458 state = {page: 'none'};
2459 render() {
2460 transitionToPage = page => this.setState({page});
2461 - let page = this.state.page;
2461 + const page = this.state.page;
2462 if (page === 'none') {
2463 return null;
2464 }
@@ -2699,8 +2699,8 @@ describe('ReactSuspenseWithNoopRenderer', () => {
2699
2700 it('supports delaying a busy spinner from disappearing', async () => {
2701 function useLoadingIndicator(config) {
2702 - let [isLoading, setLoading] = React.useState(false);
2703 - let start = React.useCallback(
2702 + const [isLoading, setLoading] = React.useState(false);
2703 + const start = React.useCallback(
2704 cb => {
2705 setLoading(true);
2706 Scheduler.unstable_next(() =>
@@ -2724,8 +2724,8 @@ describe('ReactSuspenseWithNoopRenderer', () => {
2724 let transitionToPage;
2725
2726 function App() {
2727 - let [page, setPage] = React.useState('A');
2728 - let [isLoading, startLoading] = useLoadingIndicator(SUSPENSE_CONFIG);
2727 + const [page, setPage] = React.useState('A');
2728 + const [isLoading, startLoading] = useLoadingIndicator(SUSPENSE_CONFIG);
2729 transitionToPage = nextPage => startLoading(() => setPage(nextPage));
2730 return (
2731 <Fragment>
packages/react-reconciler/src/__tests__/ReactTransition-test.internal.js
+2 -2
@@ -43,14 +43,14 @@ describe('ReactTransition', () => {
43
44 function createAsyncText(text) {
45 let resolved = false;
46 - let Component = function() {
46 + const Component = function() {
47 if (!resolved) {
48 Scheduler.unstable_yieldValue('Suspend! [' + text + ']');
49 throw promise;
50 }
51 return <Text text={text} />;
52 };
53 - let promise = new Promise(resolve => {
53 + const promise = new Promise(resolve => {
54 Component.resolve = function() {
55 resolved = true;
56 return resolve();
packages/react-refresh/src/ReactFreshBabelPlugin.js
+7 -7
@@ -251,7 +251,7 @@ export default function(babel, opts = {}) {
251 };
252 }
253
254 - let hasForceResetCommentByFile = new WeakMap();
254 + const hasForceResetCommentByFile = new WeakMap();
255
256 // We let user do /* @refresh reset */ to reset state in the whole file.
257 function hasForceResetComment(path) {
@@ -279,7 +279,7 @@ export default function(babel, opts = {}) {
279 const {key, customHooks} = signature;
280
281 let forceReset = hasForceResetComment(scope.path);
282 - let customHooksInScope = [];
282 + const customHooksInScope = [];
283 customHooks.forEach(callee => {
284 // Check if a corresponding binding exists where we emit the signature.
285 let bindingName;
@@ -335,11 +335,11 @@ export default function(babel, opts = {}) {
335 return args;
336 }
337
338 - let seenForRegistration = new WeakSet();
339 - let seenForSignature = new WeakSet();
340 - let seenForOutro = new WeakSet();
338 + const seenForRegistration = new WeakSet();
339 + const seenForSignature = new WeakSet();
340 + const seenForOutro = new WeakSet();
341
342 - let hookCalls = new WeakMap();
342 + const hookCalls = new WeakMap();
343 const HookCallsVisitor = {
344 CallExpression(path) {
345 const node = path.node;
@@ -370,7 +370,7 @@ export default function(babel, opts = {}) {
370 if (!hookCalls.has(fnNode)) {
371 hookCalls.set(fnNode, []);
372 }
373 - let hookCallsForFn = hookCalls.get(fnNode);
373 + const hookCallsForFn = hookCalls.get(fnNode);
374 let key = '';
375 if (path.parent.type === 'VariableDeclarator') {
376 // TODO: if there is no LHS, consider some other heuristic.
packages/react-refresh/src/ReactFreshRuntime.js
+11 -11
@@ -62,20 +62,20 @@ WeakMap<any, Family> | Map<any, Family> = new PossiblyWeakMap();
62 let pendingUpdates: Array<[Family, any]> = [];
63
64 // This is injected by the renderer via DevTools global hook.
65 -let helpersByRendererID: Map<number, RendererHelpers> = new Map();
65 +const helpersByRendererID: Map<number, RendererHelpers> = new Map();
66
67 -let helpersByRoot: Map<FiberRoot, RendererHelpers> = new Map();
67 +const helpersByRoot: Map<FiberRoot, RendererHelpers> = new Map();
68
69 // We keep track of mounted roots so we can schedule updates.
70 -let mountedRoots: Set<FiberRoot> = new Set();
70 +const mountedRoots: Set<FiberRoot> = new Set();
71 // If a root captures an error, we remember it so we can retry on edit.
72 -let failedRoots: Set<FiberRoot> = new Set();
72 +const failedRoots: Set<FiberRoot> = new Set();
73
74 // In environments that support WeakMap, we also remember the last element for every root.
75 // It needs to be weak because we do this even for roots that failed to mount.
76 // If there is no WeakMap, we won't attempt to do retrying.
77 // $FlowIssue
78 -let rootElements: WeakMap<any, ReactNodeList> | null = // $FlowIssue
78 +const rootElements: WeakMap<any, ReactNodeList> | null = // $FlowIssue
79 typeof WeakMap === 'function' ? new WeakMap() : null;
80
81 let isPerformingRefresh = false;
@@ -164,14 +164,14 @@ function resolveFamily(type) {
164
165 // If we didn't care about IE11, we could use new Map/Set(iterable).
166 function cloneMap<K, V>(map: Map<K, V>): Map<K, V> {
167 - let clone = new Map();
167 + const clone = new Map();
168 map.forEach((value, key) => {
169 clone.set(key, value);
170 });
171 return clone;
172 }
173 function cloneSet<T>(set: Set<T>): Set<T> {
174 - let clone = new Set();
174 + const clone = new Set();
175 set.forEach(value => {
176 clone.add(value);
177 });
@@ -233,9 +233,9 @@ export function performReactRefresh(): RefreshUpdate | null {
233 // If we don't do this, there is a risk they will be mutated while
234 // we iterate over them. For example, trying to recover a failed root
235 // may cause another root to be added to the failed list -- an infinite loop.
236 - let failedRootsSnapshot = cloneSet(failedRoots);
237 - let mountedRootsSnapshot = cloneSet(mountedRoots);
238 - let helpersByRootSnapshot = cloneMap(helpersByRoot);
236 + const failedRootsSnapshot = cloneSet(failedRoots);
237 + const mountedRootsSnapshot = cloneSet(mountedRoots);
238 + const helpersByRootSnapshot = cloneMap(helpersByRoot);
239
240 failedRootsSnapshot.forEach(root => {
241 const helpers = helpersByRootSnapshot.get(root);
@@ -397,7 +397,7 @@ export function findAffectedHostInstances(
397 families: Array<Family>,
398 ): Set<Instance> {
399 if (__DEV__) {
400 - let affectedInstances = new Set();
400 + const affectedInstances = new Set();
401 mountedRoots.forEach(root => {
402 const helpers = helpersByRoot.get(root);
403 if (helpers === undefined) {
packages/react-refresh/src/__tests__/ReactFresh-test.js
+43 -43
@@ -77,7 +77,7 @@ describe('ReactFresh', () => {
77
78 it('can preserve state for compatible types', () => {
79 if (__DEV__) {
80 - let HelloV1 = render(() => {
80 + const HelloV1 = render(() => {
81 function Hello() {
82 const [val, setVal] = React.useState(0);
83 return (
@@ -100,7 +100,7 @@ describe('ReactFresh', () => {
100 expect(el.textContent).toBe('1');
101
102 // Perform a hot update.
103 - let HelloV2 = patch(() => {
103 + const HelloV2 = patch(() => {
104 function Hello() {
105 const [val, setVal] = React.useState(0);
106 return (
@@ -167,7 +167,7 @@ describe('ReactFresh', () => {
167
168 it('can preserve state for forwardRef', () => {
169 if (__DEV__) {
170 - let OuterV1 = render(() => {
170 + const OuterV1 = render(() => {
171 function Hello() {
172 const [val, setVal] = React.useState(0);
173 return (
@@ -193,7 +193,7 @@ describe('ReactFresh', () => {
193 expect(el.textContent).toBe('1');
194
195 // Perform a hot update.
196 - let OuterV2 = patch(() => {
196 + const OuterV2 = patch(() => {
197 function Hello() {
198 const [val, setVal] = React.useState(0);
199 return (
@@ -257,7 +257,7 @@ describe('ReactFresh', () => {
257
258 it('should not consider two forwardRefs around the same type to be equivalent', () => {
259 if (__DEV__) {
260 - let ParentV1 = render(
260 + const ParentV1 = render(
261 () => {
262 function Hello() {
263 const [val, setVal] = React.useState(0);
@@ -274,9 +274,9 @@ describe('ReactFresh', () => {
274 }
275 // Both of these are wrappers around the same inner function.
276 // They should be treated as distinct types across reloads.
277 - let ForwardRefA = React.forwardRef(renderInner);
277 + const ForwardRefA = React.forwardRef(renderInner);
278 $RefreshReg$(ForwardRefA, 'ForwardRefA');
279 - let ForwardRefB = React.forwardRef(renderInner);
279 + const ForwardRefB = React.forwardRef(renderInner);
280 $RefreshReg$(ForwardRefB, 'ForwardRefB');
281
282 function Parent({cond}) {
@@ -324,7 +324,7 @@ describe('ReactFresh', () => {
324 expect(el.textContent).toBe('1');
325
326 // Patch to change the color.
327 - let ParentV2 = patch(() => {
327 + const ParentV2 = patch(() => {
328 function Hello() {
329 const [val, setVal] = React.useState(0);
330 return (
@@ -340,9 +340,9 @@ describe('ReactFresh', () => {
340 }
341 // Both of these are wrappers around the same inner function.
342 // They should be treated as distinct types across reloads.
343 - let ForwardRefA = React.forwardRef(renderInner);
343 + const ForwardRefA = React.forwardRef(renderInner);
344 $RefreshReg$(ForwardRefA, 'ForwardRefA');
345 - let ForwardRefB = React.forwardRef(renderInner);
345 + const ForwardRefB = React.forwardRef(renderInner);
346 $RefreshReg$(ForwardRefB, 'ForwardRefB');
347
348 function Parent({cond}) {
@@ -493,7 +493,7 @@ describe('ReactFresh', () => {
493
494 it('can preserve state for simple memo', () => {
495 if (__DEV__) {
496 - let OuterV1 = render(() => {
496 + const OuterV1 = render(() => {
497 function Hello() {
498 const [val, setVal] = React.useState(0);
499 return (
@@ -519,7 +519,7 @@ describe('ReactFresh', () => {
519 expect(el.textContent).toBe('1');
520
521 // Perform a hot update.
522 - let OuterV2 = patch(() => {
522 + const OuterV2 = patch(() => {
523 function Hello() {
524 const [val, setVal] = React.useState(0);
525 return (
@@ -583,7 +583,7 @@ describe('ReactFresh', () => {
583
584 it('can preserve state for memo with custom comparison', () => {
585 if (__DEV__) {
586 - let OuterV1 = render(() => {
586 + const OuterV1 = render(() => {
587 function Hello() {
588 const [val, setVal] = React.useState(0);
589 return (
@@ -608,7 +608,7 @@ describe('ReactFresh', () => {
608 expect(el.textContent).toBe('1');
609
610 // Perform a hot update.
611 - let OuterV2 = patch(() => {
611 + const OuterV2 = patch(() => {
612 function Hello() {
613 const [val, setVal] = React.useState(0);
614 return (
@@ -718,7 +718,7 @@ describe('ReactFresh', () => {
718
719 it('can preserve state for memo(forwardRef)', () => {
720 if (__DEV__) {
721 - let OuterV1 = render(() => {
721 + const OuterV1 = render(() => {
722 function Hello() {
723 const [val, setVal] = React.useState(0);
724 return (
@@ -744,7 +744,7 @@ describe('ReactFresh', () => {
744 expect(el.textContent).toBe('1');
745
746 // Perform a hot update.
747 - let OuterV2 = patch(() => {
747 + const OuterV2 = patch(() => {
748 function Hello() {
749 const [val, setVal] = React.useState(0);
750 return (
@@ -808,7 +808,7 @@ describe('ReactFresh', () => {
808
809 it('can preserve state for lazy after resolution', async () => {
810 if (__DEV__) {
811 - let AppV1 = render(() => {
811 + const AppV1 = render(() => {
812 function Hello() {
813 const [val, setVal] = React.useState(0);
814 return (
@@ -855,7 +855,7 @@ describe('ReactFresh', () => {
855 expect(el.textContent).toBe('1');
856
857 // Perform a hot update.
858 - let AppV2 = patch(() => {
858 + const AppV2 = patch(() => {
859 function Hello() {
860 const [val, setVal] = React.useState(0);
861 return (
@@ -1627,7 +1627,7 @@ describe('ReactFresh', () => {
1627
1628 it('can force remount by changing signature', () => {
1629 if (__DEV__) {
1630 - let HelloV1 = render(() => {
1630 + const HelloV1 = render(() => {
1631 function Hello() {
1632 const [val, setVal] = React.useState(0);
1633 return (
@@ -1652,7 +1652,7 @@ describe('ReactFresh', () => {
1652 expect(el.textContent).toBe('1');
1653
1654 // Perform a hot update.
1655 - let HelloV2 = patch(() => {
1655 + const HelloV2 = patch(() => {
1656 function Hello() {
1657 const [val, setVal] = React.useState(0);
1658 return (
@@ -1673,7 +1673,7 @@ describe('ReactFresh', () => {
1673 expect(el.style.color).toBe('red');
1674
1675 // Perform a hot update.
1676 - let HelloV3 = patch(() => {
1676 + const HelloV3 = patch(() => {
1677 function Hello() {
1678 const [val, setVal] = React.useState(0);
1679 return (
@@ -1758,7 +1758,7 @@ describe('ReactFresh', () => {
1758
1759 it('keeps a valid tree when forcing remount', () => {
1760 if (__DEV__) {
1761 - let HelloV1 = prepare(() => {
1761 + const HelloV1 = prepare(() => {
1762 function Hello() {
1763 return null;
1764 }
@@ -1773,7 +1773,7 @@ describe('ReactFresh', () => {
1773
1774 // Each of those renders three instances of HelloV1,
1775 // but in different ways.
1776 - let trees = [
1776 + const trees = [
1777 <div>
1778 <HelloV1 />
1779 <div>
@@ -2914,7 +2914,7 @@ describe('ReactFresh', () => {
2914 expect(container.innerHTML).toBe('<h1>Fixed!</h1>');
2915
2916 // Verify next hot reload doesn't remount anything.
2917 - let helloNode = container.firstChild;
2917 + const helloNode = container.firstChild;
2918 patch(() => {
2919 function Hello() {
2920 return <h1>Nice.</h1>;
@@ -2993,15 +2993,15 @@ describe('ReactFresh', () => {
2993
2994 it('regression test: does not get into an infinite loop', () => {
2995 if (__DEV__) {
2996 - let containerA = document.createElement('div');
2997 - let containerB = document.createElement('div');
2996 + const containerA = document.createElement('div');
2997 + const containerB = document.createElement('div');
2998
2999 // Initially, nothing interesting.
3000 - let RootAV1 = () => {
3000 + const RootAV1 = () => {
3001 return 'A1';
3002 };
3003 $RefreshReg$(RootAV1, 'RootA');
3004 - let RootBV1 = () => {
3004 + const RootBV1 = () => {
3005 return 'B1';
3006 };
3007 $RefreshReg$(RootBV1, 'RootB');
@@ -3014,7 +3014,7 @@ describe('ReactFresh', () => {
3014 expect(containerB.innerHTML).toBe('B1');
3015
3016 // Then make the first root fail.
3017 - let RootAV2 = () => {
3017 + const RootAV2 = () => {
3018 throw new Error('A2!');
3019 };
3020 $RefreshReg$(RootAV2, 'RootA');
@@ -3025,7 +3025,7 @@ describe('ReactFresh', () => {
3025 // Then patch the first root, but make it fail in the commit phase.
3026 // This used to trigger an infinite loop due to a list of failed roots
3027 // being mutated while it was being iterated on.
3028 - let RootAV3 = () => {
3028 + const RootAV3 = () => {
3029 React.useLayoutEffect(() => {
3030 throw new Error('A3!');
3031 }, []);
@@ -3036,7 +3036,7 @@ describe('ReactFresh', () => {
3036 expect(containerA.innerHTML).toBe('');
3037 expect(containerB.innerHTML).toBe('B1');
3038
3039 - let RootAV4 = () => {
3039 + const RootAV4 = () => {
3040 return 'A4';
3041 };
3042 $RefreshReg$(RootAV4, 'RootA');
@@ -3048,7 +3048,7 @@ describe('ReactFresh', () => {
3048
3049 it('remounts classes on every edit', () => {
3050 if (__DEV__) {
3051 - let HelloV1 = render(() => {
3051 + const HelloV1 = render(() => {
3052 class Hello extends React.Component {
3053 state = {count: 0};
3054 handleClick = () => {
@@ -3083,7 +3083,7 @@ describe('ReactFresh', () => {
3083 expect(el.textContent).toBe('1');
3084
3085 // Perform a hot update.
3086 - let HelloV2 = patch(() => {
3086 + const HelloV2 = patch(() => {
3087 class Hello extends React.Component {
3088 state = {count: 0};
3089 handleClick = () => {
@@ -3120,7 +3120,7 @@ describe('ReactFresh', () => {
3120 expect(newEl.style.color).toBe('red');
3121 expect(newEl.textContent).toBe('1');
3122
3123 - let HelloV3 = patch(() => {
3123 + const HelloV3 = patch(() => {
3124 class Hello extends React.Component {
3125 state = {count: 0};
3126 handleClick = () => {
@@ -3235,7 +3235,7 @@ describe('ReactFresh', () => {
3235
3236 it('remounts on conversion from class to function and back', () => {
3237 if (__DEV__) {
3238 - let HelloV1 = render(() => {
3238 + const HelloV1 = render(() => {
3239 function Hello() {
3240 const [val, setVal] = React.useState(0);
3241 return (
@@ -3258,7 +3258,7 @@ describe('ReactFresh', () => {
3258 expect(el.textContent).toBe('1');
3259
3260 // Perform a hot update that turns it into a class.
3261 - let HelloV2 = patch(() => {
3261 + const HelloV2 = patch(() => {
3262 class Hello extends React.Component {
3263 state = {count: 0};
3264 handleClick = () => {
@@ -3296,7 +3296,7 @@ describe('ReactFresh', () => {
3296 expect(newEl.textContent).toBe('1');
3297
3298 // Now convert it back to a function.
3299 - let HelloV3 = patch(() => {
3299 + const HelloV3 = patch(() => {
3300 function Hello() {
3301 const [val, setVal] = React.useState(0);
3302 return (
@@ -3479,9 +3479,9 @@ describe('ReactFresh', () => {
3479 ReactFreshRuntime.performReactRefresh();
3480
3481 // Mount three roots.
3482 - let cont1 = document.createElement('div');
3483 - let cont2 = document.createElement('div');
3484 - let cont3 = document.createElement('div');
3482 + const cont1 = document.createElement('div');
3483 + const cont2 = document.createElement('div');
3484 + const cont3 = document.createElement('div');
3485 document.body.appendChild(cont1);
3486 document.body.appendChild(cont2);
3487 document.body.appendChild(cont3);
@@ -3601,10 +3601,10 @@ describe('ReactFresh', () => {
3601 expect(ReactFreshRuntime.isLikelyComponentType(useTheme)).toBe(false);
3602
3603 // These seem like function components.
3604 - let Button = () => {};
3604 + const Button = () => {};
3605 expect(ReactFreshRuntime.isLikelyComponentType(Button)).toBe(true);
3606 expect(ReactFreshRuntime.isLikelyComponentType(Widget)).toBe(true);
3607 - let anon = (() => () => {})();
3607 + const anon = (() => () => {})();
3608 anon.displayName = 'Foo';
3609 expect(ReactFreshRuntime.isLikelyComponentType(anon)).toBe(true);
3610
@@ -3717,7 +3717,7 @@ describe('ReactFresh', () => {
3717 // This is a minimal shim for the global hook installed by DevTools.
3718 // The real one is in packages/react-devtools-shared/src/hook.js.
3719 let idCounter = 0;
3720 - let renderers = new Map();
3720 + const renderers = new Map();
3721 global.__REACT_DEVTOOLS_GLOBAL_HOOK__ = {
3722 renderers,
3723 supportsFiber: true,
packages/react-refresh/src/__tests__/ReactFreshBabelPlugin-test.js
+3 -3
@@ -7,9 +7,9 @@
7
8 'use strict';
9
10 -let babel = require('@babel/core');
11 -let {wrap} = require('jest-snapshot-serializer-raw');
12 -let freshPlugin = require('react-refresh/babel');
10 +const babel = require('@babel/core');
11 +const {wrap} = require('jest-snapshot-serializer-raw');
12 +const freshPlugin = require('react-refresh/babel');
13
14 function transform(input, options = {}) {
15 return wrap(
packages/react-refresh/src/__tests__/ReactFreshIntegration-test.js
+3 -3
@@ -16,8 +16,8 @@ let ReactDOM;
16 let ReactFreshRuntime;
17 let act;
18
19 -let babel = require('@babel/core');
20 -let freshPlugin = require('react-refresh/babel');
19 +const babel = require('@babel/core');
20 +const freshPlugin = require('react-refresh/babel');
21
22 describe('ReactFreshIntegration', () => {
23 let container;
@@ -100,7 +100,7 @@ describe('ReactFreshIntegration', () => {
100 // (In a real module system we'd do this for *all* exports.)
101 // For example, this can happen if you convert a class to a function.
102 // Or if you wrap something in a HOC.
103 - let didExportsChange =
103 + const didExportsChange =
104 ReactFreshRuntime.getFamilyByType(prevExports.default) !==
105 ReactFreshRuntime.getFamilyByType(nextExports.default);
106 if (didExportsChange) {
packages/react-refresh/src/__tests__/ReactFreshMultipleRenderer-test.internal.js
+9 -9
@@ -10,18 +10,18 @@
10 'use strict';
11
12 jest.resetModules();
13 -let React = require('react');
13 +const React = require('react');
14 let ReactFreshRuntime;
15 if (__DEV__) {
16 ReactFreshRuntime = require('react-refresh/runtime');
17 ReactFreshRuntime.injectIntoGlobalHook(global);
18 }
19 -let ReactDOM = require('react-dom');
19 +const ReactDOM = require('react-dom');
20
21 jest.resetModules();
22 -let ReactART = require('react-art');
23 -let ARTSVGMode = require('art/modes/svg');
24 -let ARTCurrentMode = require('art/modes/current');
22 +const ReactART = require('react-art');
23 +const ARTSVGMode = require('art/modes/svg');
24 +const ARTCurrentMode = require('art/modes/current');
25 ARTCurrentMode.setCurrent(ARTSVGMode);
26
27 describe('ReactFresh', () => {
@@ -43,12 +43,12 @@ describe('ReactFresh', () => {
43
44 it('can update components managd by different renderers independently', () => {
45 if (__DEV__) {
46 - let InnerV1 = function() {
46 + const InnerV1 = function() {
47 return <ReactART.Shape fill="blue" />;
48 };
49 ReactFreshRuntime.register(InnerV1, 'Inner');
50
51 - let OuterV1 = function() {
51 + const OuterV1 = function() {
52 return (
53 <div style={{color: 'blue'}}>
54 <ReactART.Surface>
@@ -66,7 +66,7 @@ describe('ReactFresh', () => {
66 expect(pathEl.getAttributeNS(null, 'fill')).toBe('rgb(0, 0, 255)');
67
68 // Perform a hot update to the ART-rendered component.
69 - let InnerV2 = function() {
69 + const InnerV2 = function() {
70 return <ReactART.Shape fill="red" />;
71 };
72 ReactFreshRuntime.register(InnerV2, 'Inner');
@@ -78,7 +78,7 @@ describe('ReactFresh', () => {
78 expect(pathEl.getAttributeNS(null, 'fill')).toBe('rgb(255, 0, 0)');
79
80 // Perform a hot update to the DOM-rendered component.
81 - let OuterV2 = function() {
81 + const OuterV2 = function() {
82 return (
83 <div style={{color: 'red'}}>
84 <ReactART.Surface>
packages/react-server/src/ReactFizzServer.js
+6 -6
@@ -37,13 +37,13 @@ export function createRequest(
37 }
38
39 function performWork(request: OpaqueRequest): void {
40 - let element = (request.children: any);
40 + const element = (request.children: any);
41 request.children = null;
42 if (element && element.$$typeof !== REACT_ELEMENT_TYPE) {
43 return;
44 }
45 - let type = element.type;
46 - let props = element.props;
45 + const type = element.type;
46 + const props = element.props;
47 if (typeof type !== 'string') {
48 return;
49 }
@@ -56,14 +56,14 @@ function performWork(request: OpaqueRequest): void {
56 }
57
58 function flushCompletedChunks(request: OpaqueRequest) {
59 - let destination = request.destination;
60 - let chunks = request.completedChunks;
59 + const destination = request.destination;
60 + const chunks = request.completedChunks;
61 request.completedChunks = [];
62
63 beginWriting(destination);
64 try {
65 for (let i = 0; i < chunks.length; i++) {
66 - let chunk = chunks[i];
66 + const chunk = chunks[i];
67 writeChunk(destination, chunk);
68 }
69 } finally {
packages/react-server/src/ReactFlightServer.js
+28 -28
@@ -79,8 +79,8 @@ export function createRequest(
79 destination: Destination,
80 bundlerConfig: BundlerConfig,
81 ): Request {
82 - let pingedSegments = [];
83 - let request = {
82 + const pingedSegments = [];
83 + const request = {
84 destination,
85 bundlerConfig,
86 nextChunkId: 0,
@@ -94,14 +94,14 @@ export function createRequest(
94 },
95 };
96 request.pendingChunks++;
97 - let rootSegment = createSegment(request, () => model);
97 + const rootSegment = createSegment(request, () => model);
98 pingedSegments.push(rootSegment);
99 return request;
100 }
101
102 function attemptResolveElement(element: React$Element<any>): ReactModel {
103 - let type = element.type;
104 - let props = element.props;
103 + const type = element.type;
104 + const props = element.props;
105 if (typeof type === 'function') {
106 // This is a server-side component.
107 return type(props);
@@ -118,7 +118,7 @@ function attemptResolveElement(element: React$Element<any>): ReactModel {
118 }
119
120 function pingSegment(request: Request, segment: Segment): void {
121 - let pingedSegments = request.pingedSegments;
121 + const pingedSegments = request.pingedSegments;
122 pingedSegments.push(segment);
123 if (pingedSegments.length === 1) {
124 scheduleWork(() => performWork(request));
@@ -126,8 +126,8 @@ function pingSegment(request: Request, segment: Segment): void {
126 }
127
128 function createSegment(request: Request, query: () => ReactModel): Segment {
129 - let id = request.nextChunkId++;
130 - let segment = {
129 + const id = request.nextChunkId++;
130 + const segment = {
131 id,
132 query,
133 ping: () => pingSegment(request, segment),
@@ -176,23 +176,23 @@ export function resolveModelToJSON(
176 switch (key) {
177 case '1': {
178 // Module reference
179 - let moduleReference: ModuleReference<any> = (value: any);
179 + const moduleReference: ModuleReference<any> = (value: any);
180 try {
181 - let moduleMetaData: ModuleMetaData = resolveModuleMetaData(
181 + const moduleMetaData: ModuleMetaData = resolveModuleMetaData(
182 request.bundlerConfig,
183 moduleReference,
184 );
185 return (moduleMetaData: ReactJSONValue);
186 } catch (x) {
187 request.pendingChunks++;
188 - let errorId = request.nextChunkId++;
188 + const errorId = request.nextChunkId++;
189 emitErrorChunk(request, errorId, x);
190 return serializeIDRef(errorId);
191 }
192 }
193 case '2': {
194 // Load function
195 - let load: () => ReactModel = (value: any);
195 + const load: () => ReactModel = (value: any);
196 try {
197 // Attempt to resolve the data.
198 return load();
@@ -204,14 +204,14 @@ export function resolveModelToJSON(
204 ) {
205 // Something suspended, we'll need to create a new segment and resolve it later.
206 request.pendingChunks++;
207 - let newSegment = createSegment(request, load);
208 - let ping = newSegment.ping;
207 + const newSegment = createSegment(request, load);
208 + const ping = newSegment.ping;
209 x.then(ping, ping);
210 return serializeIDRef(newSegment.id);
211 } else {
212 // This load failed, encode the error as a separate row and reference that.
213 request.pendingChunks++;
214 - let errorId = request.nextChunkId++;
214 + const errorId = request.nextChunkId++;
215 emitErrorChunk(request, errorId, x);
216 return serializeIDRef(errorId);
217 }
@@ -238,7 +238,7 @@ export function resolveModelToJSON(
238 ) {
239 // TODO: Concatenate keys of parents onto children.
240 // TODO: Allow elements to suspend independently and serialize as references to future elements.
241 - let element: React$Element<any> = (value: any);
241 + const element: React$Element<any> = (value: any);
242 value = attemptResolveElement(element);
243 }
244
@@ -262,20 +262,20 @@ function emitErrorChunk(request: Request, id: number, error: mixed): void {
262 message = 'An error occurred but serializing the error message failed.';
263 }
264
265 - let processedChunk = processErrorChunk(request, id, message, stack);
265 + const processedChunk = processErrorChunk(request, id, message, stack);
266 request.completedErrorChunks.push(processedChunk);
267 }
268
269 function retrySegment(request: Request, segment: Segment): void {
270 - let query = segment.query;
270 + const query = segment.query;
271 try {
272 - let value = query();
273 - let processedChunk = processModelChunk(request, segment.id, value);
272 + const value = query();
273 + const processedChunk = processModelChunk(request, segment.id, value);
274 request.completedJSONChunks.push(processedChunk);
275 } catch (x) {
276 if (typeof x === 'object' && x !== null && typeof x.then === 'function') {
277 // Something suspended again, let's pick it back up later.
278 - let ping = segment.ping;
278 + const ping = segment.ping;
279 x.then(ping, ping);
280 return;
281 } else {
@@ -286,10 +286,10 @@ function retrySegment(request: Request, segment: Segment): void {
286 }
287
288 function performWork(request: Request): void {
289 - let pingedSegments = request.pingedSegments;
289 + const pingedSegments = request.pingedSegments;
290 request.pingedSegments = [];
291 for (let i = 0; i < pingedSegments.length; i++) {
292 - let segment = pingedSegments[i];
292 + const segment = pingedSegments[i];
293 retrySegment(request, segment);
294 }
295 if (request.flowing) {
@@ -303,14 +303,14 @@ function flushCompletedChunks(request: Request): void {
303 return;
304 }
305 reentrant = true;
306 - let destination = request.destination;
306 + const destination = request.destination;
307 beginWriting(destination);
308 try {
309 - let jsonChunks = request.completedJSONChunks;
309 + const jsonChunks = request.completedJSONChunks;
310 let i = 0;
311 for (; i < jsonChunks.length; i++) {
312 request.pendingChunks--;
313 - let chunk = jsonChunks[i];
313 + const chunk = jsonChunks[i];
314 if (!writeChunk(destination, chunk)) {
315 request.flowing = false;
316 i++;
@@ -318,11 +318,11 @@ function flushCompletedChunks(request: Request): void {
318 }
319 }
320 jsonChunks.splice(0, i);
321 - let errorChunks = request.completedErrorChunks;
321 + const errorChunks = request.completedErrorChunks;
322 i = 0;
323 for (; i < errorChunks.length; i++) {
324 request.pendingChunks--;
325 - let chunk = errorChunks[i];
325 + const chunk = errorChunks[i];
326 if (!writeChunk(destination, chunk)) {
327 request.flowing = false;
328 i++;
packages/react-server/src/ReactFlightServerConfigStream.js
+3 -3
@@ -84,8 +84,8 @@ export function processErrorChunk(
84 message: string,
85 stack: string,
86 ): Chunk {
87 - let errorInfo = {message, stack};
88 - let row = serializeRowHeader('E', id) + stringify(errorInfo) + '\n';
87 + const errorInfo = {message, stack};
88 + const row = serializeRowHeader('E', id) + stringify(errorInfo) + '\n';
89 return convertStringToBuffer(row);
90 }
91
@@ -94,7 +94,7 @@ export function processModelChunk(
94 id: number,
95 model: ReactModel,
96 ): Chunk {
97 - let json = stringify(model, request.toJSON);
97 + const json = stringify(model, request.toJSON);
98 let row;
99 if (id === 0) {
100 row = json + '\n';
packages/react-server/src/ReactFlightServerRuntime.js
+2 -2
@@ -30,7 +30,7 @@ export function serverBlock<Props, Data>(
30 moduleReference: ModuleReference<BlockRenderFunction<Props, Data>>,
31 loadData: () => Data,
32 ): ServerBlock<Props> {
33 - let blockComponent: ServerBlockComponent<Props, Data> = [
33 + const blockComponent: ServerBlockComponent<Props, Data> = [
34 REACT_SERVER_BLOCK_TYPE,
35 moduleReference,
36 loadData,
@@ -43,7 +43,7 @@ export function serverBlock<Props, Data>(
43 export function serverBlockNoData<Props>(
44 moduleReference: ModuleReference<BlockRenderFunction<Props, void>>,
45 ): ServerBlock<Props> {
46 - let blockComponent: ServerBlockComponent<Props, void> = [
46 + const blockComponent: ServerBlockComponent<Props, void> = [
47 REACT_SERVER_BLOCK_TYPE,
48 moduleReference,
49 ];
packages/react-server/src/ReactServerStreamConfigNode.js
+1 -1
@@ -46,7 +46,7 @@ export function writeChunk(
46 destination: Destination,
47 buffer: Uint8Array,
48 ): boolean {
49 - let nodeBuffer = ((buffer: any): Buffer); // close enough
49 + const nodeBuffer = ((buffer: any): Buffer); // close enough
50 return destination.write(nodeBuffer);
51 }
52
packages/react-server/src/__tests__/ReactServer-test.js
+1 -1
@@ -22,7 +22,7 @@ describe('ReactServer', () => {
22 });
23
24 it('can call render', () => {
25 - let result = ReactNoopServer.render(<div>hello world</div>);
25 + const result = ReactNoopServer.render(<div>hello world</div>);
26 expect(result).toEqual([{type: 'div', props: {children: 'hello world'}}]);
27 });
28 });
packages/react-test-renderer/src/__tests__/ReactShallowRenderer-test.js
+2 -2
@@ -930,7 +930,7 @@ describe('ReactShallowRenderer', () => {
930 let result = shallowRenderer.render(<SimpleComponent />);
931 expect(result).toEqual(<div>value:0</div>);
932
933 - let instance = shallowRenderer.getMountedInstance();
933 + const instance = shallowRenderer.getMountedInstance();
934 instance.updateState();
935 result = shallowRenderer.getRenderOutput();
936 expect(result).toEqual(<div>value:1</div>);
@@ -1170,7 +1170,7 @@ describe('ReactShallowRenderer', () => {
1170 }
1171
1172 const shallowRenderer = createRenderer();
1173 - let result = shallowRenderer.render(<SimpleComponent />, {
1173 + const result = shallowRenderer.render(<SimpleComponent />, {
1174 foo: 'foo',
1175 bar: 'bar',
1176 });
packages/react-test-renderer/src/__tests__/ReactShallowRendererHooks-test.js
+9 -9
@@ -216,7 +216,7 @@ describe('ReactShallowRenderer with hooks', () => {
216 }
217
218 const shallowRenderer = createRenderer();
219 - let result = shallowRenderer.render(<SomeComponent initialCount={0} />);
219 + const result = shallowRenderer.render(<SomeComponent initialCount={0} />);
220
221 expect(result).toEqual(
222 <div>
@@ -228,7 +228,7 @@ describe('ReactShallowRenderer with hooks', () => {
228 });
229
230 it('should not trigger effects', () => {
231 - let effectsCalled = [];
231 + const effectsCalled = [];
232
233 function SomeComponent({defaultName}) {
234 React.useEffect(() => {
@@ -260,8 +260,8 @@ describe('ReactShallowRenderer with hooks', () => {
260 }
261
262 const shallowRenderer = createRenderer();
263 - let firstResult = shallowRenderer.render(<SomeComponent />);
264 - let secondResult = shallowRenderer.render(<SomeComponent />);
263 + const firstResult = shallowRenderer.render(<SomeComponent />);
264 + const secondResult = shallowRenderer.render(<SomeComponent />);
265
266 expect(firstResult).toEqual(secondResult);
267 });
@@ -280,8 +280,8 @@ describe('ReactShallowRenderer with hooks', () => {
280 }
281
282 const shallowRenderer = createRenderer();
283 - let firstResult = shallowRenderer.render(<SomeComponent />);
284 - let secondResult = shallowRenderer.render(<SomeComponent />);
283 + const firstResult = shallowRenderer.render(<SomeComponent />);
284 + const secondResult = shallowRenderer.render(<SomeComponent />);
285
286 expect(firstResult).toEqual(secondResult);
287 });
@@ -300,7 +300,7 @@ describe('ReactShallowRenderer with hooks', () => {
300 }
301
302 const shallowRenderer = createRenderer();
303 - let result = shallowRenderer.render(<SomeComponent />);
303 + const result = shallowRenderer.render(<SomeComponent />);
304
305 expect(result).toEqual(
306 <div>
@@ -368,8 +368,8 @@ describe('ReactShallowRenderer with hooks', () => {
368 });
369
370 const shallowRenderer = createRenderer();
371 - let firstResult = shallowRenderer.render(<SomeComponent />);
372 - let secondResult = shallowRenderer.render(<SomeComponent />);
371 + const firstResult = shallowRenderer.render(<SomeComponent />);
372 + const secondResult = shallowRenderer.render(<SomeComponent />);
373
374 expect(firstResult).toEqual(secondResult);
375 });
packages/react-test-renderer/src/__tests__/ReactShallowRendererMemo-test.js
+2 -2
@@ -957,7 +957,7 @@ describe('ReactShallowRendererMemo', () => {
957 let result = shallowRenderer.render(<SimpleComponent />);
958 expect(result).toEqual(<div>value:0</div>);
959
960 - let instance = shallowRenderer.getMountedInstance();
960 + const instance = shallowRenderer.getMountedInstance();
961 instance.updateState();
962 result = shallowRenderer.getRenderOutput();
963 expect(result).toEqual(<div>value:1</div>);
@@ -1215,7 +1215,7 @@ describe('ReactShallowRendererMemo', () => {
1215 );
1216
1217 const shallowRenderer = createRenderer();
1218 - let result = shallowRenderer.render(<SimpleComponent />, {
1218 + const result = shallowRenderer.render(<SimpleComponent />, {
1219 foo: 'foo',
1220 bar: 'bar',
1221 });
packages/react-test-renderer/src/__tests__/ReactTestRendererAct-test.js
+4 -4
@@ -15,14 +15,14 @@ describe('ReactTestRenderer.act()', () => {
15 });
16 it('can use .act() to flush effects', () => {
17 function App(props) {
18 - let [ctr, setCtr] = React.useState(0);
18 + const [ctr, setCtr] = React.useState(0);
19 React.useEffect(() => {
20 props.callback();
21 setCtr(1);
22 }, []);
23 return ctr;
24 }
25 - let calledLog = [];
25 + const calledLog = [];
26 let root;
27 act(() => {
28 root = ReactTestRenderer.create(
@@ -41,7 +41,7 @@ describe('ReactTestRenderer.act()', () => {
41 it("warns if you don't use .act", () => {
42 let setCtr;
43 function App(props) {
44 - let [ctr, _setCtr] = React.useState(0);
44 + const [ctr, _setCtr] = React.useState(0);
45 setCtr = _setCtr;
46 return ctr;
47 }
@@ -63,7 +63,7 @@ describe('ReactTestRenderer.act()', () => {
63 });
64 }
65 function App() {
66 - let [details, setDetails] = React.useState(0);
66 + const [details, setDetails] = React.useState(0);
67
68 React.useEffect(() => {
69 async function fetchDetails() {
packages/react/src/ReactBlock.js
+5 -5
@@ -99,7 +99,7 @@ export function block<Args: Iterable<any>, Props, Data>(
99
100 if (load === undefined) {
101 return function(): Block<Props> {
102 - let blockComponent: BlockComponent<Props, void> = {
102 + const blockComponent: BlockComponent<Props, void> = {
103 $$typeof: REACT_BLOCK_TYPE,
104 _data: undefined,
105 // $FlowFixMe: Data must be void in this scenario.
@@ -112,18 +112,18 @@ export function block<Args: Iterable<any>, Props, Data>(
112 }
113
114 // Trick to let Flow refine this.
115 - let loadFn = load;
115 + const loadFn = load;
116
117 return function(): Block<Props> {
118 - let args: Args = arguments;
118 + const args: Args = arguments;
119
120 - let payload: Payload<Props, Args, Data> = {
120 + const payload: Payload<Props, Args, Data> = {
121 load: loadFn,
122 args: args,
123 render: render,
124 };
125
126 - let lazyType: LazyComponent<
126 + const lazyType: LazyComponent<
127 BlockComponent<Props, Data>,
128 Payload<Props, Args, Data>,
129 > = {
packages/react/src/ReactChildren.js
+1 -1
@@ -109,7 +109,7 @@ function mapIntoArray(
109 let mappedChild = callback(child);
110 // If it's the only child, treat the name as if it was wrapped in an array
111 // so that it's consistent if the number of children grows:
112 - let childKey =
112 + const childKey =
113 nameSoFar === '' ? SEPARATOR + getElementKey(child, 0) : nameSoFar;
114 if (Array.isArray(mappedChild)) {
115 let escapedChildKey = '';
packages/react/src/ReactLazy.js
+2 -2
@@ -98,13 +98,13 @@ function lazyInitializer<T>(payload: Payload<T>): T {
98 export function lazy<T>(
99 ctor: () => Thenable<{default: T, ...}>,
100 ): LazyComponent<T, Payload<T>> {
101 - let payload: Payload<T> = {
101 + const payload: Payload<T> = {
102 // We use these fields to store the result.
103 _status: -1,
104 _result: ctor,
105 };
106
107 - let lazyType: LazyComponent<T, Payload<T>> = {
107 + const lazyType: LazyComponent<T, Payload<T>> = {
108 $$typeof: REACT_LAZY_TYPE,
109 _payload: payload,
110 _init: lazyInitializer,
packages/react/src/__tests__/ReactDOMTracing-test.internal.js
+7 -5
@@ -600,7 +600,7 @@ describe('ReactDOMTracing', () => {
600
601 describe('hydration', () => {
602 it('traces interaction across hydration', async done => {
603 - let ref = React.createRef();
603 + const ref = React.createRef();
604
605 function Child() {
606 return 'Hello';
@@ -651,8 +651,10 @@ describe('ReactDOMTracing', () => {
651 it('traces interaction across suspended hydration', async done => {
652 let suspend = false;
653 let resolve;
654 - let promise = new Promise(resolvePromise => (resolve = resolvePromise));
655 - let ref = React.createRef();
654 + const promise = new Promise(
655 + resolvePromise => (resolve = resolvePromise),
656 + );
657 + const ref = React.createRef();
658
659 function Child() {
660 if (suspend) {
@@ -720,8 +722,8 @@ describe('ReactDOMTracing', () => {
722
723 it('traces interaction across client-rendered hydration', async done => {
724 let suspend = false;
723 - let promise = new Promise(() => {});
724 - let ref = React.createRef();
725 + const promise = new Promise(() => {});
726 + const ref = React.createRef();
727
728 function Child() {
729 if (suspend) {
packages/react/src/__tests__/ReactProfiler-test.internal.js
+5 -5
@@ -818,7 +818,7 @@ describe('Profiler', () => {
818 // The initial work was thrown away in this case,
819 // So the actual and base times should only include the final rendered tree times.
820 expect(callback).toHaveBeenCalledTimes(1);
821 - let call = callback.mock.calls[0];
821 + const call = callback.mock.calls[0];
822 expect(call[2]).toBe(5); // actual time
823 expect(call[3]).toBe(5); // base time
824 expect(call[4]).toBe(115); // start time
@@ -1075,7 +1075,7 @@ describe('Profiler', () => {
1075 expect(callback).toHaveBeenCalledTimes(2);
1076
1077 // Callbacks bubble (reverse order).
1078 - let [mountCall, updateCall] = callback.mock.calls;
1078 + const [mountCall, updateCall] = callback.mock.calls;
1079
1080 // The initial mount only includes the ErrorBoundary (which takes 2)
1081 // But it spends time rendering all of the failed subtree also.
@@ -1154,7 +1154,7 @@ describe('Profiler', () => {
1154 expect(callback).toHaveBeenCalledTimes(1);
1155
1156 // Callbacks bubble (reverse order).
1157 - let [mountCall] = callback.mock.calls;
1157 + const [mountCall] = callback.mock.calls;
1158
1159 // The initial mount includes the ErrorBoundary's error state,
1160 // But it also spends actual time rendering UI that fails and isn't included.
@@ -3500,7 +3500,7 @@ describe('Profiler', () => {
3500 expect(onPostCommit).not.toHaveBeenCalled();
3501 expect(Scheduler).toFlushAndYield(['Child:1', 'onPostCommit']);
3502 expect(onPostCommit).toHaveBeenCalledTimes(1);
3503 - let call = onPostCommit.mock.calls[0];
3503 + const call = onPostCommit.mock.calls[0];
3504 expect(call[0]).toEqual('test-profiler');
3505 expect(call[4]).toMatchInteractions(
3506 ReactFeatureFlags.enableSchedulerTracing ? [interaction] : [],
@@ -3934,7 +3934,7 @@ describe('Profiler', () => {
3934 it('handles high-pri renderers between suspended and resolved (async) trees', async () => {
3935 // Set up an initial shell. We need to set this up before the test sceanrio
3936 // because we want initial render to suspend on navigation to the initial state.
3937 - let renderer = ReactTestRenderer.create(
3937 + const renderer = ReactTestRenderer.create(
3938 <React.Profiler id="app" onRender={() => {}}>
3939 <React.Suspense fallback={<Text text="loading" />} />
3940 </React.Profiler>,
packages/scheduler/src/Scheduler.js
+1 -1
@@ -206,7 +206,7 @@ function workLoop(hasTimeRemaining, initialTime) {
206 if (currentTask !== null) {
207 return true;
208 } else {
209 - let firstTimer = peek(timerQueue);
209 + const firstTimer = peek(timerQueue);
210 if (firstTimer !== null) {
211 requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);
212 }
packages/scheduler/src/__tests__/SchedulerBrowser-test.js
+1 -1
@@ -252,7 +252,7 @@ describe('SchedulerBrowser', () => {
252 });
253
254 it('schedule new task after a cancellation', () => {
255 - let handle = scheduleCallback(NormalPriority, () => {
255 + const handle = scheduleCallback(NormalPriority, () => {
256 runtime.log('A');
257 });
258
packages/scheduler/src/__tests__/SchedulerNoDOM-test.js
+2 -2
@@ -39,7 +39,7 @@ describe('SchedulerNoDOM', () => {
39 });
40
41 it('runAllTimers flushes all scheduled callbacks', () => {
42 - let log = [];
42 + const log = [];
43 scheduleCallback(NormalPriority, () => {
44 log.push('A');
45 });
@@ -55,7 +55,7 @@ describe('SchedulerNoDOM', () => {
55 });
56
57 it('executes callbacks in order of priority', () => {
58 - let log = [];
58 + const log = [];
59
60 scheduleCallback(NormalPriority, () => {
61 log.push('A');
packages/scheduler/src/forks/SchedulerHostConfig.default.js
+1 -1
@@ -121,7 +121,7 @@ if (
121
122 // TODO: Make this configurable
123 // TODO: Adjust this based on priority?
124 - let maxYieldInterval = 300;
124 + const maxYieldInterval = 300;
125 let needsPaint = false;
126
127 if (
packages/shared/__tests__/ReactErrorUtils-test.internal.js
+2 -3
@@ -82,7 +82,6 @@ describe('ReactErrorUtils', () => {
82 const err1 = new Error();
83 let err2;
84 const err3 = new Error();
85 - let err4;
85 ReactErrorUtils.invokeGuardedCallback(
86 'foo',
87 function() {
@@ -98,7 +97,7 @@ describe('ReactErrorUtils', () => {
97 },
98 null,
99 );
101 - err4 = ReactErrorUtils.clearCaughtError();
100 + const err4 = ReactErrorUtils.clearCaughtError();
101
102 expect(err2).toBe(err1);
103 expect(err4).toBe(err3);
@@ -133,7 +132,7 @@ describe('ReactErrorUtils', () => {
132 const ReactErrorUtils2 = require('shared/ReactErrorUtils');
133 expect(ReactErrorUtils1).not.toEqual(ReactErrorUtils2);
134
136 - let ops = [];
135 + const ops = [];
136
137 ReactErrorUtils1.invokeGuardedCallback(
138 null,
packages/shared/__tests__/describeComponentFrame-test.js
+1 -1
@@ -96,7 +96,7 @@ describe('Component stack trace displaying', () => {
96 if (__DEV__) {
97 let i = 0;
98 expect(console.error.calls.count()).toBe(Object.keys(fileNames).length);
99 - for (let fileName in fileNames) {
99 + for (const fileName in fileNames) {
100 if (!fileNames.hasOwnProperty(fileName)) {
101 continue;
102 }
packages/shared/checkPropTypes.js
+4 -4
@@ -7,7 +7,7 @@
7 * @flow
8 */
9
10 -let loggedTypeFailures = {};
10 +const loggedTypeFailures = {};
11
12 export default function checkPropTypes(
13 typeSpecs: Object,
@@ -17,8 +17,8 @@ export default function checkPropTypes(
17 ): void {
18 if (__DEV__) {
19 // $FlowFixMe This is okay but Flow doesn't know it.
20 - let has = Function.call.bind(Object.prototype.hasOwnProperty);
21 - for (let typeSpecName in typeSpecs) {
20 + const has = Function.call.bind(Object.prototype.hasOwnProperty);
21 + for (const typeSpecName in typeSpecs) {
22 if (has(typeSpecs, typeSpecName)) {
23 let error;
24 // Prop type validation may throw. In case they do, we don't want to
@@ -28,7 +28,7 @@ export default function checkPropTypes(
28 // This is intentionally an invariant that gets caught. It's the same
29 // behavior as without this statement except with a better message.
30 if (typeof typeSpecs[typeSpecName] !== 'function') {
31 - let err = Error(
31 + const err = Error(
32 (componentName || 'React class') +
33 ': ' +
34 location +
packages/shared/describeComponentFrame.js
+1 -1
@@ -16,7 +16,7 @@ export default function(
16 ) {
17 let sourceInfo = '';
18 if (source) {
19 - let path = source.fileName;
19 + const path = source.fileName;
20 let fileName = path.replace(BEFORE_SLASH_RE, '');
21 if (__DEV__) {
22 // In DEV, include code for a common special case:
packages/shared/enqueueTask.js
+2 -2
@@ -15,8 +15,8 @@ export default function enqueueTask(task: () => void) {
15 try {
16 // read require off the module object to get around the bundlers.
17 // we don't want them to detect a require and bundle a Node polyfill.
18 - let requireString = ('require' + Math.random()).slice(0, 7);
19 - let nodeRequire = module && module[requireString];
18 + const requireString = ('require' + Math.random()).slice(0, 7);
19 + const nodeRequire = module && module[requireString];
20 // assuming we're in node, let's try to get node's
21 // version of setImmediate, bypassing fake timers if any.
22 enqueueTaskImpl = nodeRequire('timers').setImmediate;
packages/shared/forks/invokeGuardedCallbackImpl.www.js
+1 -1
@@ -14,7 +14,7 @@ invariant(
14 'Expected ReactFbErrorUtils.invokeGuardedCallback to be a function.',
15 );
16
17 -let invokeGuardedCallbackImpl = function<A, B, C, D, E, F, Context>(
17 +const invokeGuardedCallbackImpl = function<A, B, C, D, E, F, Context>(
18 name: string | null,
19 func: (a: A, b: B, c: C, d: D, e: E, f: F) => mixed,
20 context: Context,
packages/shared/forks/object-assign.inline-umd.js
+1 -1
@@ -5,7 +5,7 @@
5 const hasOwnProperty = Object.prototype.hasOwnProperty;
6
7 const _assign = function(to, from) {
8 - for (let key in from) {
8 + for (const key in from) {
9 if (hasOwnProperty.call(from, key)) {
10 to[key] = from[key];
11 }
packages/shared/getComponentName.js
+2 -2
@@ -90,8 +90,8 @@ function getComponentName(type: mixed): string | null {
90 return getComponentName(type._render);
91 case REACT_LAZY_TYPE: {
92 const lazyComponent: LazyComponent<any, any> = (type: any);
93 - let payload = lazyComponent._payload;
94 - let init = lazyComponent._init;
93 + const payload = lazyComponent._payload;
94 + const init = lazyComponent._init;
95 try {
96 return getComponentName(init(payload));
97 } catch (x) {
packages/shared/invokeGuardedCallbackImpl.js
+1 -1
@@ -96,7 +96,7 @@ if (__DEV__) {
96 // Keeps track of the value of window.event so that we can reset it
97 // during the callback to let user code access window.event in the
98 // browsers that support it.
99 - let windowEvent = window.event;
99 + const windowEvent = window.event;
100
101 // Keeps track of the descriptor of window.event to restore it after event
102 // dispatching: https://github.com/facebook/react/issues/13688
packages/use-subscription/src/__tests__/useSubscription-test.internal.js
+2 -2
@@ -152,7 +152,7 @@ describe('useSubscription', () => {
152 return null;
153 }
154
155 - let subscriptions = [];
155 + const subscriptions = [];
156
157 function Subscription({source}) {
158 const value = useSubscription(
@@ -213,7 +213,7 @@ describe('useSubscription', () => {
213 return null;
214 }
215
216 - let subscriptions = [];
216 + const subscriptions = [];
217
218 function Subscription({source}) {
219 const value = useSubscription({
scripts/flow/createFlowConfigs.js
+1 -1
@@ -24,7 +24,7 @@ function writeConfig(renderer, rendererInfo, isServerSupported) {
24
25 const serverRenderer = isServerSupported ? renderer : 'custom';
26
27 - let ignoredPaths = [];
27 + const ignoredPaths = [];
28
29 inlinedHostConfigs.forEach(otherRenderer => {
30 if (otherRenderer === rendererInfo) {