From dc14c1c4edf64ad31722d358d4819f0a70ac1edd Mon Sep 17 00:00:00 2001 From: Ivan Shcheklein Date: Wed, 27 Aug 2025 21:04:28 -0700 Subject: [PATCH 1/2] first attempt to migrate --- demo | 2 +- extension/package.json | 9 +++--- extension/src/experiments/data/index.ts | 2 +- extension/src/setup/studio.ts | 2 +- extension/src/test/suite/experiments/util.ts | 6 ++-- extension/src/test/suite/setup/index.test.ts | 16 +++++------ extension/src/test/suite/setup/util.ts | 4 +-- extension/tsconfig.json | 4 +-- languageServer/package.json | 2 +- languageServer/tsconfig.json | 4 +-- webview/package.json | 2 +- webview/tsconfig.json | 5 ++-- yarn.lock | 30 ++++++++++---------- 13 files changed, 44 insertions(+), 44 deletions(-) diff --git a/demo b/demo index 9f5910ac18..b80757b4e1 160000 --- a/demo +++ b/demo @@ -1 +1 @@ -Subproject commit 9f5910ac189bbb5903a162aea4051c80f5daa8e1 +Subproject commit b80757b4e13c8819c35542f73c7bdb6e0fd93d2e diff --git a/extension/package.json b/extension/package.json index ed718c150d..50d68b6219 100644 --- a/extension/package.json +++ b/extension/package.json @@ -39,8 +39,8 @@ "theme": "dark" }, "engines": { - "vscode": "^1.75.0", - "node": ">=16.13.0" + "vscode": "^1.85.0", + "node": ">=20.12.1" }, "activationEvents": [ "onStartupFinished", @@ -1621,7 +1621,6 @@ "lodash.isequal": "4.5.0", "lodash.merge": "4.6.2", "lodash.omit": "4.5.0", - "node-fetch": "2.7.0", "process-exists": "4.1.0", "tree-kill": "1.2.2", "uuid": "11.0.5", @@ -1645,11 +1644,11 @@ "@types/lodash.omit": "4.5.9", "@types/mocha": "10.0.10", "@types/mock-require": "3.0.0", - "@types/node": "16.x", + "@types/node": "20.x", "@types/sinon-chai": "3.2.12", "@types/uuid": "10.0.0", "@types/vega": "3.2.0", - "@types/vscode": "1.75.0", + "@types/vscode": "1.85.0", "@vscode/test-electron": "2.4.1", "@vscode/vsce": "2.25.0", "@wdio/cli": "8.41.0", diff --git a/extension/src/experiments/data/index.ts b/extension/src/experiments/data/index.ts index ce7a629f93..bf475bcc05 100644 --- a/extension/src/experiments/data/index.ts +++ b/extension/src/experiments/data/index.ts @@ -1,5 +1,5 @@ import querystring from 'querystring' -import fetch from 'node-fetch' +// Native fetch is available in Node.js 20+ import { collectBranches, collectFiles } from './collect' import { EXPERIMENTS_GIT_LOGS_REFS, diff --git a/extension/src/setup/studio.ts b/extension/src/setup/studio.ts index f4b70fdc1c..4a19cc742b 100644 --- a/extension/src/setup/studio.ts +++ b/extension/src/setup/studio.ts @@ -1,5 +1,5 @@ import { Event, EventEmitter, Disposable as VSCodeDisposable } from 'vscode' -import fetch from 'node-fetch' +// Native fetch is available in Node.js 20+ import { DEFAULT_STUDIO_URL } from './webview/contract' import { AvailableCommands, InternalCommands } from '../commands/internal' import { getFirstWorkspaceFolder } from '../vscode/workspaceFolders' diff --git a/extension/src/test/suite/experiments/util.ts b/extension/src/test/suite/experiments/util.ts index de6b238ada..cb7d6aa7d6 100644 --- a/extension/src/test/suite/experiments/util.ts +++ b/extension/src/test/suite/experiments/util.ts @@ -1,6 +1,6 @@ import { spy, stub } from 'sinon' import { EventEmitter } from 'vscode' -import * as Fetch from 'node-fetch' +// Native fetch is available in Node.js 20+ - using global fetch object import { WorkspaceExperiments } from '../../../experiments/workspace' import { Experiments } from '../../../experiments' import { Disposer } from '../../../extension' @@ -291,14 +291,14 @@ export const buildExperimentsData = ( commitOutput ) const mockGetNumCommits = stub(gitReader, 'getNumCommits').resolves(404) - const mockFetch = stub(Fetch, 'default').resolves({ + const mockFetch = stub(globalThis, 'fetch').resolves({ json: () => Promise.resolve({ live: [], pushed: [], view_url: mockBaseStudioUrl }) - } as Fetch.Response) + } as unknown as Response) const mockGetBranchesToShow = stub().returns(['main']) const mockSetBranches = stub() diff --git a/extension/src/test/suite/setup/index.test.ts b/extension/src/test/suite/setup/index.test.ts index 5788d94155..6241de9a4d 100644 --- a/extension/src/test/suite/setup/index.test.ts +++ b/extension/src/test/suite/setup/index.test.ts @@ -3,7 +3,7 @@ import { afterEach, beforeEach, describe, it, suite } from 'mocha' import { ensureFileSync, remove } from 'fs-extra' import { expect } from 'chai' import { SinonStub, restore, spy, stub, useFakeTimers, match } from 'sinon' -import * as Fetch from 'node-fetch' +// Native fetch is available in Node.js 20+ - using global fetch object import { MessageItem, QuickPickItem, @@ -52,7 +52,7 @@ import { SetupSection } from '../../../setup/webview/contract' import { getFirstWorkspaceFolder } from '../../../vscode/workspaceFolders' -import { Response } from '../../../vscode/response' +import { Response as VscodeResponse } from '../../../vscode/response' import { DvcConfig } from '../../../cli/dvc/config' import * as QuickPickUtil from '../../../setup/quickPick' import { EventName } from '../../../telemetry/constants' @@ -893,7 +893,7 @@ suite('Setup Test Suite', () => { mockFetch.onFirstCall().resolves({ json: () => Promise.resolve(mockStudioRes) - } as Fetch.Response) + } as unknown as Response) mockGetCallbackUrl.onFirstCall().resolves(mockCallbackUrl) const callbackUriHandlerEvent: Promise<() => unknown> = new Promise( @@ -945,7 +945,7 @@ suite('Setup Test Suite', () => { json: () => Promise.resolve({ detail: 'Request failed for some reason.' }), status: 500 - } as Fetch.Response) + } as unknown as Response) const failedTokenEvent = waitForSpyCall(delayProgressClosingSpy, 0) @@ -976,7 +976,7 @@ suite('Setup Test Suite', () => { mockFetch.onThirdCall().resolves({ json: () => Promise.resolve({ access_token: mockToken }), status: 200 - } as Fetch.Response) + } as unknown as Response) const tokenEvent = waitForSpyCall(delayProgressClosingSpy, 1) mockOnStudioResponse() @@ -1017,7 +1017,7 @@ suite('Setup Test Suite', () => { user_code: '40DWMKNA', verification_uri: 'https://studio.datachain.ai/auth/device-login' }) - } as Fetch.Response) + } as unknown as Response) const openUrlEvent = new Promise(resolve => mockOpenUrl.onFirstCall().callsFake(() => { resolve(undefined) @@ -1075,7 +1075,7 @@ suite('Setup Test Suite', () => { user_code: '40DWMKNA', verification_uri: 'https://studio.datachain.ai/auth/device-login' }) - } as Fetch.Response) + } as unknown as Response) const callbackUriHandlerEvent = new Promise(resolve => mockWaitForUriRes.onFirstCall().callsFake((_, onResponse) => { @@ -1687,7 +1687,7 @@ suite('Setup Test Suite', () => { ) stub(window, 'showWarningMessage').resolves( - Response.REMOVE as unknown as MessageItem + VscodeResponse.REMOVE as unknown as MessageItem ) messageSpy.resetHistory() diff --git a/extension/src/test/suite/setup/util.ts b/extension/src/test/suite/setup/util.ts index 627eed760f..c871bfd8db 100644 --- a/extension/src/test/suite/setup/util.ts +++ b/extension/src/test/suite/setup/util.ts @@ -1,6 +1,6 @@ import { join } from 'path' import { EventEmitter, commands } from 'vscode' -import * as Fetch from 'node-fetch' +// Native fetch is available in Node.js 20+ - using global fetch object import { Disposer } from '@hediet/std/disposable' import { fake, spy, stub } from 'sinon' import { ensureDirSync } from 'fs-extra' @@ -97,7 +97,7 @@ export const buildSetup = ({ const mockConfig = stub(dvcConfig, 'config').resolves('') - const mockFetch = stub(Fetch, 'default') + const mockFetch = stub(globalThis, 'fetch') const setup = disposer.track( new Setup( diff --git a/extension/tsconfig.json b/extension/tsconfig.json index 75b46fbb16..6f24dbe476 100644 --- a/extension/tsconfig.json +++ b/extension/tsconfig.json @@ -2,9 +2,9 @@ "compilerOptions": { "resolveJsonModule": true, "module": "commonjs", - "target": "es6", + "target": "es2022", "outDir": "dist", - "lib": ["es2020"], + "lib": ["es2022"], "sourceMap": true, "rootDir": "src", "strict": true, diff --git a/languageServer/package.json b/languageServer/package.json index ef1f984d0e..4ad39a1312 100644 --- a/languageServer/package.json +++ b/languageServer/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=20.12.1" }, "peerDependencies": { "dvc": ">=0.0.1", diff --git a/languageServer/tsconfig.json b/languageServer/tsconfig.json index 7bc4a35102..cd3245b068 100644 --- a/languageServer/tsconfig.json +++ b/languageServer/tsconfig.json @@ -1,8 +1,8 @@ { "compilerOptions": { "resolveJsonModule": true, - "target": "es6", - "lib": ["es2020"], + "target": "es2022", + "lib": ["es2022"], "module": "commonjs", "esModuleInterop": true, "sourceMap": true, diff --git a/webview/package.json b/webview/package.json index 337b322d48..f47cde331c 100644 --- a/webview/package.json +++ b/webview/package.json @@ -54,7 +54,7 @@ "@testing-library/react": "14.3.1", "@types/jest": "29.5.14", "@types/jsdom": "21.1.7", - "@types/node": "16.x", + "@types/node": "20.x", "@types/react": "18.3.18", "@types/react-dom": "18.3.5", "@types/react-virtualized": "9.22.2", diff --git a/webview/tsconfig.json b/webview/tsconfig.json index 13bbe9d81d..d6db1ddc0c 100644 --- a/webview/tsconfig.json +++ b/webview/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "esModuleInterop": true, - "target": "es6", + "target": "es2022", "module": "commonjs", "strict": true, "outDir": "dist", @@ -10,7 +10,8 @@ "newLine": "LF", "sourceMap": true, "jsx": "react", - "experimentalDecorators": true + "experimentalDecorators": true, + "lib": ["es2022", "dom"] }, "include": ["src/**/*", "webpack.config.ts", "__mocks__"] } diff --git a/yarn.lock b/yarn.lock index fd2dbecbd1..a20686144d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4380,10 +4380,12 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== -"@types/node@16.x": - version "16.18.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.4.tgz#712ba61b4caf091fc6490301b1888356638c17bd" - integrity sha512-9qGjJ5GyShZjUfx2ArBIGM+xExdfLvvaCyQR0t6yRXKPcWCVYF/WemtX/uIU3r7FYECXRXkIiw2Vnhn6y8d+pw== +"@types/node@20.x": + version "20.19.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.11.tgz#728cab53092bd5f143beed7fbba7ba99de3c16c4" + integrity sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow== + dependencies: + undici-types "~6.21.0" "@types/node@^18.0.0": version "18.18.6" @@ -4571,10 +4573,10 @@ dependencies: vega "*" -"@types/vscode@1.75.0": - version "1.75.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.75.0.tgz#f1892a727db9a0eb4997058a804170b8c0ba218e" - integrity sha512-SAr0PoOhJS6FUq5LjNr8C/StBKALZwDVm3+U4pjF/3iYkt3GioJOPV/oB1Sf1l7lROe4TgrMyL5N1yaEgTWycw== +"@types/vscode@1.85.0": + version "1.85.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.85.0.tgz#46beb07f0f626665b52d1e2294382b2bc63b602e" + integrity sha512-CF/RBon/GXwdfmnjZj0WTUMZN5H6YITOfBCP4iEZlOtVQXuzw6t7Le7+cR+7JzdMrnlm7Mfp49Oj2TuSXIWo3g== "@types/webpack-env@^1.16.0": version "1.16.3" @@ -13792,13 +13794,6 @@ node-fetch-native@^1.0.2: resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.1.0.tgz#a530f5c4cadb49b382dcf81d8f5f19ed0f457fbe" integrity sha512-nl5goFCig93JZ9FIV8GHT9xpNqXbxQUzkOmKIMKmncsBH9jhg7qKex8hirpymkBFmNQ114chEEG5lS4wgK2I+Q== -node-fetch@2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - node-fetch@^2.0.0: version "2.6.11" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" @@ -17876,6 +17871,11 @@ undici-types@~6.19.2: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + undici@5.28.5, undici@^5.28.3: version "5.28.5" resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.5.tgz#b2b94b6bf8f1d919bc5a6f31f2c01deb02e54d4b" From 377b70b86045907783e0cca1a5674f1eae8158b7 Mon Sep 17 00:00:00 2001 From: Ivan Shcheklein Date: Wed, 27 Aug 2025 21:10:15 -0700 Subject: [PATCH 2/2] bump Node version in tests --- .github/workflows/continuous-integration.yml | 2 +- .github/workflows/cross-platform-test.yml | 2 +- .github/workflows/dvc-cli-output-test.yml | 2 +- .github/workflows/end-to-end-test.yml | 2 +- .github/workflows/publish.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index e1580b58fe..7322f48344 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -23,7 +23,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '20' cache: 'yarn' - name: Turbo cache diff --git a/.github/workflows/cross-platform-test.yml b/.github/workflows/cross-platform-test.yml index d2fcf3e5cf..4eddc23ba5 100644 --- a/.github/workflows/cross-platform-test.yml +++ b/.github/workflows/cross-platform-test.yml @@ -26,7 +26,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '20' cache: yarn - name: Turbo cache diff --git a/.github/workflows/dvc-cli-output-test.yml b/.github/workflows/dvc-cli-output-test.yml index b830cfffc7..aa0641aa17 100644 --- a/.github/workflows/dvc-cli-output-test.yml +++ b/.github/workflows/dvc-cli-output-test.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '20' cache: yarn - run: yarn install diff --git a/.github/workflows/end-to-end-test.yml b/.github/workflows/end-to-end-test.yml index 424fa55d46..43df4fde6c 100644 --- a/.github/workflows/end-to-end-test.yml +++ b/.github/workflows/end-to-end-test.yml @@ -29,7 +29,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '20' cache: 'yarn' - name: Turbo cache diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 294ed89568..8c9a263ba9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '20' cache: 'yarn' - run: yarn install