@vscode/vsce 3.9.3-5 → 3.9.3-6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -8
- package/out/package.js +31 -9
- package/out/publish.js +34 -25
- package/out/secretLint.js +94 -34
- package/out/store.js +1 -1
- package/package.json +5 -14
- package/out/typings/secret-lint-types.js +0 -878
package/README.md
CHANGED
|
@@ -15,14 +15,7 @@ Read the [**Documentation**](https://code.visualstudio.com/api/working-with-exte
|
|
|
15
15
|
|
|
16
16
|
### Linux
|
|
17
17
|
|
|
18
|
-
In order to save credentials safely, this project uses [`
|
|
19
|
-
|
|
20
|
-
Depending on your distribution, you will need to run the following command:
|
|
21
|
-
|
|
22
|
-
- Debian/Ubuntu: `sudo apt-get install libsecret-1-dev`
|
|
23
|
-
- Alpine: `apk add libsecret`
|
|
24
|
-
- Red Hat-based: `sudo yum install libsecret-devel`
|
|
25
|
-
- Arch Linux: `sudo pacman -S libsecret`
|
|
18
|
+
In order to save credentials safely, this project uses [`@napi-rs/keyring`](https://www.npmjs.com/package/@napi-rs/keyring), which uses the system Secret Service and falls back to the Linux kernel keyring. Setting the `VSCE_STORE=file` environment variable will revert back to the file credential store. Using the `VSCE_PAT` environment variable will also avoid using the system credential store.
|
|
26
19
|
|
|
27
20
|
## Usage
|
|
28
21
|
|
package/out/package.js
CHANGED
|
@@ -67,8 +67,8 @@ const nls_1 = require("./nls");
|
|
|
67
67
|
const util = __importStar(require("./util"));
|
|
68
68
|
const glob_1 = require("glob");
|
|
69
69
|
const minimatch_1 = require("minimatch");
|
|
70
|
-
const
|
|
71
|
-
const
|
|
70
|
+
const parse5_1 = require("parse5");
|
|
71
|
+
const marked_1 = require("marked");
|
|
72
72
|
const url = __importStar(require("url"));
|
|
73
73
|
const mime_1 = __importDefault(require("mime"));
|
|
74
74
|
const semver = __importStar(require("semver"));
|
|
@@ -627,11 +627,33 @@ class MarkdownProcessor extends BaseProcessor {
|
|
|
627
627
|
contents = contents.replace(markdownIssueRegex, issueReplace);
|
|
628
628
|
}
|
|
629
629
|
}
|
|
630
|
-
const html = (
|
|
631
|
-
const
|
|
630
|
+
const html = marked_1.marked.parse(contents, { async: false });
|
|
631
|
+
const document = (0, parse5_1.parse)(html);
|
|
632
|
+
const images = [];
|
|
633
|
+
let hasSvg = false;
|
|
634
|
+
const nodes = [document];
|
|
635
|
+
while (nodes.length > 0) {
|
|
636
|
+
const node = nodes.pop();
|
|
637
|
+
if ('tagName' in node) {
|
|
638
|
+
if (node.tagName === 'img') {
|
|
639
|
+
images.push(node);
|
|
640
|
+
}
|
|
641
|
+
else if (node.tagName === 'svg') {
|
|
642
|
+
hasSvg = true;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
const children = 'content' in node
|
|
646
|
+
? node.content.childNodes
|
|
647
|
+
: 'childNodes' in node
|
|
648
|
+
? node.childNodes
|
|
649
|
+
: [];
|
|
650
|
+
for (let index = children.length - 1; index >= 0; index--) {
|
|
651
|
+
nodes.push(children[index]);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
632
654
|
if (this.rewriteRelativeLinks) {
|
|
633
|
-
|
|
634
|
-
const rawSrc =
|
|
655
|
+
for (const image of images) {
|
|
656
|
+
const rawSrc = image.attrs.find(attribute => attribute.name === 'src')?.value;
|
|
635
657
|
if (!rawSrc) {
|
|
636
658
|
throw new Error(`Images in ${this.name} must have a source.`);
|
|
637
659
|
}
|
|
@@ -652,11 +674,11 @@ class MarkdownProcessor extends BaseProcessor {
|
|
|
652
674
|
if (/\.svg$/i.test(srcUrl.pathname) && !isHostTrusted(srcUrl)) {
|
|
653
675
|
throw new Error(`SVGs are restricted in ${this.name}; please use other file image formats, such as PNG: ${src}`);
|
|
654
676
|
}
|
|
655
|
-
}
|
|
677
|
+
}
|
|
656
678
|
}
|
|
657
|
-
|
|
679
|
+
if (hasSvg) {
|
|
658
680
|
throw new Error(`SVG tags are not allowed in ${this.name}.`);
|
|
659
|
-
}
|
|
681
|
+
}
|
|
660
682
|
return {
|
|
661
683
|
path: file.path,
|
|
662
684
|
contents: Buffer.from(contents, 'utf8'),
|
package/out/publish.js
CHANGED
|
@@ -40,21 +40,28 @@ exports.publish = publish;
|
|
|
40
40
|
exports.unpublish = unpublish;
|
|
41
41
|
exports.getPAT = getPAT;
|
|
42
42
|
const fs = __importStar(require("fs"));
|
|
43
|
-
const util_1 = require("util");
|
|
44
43
|
const semver = __importStar(require("semver"));
|
|
45
44
|
const GalleryInterfaces_1 = require("azure-devops-node-api/interfaces/GalleryInterfaces");
|
|
46
45
|
const package_1 = require("./package");
|
|
47
|
-
const tmp = __importStar(require("tmp"));
|
|
48
46
|
const store_1 = require("./store");
|
|
49
|
-
const
|
|
47
|
+
const util_1 = require("./util");
|
|
50
48
|
const zip_1 = require("./zip");
|
|
51
49
|
const validation_1 = require("./validation");
|
|
52
50
|
const form_data_1 = __importDefault(require("form-data"));
|
|
53
51
|
const path_1 = require("path");
|
|
52
|
+
const os_1 = require("os");
|
|
54
53
|
const cockatiel_1 = require("cockatiel");
|
|
55
54
|
const auth_1 = require("./auth");
|
|
56
55
|
const oidc_1 = require("./oidc");
|
|
57
|
-
|
|
56
|
+
async function withTemporaryPackage(fn) {
|
|
57
|
+
const directory = await fs.promises.mkdtemp((0, path_1.join)((0, os_1.tmpdir)(), 'vsce-'));
|
|
58
|
+
try {
|
|
59
|
+
return await fn((0, path_1.join)(directory, 'extension.vsix'));
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
await fs.promises.rm(directory, { recursive: true, force: true });
|
|
63
|
+
}
|
|
64
|
+
}
|
|
58
65
|
async function publish(options = {}) {
|
|
59
66
|
validateAuthenticationOptions(options);
|
|
60
67
|
if (options.packagePath) {
|
|
@@ -108,38 +115,40 @@ async function publish(options = {}) {
|
|
|
108
115
|
else {
|
|
109
116
|
const cwd = options.cwd || process.cwd();
|
|
110
117
|
const manifest = await (0, package_1.readManifest)(cwd);
|
|
111
|
-
(0,
|
|
118
|
+
(0, util_1.patchOptionsWithManifest)(options, manifest);
|
|
112
119
|
// Validate marketplace requirements before prepublish to avoid unnecessary work
|
|
113
120
|
validateManifestForPublishing(manifest, options);
|
|
114
121
|
await (0, package_1.prepublish)(cwd, manifest, options.useYarn);
|
|
115
122
|
await (0, package_1.versionBump)(options);
|
|
116
123
|
if (options.targets) {
|
|
117
124
|
for (const target of options.targets) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
125
|
+
await withTemporaryPackage(async (packagePath) => {
|
|
126
|
+
const packageResult = await (0, package_1.pack)({ ...options, target, packagePath });
|
|
127
|
+
const manifestValidated = validateManifestForPublishing(packageResult.manifest, options);
|
|
128
|
+
const sigzipPath = options.signTool ? await (0, package_1.signPackage)(packagePath, options.signTool) : undefined;
|
|
129
|
+
await _publish(packagePath, sigzipPath, manifestValidated, { ...options, target });
|
|
130
|
+
});
|
|
123
131
|
}
|
|
124
132
|
}
|
|
125
133
|
else {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
134
|
+
await withTemporaryPackage(async (packagePath) => {
|
|
135
|
+
const packageResult = await (0, package_1.pack)({ ...options, packagePath });
|
|
136
|
+
const manifestValidated = validateManifestForPublishing(packageResult.manifest, options);
|
|
137
|
+
const sigzipPath = options.signTool ? await (0, package_1.signPackage)(packagePath, options.signTool) : undefined;
|
|
138
|
+
await _publish(packagePath, sigzipPath, manifestValidated, options);
|
|
139
|
+
});
|
|
131
140
|
}
|
|
132
141
|
}
|
|
133
142
|
}
|
|
134
143
|
async function _publish(packagePath, sigzipPath, manifest, options) {
|
|
135
144
|
const pat = await getPAT(manifest.publisher, options);
|
|
136
|
-
const api = await (0,
|
|
145
|
+
const api = await (0, util_1.getGalleryAPI)(pat);
|
|
137
146
|
const packageStream = fs.createReadStream(packagePath);
|
|
138
147
|
const name = `${manifest.publisher}.${manifest.name}`;
|
|
139
148
|
const description = options.target
|
|
140
149
|
? `${name} (${options.target}) v${manifest.version}`
|
|
141
150
|
: `${name} v${manifest.version}`;
|
|
142
|
-
|
|
151
|
+
util_1.log.info(`Publishing '${description}'...`);
|
|
143
152
|
let extension = null;
|
|
144
153
|
try {
|
|
145
154
|
try {
|
|
@@ -155,7 +164,7 @@ async function _publish(packagePath, sigzipPath, manifest, options) {
|
|
|
155
164
|
(v.targetPlatform === options.target));
|
|
156
165
|
if (versionExists) {
|
|
157
166
|
if (options.skipDuplicate) {
|
|
158
|
-
|
|
167
|
+
util_1.log.done(`Version ${manifest.version} is already published. Skipping publish.`);
|
|
159
168
|
return;
|
|
160
169
|
}
|
|
161
170
|
else {
|
|
@@ -172,7 +181,7 @@ async function _publish(packagePath, sigzipPath, manifest, options) {
|
|
|
172
181
|
catch (err) {
|
|
173
182
|
if (err.statusCode === 409) {
|
|
174
183
|
if (options.skipDuplicate) {
|
|
175
|
-
|
|
184
|
+
util_1.log.done(`Version ${manifest.version} is already published. Skipping publish.`);
|
|
176
185
|
return;
|
|
177
186
|
}
|
|
178
187
|
else {
|
|
@@ -204,9 +213,9 @@ async function _publish(packagePath, sigzipPath, manifest, options) {
|
|
|
204
213
|
}
|
|
205
214
|
throw err;
|
|
206
215
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
216
|
+
util_1.log.info(`Extension URL (might take a few minutes): ${(0, util_1.getPublishedUrl)(name)}`);
|
|
217
|
+
util_1.log.info(`Hub URL: ${(0, util_1.getHubUrl)(manifest.publisher, manifest.name)}`);
|
|
218
|
+
util_1.log.done(`Published ${description}.`);
|
|
210
219
|
}
|
|
211
220
|
async function _publishSignedPackage(api, packageName, packageStream, sigzipName, sigzipStream, manifest) {
|
|
212
221
|
const extensionType = 'Visual Studio Code';
|
|
@@ -239,15 +248,15 @@ async function unpublish(options = {}) {
|
|
|
239
248
|
}
|
|
240
249
|
const fullName = `${publisher}.${name}`;
|
|
241
250
|
if (!options.force) {
|
|
242
|
-
const answer = await (0,
|
|
251
|
+
const answer = await (0, util_1.read)(`This will delete ALL published versions! Please type '${fullName}' to confirm: `);
|
|
243
252
|
if (answer !== fullName) {
|
|
244
253
|
throw new Error('Aborted');
|
|
245
254
|
}
|
|
246
255
|
}
|
|
247
256
|
const pat = await getPAT(publisher, options);
|
|
248
|
-
const api = await (0,
|
|
257
|
+
const api = await (0, util_1.getGalleryAPI)(pat);
|
|
249
258
|
await api.deleteExtension(publisher, name);
|
|
250
|
-
|
|
259
|
+
util_1.log.done(`Deleted extension: ${fullName}!`);
|
|
251
260
|
}
|
|
252
261
|
function validateManifestForPublishing(manifest, options) {
|
|
253
262
|
if (manifest.enableProposedApi && !options.allowAllProposedApis && !options.noVerify) {
|
package/out/secretLint.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
@@ -8,7 +41,8 @@ exports.lintText = lintText;
|
|
|
8
41
|
exports.getRuleNameFromRuleId = getRuleNameFromRuleId;
|
|
9
42
|
exports.prettyPrintLintResult = prettyPrintLintResult;
|
|
10
43
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
-
const
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const url_1 = require("url");
|
|
12
46
|
const util_1 = require("./util");
|
|
13
47
|
const secretsScanningRules = [
|
|
14
48
|
{
|
|
@@ -45,11 +79,8 @@ const dotEnvRules = [
|
|
|
45
79
|
id: "@secretlint/secretlint-rule-no-dotenv"
|
|
46
80
|
}
|
|
47
81
|
];
|
|
48
|
-
// Helper function to dynamically import the createEngine function
|
|
49
82
|
async function getEngine(scanSecrets, scanDotEnv) {
|
|
50
|
-
|
|
51
|
-
// This is necessary because @secretlint/node is an ESM module
|
|
52
|
-
const secretlintModule = await eval('import("@secretlint/node")');
|
|
83
|
+
const { createEngine } = require("@secretlint/node");
|
|
53
84
|
const rules = [];
|
|
54
85
|
if (scanSecrets) {
|
|
55
86
|
rules.push(...secretsScanningRules);
|
|
@@ -59,11 +90,11 @@ async function getEngine(scanSecrets, scanDotEnv) {
|
|
|
59
90
|
}
|
|
60
91
|
const lintOptions = {
|
|
61
92
|
configFileJSON: { rules: rules },
|
|
62
|
-
formatter: "
|
|
93
|
+
formatter: "json",
|
|
63
94
|
color: true,
|
|
64
95
|
maskSecrets: false
|
|
65
96
|
};
|
|
66
|
-
const engine = await
|
|
97
|
+
const engine = await createEngine(lintOptions);
|
|
67
98
|
return engine;
|
|
68
99
|
}
|
|
69
100
|
async function lintFiles(filePaths, scanSecrets, scanDotEnv) {
|
|
@@ -96,49 +127,78 @@ async function lintText(content, fileName, scanSecrets, scanDotEnv) {
|
|
|
96
127
|
return parseResult(engineResult);
|
|
97
128
|
}
|
|
98
129
|
function parseResult(result) {
|
|
99
|
-
const output =
|
|
100
|
-
|
|
130
|
+
const output = JSON.parse(result.output);
|
|
131
|
+
if (!Array.isArray(output) || !output.every(isSecretLintFileResult)) {
|
|
132
|
+
throw new Error("Unexpected output from secretlint");
|
|
133
|
+
}
|
|
134
|
+
const results = output.flatMap(fileResult => fileResult.messages.map((message) => ({
|
|
135
|
+
message: message.message,
|
|
136
|
+
ruleId: message.ruleParentId ? `${message.ruleParentId} > ${message.ruleId}` : message.ruleId,
|
|
137
|
+
level: message.severity === "info" ? "note" : message.severity,
|
|
138
|
+
filePath: process.env.SARIF_URI_ABSOLUTE
|
|
139
|
+
? (0, url_1.pathToFileURL)(fileResult.filePath).toString()
|
|
140
|
+
: path.relative(process.cwd(), fileResult.filePath),
|
|
141
|
+
startLine: fixLine(message.loc.start.line),
|
|
142
|
+
startColumn: fixColumn(message.loc.start.column),
|
|
143
|
+
endLine: fixLine(message.loc.end.line),
|
|
144
|
+
endColumn: fixColumn(message.loc.end.column)
|
|
145
|
+
})));
|
|
101
146
|
return { ok: result.ok, results };
|
|
102
147
|
}
|
|
148
|
+
function isSecretLintFileResult(value) {
|
|
149
|
+
return isRecord(value)
|
|
150
|
+
&& typeof value.filePath === "string"
|
|
151
|
+
&& Array.isArray(value.messages)
|
|
152
|
+
&& value.messages.every(isSecretLintMessage);
|
|
153
|
+
}
|
|
154
|
+
function isSecretLintMessage(value) {
|
|
155
|
+
return isRecord(value)
|
|
156
|
+
&& typeof value.message === "string"
|
|
157
|
+
&& typeof value.ruleId === "string"
|
|
158
|
+
&& (value.ruleParentId === undefined || typeof value.ruleParentId === "string")
|
|
159
|
+
&& isRecord(value.loc)
|
|
160
|
+
&& isSecretLintPosition(value.loc.start)
|
|
161
|
+
&& isSecretLintPosition(value.loc.end)
|
|
162
|
+
&& (value.severity === "error" || value.severity === "warning" || value.severity === "info");
|
|
163
|
+
}
|
|
164
|
+
function isSecretLintPosition(value) {
|
|
165
|
+
return isRecord(value)
|
|
166
|
+
&& (value.line === null || typeof value.line === "number")
|
|
167
|
+
&& (value.column === null || typeof value.column === "number");
|
|
168
|
+
}
|
|
169
|
+
function isRecord(value) {
|
|
170
|
+
return typeof value === "object" && value !== null;
|
|
171
|
+
}
|
|
172
|
+
function fixLine(value) {
|
|
173
|
+
return value === null ? undefined : value === 0 ? 1 : value;
|
|
174
|
+
}
|
|
175
|
+
function fixColumn(value) {
|
|
176
|
+
return value === null ? undefined : value === 0 ? 1 : value + 1;
|
|
177
|
+
}
|
|
103
178
|
function getRuleNameFromRuleId(ruleId) {
|
|
104
179
|
const parts = ruleId.split('-rule-');
|
|
105
180
|
return parts[parts.length - 1];
|
|
106
181
|
}
|
|
107
182
|
function prettyPrintLintResult(result) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
const text = result.message.text;
|
|
112
|
-
const titleColor = result.level === undefined || result.level === secret_lint_types_1.Level.Error ? chalk_1.default.bold.red : chalk_1.default.bold.yellow;
|
|
183
|
+
const text = result.message;
|
|
184
|
+
const titleColor = result.level === "error" ? chalk_1.default.bold.red : chalk_1.default.bold.yellow;
|
|
113
185
|
const title = text.length > 54 ? text.slice(0, 50) + '...' : text;
|
|
114
|
-
const ruleName =
|
|
186
|
+
const ruleName = getRuleNameFromRuleId(result.ruleId);
|
|
115
187
|
let output = `\t${titleColor(title)} [${ruleName}]\n`;
|
|
116
|
-
|
|
117
|
-
result.locations.forEach(location => {
|
|
118
|
-
output += `\t${prettyPrintLocation(location)}\n`;
|
|
119
|
-
});
|
|
120
|
-
}
|
|
188
|
+
output += `\t${prettyPrintLocation(result)}\n`;
|
|
121
189
|
return output;
|
|
122
190
|
}
|
|
123
|
-
function prettyPrintLocation(
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
const uri = location.physicalLocation.artifactLocation?.uri;
|
|
128
|
-
if (!uri) {
|
|
129
|
-
return JSON.stringify(location);
|
|
130
|
-
}
|
|
131
|
-
let output = uri;
|
|
132
|
-
const region = location.physicalLocation.region;
|
|
133
|
-
const regionStringified = region ? prettyPrintRegion(region) : undefined;
|
|
191
|
+
function prettyPrintLocation(result) {
|
|
192
|
+
let output = result.filePath;
|
|
193
|
+
const regionStringified = prettyPrintRegion(result);
|
|
134
194
|
if (regionStringified) {
|
|
135
195
|
output += `#${regionStringified}`;
|
|
136
196
|
}
|
|
137
197
|
return output;
|
|
138
198
|
}
|
|
139
|
-
function prettyPrintRegion(
|
|
140
|
-
const startPosition = prettyPrintPosition(
|
|
141
|
-
const endPosition = prettyPrintPosition(
|
|
199
|
+
function prettyPrintRegion(result) {
|
|
200
|
+
const startPosition = prettyPrintPosition(result.startLine, result.startColumn);
|
|
201
|
+
const endPosition = prettyPrintPosition(result.endLine, result.endColumn);
|
|
142
202
|
if (!startPosition) {
|
|
143
203
|
return undefined;
|
|
144
204
|
}
|
package/out/store.js
CHANGED
|
@@ -101,7 +101,7 @@ exports.FileStore = FileStore;
|
|
|
101
101
|
FileStore.DefaultPath = path.join((0, os_1.homedir)(), '.vsce');
|
|
102
102
|
class KeytarStore {
|
|
103
103
|
static async open(serviceName = 'vscode-vsce') {
|
|
104
|
-
const keytar =
|
|
104
|
+
const keytar = require('@napi-rs/keyring/keytar.js');
|
|
105
105
|
const creds = await keytar.findCredentials(serviceName);
|
|
106
106
|
return new KeytarStore(keytar, serviceName, creds.map(({ account, password }) => ({ name: account, pat: password })));
|
|
107
107
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vscode/vsce",
|
|
3
|
-
"version": "3.9.3-
|
|
3
|
+
"version": "3.9.3-6",
|
|
4
4
|
"description": "VS Code Extensions Manager",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -36,18 +36,17 @@
|
|
|
36
36
|
"watch:test": "npm run test -- --watch"
|
|
37
37
|
},
|
|
38
38
|
"engines": {
|
|
39
|
-
"node": ">= 20"
|
|
39
|
+
"node": ">= 20.19"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@azure/identity": "^4.1.0",
|
|
43
|
+
"@napi-rs/keyring": "^1.3.0",
|
|
43
44
|
"@secretlint/node": "^10.1.2",
|
|
44
|
-
"@secretlint/secretlint-formatter-sarif": "^10.1.2",
|
|
45
45
|
"@secretlint/secretlint-rule-no-dotenv": "^10.1.2",
|
|
46
46
|
"@secretlint/secretlint-rule-preset-recommend": "^10.1.2",
|
|
47
47
|
"@vscode/vsce-sign": "^2.0.0",
|
|
48
48
|
"azure-devops-node-api": "^12.5.0",
|
|
49
49
|
"chalk": "^4.1.2",
|
|
50
|
-
"cheerio": "^1.0.0-rc.9",
|
|
51
50
|
"cockatiel": "^3.1.2",
|
|
52
51
|
"commander": "^12.1.0",
|
|
53
52
|
"form-data": "^4.0.0",
|
|
@@ -55,13 +54,13 @@
|
|
|
55
54
|
"hosted-git-info": "^4.0.2",
|
|
56
55
|
"jsonc-parser": "^3.2.0",
|
|
57
56
|
"leven": "^3.1.0",
|
|
58
|
-
"
|
|
57
|
+
"marked": "^18.0.10",
|
|
59
58
|
"mime": "^1.3.4",
|
|
60
59
|
"minimatch": "^10.2.2",
|
|
61
60
|
"parse-semver": "^1.1.1",
|
|
61
|
+
"parse5": "^8.0.1",
|
|
62
62
|
"read": "^1.0.7",
|
|
63
63
|
"semver": "^7.5.2",
|
|
64
|
-
"tmp": "^0.2.3",
|
|
65
64
|
"typed-rest-client": "^1.8.4",
|
|
66
65
|
"url-join": "^4.0.1",
|
|
67
66
|
"xml2js": "^0.5.0",
|
|
@@ -70,28 +69,20 @@
|
|
|
70
69
|
},
|
|
71
70
|
"devDependencies": {
|
|
72
71
|
"@microsoft/api-extractor": "^7.33.7",
|
|
73
|
-
"@types/cheerio": "^0.22.29",
|
|
74
|
-
"@types/glob": "^8.1.0",
|
|
75
72
|
"@types/hosted-git-info": "^3.0.2",
|
|
76
|
-
"@types/markdown-it": "^0.0.2",
|
|
77
73
|
"@types/mime": "^1",
|
|
78
74
|
"@types/mocha": "^7.0.2",
|
|
79
75
|
"@types/node": "^20.0.0",
|
|
80
76
|
"@types/read": "^0.0.28",
|
|
81
77
|
"@types/semver": "^6.0.0",
|
|
82
|
-
"@types/tmp": "^0.2.2",
|
|
83
78
|
"@types/url-join": "^4.0.1",
|
|
84
79
|
"@types/xml2js": "^0.4.4",
|
|
85
80
|
"@types/yauzl": "^2.9.2",
|
|
86
81
|
"@types/yazl": "^2.4.2",
|
|
87
82
|
"mocha": "^11.1.0",
|
|
88
|
-
"source-map-support": "^0.4.2",
|
|
89
83
|
"ts-node": "^10.9.1",
|
|
90
84
|
"typescript": "~5.9.0"
|
|
91
85
|
},
|
|
92
|
-
"optionalDependencies": {
|
|
93
|
-
"keytar": "^7.7.0"
|
|
94
|
-
},
|
|
95
86
|
"mocha": {
|
|
96
87
|
"require": [
|
|
97
88
|
"ts-node/register"
|