From 4c2c13b626f07aabd9055098af7ebfcbbd84941c Mon Sep 17 00:00:00 2001 From: stevensJourney Date: Mon, 7 Apr 2025 09:36:59 +0200 Subject: [PATCH] initial api ref --- build.gradle.kts | 45 +++++++++++++++++++++++++++++++++++++++++++ core/build.gradle.kts | 5 +++-- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index da36a00a..1882f2ea 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,9 @@ +import com.sun.net.httpserver.HttpExchange +import com.sun.net.httpserver.HttpServer +import java.net.InetSocketAddress +import java.net.URLDecoder +import java.nio.file.Files + plugins { alias(libs.plugins.jetbrainsCompose) apply false alias(libs.plugins.compose.compiler) apply false @@ -16,6 +22,7 @@ plugins { alias(libs.plugins.kotlinter) apply false alias(libs.plugins.keeper) apply false alias(libs.plugins.kotlin.atomicfu) apply false + id("org.jetbrains.dokka") version "2.0.0" } allprojects { @@ -57,3 +64,41 @@ subprojects { tasks.register("clean") { delete(rootProject.layout.buildDirectory) } + +tasks.register("serveDokka") { + dependsOn("dokkaHtml") + doLast { + val server = HttpServer.create(InetSocketAddress(0), 0) + val root = file("core/build/dokka/html") + + val handler = + com.sun.net.httpserver.HttpHandler { exchange: HttpExchange -> + val rawPath = exchange.requestURI.path + val cleanPath = URLDecoder.decode(rawPath.removePrefix("/"), "UTF-8") + val requestedFile = File(root, cleanPath) + + val file = + when { + requestedFile.exists() && !requestedFile.isDirectory -> requestedFile + else -> File(root, "index.html") // fallback + } + + val contentType = + Files.probeContentType(file.toPath()) ?: "application/octet-stream" + val bytes = file.readBytes() + exchange.responseHeaders.add("Content-Type", contentType) + exchange.sendResponseHeaders(200, bytes.size.toLong()) + exchange.responseBody.use { it.write(bytes) } + } + + server.createContext("/", handler) + server.executor = null + server.start() + + println("📘 Serving Dokka docs at http://localhost:${server.address.port}/") + println("Press Ctrl+C to stop.") + + // Keep the task alive + Thread.currentThread().join() + } +} diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 96f77274..a473ef54 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -21,6 +21,7 @@ plugins { id("com.powersync.plugins.sonatype") alias(libs.plugins.mokkery) alias(libs.plugins.kotlin.atomicfu) + id("org.jetbrains.dokka") } val binariesFolder = project.layout.buildDirectory.dir("binaries/desktop") @@ -315,8 +316,8 @@ android { } androidComponents.onVariants { - tasks.named("preBuild") { - dependsOn(moveJDBCJNIFiles) + tasks.named("preBuild") { + dependsOn(moveJDBCJNIFiles) } }