in src/publish.ts [100:185]
async function _publish(packagePath: string, manifest: Manifest, options: IInternalPublishOptions) {
validatePublisher(manifest.publisher);
if (!options.noVerify && manifest.enableProposedApi) {
throw new Error("Extensions using proposed API (enableProposedApi: true) can't be published to the Marketplace");
}
if (!options.noVerify && manifest.enabledApiProposals) {
throw new Error("Extensions using proposed API (enabledApiProposals: [...]) can't be published to the Marketplace");
}
if (semver.prerelease(manifest.version)) {
throw new Error(`The VS Marketplace doesn't support prerelease versions: '${manifest.version}'`);
}
const pat = options.pat ?? (await getPublisher(manifest.publisher)).pat;
const api = await getGalleryAPI(pat);
const packageStream = fs.createReadStream(packagePath);
const name = `${manifest.publisher}.${manifest.name}`;
const description = options.target
? `${name} (${options.target}) v${manifest.version}`
: `${name} v${manifest.version}`;
log.info(`Publishing '${description}'...`);
let extension: PublishedExtension | null = null;
try {
try {
extension = await api.getExtension(
null,
manifest.publisher,
manifest.name,
undefined,
ExtensionQueryFlags.IncludeVersions
);
} catch (err: any) {
if (err.statusCode !== 404) {
throw err;
}
}
if (extension && extension.versions) {
const sameVersion = extension.versions.filter(v => v.version === manifest.version);
if (sameVersion.length > 0) {
if (!options.target) {
throw new Error(`${description} already exists.`);
}
if (sameVersion.some(v => !v.targetPlatform)) {
throw new Error(`${name} (no target) v${manifest.version} already exists.`);
}
if (sameVersion.some(v => v.targetPlatform === options.target)) {
throw new Error(`${description} already exists.`);
}
}
try {
await api.updateExtension(undefined, packageStream, manifest.publisher, manifest.name);
} catch (err: any) {
if (err.statusCode === 409) {
throw new Error(`${description} already exists.`);
} else {
throw err;
}
}
} else {
await api.createExtension(undefined, packageStream);
}
} catch (err: any) {
const message = (err && err.message) || '';
if (/Personal Access Token used has expired/.test(message)) {
err.message = `${err.message}\n\nYou're using an expired Personal Access Token, please get a new PAT.\nMore info: https://aka.ms/vscodepat`;
} else if (/Invalid Resource/.test(message)) {
err.message = `${err.message}\n\nYou're likely using an expired Personal Access Token, please get a new PAT.\nMore info: https://aka.ms/vscodepat`;
}
throw err;
}
log.info(`Extension URL (might take a few minutes): ${getPublishedUrl(name)}`);
log.info(`Hub URL: ${getHubUrl(manifest.publisher, manifest.name)}`);
log.done(`Published ${description}.`);
}