add(pack, source, overrides) {
		if (!pack.evidence.datasources?.length)
			throw new EvidenceError(
				`${pack.name} is not a valid datasource!`,
				'package.json is missing evidence.datasources array'
			);

		overrides?.forEach((override) => {
			if (Object.keys(this.#overrides).includes(override))
				throw new EvidenceError(
					`${override} has already been overriden by ${this.#bySource[override]}`
				);
			this.#overrides[override] = pack.name;
			this.#bySource[override] = [pack, source];
		});

		pack.evidence.datasources.flat().forEach((sourceName) => {
			if (this.#overrides[sourceName] && this.#overrides[sourceName] !== pack.name) {
				console.debug(
					`Ignoring source type "${sourceName}" from ${pack.name}, already overriden by ${this.#overrides[sourceName]}`
				);
			}
			this.#bySource[sourceName] = [pack, source];
		});

		this.#byPackage[pack.name] = [pack, source];
	}
@param {DatasourcePackage} pack
@param {Datasource} source
@param {string[]} [overrides]