export function validateVSCodeTypesCompatibility()

in src/validation.ts [56:109]


export function validateVSCodeTypesCompatibility(engineVersion: string, typeVersion: string): void {
	if (engineVersion === '*') {
		return;
	}

	if (!typeVersion) {
		throw new Error(`Missing @types/vscode version`);
	}

	let plainEngineVersion: string, plainTypeVersion: string;

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

	try {
		const typeSemver = parseSemver(`@types/vscode@${typeVersion}`);
		plainTypeVersion = typeSemver.version;
	} catch (err) {
		throw new Error('Failed to parse semver of @types/vscode');
	}

	// For all `x`, use smallest version for comparison
	plainEngineVersion = plainEngineVersion.replace(/x/g, '0');

	const [typeMajor, typeMinor] = plainTypeVersion.split('.').map(x => {
		try {
			return parseInt(x);
		} catch (err) {
			return 0;
		}
	});
	const [engineMajor, engineMinor] = plainEngineVersion.split('.').map(x => {
		try {
			return parseInt(x);
		} catch (err) {
			return 0;
		}
	});

	const error = new Error(
		`@types/vscode ${typeVersion} greater than engines.vscode ${engineVersion}. Consider upgrade engines.vscode or use an older @types/vscode version`
	);

	if (typeMajor > engineMajor) {
		throw error;
	}
	if (typeMajor === engineMajor && typeMinor > engineMinor) {
		throw error;
	}
}