@vscode/vsce 3.9.3-0 → 3.9.3-10
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 +26 -8
- package/dist/vsce.d.ts +4 -0
- package/out/main.js +6 -2
- package/out/npm.js +4 -9
- package/out/oidc.js +125 -0
- package/out/package.js +139 -65
- package/out/packageSpec.js +49 -0
- package/out/publicgalleryapi.js +3 -1
- package/out/publish.js +52 -26
- package/out/secretLint.js +130 -57
- package/out/store.js +7 -2
- package/out/util.js +2 -4
- package/out/validation.js +3 -6
- package/package.json +11 -19
- package/out/typings/secret-lint-types.js +0 -878
package/out/publish.js
CHANGED
|
@@ -40,21 +40,30 @@ 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
|
-
const
|
|
55
|
+
const oidc_1 = require("./oidc");
|
|
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
|
+
}
|
|
57
65
|
async function publish(options = {}) {
|
|
66
|
+
validateAuthenticationOptions(options);
|
|
58
67
|
if (options.packagePath) {
|
|
59
68
|
if (options.version) {
|
|
60
69
|
throw new Error(`Both options not supported simultaneously: 'packagePath' and 'version'.`);
|
|
@@ -106,38 +115,40 @@ async function publish(options = {}) {
|
|
|
106
115
|
else {
|
|
107
116
|
const cwd = options.cwd || process.cwd();
|
|
108
117
|
const manifest = await (0, package_1.readManifest)(cwd);
|
|
109
|
-
(0,
|
|
118
|
+
(0, util_1.patchOptionsWithManifest)(options, manifest);
|
|
110
119
|
// Validate marketplace requirements before prepublish to avoid unnecessary work
|
|
111
120
|
validateManifestForPublishing(manifest, options);
|
|
112
121
|
await (0, package_1.prepublish)(cwd, manifest, options.useYarn);
|
|
113
122
|
await (0, package_1.versionBump)(options);
|
|
114
123
|
if (options.targets) {
|
|
115
124
|
for (const target of options.targets) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
+
});
|
|
121
131
|
}
|
|
122
132
|
}
|
|
123
133
|
else {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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
|
+
});
|
|
129
140
|
}
|
|
130
141
|
}
|
|
131
142
|
}
|
|
132
143
|
async function _publish(packagePath, sigzipPath, manifest, options) {
|
|
133
144
|
const pat = await getPAT(manifest.publisher, options);
|
|
134
|
-
const api = await (0,
|
|
145
|
+
const api = await (0, util_1.getGalleryAPI)(pat);
|
|
135
146
|
const packageStream = fs.createReadStream(packagePath);
|
|
136
147
|
const name = `${manifest.publisher}.${manifest.name}`;
|
|
137
148
|
const description = options.target
|
|
138
149
|
? `${name} (${options.target}) v${manifest.version}`
|
|
139
150
|
: `${name} v${manifest.version}`;
|
|
140
|
-
|
|
151
|
+
util_1.log.info(`Publishing '${description}'...`);
|
|
141
152
|
let extension = null;
|
|
142
153
|
try {
|
|
143
154
|
try {
|
|
@@ -153,7 +164,7 @@ async function _publish(packagePath, sigzipPath, manifest, options) {
|
|
|
153
164
|
(v.targetPlatform === options.target));
|
|
154
165
|
if (versionExists) {
|
|
155
166
|
if (options.skipDuplicate) {
|
|
156
|
-
|
|
167
|
+
util_1.log.done(`Version ${manifest.version} is already published. Skipping publish.`);
|
|
157
168
|
return;
|
|
158
169
|
}
|
|
159
170
|
else {
|
|
@@ -170,7 +181,7 @@ async function _publish(packagePath, sigzipPath, manifest, options) {
|
|
|
170
181
|
catch (err) {
|
|
171
182
|
if (err.statusCode === 409) {
|
|
172
183
|
if (options.skipDuplicate) {
|
|
173
|
-
|
|
184
|
+
util_1.log.done(`Version ${manifest.version} is already published. Skipping publish.`);
|
|
174
185
|
return;
|
|
175
186
|
}
|
|
176
187
|
else {
|
|
@@ -202,9 +213,9 @@ async function _publish(packagePath, sigzipPath, manifest, options) {
|
|
|
202
213
|
}
|
|
203
214
|
throw err;
|
|
204
215
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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}.`);
|
|
208
219
|
}
|
|
209
220
|
async function _publishSignedPackage(api, packageName, packageStream, sigzipName, sigzipStream, manifest) {
|
|
210
221
|
const extensionType = 'Visual Studio Code';
|
|
@@ -219,7 +230,7 @@ async function _publishSignedPackage(api, packageName, packageStream, sigzipName
|
|
|
219
230
|
});
|
|
220
231
|
const publishWithRetry = (0, cockatiel_1.retry)((0, cockatiel_1.handleWhen)(err => err.message.includes('timeout')), {
|
|
221
232
|
maxAttempts: 3,
|
|
222
|
-
backoff: new cockatiel_1.IterableBackoff([
|
|
233
|
+
backoff: new cockatiel_1.IterableBackoff([5_000, 10_000, 20_000])
|
|
223
234
|
});
|
|
224
235
|
return await publishWithRetry.execute(async () => {
|
|
225
236
|
return await api.publishExtensionWithPublisherSignature(undefined, form, manifest.publisher, manifest.name, extensionType);
|
|
@@ -237,15 +248,15 @@ async function unpublish(options = {}) {
|
|
|
237
248
|
}
|
|
238
249
|
const fullName = `${publisher}.${name}`;
|
|
239
250
|
if (!options.force) {
|
|
240
|
-
const answer = await (0,
|
|
251
|
+
const answer = await (0, util_1.read)(`This will delete ALL published versions! Please type '${fullName}' to confirm: `);
|
|
241
252
|
if (answer !== fullName) {
|
|
242
253
|
throw new Error('Aborted');
|
|
243
254
|
}
|
|
244
255
|
}
|
|
245
256
|
const pat = await getPAT(publisher, options);
|
|
246
|
-
const api = await (0,
|
|
257
|
+
const api = await (0, util_1.getGalleryAPI)(pat);
|
|
247
258
|
await api.deleteExtension(publisher, name);
|
|
248
|
-
|
|
259
|
+
util_1.log.done(`Deleted extension: ${fullName}!`);
|
|
249
260
|
}
|
|
250
261
|
function validateManifestForPublishing(manifest, options) {
|
|
251
262
|
if (manifest.enableProposedApi && !options.allowAllProposedApis && !options.noVerify) {
|
|
@@ -260,6 +271,10 @@ function validateManifestForPublishing(manifest, options) {
|
|
|
260
271
|
return { ...manifest, publisher: (0, validation_1.validatePublisher)(manifest.publisher) };
|
|
261
272
|
}
|
|
262
273
|
async function getPAT(publisher, options) {
|
|
274
|
+
validateAuthenticationOptions(options);
|
|
275
|
+
if (options.oidc) {
|
|
276
|
+
return await (0, oidc_1.getOIDCCredential)(publisher);
|
|
277
|
+
}
|
|
263
278
|
if (options.pat) {
|
|
264
279
|
return options.pat;
|
|
265
280
|
}
|
|
@@ -268,4 +283,15 @@ async function getPAT(publisher, options) {
|
|
|
268
283
|
}
|
|
269
284
|
return (await (0, store_1.getPublisher)(publisher)).pat;
|
|
270
285
|
}
|
|
286
|
+
function validateAuthenticationOptions(options) {
|
|
287
|
+
if (!options.oidc) {
|
|
288
|
+
return;
|
|
289
|
+
}
|
|
290
|
+
if (options.pat) {
|
|
291
|
+
throw new Error(`The '--oidc' and '--pat' options cannot be used together.`);
|
|
292
|
+
}
|
|
293
|
+
if (options.azureCredential) {
|
|
294
|
+
throw new Error(`The '--oidc' and '--azure-credential' options cannot be used together.`);
|
|
295
|
+
}
|
|
296
|
+
}
|
|
271
297
|
//# sourceMappingURL=publish.js.map
|
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,9 @@ 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 os = __importStar(require("os"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const url_1 = require("url");
|
|
12
47
|
const util_1 = require("./util");
|
|
13
48
|
const secretsScanningRules = [
|
|
14
49
|
{
|
|
@@ -45,100 +80,138 @@ const dotEnvRules = [
|
|
|
45
80
|
id: "@secretlint/secretlint-rule-no-dotenv"
|
|
46
81
|
}
|
|
47
82
|
];
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
83
|
+
async function getConfig(scanSecrets, scanDotEnv) {
|
|
84
|
+
const [{ creator: recommend }, { creator: noDotenv }] = await Promise.all([
|
|
85
|
+
importSecretLintRule("@secretlint/secretlint-rule-preset-recommend"),
|
|
86
|
+
importSecretLintRule("@secretlint/secretlint-rule-no-dotenv")
|
|
87
|
+
]);
|
|
53
88
|
const rules = [];
|
|
54
89
|
if (scanSecrets) {
|
|
55
|
-
rules.push(
|
|
90
|
+
rules.push({
|
|
91
|
+
...secretsScanningRules[0],
|
|
92
|
+
rule: recommend
|
|
93
|
+
});
|
|
56
94
|
}
|
|
57
95
|
if (scanDotEnv) {
|
|
58
|
-
rules.push(
|
|
96
|
+
rules.push({
|
|
97
|
+
...dotEnvRules[0],
|
|
98
|
+
rule: noDotenv
|
|
99
|
+
});
|
|
59
100
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const
|
|
67
|
-
|
|
101
|
+
return { rules };
|
|
102
|
+
}
|
|
103
|
+
function importSecretLintRule(packageName) {
|
|
104
|
+
return import(packageName);
|
|
105
|
+
}
|
|
106
|
+
async function mapConcurrently(values, mapper) {
|
|
107
|
+
const results = new Array(values.length);
|
|
108
|
+
let nextIndex = 0;
|
|
109
|
+
async function worker() {
|
|
110
|
+
while (nextIndex < values.length) {
|
|
111
|
+
const index = nextIndex++;
|
|
112
|
+
results[index] = await mapper(values[index]);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const workerCount = Math.min(os.availableParallelism(), values.length);
|
|
116
|
+
await Promise.all(Array.from({ length: workerCount }, worker));
|
|
117
|
+
return results;
|
|
68
118
|
}
|
|
69
119
|
async function lintFiles(filePaths, scanSecrets, scanDotEnv) {
|
|
70
|
-
|
|
71
|
-
let engineResult;
|
|
120
|
+
let results;
|
|
72
121
|
try {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
122
|
+
const [{ lintSource }, { createRawSource }, config] = await Promise.all([
|
|
123
|
+
import("@secretlint/core"),
|
|
124
|
+
import("@secretlint/source-creator"),
|
|
125
|
+
getConfig(scanSecrets, scanDotEnv)
|
|
126
|
+
]);
|
|
127
|
+
results = await mapConcurrently(filePaths, async (filePath) => lintSource({
|
|
128
|
+
source: await createRawSource(filePath),
|
|
129
|
+
options: {
|
|
130
|
+
config,
|
|
131
|
+
maskSecrets: false
|
|
132
|
+
}
|
|
133
|
+
}));
|
|
76
134
|
}
|
|
77
135
|
catch (error) {
|
|
78
136
|
util_1.log.error('Error occurred while scanning secrets (files):', error);
|
|
79
137
|
process.exit(1);
|
|
80
138
|
}
|
|
81
|
-
return parseResult(
|
|
139
|
+
return parseResult(results);
|
|
82
140
|
}
|
|
83
141
|
async function lintText(content, fileName, scanSecrets, scanDotEnv) {
|
|
84
|
-
|
|
85
|
-
let engineResult;
|
|
142
|
+
let result;
|
|
86
143
|
try {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
144
|
+
const [{ lintSource }, config] = await Promise.all([
|
|
145
|
+
import("@secretlint/core"),
|
|
146
|
+
getConfig(scanSecrets, scanDotEnv)
|
|
147
|
+
]);
|
|
148
|
+
result = await lintSource({
|
|
149
|
+
source: {
|
|
150
|
+
content,
|
|
151
|
+
filePath: fileName,
|
|
152
|
+
ext: path.extname(fileName),
|
|
153
|
+
contentType: "text"
|
|
154
|
+
},
|
|
155
|
+
options: {
|
|
156
|
+
config,
|
|
157
|
+
maskSecrets: false
|
|
158
|
+
}
|
|
90
159
|
});
|
|
91
160
|
}
|
|
92
161
|
catch (error) {
|
|
93
162
|
util_1.log.error('Error occurred while scanning secrets (content):', error);
|
|
94
163
|
process.exit(1);
|
|
95
164
|
}
|
|
96
|
-
return parseResult(
|
|
165
|
+
return parseResult([result]);
|
|
166
|
+
}
|
|
167
|
+
function parseResult(fileResults) {
|
|
168
|
+
const results = fileResults.flatMap(fileResult => fileResult.messages.map((message) => ({
|
|
169
|
+
message: message.message,
|
|
170
|
+
ruleId: message.ruleParentId ? `${message.ruleParentId} > ${message.ruleId}` : message.ruleId,
|
|
171
|
+
level: message.severity === "info" ? "note" : message.severity,
|
|
172
|
+
filePath: process.env.SARIF_URI_ABSOLUTE
|
|
173
|
+
? (0, url_1.pathToFileURL)(fileResult.filePath).toString()
|
|
174
|
+
: path.relative(process.cwd(), fileResult.filePath),
|
|
175
|
+
startLine: fixLine(message.loc.start.line),
|
|
176
|
+
startColumn: fixColumn(message.loc.start.column),
|
|
177
|
+
endLine: fixLine(message.loc.end.line),
|
|
178
|
+
endColumn: fixColumn(message.loc.end.column)
|
|
179
|
+
})));
|
|
180
|
+
return {
|
|
181
|
+
ok: !fileResults.some(fileResult => fileResult.messages.some(message => message.severity === "error")),
|
|
182
|
+
results
|
|
183
|
+
};
|
|
97
184
|
}
|
|
98
|
-
function
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
185
|
+
function fixLine(value) {
|
|
186
|
+
return value === null ? undefined : value === 0 ? 1 : value;
|
|
187
|
+
}
|
|
188
|
+
function fixColumn(value) {
|
|
189
|
+
return value === null ? undefined : value === 0 ? 1 : value + 1;
|
|
102
190
|
}
|
|
103
191
|
function getRuleNameFromRuleId(ruleId) {
|
|
104
192
|
const parts = ruleId.split('-rule-');
|
|
105
193
|
return parts[parts.length - 1];
|
|
106
194
|
}
|
|
107
195
|
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;
|
|
196
|
+
const text = result.message;
|
|
197
|
+
const titleColor = result.level === "error" ? chalk_1.default.bold.red : chalk_1.default.bold.yellow;
|
|
113
198
|
const title = text.length > 54 ? text.slice(0, 50) + '...' : text;
|
|
114
|
-
const ruleName =
|
|
199
|
+
const ruleName = getRuleNameFromRuleId(result.ruleId);
|
|
115
200
|
let output = `\t${titleColor(title)} [${ruleName}]\n`;
|
|
116
|
-
|
|
117
|
-
result.locations.forEach(location => {
|
|
118
|
-
output += `\t${prettyPrintLocation(location)}\n`;
|
|
119
|
-
});
|
|
120
|
-
}
|
|
201
|
+
output += `\t${prettyPrintLocation(result)}\n`;
|
|
121
202
|
return output;
|
|
122
203
|
}
|
|
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;
|
|
204
|
+
function prettyPrintLocation(result) {
|
|
205
|
+
let output = result.filePath;
|
|
206
|
+
const regionStringified = prettyPrintRegion(result);
|
|
134
207
|
if (regionStringified) {
|
|
135
208
|
output += `#${regionStringified}`;
|
|
136
209
|
}
|
|
137
210
|
return output;
|
|
138
211
|
}
|
|
139
|
-
function prettyPrintRegion(
|
|
140
|
-
const startPosition = prettyPrintPosition(
|
|
141
|
-
const endPosition = prettyPrintPosition(
|
|
212
|
+
function prettyPrintRegion(result) {
|
|
213
|
+
const startPosition = prettyPrintPosition(result.startLine, result.startColumn);
|
|
214
|
+
const endPosition = prettyPrintPosition(result.endLine, result.endColumn);
|
|
142
215
|
if (!startPosition) {
|
|
143
216
|
return undefined;
|
|
144
217
|
}
|
package/out/store.js
CHANGED
|
@@ -49,6 +49,9 @@ const package_1 = require("./package");
|
|
|
49
49
|
const publish_1 = require("./publish");
|
|
50
50
|
;
|
|
51
51
|
class FileStore {
|
|
52
|
+
path;
|
|
53
|
+
publishers;
|
|
54
|
+
static DefaultPath = path.join((0, os_1.homedir)(), '.vsce');
|
|
52
55
|
static async open(path = FileStore.DefaultPath) {
|
|
53
56
|
try {
|
|
54
57
|
const rawStore = await fs.promises.readFile(path, 'utf8');
|
|
@@ -98,10 +101,12 @@ class FileStore {
|
|
|
98
101
|
}
|
|
99
102
|
}
|
|
100
103
|
exports.FileStore = FileStore;
|
|
101
|
-
FileStore.DefaultPath = path.join((0, os_1.homedir)(), '.vsce');
|
|
102
104
|
class KeytarStore {
|
|
105
|
+
keytar;
|
|
106
|
+
serviceName;
|
|
107
|
+
publishers;
|
|
103
108
|
static async open(serviceName = 'vscode-vsce') {
|
|
104
|
-
const keytar =
|
|
109
|
+
const keytar = require('@napi-rs/keyring/keytar.js');
|
|
105
110
|
const creds = await keytar.findCredentials(serviceName);
|
|
106
111
|
return new KeytarStore(keytar, serviceName, creds.map(({ account, password }) => ({ name: account, pat: password })));
|
|
107
112
|
}
|
package/out/util.js
CHANGED
|
@@ -118,10 +118,8 @@ function isCancelledError(error) {
|
|
|
118
118
|
return error === CancelledError;
|
|
119
119
|
}
|
|
120
120
|
class CancellationToken {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
this._cancelled = false;
|
|
124
|
-
}
|
|
121
|
+
listeners = [];
|
|
122
|
+
_cancelled = false;
|
|
125
123
|
get isCancelled() {
|
|
126
124
|
return this._cancelled;
|
|
127
125
|
}
|
package/out/validation.js
CHANGED
|
@@ -32,9 +32,6 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
36
|
exports.validatePublisher = validatePublisher;
|
|
40
37
|
exports.validateExtensionName = validateExtensionName;
|
|
@@ -43,8 +40,8 @@ exports.validateEngineCompatibility = validateEngineCompatibility;
|
|
|
43
40
|
exports.validateVSCodeTypesCompatibility = validateVSCodeTypesCompatibility;
|
|
44
41
|
exports.validateExtensionDependencies = validateExtensionDependencies;
|
|
45
42
|
const semver = __importStar(require("semver"));
|
|
46
|
-
const parse_semver_1 = __importDefault(require("parse-semver"));
|
|
47
43
|
const util_1 = require("./util");
|
|
44
|
+
const packageSpec_1 = require("./packageSpec");
|
|
48
45
|
const nameRegex = /^[a-z0-9][a-z0-9\-]*$/i;
|
|
49
46
|
function validatePublisher(publisher) {
|
|
50
47
|
if (!publisher) {
|
|
@@ -97,14 +94,14 @@ function validateVSCodeTypesCompatibility(engineVersion, typeVersion) {
|
|
|
97
94
|
}
|
|
98
95
|
let plainEngineVersion, plainTypeVersion;
|
|
99
96
|
try {
|
|
100
|
-
const engineSemver = (0,
|
|
97
|
+
const engineSemver = (0, packageSpec_1.parsePackageSpec)(`vscode@${engineVersion}`);
|
|
101
98
|
plainEngineVersion = engineSemver.version;
|
|
102
99
|
}
|
|
103
100
|
catch (err) {
|
|
104
101
|
throw new Error('Failed to parse semver of engines.vscode');
|
|
105
102
|
}
|
|
106
103
|
try {
|
|
107
|
-
const typeSemver = (0,
|
|
104
|
+
const typeSemver = (0, packageSpec_1.parsePackageSpec)(`@types/vscode@${typeVersion}`);
|
|
108
105
|
plainTypeVersion = typeSemver.version;
|
|
109
106
|
}
|
|
110
107
|
catch (err) {
|
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-10",
|
|
4
4
|
"description": "VS Code Extensions Manager",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -36,33 +36,32 @@
|
|
|
36
36
|
"watch:test": "npm run test -- --watch"
|
|
37
37
|
},
|
|
38
38
|
"engines": {
|
|
39
|
-
"node": ">=
|
|
39
|
+
"node": ">= 22"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@azure/identity": "^4.1.0",
|
|
43
|
-
"@
|
|
44
|
-
"@secretlint/
|
|
43
|
+
"@napi-rs/keyring": "^1.3.0",
|
|
44
|
+
"@secretlint/core": "^10.1.2",
|
|
45
45
|
"@secretlint/secretlint-rule-no-dotenv": "^10.1.2",
|
|
46
46
|
"@secretlint/secretlint-rule-preset-recommend": "^10.1.2",
|
|
47
|
+
"@secretlint/source-creator": "^10.1.2",
|
|
48
|
+
"@secretlint/types": "^10.1.2",
|
|
47
49
|
"@vscode/vsce-sign": "^2.0.0",
|
|
48
50
|
"azure-devops-node-api": "^12.5.0",
|
|
49
51
|
"chalk": "^4.1.2",
|
|
50
|
-
"cheerio": "^1.0.0-rc.9",
|
|
51
52
|
"cockatiel": "^3.1.2",
|
|
52
53
|
"commander": "^12.1.0",
|
|
53
54
|
"form-data": "^4.0.0",
|
|
54
|
-
"glob": "^13.0.6",
|
|
55
55
|
"hosted-git-info": "^4.0.2",
|
|
56
56
|
"jsonc-parser": "^3.2.0",
|
|
57
57
|
"leven": "^3.1.0",
|
|
58
|
-
"
|
|
58
|
+
"marked": "^18.0.10",
|
|
59
59
|
"mime": "^1.3.4",
|
|
60
60
|
"minimatch": "^10.2.2",
|
|
61
|
-
"
|
|
61
|
+
"parse5": "^8.0.1",
|
|
62
62
|
"read": "^1.0.7",
|
|
63
|
-
"secretlint": "^10.1.2",
|
|
64
63
|
"semver": "^7.5.2",
|
|
65
|
-
"
|
|
64
|
+
"tinyglobby": "^0.2.17",
|
|
66
65
|
"typed-rest-client": "^1.8.4",
|
|
67
66
|
"url-join": "^4.0.1",
|
|
68
67
|
"xml2js": "^0.5.0",
|
|
@@ -71,28 +70,21 @@
|
|
|
71
70
|
},
|
|
72
71
|
"devDependencies": {
|
|
73
72
|
"@microsoft/api-extractor": "^7.33.7",
|
|
74
|
-
"@types/cheerio": "^0.22.29",
|
|
75
|
-
"@types/glob": "^8.1.0",
|
|
76
73
|
"@types/hosted-git-info": "^3.0.2",
|
|
77
|
-
"@types/markdown-it": "^0.0.2",
|
|
78
74
|
"@types/mime": "^1",
|
|
79
75
|
"@types/mocha": "^7.0.2",
|
|
80
|
-
"@types/node": "^
|
|
76
|
+
"@types/node": "^22.0.0",
|
|
77
|
+
"@types/picomatch": "^4.0.3",
|
|
81
78
|
"@types/read": "^0.0.28",
|
|
82
79
|
"@types/semver": "^6.0.0",
|
|
83
|
-
"@types/tmp": "^0.2.2",
|
|
84
80
|
"@types/url-join": "^4.0.1",
|
|
85
81
|
"@types/xml2js": "^0.4.4",
|
|
86
82
|
"@types/yauzl": "^2.9.2",
|
|
87
83
|
"@types/yazl": "^2.4.2",
|
|
88
84
|
"mocha": "^11.1.0",
|
|
89
|
-
"source-map-support": "^0.4.2",
|
|
90
85
|
"ts-node": "^10.9.1",
|
|
91
86
|
"typescript": "~5.9.0"
|
|
92
87
|
},
|
|
93
|
-
"optionalDependencies": {
|
|
94
|
-
"keytar": "^7.7.0"
|
|
95
|
-
},
|
|
96
88
|
"mocha": {
|
|
97
89
|
"require": [
|
|
98
90
|
"ts-node/register"
|