editSourceConfig = async (source, plugin) => {
	const options = Options(plugin.options, source.options);

	// eslint-disable-next-line no-constant-condition
	while (true) {
		const selectItems = transformOptionsToSelectList(options);
		const selection = await prompt.select({
			message: 'Pick an option to configure',
			options: [...selectItems, { label: 'Done', value: null }]
		});

		if (selection === null) {
			const valid = await validate();
			if (valid) break;
		} else {
			await editOption(options, selection);
		}
	}
	await writeSourceConfig(options, source, prompt.spinner());

	const runNow = await prompt.confirm({
		message: `Would you like to run the source queries for ${source.name} now?`
	});
	if (runNow) {
		const filter = {
			sources: new Set([source.name]),
			queries: new Set(),
			only_changed: false
		};
		// Create some space to reduce the wackiness
		console.log('\n\n');
		// TODO: this is duplicated with the sources cli command, should be a shared func
		const evaluatedManifest = await evalSources(dataDirectory, metaDirectory, filter);
		await updateManifest(evaluatedManifest, dataDirectory);
	}

	return;
}
@param {import("../../schemas/datasource.schema.js").DatasourceSpec & { dir: string }} source
@param {import("../../Datasources.js").Datasource} plugin