diff --git a/.yarn/versions/c309a37a.yml b/.yarn/versions/c309a37a.yml new file mode 100644 index 000000000000..55d8fd5f41f4 --- /dev/null +++ b/.yarn/versions/c309a37a.yml @@ -0,0 +1,2 @@ +releases: + "@yarnpkg/sdks": major diff --git a/packages/yarnpkg-sdks/sources/sdkUtils.ts b/packages/yarnpkg-sdks/sources/sdkUtils.ts index 167091f3f3b8..ef4a1730ac0e 100644 --- a/packages/yarnpkg-sdks/sources/sdkUtils.ts +++ b/packages/yarnpkg-sdks/sources/sdkUtils.ts @@ -21,3 +21,25 @@ export const addSettingWorkspaceConfiguration = async (pnpApi: PnpApi, relativeF automaticNewlines: true, }); }; + +export const removeSettingWorkspaceConfiguration = async (pnpApi: PnpApi, relativeFileName: PortablePath, keysToRemove: Array) => { + const topLevelInformation = pnpApi.getPackageInformation(pnpApi.topLevel)!; + const projectRoot = npath.toPortablePath(topLevelInformation.packageLocation); + + const filePath = ppath.join(projectRoot, relativeFileName); + + if (!await xfs.existsPromise(filePath)) + return; + + const content = await xfs.readFilePromise(filePath, `utf8`); + const data = CJSON.parse(content); + + for (const key of keysToRemove) + delete data[key]; + + const patched = `${CJSON.stringify(data, null, 2)}\n`; + + await xfs.changeFilePromise(filePath, patched, { + automaticNewlines: true, + }); +}; diff --git a/packages/yarnpkg-sdks/sources/sdks/vscode.ts b/packages/yarnpkg-sdks/sources/sdks/vscode.ts index b47880c59fe9..a0a48689a7f9 100644 --- a/packages/yarnpkg-sdks/sources/sdks/vscode.ts +++ b/packages/yarnpkg-sdks/sources/sdks/vscode.ts @@ -14,6 +14,11 @@ export const addVSCodeWorkspaceConfiguration = async (pnpApi: PnpApi, type: VSCo await sdkUtils.addSettingWorkspaceConfiguration(pnpApi, relativeFilePath, patch); }; +export const removeVSCodeWorkspaceConfiguration = async (pnpApi: PnpApi, type: VSCodeConfiguration, patch: any) => { + const relativeFilePath = `.vscode/${type}` as PortablePath; + await sdkUtils.removeSettingWorkspaceConfiguration(pnpApi, relativeFilePath, patch); +}; + export const generateDefaultWrapper: GenerateDefaultWrapper = async (pnpApi: PnpApi) => { await addVSCodeWorkspaceConfiguration(pnpApi, VSCodeConfiguration.settings, { [`search.exclude`]: { @@ -94,15 +99,21 @@ export const generateRelayCompilerWrapper: GenerateIntegrationWrapper = async (p }; export const generateTypescriptWrapper: GenerateIntegrationWrapper = async (pnpApi: PnpApi, target: PortablePath, wrapper: Wrapper) => { + // Remove old TypeScript settings if present to prevent deprecation warnings from vscode + await removeVSCodeWorkspaceConfiguration(pnpApi, VSCodeConfiguration.settings, [ + `typescript.tsdk`, + `typescript.enablePromptUseWorkspaceTsdk`, + ]); + await addVSCodeWorkspaceConfiguration(pnpApi, VSCodeConfiguration.settings, { - [`typescript.tsdk`]: npath.fromPortablePath( + [`js/ts.tsdk.path`]: npath.fromPortablePath( ppath.dirname( wrapper.getProjectPathTo( `lib/tsserver.js` as PortablePath, ), ), ), - [`typescript.enablePromptUseWorkspaceTsdk`]: true, + [`js/ts.tsdk.promptToUseWorkspaceVersion`]: true, }); };