constructor(config, meta) {
		this.name = config.name ?? null;
		this.key_define_type = config.key_define_type ?? null;
		this.includes_numpad = config.includes_numpad ?? null;
		this.sound = config.sound ?? null;
		this.defines = config.defines ?? null;

		this.pack_id = meta.pack_id ?? null;
		this.group = meta.group ?? null;
		this.abs_path = meta.abs_path ?? null;
		this.is_archive = meta.is_archive ?? null;
		this.is_custom = meta.is_custom ?? null;

		// check all the keys for any null values and throw an error if there are any
		for (let key in this) {
			if (this[key] === null) {
				throw new Error(`SoundpackConfig: Missing required property: ${key}`);
			}
		}

		this.version = 1;
	}
@param {object} config the decoded json of the soundpack config.json
@param {object} meta calculated metadata about the soundpack