fun parseFiles()

in telemetry/jetbrains/src/main/kotlin/software/aws/toolkits/telemetry/generator/TelemetryParser.kt [124:163]


    fun parseFiles(
        defaultResourcesFiles: List<String>,
        paths: List<File> = listOf(),
    ): TelemetrySchema {
        val files = paths.map { it.readText() } + defaultResourcesFiles
        val rawSchema = JSONObject(JSONTokener(ResourceLoader.SCHEMA_FILE))
        val schema: Schema = SchemaLoader.load(rawSchema)
        files.forEach { validate(it, schema) }

        val telemetryDefinition =
            files.map { parse(it) }.fold(TelemetryDefinition(listOf(), listOf())) { it, it2 ->
                TelemetryDefinition(
                    it.types.plus(it2.types),
                    it.metrics.plus(it2.metrics),
                )
            }.let {
                TelemetryDefinition(
                    it.types.distinctBy { t -> t.name },
                    it.metrics.distinctBy { m -> m.name },
                )
            }

        val metadataTypes = telemetryDefinition.types.associateBy { it.name }

        val resolvedMetricTypes =
            telemetryDefinition.metrics.map {
                MetricSchema(
                    it.name,
                    it.description,
                    it.unit,
                    it.metadata.map { metadata -> MetadataSchema(metadataTypes.getValue(metadata.type), metadata.required) },
                    it.passive,
                )
            }

        return TelemetrySchema(
            telemetryDefinition.types,
            resolvedMetricTypes,
        )
    }