From 3a494ef408208320c831ef4969913db4afc57c34 Mon Sep 17 00:00:00 2001 From: Anton Evzhakov Date: Fri, 9 Feb 2024 14:34:29 +0200 Subject: [PATCH] feat(transform): replace object spread with Proxy in getTagProcessor (#57) * feat(transform): replace object spread with Proxy in getTagProcessor * fix(transform): revert babel.compact --- .changeset/stale-stingrays-judge.md | 5 +++++ packages/transform/src/utils/getTagProcessor.ts | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .changeset/stale-stingrays-judge.md diff --git a/.changeset/stale-stingrays-judge.md b/.changeset/stale-stingrays-judge.md new file mode 100644 index 00000000..9effe606 --- /dev/null +++ b/.changeset/stale-stingrays-judge.md @@ -0,0 +1,5 @@ +--- +'@wyw-in-js/transform': patch +--- + +Found out that an object spread can be extremely slow. getTagProcessor now works 10 times faster. diff --git a/packages/transform/src/utils/getTagProcessor.ts b/packages/transform/src/utils/getTagProcessor.ts index e5d0bfe6..3658034f 100644 --- a/packages/transform/src/utils/getTagProcessor.ts +++ b/packages/transform/src/utils/getTagProcessor.ts @@ -315,8 +315,7 @@ function getBuilderForIdentifier( }); }; - const astService = { - ...t, + const importHelpers = { addDefaultImport: (importedSource: string, nameHint?: string) => addDefault(path, importedSource, { nameHint }), addNamedImport: ( @@ -326,6 +325,18 @@ function getBuilderForIdentifier( ) => addNamed(path, name, importedSource, { nameHint }), }; + type AstService = typeof t & typeof importHelpers; + + const astService = new Proxy(t as AstService, { + get(target, prop, receiver) { + if (prop in importHelpers) { + return importHelpers[prop as keyof typeof importHelpers]; + } + + return Reflect.get(target, prop, receiver); + }, + }); + return (...args: BuilderArgs) => new Processor( params,