From aab425719c51e0783dee22e0c308375622ea98bf Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 25 Aug 2025 15:26:56 -0400 Subject: [PATCH] Move publish scripts in their own repo for easy reuse --- .gitmodules | 3 + Makefile | 4 +- dist/chromium/publish-chromium.js | 164 ---------------------------- dist/edge/publish-edge.js | 176 ------------------------------ package-lock.json | 145 +++++++++++++----------- package.json | 4 +- publish-extension | 1 + 7 files changed, 89 insertions(+), 408 deletions(-) delete mode 100644 dist/chromium/publish-chromium.js delete mode 100644 dist/edge/publish-edge.js create mode 160000 publish-extension diff --git a/.gitmodules b/.gitmodules index b81211f33..dc2159e53 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "platform/mv3/extension/lib/codemirror/codemirror-ubol"] path = platform/mv3/extension/lib/codemirror/codemirror-ubol url = https://github.com/gorhill/codemirror-ubol.git +[submodule "publish-extension"] + path = publish-extension + url = https://github.com/gorhill/publish-extension.git diff --git a/Makefile b/Makefile index b7149a169..ed50a72b8 100644 --- a/Makefile +++ b/Makefile @@ -107,10 +107,10 @@ cleanassets: rm -rf dist/build/mv3-data dist/build/uAssets publish-chromium: - node dist/chromium/publish-chromium.js ghowner=gorhill ghrepo=uBlock ghtag=$(version) cwsid=cjpalhdlnbpafiamejdnhcphjbkeiagm + node publish-extension/publish-chromium.js ghowner=gorhill ghrepo=uBlock ghtag=$(version) cwsid=cjpalhdlnbpafiamejdnhcphjbkeiagm publish-edge: - node dist/edge/publish-edge.js ghowner=gorhill ghrepo=uBlock ghtag=$(version) edgeid=$(UBO_EDGE_ID) + node publish-extension/publish-edge.js ghowner=gorhill ghrepo=uBlock ghtag=$(version) edgeid=$(UBO_EDGE_ID) # Not real targets, just convenient for auto-completion at shell prompt compare: diff --git a/dist/chromium/publish-chromium.js b/dist/chromium/publish-chromium.js deleted file mode 100644 index cc4d8bdd0..000000000 --- a/dist/chromium/publish-chromium.js +++ /dev/null @@ -1,164 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a comprehensive, efficient content blocker - Copyright (C) 2025-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -import * as fs from 'node:fs/promises'; -import * as ghapi from '../github-api.js'; -import path from 'node:path'; -import process from 'node:process'; - -/******************************************************************************/ - -const githubAuth = `Bearer ${process.env.GITHUB_TOKEN}`; -const commandLineArgs = ghapi.commandLineArgs; -const githubOwner = commandLineArgs.ghowner; -const githubRepo = commandLineArgs.ghrepo; -const githubTag = commandLineArgs.ghtag; -const cwsId = commandLineArgs.cwsid; - -/******************************************************************************/ - -async function publishToCWS(filePath) { - // Prepare access token - console.log('Generating access token...'); - const authURL = 'https://accounts.google.com/o/oauth2/token'; - const authRequest = new Request(authURL, { - body: JSON.stringify({ - client_id: process.env.CWS_ID, - client_secret: process.env.CWS_SECRET, - grant_type: 'refresh_token', - refresh_token: process.env.CWS_REFRESH, - }), - method: 'POST', - }); - const authResponse = await fetch(authRequest); - if ( authResponse.ok === false ) { - console.error(`Error: Auth failed -- server error ${authResponse.statusText}`); - process.exit(1); - } - const responseDict = await authResponse.json() - if ( responseDict.access_token === undefined ) { - console.error('Error: Auth failed -- no access token'); - console.error('Error: Auth failed --', JSON.stringify(responseDict, null, 2)); - process.exit(1); - } - const cwsAuth = `Bearer ${responseDict.access_token}`; - - // Read package - const data = await fs.readFile(filePath); - - // Upload - console.log('Uploading package...') - const uploadURL = `https://www.googleapis.com/upload/chromewebstore/v1.1/items/${cwsId}`; - const uploadRequest = new Request(uploadURL, { - body: data, - headers: { - 'Authorization': cwsAuth, - 'x-goog-api-version': '2', - }, - method: 'PUT', - }); - const uploadResponse = await fetch(uploadRequest); - if ( uploadResponse.ok === false ) { - console.error(`Upload failed -- server error ${uploadResponse.statusText}`); - process.exit(1) - } - const uploadDict = await uploadResponse.json(); - if ( uploadDict.uploadState !== 'SUCCESS' ) { - console.error(`Upload failed -- server error ${JSON.stringify(uploadDict)}`); - process.exit(1); - } - console.log('Upload succeeded.') - - // Publish - console.log('Publishing package...') - const publishURL = `https://www.googleapis.com/chromewebstore/v1.1/items/${cwsId}/publish`; - const publishRequest = new Request(publishURL, { - headers: { - 'Authorization': cwsAuth, - 'x-goog-api-version': '2', - 'Content-Length': '0', - }, - method: 'POST', - }); - const publishResponse = await fetch(publishRequest); - if ( publishResponse.ok === false ) { - console.error(`Error: Chrome store publishing failed -- server error ${publishResponse.statusText}`); - process.exit(1); - } - const publishDict = await publishResponse.json(); - if ( - Array.isArray(publishDict.status) === false || - publishDict.status.includes('OK') === false - ) { - console.error(`Publishing failed -- server error ${publishDict.status}`); - process.exit(1); - } - console.log('Publishing succeeded.') -} - -/******************************************************************************/ - -async function main() { - if ( githubOwner === '' ) { return 'Need GitHub owner'; } - if ( githubRepo === '' ) { return 'Need GitHub repo'; } - if ( githubTag === '' ) { return 'Need GitHub tag'; } - - ghapi.setGithubContext(githubOwner, githubRepo, githubTag, githubAuth); - - const assetInfo = await ghapi.getAssetInfo('chromium'); - if ( assetInfo === undefined ) { - process.exit(1); - } - - await ghapi.prompt([ - 'Publish to Chrome store:', - ` GitHub owner: "${githubOwner}"`, - ` GitHub repo: "${githubRepo}"`, - ` Release tag: "${githubTag}"`, - ` Asset name: "${assetInfo.name}"`, - ` Extension id: ${cwsId}`, - ` Publish? (enter "yes"): `, - ].join('\n')); - - // Fetch asset from GitHub repo - const filePath = await ghapi.downloadAssetFromRelease(assetInfo); - console.log('Asset saved at', filePath); - - // Upload to Chrome Web Store - await publishToCWS(filePath); - - // Clean up - if ( commandLineArgs.keep !== true ) { - const tmpdir = path.dirname(filePath); - console.log(`Removing ${tmpdir}`); - ghapi.shellExec(`rm -rf "${tmpdir}"`); - } - - console.log('Done'); -} - -main().then(result => { - if ( result !== undefined ) { - console.log(result); - process.exit(1); - } - process.exit(0); -}); diff --git a/dist/edge/publish-edge.js b/dist/edge/publish-edge.js deleted file mode 100644 index aec182fe8..000000000 --- a/dist/edge/publish-edge.js +++ /dev/null @@ -1,176 +0,0 @@ -/******************************************************************************* - - uBlock Origin - a comprehensive, efficient content blocker - Copyright (C) 2025-present Raymond Hill - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see {http://www.gnu.org/licenses/}. - - Home: https://github.com/gorhill/uBlock -*/ - -import * as fs from 'node:fs/promises'; -import * as ghapi from '../github-api.js'; -import path from 'node:path'; -import process from 'node:process'; - -/******************************************************************************/ - -const githubAuth = `Bearer ${process.env.GITHUB_TOKEN}`; -const commandLineArgs = ghapi.commandLineArgs; -const githubOwner = commandLineArgs.ghowner; -const githubRepo = commandLineArgs.ghrepo; -const githubTag = commandLineArgs.ghtag; -const edgeId = commandLineArgs.edgeid; - -/******************************************************************************/ - -async function publishToEdgeStore(filePath) { - const edgeApiKey = process.env.EDGE_API_KEY; - const edgeClientId = process.env.EDGE_CLIENT_ID; - const uploadURL = `https://api.addons.microsoftedge.microsoft.com/v1/products/${edgeId}/submissions/draft/package`; - - // Read package - const data = await fs.readFile(filePath); - - // Upload - console.log(`Uploading package to ${uploadURL}`); - const uploadRequest = new Request(uploadURL, { - body: data, - headers: { - 'Authorization': `ApiKey ${edgeApiKey}`, - 'X-ClientID': edgeClientId, - 'Content-Type': 'application/zip' - }, - method: 'POST', - }); - const uploadResponse = await fetch(uploadRequest); - if ( uploadResponse.status !== 202 ) { - console.log(`Upload failed -- server error ${uploadResponse.status}`); - process.exit(1); - } - const operationId = uploadResponse.headers.get('Location'); - if ( operationId === undefined ) { - console.log(`Upload failed -- missing Location header`); - process.exit(1); - } - console.log(`Upload succeeded`); - - // Check upload status - console.log('Checking upload status...'); - const interval = 60; // check every 60 seconds - let countdown = 60 * 60 / interval; // for at most 60 minutes - for (;;) { - await ghapi.sleep(interval); - countdown -= 1 - if ( countdown <= 0 ) { - console.log('Error: Microsoft store timed out') - process.exit(1); - } - const uploadStatusRequest = new Request(`${uploadURL}/operations/${operationId}`, { - headers: { - 'Authorization': `ApiKey ${edgeApiKey}`, - 'X-ClientID': edgeClientId, - }, - }); - const uploadStatusResponse = await fetch(uploadStatusRequest); - if ( uploadStatusResponse.status !== 200 ) { - console.log(`Upload status check failed -- server error ${uploadStatusResponse.status}`); - process.exit(1); - } - const uploadStatusDict = await uploadStatusResponse.json(); - const { status } = uploadStatusDict; - if ( status === undefined || status === 'Failed' ) { - console.log(`Upload status check failed -- server error ${status}`); - process.exit(1); - } - if ( status === 'InProgress' ) { continue } - console.log('Package ready to be published.') - break; - } - - // Publish - // https://learn.microsoft.com/en-us/microsoft-edge/extensions-chromium/update/api/addons-api-reference?tabs=v1-1#publish-the-product-draft-submission - console.log('Publish package...') - const publishURL = `https://api.addons.microsoftedge.microsoft.com/v1/products/${edgeId}/submissions`; - const publishNotes = { - 'Notes': 'See official release notes at ' - } - const publishRequest = new Request(publishURL, { - body: JSON.stringify(publishNotes), - headers: { - 'Authorization': `ApiKey ${edgeApiKey}`, - 'X-ClientID': edgeClientId, - }, - method: 'POST', - }); - const publishResponse = await fetch(publishRequest); - if ( publishResponse.status !== 202 ) { - console.log(`Publish failed -- server error ${publishResponse.status}`); - process.exit(1); - } - if ( publishResponse.headers.get('Location') === undefined ) { - console.log(`Publish failed -- missing Location header`); - process.exit(1); - } - console.log('Publish succeeded.') -} - -/******************************************************************************/ - -async function main() { - if ( githubOwner === '' ) { return 'Need GitHub owner'; } - if ( githubRepo === '' ) { return 'Need GitHub repo'; } - if ( githubTag === '' ) { return 'Need GitHub tag'; } - - ghapi.setGithubContext(githubOwner, githubRepo, githubTag, githubAuth); - - const assetInfo = await ghapi.getAssetInfo('chromium'); - if ( assetInfo === undefined ) { - process.exit(1); - } - - await ghapi.prompt([ - 'Publish to Edge store:', - `GitHub owner: "${githubOwner}"`, - `GitHub repo: "${githubRepo}"`, - `Release tag: "${githubTag}"`, - `Asset name: "${assetInfo.name}"`, - `Product id: ${edgeId}`, - `Publish? (enter "yes"): `, - ].join('\n')); - - // Fetch asset from GitHub repo - const filePath = await ghapi.downloadAssetFromRelease(assetInfo); - console.log('Asset saved at', filePath); - - // Upload to Edge Store - await publishToEdgeStore(filePath); - - // Clean up - if ( commandLineArgs.keep !== true ) { - const tmpdir = path.dirname(filePath); - console.log(`Removing ${tmpdir}`); - ghapi.shellExec(`rm -rf "${tmpdir}"`); - } - - console.log('Done'); -} - -main().then(result => { - if ( result !== undefined ) { - console.log(result); - process.exit(1); - } - process.exit(0); -}); diff --git a/package-lock.json b/package-lock.json index d810c07c2..6df2fa25f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,8 @@ "devDependencies": { "@eslint/compat": "^1.2.4", "@eslint/js": "^9.17.0", - "@eslint/json": "^0.9.0", - "eslint": "^9.17.0", + "@eslint/json": "^0.13.1", + "eslint": "^9.34.0", "eslint-formatter-compact": "^8.40.0", "globals": "^15.14.0" }, @@ -82,13 +82,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz", - "integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.5", + "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -96,10 +96,20 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz", + "integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/core": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz", - "integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz", + "integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -110,9 +120,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", - "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -147,33 +157,38 @@ } }, "node_modules/@eslint/js": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz", - "integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz", + "integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==", "dev": true, "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" } }, "node_modules/@eslint/json": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@eslint/json/-/json-0.9.0.tgz", - "integrity": "sha512-PTLD0Kp7+BKhTthodns+hFbuZZ+hjb3lc/iVAg7mtBAnW5hLJhkST9O4m21oMkxG94GR2+GGZQNNurG9KP8pNA==", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/@eslint/json/-/json-0.13.1.tgz", + "integrity": "sha512-AGzO7cR0QqSEfJdx9jT4SHQ6BJ5K0G8kN7WNGI1Hgy5AVbUhBKfFoN0gNo86j97aqkU57mqFUW9ytMPdEnVARA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/plugin-kit": "^0.2.3", - "@humanwhocodes/momoa": "^3.3.4" + "@eslint/core": "^0.15.1", + "@eslint/plugin-kit": "^0.3.4", + "@humanwhocodes/momoa": "^3.3.8", + "natural-compare": "^1.4.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@eslint/object-schema": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz", - "integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -181,12 +196,13 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz", - "integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz", + "integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==", "dev": true, "license": "Apache-2.0", "dependencies": { + "@eslint/core": "^0.15.2", "levn": "^0.4.1" }, "engines": { @@ -246,9 +262,9 @@ } }, "node_modules/@humanwhocodes/momoa": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.6.tgz", - "integrity": "sha512-7/sAGm3YsT6xG1bDkTSHvOpQB+cR4I2InfMVw110nuOCrxZvOQHgRqBMxSoTeUQrk9RS4OU9Aw2MBMZVJgLZMg==", + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.9.tgz", + "integrity": "sha512-LHw6Op4bJb3/3KZgOgwflJx5zY9XOy0NU1NuyUFKGdTwHYmP+PbnQGCYQJ8NVNlulLfQish34b0VuUlLYP3AXA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -256,9 +272,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", - "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -284,9 +300,9 @@ "license": "MIT" }, "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -434,9 +450,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -472,22 +488,23 @@ } }, "node_modules/eslint": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz", - "integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==", + "version": "9.34.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz", + "integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.19.0", - "@eslint/core": "^0.9.0", - "@eslint/eslintrc": "^3.2.0", - "@eslint/js": "9.17.0", - "@eslint/plugin-kit": "^0.2.3", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.1", + "@eslint/core": "^0.15.2", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.34.0", + "@eslint/plugin-kit": "^0.3.5", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.1", + "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -495,9 +512,9 @@ "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.2.0", - "eslint-visitor-keys": "^4.2.0", - "espree": "^10.3.0", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -542,9 +559,9 @@ } }, "node_modules/eslint-scope": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", - "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -559,9 +576,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -572,15 +589,15 @@ } }, "node_modules/espree": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", - "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.14.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.2.0" + "eslint-visitor-keys": "^4.2.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -754,9 +771,9 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index f00997e24..456b526f2 100644 --- a/package.json +++ b/package.json @@ -22,10 +22,10 @@ "npm": ">=11" }, "devDependencies": { - "eslint": "^9.17.0", "@eslint/compat": "^1.2.4", "@eslint/js": "^9.17.0", - "@eslint/json": "^0.9.0", + "@eslint/json": "^0.13.1", + "eslint": "^9.34.0", "eslint-formatter-compact": "^8.40.0", "globals": "^15.14.0" } diff --git a/publish-extension b/publish-extension new file mode 160000 index 000000000..f03cace8f --- /dev/null +++ b/publish-extension @@ -0,0 +1 @@ +Subproject commit f03cace8fe4c5be9e7167646d0a625bb038b5ec4