manan-data 0.0.0

inventyv tikv datalayer
Documentation
import * as globs from './globs.js';
import pkg from './pkg.cjs';

export const levels = {
	// As the protocol changes, comparing levels by integer allows AVA to be
	// compatible with different versions.
	ava6: 1,
};

const levelsByProtocol = Object.assign(Object.create(null), {
	'ava-6': levels.ava6,
});

async function load(providerModule, projectDir, selectProtocol = () => true) {
	const ava = {version: pkg.version};
	const {default: makeProvider} = await import(providerModule);

	let fatal;
	let level;
	const provider = makeProvider({
		negotiateProtocol(identifiers, {version}) {
			const identifier = identifiers
				.find(identifier => selectProtocol(identifier) && Object.hasOwn(levelsByProtocol, identifier));

			if (identifier === undefined) {
				fatal = new Error(`This version of AVA (${ava.version}) is not compatible with ${providerModule}@${version}`);
				return null;
			}

			level = levelsByProtocol[identifier];

			return {
				ava,
				async findFiles({extensions, patterns}) {
					return globs.findFiles({cwd: projectDir, extensions, filePatterns: patterns});
				},
				identifier,
				normalizeGlobPatterns: globs.normalizePatterns,
				projectDir,
			};
		},
	});

	if (fatal) {
		throw fatal;
	}

	return {...provider, level};
}

const providerManager = {
	async typescript(projectDir, {protocol} = {}) {
		return load('@ava/typescript', projectDir, identifier => protocol === undefined || identifier === protocol);
	},
};

export default providerManager;