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,