mirror of
https://github.com/gorhill/uBlock.git
synced 2025-10-05 21:32:39 +02:00
Move publish scripts in their own repo for easy reuse
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -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
|
||||
|
4
Makefile
4
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:
|
||||
|
164
dist/chromium/publish-chromium.js
vendored
164
dist/chromium/publish-chromium.js
vendored
@@ -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);
|
||||
});
|
176
dist/edge/publish-edge.js
vendored
176
dist/edge/publish-edge.js
vendored
@@ -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 <https://github.com/gorhill/uBlock/releases>'
|
||||
}
|
||||
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);
|
||||
});
|
145
package-lock.json
generated
145
package-lock.json
generated
@@ -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": {
|
||||
|
@@ -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"
|
||||
}
|
||||
|
1
publish-extension
Submodule
1
publish-extension
Submodule
Submodule publish-extension added at f03cace8fe
Reference in New Issue
Block a user