constructor({
		cwd,
		configType = "flat",
		flags = [],
		warningService = new WarningService(),
	} = {}) {
		const processedFlags = [];

		flags.forEach(flag => {
			if (inactiveFlags.has(flag)) {
				const inactiveFlagData = inactiveFlags.get(flag);
				const inactivityReason =
					getInactivityReasonMessage(inactiveFlagData);
				const message = `The flag '${flag}' is inactive: ${inactivityReason}`;

				if (typeof inactiveFlagData.replacedBy === "undefined") {
					throw new Error(message);
				}

				// if there's a replacement, enable it instead of original
				if (typeof inactiveFlagData.replacedBy === "string") {
					processedFlags.push(inactiveFlagData.replacedBy);
				}

				warningService.emitInactiveFlagWarning(flag, message);

				return;
			}

			if (!activeFlags.has(flag)) {
				throw new Error(`Unknown flag '${flag}'.`);
			}

			processedFlags.push(flag);
		});

		internalSlotsMap.set(this, {
			cwd: normalizeCwd(cwd),
			flags: processedFlags,
			lastConfigArray: null,
			lastSourceCode: null,
			lastSuppressedMessages: [],
			configType, // TODO: Remove after flat config conversion
			parserMap: new Map([["espree", espree]]),
			ruleMap: new Rules(),
			warningService,
		});

		this.version = pkg.version;
	}
Initialize the Linter.
@param {Object} [config] the config object
@param {string} [config.cwd] path to a directory that should be considered as the current working directory, can be undefined.
@param {Array<string>} [config.flags] the feature flags to enable.
@param {"flat"|"eslintrc"} [config.configType="flat"] the type of config used.
@param {WarningService} [config.warningService] The warning service to use.