function parse()

in src/configuration.ts [176:235]


function parse(
  configurationContext: ConfigurationContext,
  configFilePath: File.AbsoluteFilePath,
  contents: File.Contents,
): Either.Either<Error.Error[], GenerationConfig> {
  const parsedJson = parseJson(
    File.getContents(contents),
    'Configuration file is malformed and unparseable',
  );
  const baseClassEither = Either.map(parsedJsonToBaseClass, parsedJson);
  const defaultIncludesEither = Either.map(
    parsedJsonToDefaultIncludes,
    parsedJson,
  );
  const defaultExcludesEither = Either.map(
    parsedJsonToDefaultExcludesMap,
    parsedJson,
  );
  const diagnosticIgnoresEither = Either.map(
    parsedJsonToDiagnosticIgnores,
    parsedJson,
  );
  const pluginCollectionEither = Either.map(
    (json) =>
      parsedJsonToPluginCollectionInfo(configurationContext.basePlugins, json),
    parsedJson,
  );
  const scriptConfigEither = Either.map(
    (pluginCollection) =>
      scriptConfigFromPluginCollectionInfo(configFilePath, pluginCollection),
    pluginCollectionEither,
  );
  return Either.mbind(function (baseClass: ObjC.BaseClass) {
    return Either.mbind(function (pluginConfigs: List.List<PluginConfig>) {
      return Either.mbind(function (diagnosticIgnores: List.List<string>) {
        return Either.mbind(function (defaultIncludes: List.List<string>) {
          return Either.map(function (
            defaultExcludesMap: Map.Map<string, string>,
          ): GenerationConfig {
            const combinedIncludes = includesWithAdditionalIncludes(
              configurationContext.baseIncludes,
              defaultIncludes,
            );
            return {
              baseClassName: baseClass.className,
              baseClassLibraryName: baseClass.libraryName,
              diagnosticIgnores: diagnosticIgnores,
              pluginConfigs: pluginConfigs,
              defaultIncludes: includesApplyingExcludesMap(
                combinedIncludes,
                defaultExcludesMap,
              ),
            };
          },
          defaultExcludesEither);
        }, defaultIncludesEither);
      }, diagnosticIgnoresEither);
    }, scriptConfigEither);
  }, baseClassEither);
}