From fac24f0f458dc7c42b39b9ddb410784e4441c95a Mon Sep 17 00:00:00 2001 From: Eddy Nguyen Date: Thu, 13 Aug 2026 23:52:22 +1000 Subject: [PATCH 1/5] Keep ts-morph project reference for watched generation --- packages/typescript-resolver-files/src/preset.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/typescript-resolver-files/src/preset.ts b/packages/typescript-resolver-files/src/preset.ts index bc078787..3ef6a25a 100644 --- a/packages/typescript-resolver-files/src/preset.ts +++ b/packages/typescript-resolver-files/src/preset.ts @@ -29,6 +29,8 @@ import { logger } from './utils/index.js'; export const presetName = '@eddeee888/gcg-typescript-resolver-files'; +let tsMorphProject: Project; + export const preset: Types.OutputPreset = { buildGeneratesSection: async ({ schema, @@ -88,10 +90,12 @@ export const preset: Types.OutputPreset = { moduleNamingMode, }); - const tsMorphProject = await profiler.run( - async () => new Project(tsMorphProjectOptions), - createProfilerRunName('Initialising ts-morph project') - ); + if (!tsMorphProject) { + tsMorphProject = await profiler.run( + async () => new Project(tsMorphProjectOptions), + createProfilerRunName('Initialising ts-morph project') + ); + } const typeMappersMap = await profiler.run( async () => From 647031299974a692fa6948c1ed894291dd9c4e95 Mon Sep 17 00:00:00 2001 From: Eddy Nguyen Date: Thu, 13 Aug 2026 23:53:47 +1000 Subject: [PATCH 2/5] Add changeset --- .changeset/wacky-llamas-rule.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/wacky-llamas-rule.md diff --git a/.changeset/wacky-llamas-rule.md b/.changeset/wacky-llamas-rule.md new file mode 100644 index 00000000..a4c17576 --- /dev/null +++ b/.changeset/wacky-llamas-rule.md @@ -0,0 +1,5 @@ +--- +'@eddeee888/gcg-typescript-resolver-files': patch +--- + +Keep ts-morph project reference between watches From 4b806d3cef4ed41ea8375d241adca25573b0c966 Mon Sep 17 00:00:00 2001 From: Eddy Nguyen Date: Sat, 22 Aug 2026 18:19:17 +1000 Subject: [PATCH 3/5] Resync sourceFile content to avoid stale --- .../getVariableStatementWithExpectedIdentifier.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/typescript-resolver-files/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts b/packages/typescript-resolver-files/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts index e11e6e9c..1b2e94d0 100644 --- a/packages/typescript-resolver-files/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts +++ b/packages/typescript-resolver-files/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts @@ -10,6 +10,7 @@ export const getVariableStatementWithExpectedIdentifier = ( } => { let isExported = false; + sourceFile.refreshFromFileSystemSync(); const variableStatementWithExpectedIdentifier = sourceFile.getVariableStatement((statement) => { let hasExpectedIdentifier = false; From 4e161f171f92bb6f21f574e338bac5f4822cc936 Mon Sep 17 00:00:00 2001 From: Eddy Nguyen Date: Sat, 22 Aug 2026 18:19:45 +1000 Subject: [PATCH 4/5] Avoid overwriting content multiple times --- .../generateResolverFiles/postProcessFiles.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/typescript-resolver-files/src/generateResolverFiles/postProcessFiles.ts b/packages/typescript-resolver-files/src/generateResolverFiles/postProcessFiles.ts index 580d623d..4c1d4792 100644 --- a/packages/typescript-resolver-files/src/generateResolverFiles/postProcessFiles.ts +++ b/packages/typescript-resolver-files/src/generateResolverFiles/postProcessFiles.ts @@ -145,21 +145,21 @@ export const postProcessFiles = ({ } ); }); - } - // 4. Apply to result files the updated content done in step 2. and 3. above - sourceFilesToProcess.forEach(({ sourceFile, resolverFile }) => { - const normalizedRelativePath = path.posix.relative( - cwd(), - sourceFile.getFilePath() - ); + // 4. Apply to result files the updated content done in step 2. and 3. above + sourceFilesToProcess.forEach(({ sourceFile, resolverFile }) => { + const normalizedRelativePath = path.posix.relative( + cwd(), + sourceFile.getFilePath() + ); - // Overwrite existing files with fixes - result.files[normalizedRelativePath] = { - ...resolverFile, - content: sourceFile.getText(), - }; - }); + // Overwrite existing files with fixes + result.files[normalizedRelativePath] = { + ...resolverFile, + content: sourceFile.getText(), + }; + }); + } }; /** From 1ffb02626c019cd6e9cb41f6acc8cb465cdbd762 Mon Sep 17 00:00:00 2001 From: Eddy Nguyen Date: Sat, 22 Aug 2026 21:41:31 +1000 Subject: [PATCH 5/5] Resync once --- .../getVariableStatementWithExpectedIdentifier.ts | 1 - packages/typescript-resolver-files/src/preset.ts | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/typescript-resolver-files/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts b/packages/typescript-resolver-files/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts index 1b2e94d0..e11e6e9c 100644 --- a/packages/typescript-resolver-files/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts +++ b/packages/typescript-resolver-files/src/generateResolverFiles/getVariableStatementWithExpectedIdentifier.ts @@ -10,7 +10,6 @@ export const getVariableStatementWithExpectedIdentifier = ( } => { let isExported = false; - sourceFile.refreshFromFileSystemSync(); const variableStatementWithExpectedIdentifier = sourceFile.getVariableStatement((statement) => { let hasExpectedIdentifier = false; diff --git a/packages/typescript-resolver-files/src/preset.ts b/packages/typescript-resolver-files/src/preset.ts index 3ef6a25a..197d0266 100644 --- a/packages/typescript-resolver-files/src/preset.ts +++ b/packages/typescript-resolver-files/src/preset.ts @@ -95,6 +95,12 @@ export const preset: Types.OutputPreset = { async () => new Project(tsMorphProjectOptions), createProfilerRunName('Initialising ts-morph project') ); + } else { + await profiler.run(async () => { + tsMorphProject + .getSourceFiles() + .forEach((sourceFile) => sourceFile.refreshFromFileSystemSync()); + }, createProfilerRunName('Refreshing ts-morph project files')); } const typeMappersMap = await profiler.run(