From a2dbccada6066e3e5816e37c4059c5db8ae9eadf Mon Sep 17 00:00:00 2001 From: teidesu <86301490+teidesu@users.noreply.github.com> Date: Tue, 28 Jun 2022 19:26:11 +0300 Subject: [PATCH] fix(tl-utils): optimize readers code size by merging pre-return vars --- packages/tl-utils/src/codegen/reader.ts | 12 +++++++----- packages/tl-utils/tests/codegen/reader.spec.ts | 12 ++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/tl-utils/src/codegen/reader.ts b/packages/tl-utils/src/codegen/reader.ts index 4ade8972..5b0e617f 100644 --- a/packages/tl-utils/src/codegen/reader.ts +++ b/packages/tl-utils/src/codegen/reader.ts @@ -5,13 +5,16 @@ import { snakeToCamel } from './utils' /** * Returns code as an object entry */ -export function generateReaderCodeForTlEntry(entry: TlEntry, includeFlags = false): string { +export function generateReaderCodeForTlEntry( + entry: TlEntry, + includeFlags = false +): string { if (entry.id === 0) entry.id = computeConstructorIdFromEntry(entry) - let ret = `${entry.id}:function(r){` + const pre = `${entry.id}:function(r){` if (!entry.arguments.length) { - return ret + `return{_:'${entry.name}'}},` + return pre + `return{_:'${entry.name}'}},` } let beforeReturn = '' @@ -105,7 +108,6 @@ export function generateReaderCodeForTlEntry(entry: TlEntry, includeFlags = fals code += ':void 0' } - if (isBeforeLastFlag) { beforeReturn += code + ';' } else { @@ -113,7 +115,7 @@ export function generateReaderCodeForTlEntry(entry: TlEntry, includeFlags = fals } }) - return `${ret}${beforeReturn}return{${returnCode}}},` + return `${pre}${beforeReturn.replace(/;var /g, ',')}return{${returnCode}}},` } export function generateReaderCodeForTlEntries( diff --git a/packages/tl-utils/tests/codegen/reader.spec.ts b/packages/tl-utils/tests/codegen/reader.spec.ts index fc2470fa..8911adc5 100644 --- a/packages/tl-utils/tests/codegen/reader.spec.ts +++ b/packages/tl-utils/tests/codegen/reader.spec.ts @@ -75,10 +75,10 @@ describe('generateReaderCodeForTlEntry', () => { it('generates code for constructors with multiple flags fields', () => { test( 'updates.channelDifferenceEmpty#3e11affb flags:# final:flags.0?true pts:int timeout:flags.1?int flags2:# can_delete_channel:flags2.0?true = updates.ChannelDifference;', - 'var flags=r.uint();', - 'var pts=r.int();', - 'var timeout=flags&2?r.int():void 0;', - 'var flags2=r.uint();', + 'var flags=r.uint(),', + 'pts=r.int(),', + 'timeout=flags&2?r.int():void 0,', + 'flags2=r.uint();', 'return{', "_:'updates.channelDifferenceEmpty',", 'final:!!(flags&1),', @@ -128,8 +128,8 @@ describe('generateReaderCodeForTlEntry', () => { const entry = parseTlToEntries('test flags:# flags2:# = Test;')[0] expect(generateReaderCodeForTlEntry(entry, true)).eq( `${entry.id}:function(r){${[ - 'var flags=r.uint();', - 'var flags2=r.uint();', + 'var flags=r.uint(),', + 'flags2=r.uint();', 'return{', "_:'test',", 'flags:flags,',