diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a4eb8a5e..e2131603 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -86,7 +86,7 @@ jobs: runs-on: ubuntu-latest needs: build steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: meta path: . @@ -96,12 +96,12 @@ jobs: set -x echo "version=`cat meta.version`" >> $GITHUB_OUTPUT echo "name=`cat meta.name`" >> $GITHUB_OUTPUT - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: ${{ steps.set-version.outputs.name }}.vsix - name: Create Release id: create-release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v3 with: tag_name: v${{ steps.set-version.outputs.version }} prerelease: ${{ github.event_name != 'release' }} @@ -116,7 +116,7 @@ jobs: with: ref: master token: ${{ secrets.TOKEN }} - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: meta path: . @@ -145,7 +145,7 @@ jobs: npx vsce package -o ${{ steps.set-version.outputs.name }}.vsix - name: Upload Release Asset id: upload-release-asset - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v3 with: tag_name: ${{ github.event.release.tag_name }} files: ${{ steps.set-version.outputs.name }}.vsix diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 69813b9b..52e21d61 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -81,7 +81,7 @@ jobs: runs-on: ubuntu-latest needs: build steps: - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: meta path: . @@ -91,12 +91,12 @@ jobs: set -x echo "version=`cat meta.version`" >> $GITHUB_OUTPUT echo "name=`cat meta.name`" >> $GITHUB_OUTPUT - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: ${{ steps.set-version.outputs.name }}.vsix - name: Create Pre-Release id: create-release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v3 with: tag_name: v${{ steps.set-version.outputs.version }} target_commitish: ${{ github.sha }} @@ -112,7 +112,7 @@ jobs: with: ref: prerelease token: ${{ secrets.TOKEN }} - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v8 with: name: meta path: . @@ -141,7 +141,7 @@ jobs: npx vsce package --pre-release -o ${{ steps.set-version.outputs.name }}.vsix - name: Upload Release Asset id: upload-release-asset - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v3 with: tag_name: ${{ github.event.release.tag_name }} files: ${{ steps.set-version.outputs.name }}.vsix diff --git a/CHANGELOG.md b/CHANGELOG.md index b76cedd0..867fa4da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Change Log +## [3.8.2] 04-Jun-2026 +- Enhancements + - Add `Import Files...` command that supports many file types (#1764) + - Add `objectscript.insertStubContent` setting (#1765) +- Fixes + - Allow webapp file creation on older IRIS servers (#1768) + - Show detailed error messages when a server-side URI is invalid (#1772) + - Support `Save As...` for server-side documents (#1774) + - Fix issue where unit tests are always run in the first workspace folder (#1775) + - Fix a spelling error (#1777) + - Reinstate reconnect option from status bar panel of server-side workspace folder (#1788) + - Update status of document after running server-side source control action on it when `respectEditableStatus` is set (#1792) + - Ensure cookies are always fresh before starting a Lite Terminal (#1793) + - Upgrade dependencies + ## [3.8.1] 15-Apr-2026 - Fixes - Fix issue that causes client-side connections to be forced active (#1748) diff --git a/README.md b/README.md index 251286a8..dc25a424 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,8 @@ To unlock these features (optional): 1. Download and install a beta version from GitHub. This is necessary because Marketplace does not allow publication of extensions that use proposed APIs. - Go to https://github.com/intersystems-community/vscode-objectscript/releases - - Locate the beta immediately above the release you installed from Marketplace. For instance, if you installed `3.8.1`, look for `3.8.2-beta.1`. This will be functionally identical to the Marketplace version apart from being able to use proposed APIs. - - Download the VSIX file (for example `vscode-objectscript-3.8.2-beta.1.vsix`) and install it. One way to install a VSIX is to drag it from your download folder and drop it onto the list of extensions in the Extensions view of VS Code. + - Locate the beta immediately above the release you installed from Marketplace. For instance, if you installed `3.8.2`, look for `3.8.3-beta.1`. This will be functionally identical to the Marketplace version apart from being able to use proposed APIs. + - Download the VSIX file (for example `vscode-objectscript-3.8.3-beta.1.vsix`) and install it. One way to install a VSIX is to drag it from your download folder and drop it onto the list of extensions in the Extensions view of VS Code. - Go to https://github.com/intersystems-community/vscode-objectscript/releases - Locate the beta immediately above the release you installed from Marketplace. For instance, if you installed `3.4.0`, look for `3.4.1-beta.1`. This will be functionally identical to the Marketplace version apart from being able to use proposed APIs. diff --git a/package-lock.json b/package-lock.json index 237820d6..92c5b735 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,26 @@ { "name": "vscode-objectscript", - "version": "3.8.2-SNAPSHOT", + "version": "3.8.3-SNAPSHOT", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-objectscript", - "version": "3.8.2-SNAPSHOT", + "version": "3.8.3-SNAPSHOT", "hasInstallScript": true, "license": "MIT", "dependencies": { "@vscode/debugadapter": "^1.68.0", "@vscode/debugprotocol": "^1.68.0", - "@vscode/extension-telemetry": "^1.5.1", + "@vscode/extension-telemetry": "^1.5.2", "@xmldom/xmldom": "^0.9.10", - "axios": "^1.15.2", + "axios": "^1.17.0", "core-js": "^3.41.0", "iconv-lite": "^0.7.2", "istextorbinary": "^7.0.0", "minimatch": "^10.2.5", "node-cmd": "^5.0.0", - "ws": "^8.20.1" + "ws": "^8.21.0" }, "devDependencies": { "@eslint/js": "^9.39.2", @@ -449,73 +449,72 @@ } }, "node_modules/@microsoft/1ds-core-js": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-4.3.10.tgz", - "integrity": "sha512-5fSZmkGwWkH+mrIA5M1GYPZdPM+SjXwCCl2Am7VhFoVwOBJNhRnwvIpAdzw6sFjiebN/rz+/YH0NdxztGZSa9Q==", + "version": "4.4.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@microsoft/1ds-core-js/-/1ds-core-js-4.4.1.tgz", + "integrity": "sha512-utqwacfUkiGJROn4WC7aNdRBsRxwhNWXuqaJM2B0N0WHmv1+IhSuI7RQ3FHwxRP1dxZi/xn9aELMZ7HMStsW1w==", "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-core-js": "3.3.10", + "@microsoft/applicationinsights-core-js": "3.4.1", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.5.4 < 2.x", - "@nevware21/ts-utils": ">= 0.11.8 < 2.x" + "@nevware21/ts-async": ">= 0.5.5 < 2.x", + "@nevware21/ts-utils": ">= 0.12.6 < 2.x" } }, "node_modules/@microsoft/1ds-post-js": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-4.3.10.tgz", - "integrity": "sha512-VSLjc9cT+Y+eTiSfYltJHJCejn8oYr0E6Pq2BMhOEO7F6IyLGYIxzKKvo78ze9x+iHX7KPTATcZ+PFgjGXuNqg==", + "version": "4.4.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@microsoft/1ds-post-js/-/1ds-post-js-4.4.1.tgz", + "integrity": "sha512-CkFEhDY7X8E2JLr6HsEvRiC0DaLOCsA7vlbq/9DJP65gAumgw2NnFNIAOg6Je5Geq1LDu76/nb2hP34p8eGggw==", "license": "MIT", "dependencies": { - "@microsoft/1ds-core-js": "4.3.10", + "@microsoft/applicationinsights-core-js": "3.4.1", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.5.4 < 2.x", - "@nevware21/ts-utils": ">= 0.11.8 < 2.x" + "@nevware21/ts-async": ">= 0.5.5 < 2.x", + "@nevware21/ts-utils": ">= 0.12.6 < 2.x" } }, "node_modules/@microsoft/applicationinsights-channel-js": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.3.10.tgz", - "integrity": "sha512-iolFLz1ocWAzIQqHIEjjov3gNTPkgFQ4ArHnBcJEYoffOGWlJt6copaevS5YPI5rHzmbySsengZ8cLJJBBrXzQ==", + "version": "3.4.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.4.1.tgz", + "integrity": "sha512-QS1k6iwVwR1MznGAB1H0F9raqpevbFNbadLS5O1419pz9OEWBfF9wRQLnENCyo8QS9Q0IdiqnGAON/D8IywpWg==", "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-common": "3.3.10", - "@microsoft/applicationinsights-core-js": "3.3.10", + "@microsoft/applicationinsights-core-js": "3.4.1", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.5.4 < 2.x", - "@nevware21/ts-utils": ">= 0.11.8 < 2.x" + "@nevware21/ts-async": ">= 0.5.5 < 2.x", + "@nevware21/ts-utils": ">= 0.12.6 < 2.x" }, "peerDependencies": { "tslib": ">= 1.0.0" } }, "node_modules/@microsoft/applicationinsights-common": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.3.10.tgz", - "integrity": "sha512-RVIenPIvNgZCbjJdALvLM4rNHgAFuHI7faFzHCgnI6S2WCUNGHeXlQTs9EUUrL+n2TPp9/cd0KKMILU5VVyYiA==", + "version": "3.4.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@microsoft/applicationinsights-common/-/applicationinsights-common-3.4.1.tgz", + "integrity": "sha512-CTbD0g/68tiv2yCItsodDQBYxyHdfQkG7VhvVU8OHenukpl/7W4wEuxZuOntqhv5m9Nx/DFncbz+T83nvYTG3g==", "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-core-js": "3.3.10", + "@microsoft/applicationinsights-core-js": "3.4.1", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-utils": ">= 0.11.8 < 2.x" + "@nevware21/ts-utils": ">= 0.12.6 < 2.x" }, "peerDependencies": { "tslib": ">= 1.0.0" } }, "node_modules/@microsoft/applicationinsights-core-js": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.3.10.tgz", - "integrity": "sha512-5yKeyassZTq2l+SAO4npu6LPnbS++UD+M+Ghjm9uRzoBwD8tumFx0/F8AkSVqbniSREd+ztH/2q2foewa2RZyg==", + "version": "3.4.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.4.1.tgz", + "integrity": "sha512-eXIHZ1+nvBiJgVpufBiTP801Vtr5FEwjWZioUsb44NC/z/UcsZh2MDJ1mBpjaDO73LVYUw/ZZmDCCo6Pg/61kA==", "license": "MIT", "dependencies": { "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.5.4 < 2.x", - "@nevware21/ts-utils": ">= 0.11.8 < 2.x" + "@nevware21/ts-async": ">= 0.5.5 < 2.x", + "@nevware21/ts-utils": ">= 0.12.6 < 2.x" }, "peerDependencies": { "tslib": ">= 1.0.0" @@ -523,7 +522,7 @@ }, "node_modules/@microsoft/applicationinsights-shims": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", "license": "MIT", "dependencies": { @@ -531,45 +530,54 @@ } }, "node_modules/@microsoft/applicationinsights-web-basic": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.3.10.tgz", - "integrity": "sha512-AZib5DAT3NU0VT0nLWEwXrnoMDDgZ/5S4dso01CNU5ELNxLdg+1fvchstlVdMy4FrAnxzs8Wf/GIQNFYOVgpAw==", + "version": "3.4.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.4.1.tgz", + "integrity": "sha512-V/hSlauFp1thJa57+TMv5mAYinJAQUi4zOmDmpahnDgs8g1zrQ0D8QYDmu0Zfi+9GhoD80B4yJez2+ydJPJz2w==", "license": "MIT", "dependencies": { - "@microsoft/applicationinsights-channel-js": "3.3.10", - "@microsoft/applicationinsights-common": "3.3.10", - "@microsoft/applicationinsights-core-js": "3.3.10", + "@microsoft/applicationinsights-channel-js": "3.4.1", + "@microsoft/applicationinsights-core-js": "3.4.1", "@microsoft/applicationinsights-shims": "3.0.1", "@microsoft/dynamicproto-js": "^2.0.3", - "@nevware21/ts-async": ">= 0.5.4 < 2.x", - "@nevware21/ts-utils": ">= 0.11.8 < 2.x" + "@nevware21/ts-async": ">= 0.5.5 < 2.x", + "@nevware21/ts-utils": ">= 0.12.6 < 2.x" }, "peerDependencies": { "tslib": ">= 1.0.0" } }, "node_modules/@microsoft/dynamicproto-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.3.tgz", - "integrity": "sha512-JTWTU80rMy3mdxOjjpaiDQsTLZ6YSGGqsjURsY6AUQtIj0udlF/jYmhdLZu8693ZIC0T1IwYnFa0+QeiMnziBA==", + "version": "2.0.5", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.5.tgz", + "integrity": "sha512-V+Zr7PDKIEaItVwF/OyWQlKeugNRYg7KJJ+RhEIL2FMW6NlG8FN2l4XA9Z42hNtsjwJFlcUiF38pmM/AaXsF7g==", "license": "MIT", "dependencies": { - "@nevware21/ts-utils": ">= 0.10.4 < 2.x" + "@nevware21/ts-utils": ">= 0.14.0 < 2.x" } }, "node_modules/@nevware21/ts-async": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.5.4.tgz", - "integrity": "sha512-IBTyj29GwGlxfzXw2NPnzty+w0Adx61Eze1/lknH/XIVdxtF9UnOpk76tnrHXWa6j84a1RR9hsOcHQPFv9qJjA==", + "version": "0.6.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@nevware21/ts-async/-/ts-async-0.6.1.tgz", + "integrity": "sha512-W2kFiT5oPuxTrB3NrxUId/U+1AuAhIaiDQkLC4HcxkjNc+85GfELYdPQXnsDWDG8yji24F5qk6QpBDxZX3/0+g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nevware21" + }, + { + "type": "buymeacoffee", + "url": "https://www.buymeacoffee.com/nevware21" + } + ], "license": "MIT", "dependencies": { - "@nevware21/ts-utils": ">= 0.11.6 < 2.x" + "@nevware21/ts-utils": ">= 0.15.0 < 2.x" } }, "node_modules/@nevware21/ts-utils": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.14.0.tgz", - "integrity": "sha512-WoeqTIXQ8WPhl+lD2NbMHoAQ4sJl0n7EoRoDmVJui//Usg512enl9q1fdbVobuZt3omnxnmVsDrNIvPBvFgddQ==", + "version": "0.15.0", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@nevware21/ts-utils/-/ts-utils-0.15.0.tgz", + "integrity": "sha512-+bUMKIiKAgoW5uNEb5xxzBzdwdLS9SKRcOy8SxLE+KqSlIdUYV5O9nxJVq1RUYcO2DtL5DlrK1GbgcVEHv6GVA==", "funding": [ { "type": "github", @@ -1030,14 +1038,16 @@ } }, "node_modules/@vscode/extension-telemetry": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@vscode/extension-telemetry/-/extension-telemetry-1.5.1.tgz", - "integrity": "sha512-rnRRQIRCwRdbcQ0QV5ajKJRz8noEIoQA2hX9VjAlVAVB85+ClbaPNhljobFXgW31ue69FRO6KPE4XJ/lLgKt/Q==", + "version": "1.5.2", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/@vscode/extension-telemetry/-/extension-telemetry-1.5.2.tgz", + "integrity": "sha512-fO4huHz5apb5RtddC8DuUeSbBqYQw1EiBaOOGngq57nGbsDgcvm0jAibTY/kigJyjY0fQ4Vx7owQcCJRUrkT4g==", "license": "MIT", "dependencies": { - "@microsoft/1ds-core-js": "^4.3.10", - "@microsoft/1ds-post-js": "^4.3.10", - "@microsoft/applicationinsights-web-basic": "^3.3.10" + "@microsoft/1ds-core-js": "^4.4.1", + "@microsoft/1ds-post-js": "^4.4.1", + "@microsoft/applicationinsights-common": "^3.4.1", + "@microsoft/applicationinsights-core-js": "^3.4.1", + "@microsoft/applicationinsights-web-basic": "^3.4.1" }, "engines": { "vscode": "^1.75.0" @@ -1545,16 +1555,42 @@ } }, "node_modules/axios": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", - "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "version": "1.17.0", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/axios/-/axios-1.17.0.tgz", + "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.11", + "follow-redirects": "^1.16.0", "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, + "node_modules/axios/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", @@ -2062,7 +2098,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -4673,7 +4708,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, "license": "MIT" }, "node_modules/natural-compare": { @@ -6168,9 +6202,10 @@ } }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "version": "2.8.1", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", "peer": true }, "node_modules/type-check": { @@ -6650,9 +6685,9 @@ } }, "node_modules/ws": { - "version": "8.20.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", - "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "version": "8.21.0", + "resolved": "https://nexus.consistem.com.br/repository/npm-public/ws/-/ws-8.21.0.tgz", + "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", "license": "MIT", "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 81a8d3f4..3f9a0998 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-objectscript", "displayName": "Consistem ObjectScript", "description": "InterSystems ObjectScript language support for Visual Studio Code, with integrations and internal standards adopted by Consistem.", - "version": "3.8.2-SNAPSHOT", + "version": "3.8.3-SNAPSHOT", "icon": "images/logo.png", "aiKey": "InstrumentationKey=9cd75d51-697c-406c-a929-2bcf46e97c64;IngestionEndpoint=https://eastus2-4.in.applicationinsights.azure.com/;LiveEndpoint=https://eastus2.livediagnostics.monitor.azure.com/;ApplicationId=a431c56f-8ccc-4b99-b5e9-fce3763215b1", "categories": [ @@ -2089,15 +2089,15 @@ "dependencies": { "@vscode/debugadapter": "^1.68.0", "@vscode/debugprotocol": "^1.68.0", - "@vscode/extension-telemetry": "^1.5.1", + "@vscode/extension-telemetry": "^1.5.2", "@xmldom/xmldom": "^0.9.10", - "axios": "^1.15.2", + "axios": "^1.17.0", "core-js": "^3.41.0", "iconv-lite": "^0.7.2", "istextorbinary": "^7.0.0", "minimatch": "^10.2.5", "node-cmd": "^5.0.0", - "ws": "^8.20.1" + "ws": "^8.21.0" }, "extensionDependencies": [ "consistem-sistemas.servermanager" diff --git a/src/commands/serverActions.ts b/src/commands/serverActions.ts index ffa73a07..a9a14fdb 100644 --- a/src/commands/serverActions.ts +++ b/src/commands/serverActions.ts @@ -41,7 +41,7 @@ export async function serverActions(): Promise { label: "Toggle Connection", }); } - if (active) { + if (active || api.externalServer) { actions.push({ id: "refreshConnection", label: "Refresh Connection", diff --git a/src/commands/studio.ts b/src/commands/studio.ts index 49f2c8b9..787b28ec 100644 --- a/src/commands/studio.ts +++ b/src/commands/studio.ts @@ -353,7 +353,7 @@ export class StudioActions { const actionToProcess: UserAction = data.result.content.pop(); if (actionToProcess.reload && !isPrj) { - await vscode.commands.executeCommand("workbench.action.files.revert", this.uri); + await vscode.commands.executeCommand("workbench.action.files.revert"); } const attemptedEditLabel = getOtherStudioActionLabel(OtherStudioAction.AttemptedEdit); @@ -364,7 +364,7 @@ export class StudioActions { this.projectEditAnswer = "-1"; } else if (this.uri) { // Only revert if we have a URI - await vscode.commands.executeCommand("workbench.action.files.revert", this.uri); + await vscode.commands.executeCommand("workbench.action.files.revert"); } } outputChannel.appendLine(actionToProcess.errorText); @@ -376,7 +376,7 @@ export class StudioActions { if (action.label === attemptedEditLabel) { if (answer != "1" && this.uri) { // Only revert if we have a URI - await vscode.commands.executeCommand("workbench.action.files.revert", this.uri); + await vscode.commands.executeCommand("workbench.action.files.revert"); } if (isPrj) { // Store the answer. No answer means "allow the edit". @@ -388,6 +388,20 @@ export class StudioActions { ? this.userAction(action, true, answer.answer, answer.msg, type) : this.userAction(action, true, answer, "", type); } + } else if (action.id != "6" && !isPrj && this.uri) { + // This action was run on a document. If the user is respecting + // editable status force VS Code to check the status of the + // document in case it was changed by the action. + const activeDoc = vscode.window.activeTextEditor?.document; + if ( + vscode.workspace + .getConfiguration("objectscript.serverSourceControl", this.uri) + ?.get("respectEditableStatus") && + activeDoc?.uri.toString() == this.uri.toString() && + !activeDoc.isDirty + ) { + vscode.commands.executeCommand("workbench.action.files.revert"); + } } }) .then(() => resolve()) diff --git a/src/commands/webSocketTerminal.ts b/src/commands/webSocketTerminal.ts index 6fe329df..9b71df36 100644 --- a/src/commands/webSocketTerminal.ts +++ b/src/commands/webSocketTerminal.ts @@ -796,7 +796,7 @@ export async function launchWebSocketTerminal(targetUri?: vscode.Uri, nsOverride } const api = new AtelierAPI(targetUri); - // Guarantee we know the apiVersion of the server + // Guarantee that we know the apiVersion of the server and that cookies are fresh await api.serverInfo(); // Get the terminal configuration @@ -814,8 +814,11 @@ export class WebSocketTerminalProfileProvider implements vscode.TerminalProfileP const uri: vscode.Uri = await getWsServerConnection("2023.2.0"); if (uri) { + const api = new AtelierAPI(uri); + // Ensure cookies aren't stale because a 401 error will kill the terminal with no error log + await api.serverInfo(); // Get the terminal configuration. Will throw if there's an error. - const terminalOpts = terminalConfigForUri(new AtelierAPI(uri), uri, true); + const terminalOpts = terminalConfigForUri(api, uri, true); return new vscode.TerminalProfile(terminalOpts); } else if (uri === undefined) { throw new Error(NO_ELIGIBLE_CONNECTIONS); diff --git a/src/extension.ts b/src/extension.ts index 3ede4b42..f8efb10a 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -403,7 +403,7 @@ export async function checkConnection( return; } let connInfo = api.connInfo; - if (!active) { + if (!active && !api.externalServer) { panel.text = `${PANEL_LABEL} $(warning)`; panel.tooltip = new vscode.MarkdownString( `Connection to${ @@ -454,7 +454,11 @@ export async function checkConnection( api.clearCookies(); } - // Why must this be recreated here? Maybe in case something has updated connection details since we last fetched them. + // Before recreating the api object (in case something has updated connection details since we last fetched them?) + // if this is an external server, remove it from the inactive list because its presence there would block the reconnect that we want to be attempting + if (api.externalServer) { + inactiveServerIds.delete(api.serverId); + } api = new AtelierAPI(apiTarget, false); if (!api.config.host || !api.config.port || !api.config.ns) { @@ -491,9 +495,9 @@ export async function checkConnection( .serverInfo(true, serverInfoTimeout) .then(gotServerInfo) .catch(async (error) => { - let message = error.message; + let message = error ? error.message : "Unknown error"; let errorMessage; - if (error.statusCode === 401) { + if (error?.statusCode === 401) { let success = false; message = "Not Authorized."; errorMessage = `Authorization error: Check your credentials in Settings, and that you have sufficient privileges on the /api/atelier web application on ${connInfo}`;