public fun defaultPomProvider()

in build-systems/src/commonMain/kotlin/org/jetbrains/packagesearch/maven/PomResolver.kt [45:107]


        public fun defaultPomProvider(
            repositories: List<MavenUrlBuilder> = listOf(GoogleMavenCentralMirror),
            xml: XML = defaultXml(),
            httpClient: HttpClient = HttpClientMavenPomProvider.defaultHttpClient(xml),
        ): MavenPomProvider =
            HttpClientMavenPomProvider(
                mirrors = repositories,
                httpClient = httpClient,
                xml = xml,
            )

        /**
         * Regular expression used for pattern matching and extraction.
         * This regex pattern is used to match and extract substrings in the format `${...}` from a string.
         * It is used in the `String.resolve()` function to resolve property references.
         *
         * Regex pattern: `\$\{(.*?)\}`
         */
        private val PROPERTY_REFERENCE_REGEX = Regex("""\$\{(.+?)}""")
    }

    /**
     * Retrieves the Project Object Model (POM) for the specified groupId, artifactId, and version.
     *
     * @param groupId The groupId of the project.
     * @param artifactId The artifactId of the project.
     * @param version The version of the project.
     * @return The retrieved ProjectObjectModel or null if it doesn't exist.
     */
    public suspend fun getPom(
        groupId: String,
        artifactId: String,
        version: String,
    ): ProjectObjectModel? =
        pomProvider
            .getPomFromMultipleRepositories(groupId, artifactId, version)
            .firstOrNull()
            ?.let { resolve(it) }

    /**
     * Retrieves the Project Object Model (POM) for the specified parent.
     *
     * @param parent The Parent object containing the groupId, artifactId, version, and optional relativePath.
     * @return The retrieved ProjectObjectModel or null if it doesn't exist.
     */
    private suspend fun getPom(parent: Parent) = getPom(parent.groupId, parent.artifactId, parent.version)

    /**
     * Resolves the Project Object Model (POM) using the provided POM text.
     *
     * @param pomText The POM text to be resolved.
     * @return The resolved ProjectObjectModel.
     */
    public suspend fun resolve(pomText: String): ProjectObjectModel =
        resolve(xml.decodeFromString<ProjectObjectModel>(POM_XML_NAMESPACE, pomText))

    /**
     * Resolves the provided Project Object Model (POM) by merging it with its parent POMs and resolving the property values.
     *
     * @param model The Project Object Model to be resolved.
     * @return The resolved Project Object Model.
     */
    public suspend fun resolve(model: ProjectObjectModel): ProjectObjectModel {