constructor()

in src/package.ts [365:459]


	constructor(manifest: Manifest, private readonly options: IPackageOptions = {}) {
		super(manifest);

		const flags = ['Public'];

		if (manifest.preview) {
			flags.push('Preview');
		}

		const gitHost = getGitHost(manifest);
		const repository = getRepositoryUrl(manifest, gitHost);
		const isGitHub = isGitHubRepository(repository);

		let enableMarketplaceQnA: boolean | undefined;
		let customerQnALink: string | undefined;

		if (manifest.qna === 'marketplace') {
			enableMarketplaceQnA = true;
		} else if (typeof manifest.qna === 'string') {
			customerQnALink = manifest.qna;
		} else if (manifest.qna === false) {
			enableMarketplaceQnA = false;
		}

		const extensionKind = getExtensionKind(manifest);
		const target = options.target;
		const preRelease = options.preRelease;

		if (target || preRelease) {
			let engineVersion: string;

			try {
				const engineSemver = parseSemver(`vscode@${manifest.engines['vscode']}`);
				engineVersion = engineSemver.version;
			} catch (err) {
				throw new Error('Failed to parse semver of engines.vscode');
			}

			if (target) {
				if (engineVersion !== 'latest' && !semver.satisfies(engineVersion, '>=1.61')) {
					throw new Error(
						`Platform specific extension is supported by VS Code >=1.61. Current 'engines.vscode' is '${manifest.engines['vscode']}'.`
					);
				}
				if (!Targets.has(target)) {
					throw new Error(`'${target}' is not a valid VS Code target. Valid targets: ${[...Targets].join(', ')}`);
				}
			}

			if (preRelease) {
				if (engineVersion !== 'latest' && !semver.satisfies(engineVersion, '>=1.63')) {
					throw new Error(
						`Pre-release versions are supported by VS Code >=1.63. Current 'engines.vscode' is '${manifest.engines['vscode']}'.`
					);
				}
			}
		}

		this.vsix = {
			...this.vsix,
			id: manifest.name,
			displayName: manifest.displayName ?? manifest.name,
			version: options.version && !(options.updatePackageJson ?? true) ? options.version : manifest.version,
			publisher: manifest.publisher,
			target,
			engine: manifest.engines['vscode'],
			description: manifest.description ?? '',
			categories: (manifest.categories ?? []).join(','),
			flags: flags.join(' '),
			links: {
				repository,
				bugs: getBugsUrl(manifest, gitHost),
				homepage: getHomepageUrl(manifest, gitHost),
			},
			galleryBanner: manifest.galleryBanner ?? {},
			badges: manifest.badges,
			githubMarkdown: manifest.markdown !== 'standard',
			enableMarketplaceQnA,
			customerQnALink,
			extensionDependencies: [...new Set(manifest.extensionDependencies ?? [])].join(','),
			extensionPack: [...new Set(manifest.extensionPack ?? [])].join(','),
			extensionKind: extensionKind.join(','),
			localizedLanguages:
				manifest.contributes && manifest.contributes.localizations
					? manifest.contributes.localizations
							.map(loc => loc.localizedLanguageName ?? loc.languageName ?? loc.languageId)
							.join(',')
					: '',
			preRelease: !!this.options.preRelease,
		};

		if (isGitHub) {
			this.vsix.links.github = repository;
		}
	}