@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/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 util_2 = require("./util");
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 tmpName = (0, util_1.promisify)(tmp.tmpName);
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, util_2.patchOptionsWithManifest)(options, manifest);
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
- const packagePath = await tmpName();
117
- const packageResult = await (0, package_1.pack)({ ...options, target, packagePath });
118
- const manifestValidated = validateManifestForPublishing(packageResult.manifest, options);
119
- const sigzipPath = options.signTool ? await (0, package_1.signPackage)(packagePath, options.signTool) : undefined;
120
- await _publish(packagePath, sigzipPath, manifestValidated, { ...options, target });
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
- const packagePath = await tmpName();
125
- const packageResult = await (0, package_1.pack)({ ...options, packagePath });
126
- const manifestValidated = validateManifestForPublishing(packageResult.manifest, options);
127
- const sigzipPath = options.signTool ? await (0, package_1.signPackage)(packagePath, options.signTool) : undefined;
128
- await _publish(packagePath, sigzipPath, manifestValidated, options);
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, util_2.getGalleryAPI)(pat);
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
- util_2.log.info(`Publishing '${description}'...`);
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
- util_2.log.done(`Version ${manifest.version} is already published. Skipping publish.`);
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
- util_2.log.done(`Version ${manifest.version} is already published. Skipping publish.`);
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
- util_2.log.info(`Extension URL (might take a few minutes): ${(0, util_2.getPublishedUrl)(name)}`);
206
- util_2.log.info(`Hub URL: ${(0, util_2.getHubUrl)(manifest.publisher, manifest.name)}`);
207
- util_2.log.done(`Published ${description}.`);
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([5000, 10000, 20000])
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, util_2.read)(`This will delete ALL published versions! Please type '${fullName}' to confirm: `);
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, util_2.getGalleryAPI)(pat);
257
+ const api = await (0, util_1.getGalleryAPI)(pat);
247
258
  await api.deleteExtension(publisher, name);
248
- util_2.log.done(`Deleted extension: ${fullName}!`);
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 secret_lint_types_1 = require("./typings/secret-lint-types");
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
- // Helper function to dynamically import the createEngine function
49
- async function getEngine(scanSecrets, scanDotEnv) {
50
- // Use a raw dynamic import that will not be transformed
51
- // This is necessary because @secretlint/node is an ESM module
52
- const secretlintModule = await eval('import("@secretlint/node")');
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(...secretsScanningRules);
90
+ rules.push({
91
+ ...secretsScanningRules[0],
92
+ rule: recommend
93
+ });
56
94
  }
57
95
  if (scanDotEnv) {
58
- rules.push(...dotEnvRules);
96
+ rules.push({
97
+ ...dotEnvRules[0],
98
+ rule: noDotenv
99
+ });
59
100
  }
60
- const lintOptions = {
61
- configFileJSON: { rules: rules },
62
- formatter: "@secretlint/secretlint-formatter-sarif", // checkstyle, compact, jslint-xml, junit, pretty-error, stylish, tap, unix, json, mask-result, table
63
- color: true,
64
- maskSecrets: false
65
- };
66
- const engine = await secretlintModule.createEngine(lintOptions);
67
- return engine;
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
- const engine = await getEngine(scanSecrets, scanDotEnv);
71
- let engineResult;
120
+ let results;
72
121
  try {
73
- engineResult = await engine.executeOnFiles({
74
- filePathList: filePaths
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(engineResult);
139
+ return parseResult(results);
82
140
  }
83
141
  async function lintText(content, fileName, scanSecrets, scanDotEnv) {
84
- const engine = await getEngine(scanSecrets, scanDotEnv);
85
- let engineResult;
142
+ let result;
86
143
  try {
87
- engineResult = await engine.executeOnContent({
88
- content,
89
- filePath: fileName
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(engineResult);
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 parseResult(result) {
99
- const output = secret_lint_types_1.Convert.toSecretLintOutput(result.output);
100
- const results = output.runs.at(0)?.results ?? [];
101
- return { ok: result.ok, results };
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
- if (!result.message.text) {
109
- return JSON.stringify(result);
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 = result.ruleId ? getRuleNameFromRuleId(result.ruleId) : 'unknown';
199
+ const ruleName = getRuleNameFromRuleId(result.ruleId);
115
200
  let output = `\t${titleColor(title)} [${ruleName}]\n`;
116
- if (result.locations) {
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(location) {
124
- if (!location.physicalLocation) {
125
- return JSON.stringify(location);
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(region) {
140
- const startPosition = prettyPrintPosition(region.startLine, region.startColumn);
141
- const endPosition = prettyPrintPosition(region.endLine, region.endColumn);
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 = await import('keytar').then(module => module.default);
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
- constructor() {
122
- this.listeners = [];
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, parse_semver_1.default)(`vscode@${engineVersion}`);
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, parse_semver_1.default)(`@types/vscode@${typeVersion}`);
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-0",
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": ">= 20"
39
+ "node": ">= 22"
40
40
  },
41
41
  "dependencies": {
42
42
  "@azure/identity": "^4.1.0",
43
- "@secretlint/node": "^10.1.2",
44
- "@secretlint/secretlint-formatter-sarif": "^10.1.2",
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
- "markdown-it": "^14.1.0",
58
+ "marked": "^18.0.10",
59
59
  "mime": "^1.3.4",
60
60
  "minimatch": "^10.2.2",
61
- "parse-semver": "^1.1.1",
61
+ "parse5": "^8.0.1",
62
62
  "read": "^1.0.7",
63
- "secretlint": "^10.1.2",
64
63
  "semver": "^7.5.2",
65
- "tmp": "^0.2.3",
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": "^20.0.0",
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"