From eaa0df6804b6f54e05755dd8fbad67ef0e8e6916 Mon Sep 17 00:00:00 2001 From: Dan Abramov Date: Wed, 9 Dec 2020 02:52:09 +0000 Subject: [PATCH] Don't allocate the inner cache unnecessarily --- packages/react-fs/src/ReactFilesystem.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/react-fs/src/ReactFilesystem.js b/packages/react-fs/src/ReactFilesystem.js index f13c6ce124760..0bc6374b522e3 100644 --- a/packages/react-fs/src/ReactFilesystem.js +++ b/packages/react-fs/src/ReactFilesystem.js @@ -20,19 +20,19 @@ const Rejected = 2; type PendingRecord = {| status: 0, value: Wakeable, - cache: Array, + cache: null, |}; type ResolvedRecord = {| status: 1, value: T, - cache: Array, + cache: null | Array, |}; type RejectedRecord = {| status: 2, value: mixed, - cache: Array, + cache: null, |}; type Record = PendingRecord | ResolvedRecord | RejectedRecord; @@ -41,7 +41,7 @@ function createRecordFromThenable(thenable: Thenable): Record { const record: Record = { status: Pending, value: thenable, - cache: [], + cache: null, }; thenable.then( value => { @@ -62,9 +62,9 @@ function createRecordFromThenable(thenable: Thenable): Record { return record; } -function readRecordValue(record: Record): T { +function readRecord(record: Record): ResolvedRecord { if (record.status === Resolved) { - return record.value; + return record; } else { throw record.value; } @@ -114,7 +114,8 @@ export function readFile( record = createRecordFromThenable(thenable); map.set(path, record); } - const buffer: Buffer = readRecordValue(record); + const resolvedRecord = readRecord(record); + const buffer: Buffer = resolvedRecord.value; if (!options) { return buffer; } @@ -136,7 +137,7 @@ export function readFile( if (typeof encoding !== 'string') { return buffer; } - const textCache = record.cache; + const textCache = resolvedRecord.cache || (resolvedRecord.cache = []); for (let i = 0; i < textCache.length; i += 2) { if (textCache[i] === encoding) { return (textCache[i + 1]: any);