async function _publish()

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}.`);
}