Compare commits

..

1 Commits

Author SHA1 Message Date
Simon Rüegg 7699f297d8 Allow formatting multiple files/directories
This makes it easier to work with tools which return a list of file to
format, e.g. to only handle files which have changed in a PR.
2025-09-19 13:16:16 +02:00
2066 changed files with 4635 additions and 143016 deletions
+6 -10
View File
@@ -14,11 +14,11 @@
// limitations under the License. // limitations under the License.
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// File gets rendered to .circleci/config.yml via git hook. // File gets rendered to .circleci/config.yml via git hook.
amends "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.circleci@1.2.1#/PklCI.pkl" amends "package://pkg.pkl-lang.org/pkl-project-commons/pkl.impl.circleci@1.2.0#/PklCI.pkl"
import "jobs/BuildNativeJob.pkl" import "jobs/BuildNativeJob.pkl"
import "jobs/DeployJob.pkl"
import "jobs/GradleCheckJob.pkl" import "jobs/GradleCheckJob.pkl"
import "jobs/DeployJob.pkl"
import "jobs/SimpleGradleJob.pkl" import "jobs/SimpleGradleJob.pkl"
local prbJobs: Listing<String> = gradleCheckJobs.keys.toListing() local prbJobs: Listing<String> = gradleCheckJobs.keys.toListing()
@@ -130,18 +130,15 @@ jobs {
[jobName] = job.job [jobName] = job.job
} }
["bench"] = new SimpleGradleJob { command = "bench:jmh" }.job ["bench"] = new SimpleGradleJob { command = "bench:jmh" }.job
["gradle-compatibility"] = ["gradle-compatibility"] = new SimpleGradleJob {
new SimpleGradleJob {
name = "gradle compatibility" name = "gradle compatibility"
command = command = #"""
#"""
:pkl-gradle:build \ :pkl-gradle:build \
:pkl-gradle:compatibilityTestReleases :pkl-gradle:compatibilityTestReleases
"""# """#
}.job }.job
["deploy-snapshot"] = new DeployJob { command = "publishToSonatype" }.job ["deploy-snapshot"] = new DeployJob { command = "publishToSonatype" }.job
["deploy-release"] = ["deploy-release"] = new DeployJob {
new DeployJob {
isRelease = true isRelease = true
command = "publishToSonatype closeAndReleaseSonatypeStagingRepository" command = "publishToSonatype closeAndReleaseSonatypeStagingRepository"
}.job }.job
@@ -153,8 +150,7 @@ jobs {
new AttachWorkspaceStep { at = "." } new AttachWorkspaceStep { at = "." }
new RunStep { new RunStep {
name = "Publish release on GitHub" name = "Publish release on GitHub"
command = command = #"""
#"""
# exclude build_artifacts.txt from publish # exclude build_artifacts.txt from publish
rm -f */build/executable/*.build_artifacts.txt rm -f */build/executable/*.build_artifacts.txt
find */build/executable/* -type d | xargs rm -rf find */build/executable/* -type d | xargs rm -rf
+16 -21
View File
@@ -34,9 +34,9 @@ jobs:
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /Users/distiller/jdk/Contents/Home JAVA_HOME: /Users/distiller/jdk/Contents/Home
resource_class: m4pro.large resource_class: m2pro.large
macos: macos:
xcode: 16.4.0 xcode: 15.3.0
pkl-cli-linux-amd64-release: pkl-cli-linux-amd64-release:
steps: steps:
- checkout - checkout
@@ -142,9 +142,9 @@ jobs:
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /Users/distiller/jdk/Contents/Home JAVA_HOME: /Users/distiller/jdk/Contents/Home
resource_class: m4pro.large resource_class: m2pro.large
macos: macos:
xcode: 16.4.0 xcode: 15.3.0
pkl-cli-linux-aarch64-release: pkl-cli-linux-aarch64-release:
steps: steps:
- checkout - checkout
@@ -347,9 +347,9 @@ jobs:
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /Users/distiller/jdk/Contents/Home JAVA_HOME: /Users/distiller/jdk/Contents/Home
resource_class: m4pro.large resource_class: macos.m1.large.gen1
macos: macos:
xcode: 16.4.0 xcode: 15.3.0
pkl-doc-linux-amd64-release: pkl-doc-linux-amd64-release:
steps: steps:
- checkout - checkout
@@ -455,9 +455,9 @@ jobs:
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /Users/distiller/jdk/Contents/Home JAVA_HOME: /Users/distiller/jdk/Contents/Home
resource_class: m4pro.large resource_class: macos.m1.large.gen1
macos: macos:
xcode: 16.4.0 xcode: 15.3.0
pkl-doc-linux-aarch64-release: pkl-doc-linux-aarch64-release:
steps: steps:
- checkout - checkout
@@ -660,9 +660,9 @@ jobs:
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /Users/distiller/jdk/Contents/Home JAVA_HOME: /Users/distiller/jdk/Contents/Home
resource_class: m4pro.large resource_class: m2pro.large
macos: macos:
xcode: 16.4.0 xcode: 15.3.0
pkl-cli-linux-amd64-snapshot: pkl-cli-linux-amd64-snapshot:
steps: steps:
- checkout - checkout
@@ -768,9 +768,9 @@ jobs:
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /Users/distiller/jdk/Contents/Home JAVA_HOME: /Users/distiller/jdk/Contents/Home
resource_class: m4pro.large resource_class: m2pro.large
macos: macos:
xcode: 16.4.0 xcode: 15.3.0
pkl-cli-linux-aarch64-snapshot: pkl-cli-linux-aarch64-snapshot:
steps: steps:
- checkout - checkout
@@ -973,9 +973,9 @@ jobs:
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /Users/distiller/jdk/Contents/Home JAVA_HOME: /Users/distiller/jdk/Contents/Home
resource_class: m4pro.large resource_class: macos.m1.large.gen1
macos: macos:
xcode: 16.4.0 xcode: 15.3.0
pkl-doc-linux-amd64-snapshot: pkl-doc-linux-amd64-snapshot:
steps: steps:
- checkout - checkout
@@ -1081,9 +1081,9 @@ jobs:
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
JAVA_HOME: /Users/distiller/jdk/Contents/Home JAVA_HOME: /Users/distiller/jdk/Contents/Home
resource_class: m4pro.large resource_class: macos.m1.large.gen1
macos: macos:
xcode: 16.4.0 xcode: 15.3.0
pkl-doc-linux-aarch64-snapshot: pkl-doc-linux-aarch64-snapshot:
steps: steps:
- checkout - checkout
@@ -1265,7 +1265,6 @@ jobs:
path: ~/test-results path: ~/test-results
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
resource_class: 2xlarge
docker: docker:
- image: cimg/openjdk:21.0 - image: cimg/openjdk:21.0
gradle-check-windows: gradle-check-windows:
@@ -1304,7 +1303,6 @@ jobs:
path: ~/test-results path: ~/test-results
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
resource_class: 2xlarge
docker: docker:
- image: cimg/openjdk:21.0 - image: cimg/openjdk:21.0
gradle-compatibility: gradle-compatibility:
@@ -1319,7 +1317,6 @@ jobs:
path: ~/test-results path: ~/test-results
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
resource_class: 2xlarge
docker: docker:
- image: cimg/openjdk:21.0 - image: cimg/openjdk:21.0
deploy-snapshot: deploy-snapshot:
@@ -1340,7 +1337,6 @@ jobs:
path: ~/test-results path: ~/test-results
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
resource_class: 2xlarge
docker: docker:
- image: cimg/openjdk:21.0 - image: cimg/openjdk:21.0
deploy-release: deploy-release:
@@ -1361,7 +1357,6 @@ jobs:
path: ~/test-results path: ~/test-results
environment: environment:
LANG: en_US.UTF-8 LANG: en_US.UTF-8
resource_class: 2xlarge
docker: docker:
- image: cimg/openjdk:21.0 - image: cimg/openjdk:21.0
github-release: github-release:
+10 -20
View File
@@ -16,7 +16,7 @@
/// Builds the native `pkl` CLI /// Builds the native `pkl` CLI
extends "GradleJob.pkl" extends "GradleJob.pkl"
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.7.0#/Config.pkl" import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
/// The architecture to use /// The architecture to use
arch: "amd64"|"aarch64" arch: "amd64"|"aarch64"
@@ -44,8 +44,7 @@ local setupLinuxEnvironment: Config.RunStep =
new { new {
name = "Set up environment" name = "Set up environment"
shell = "#!/bin/bash -exo pipefail" shell = "#!/bin/bash -exo pipefail"
command = command = new Listing {
new Listing {
#""" #"""
sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \ sed -ie '/\[ol8_codeready_builder\]/,/^$/s/enabled=0/enabled=1/g' /etc/yum.repos.d/oracle-linux-ol8.repo \
&& microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \ && microdnf -y install util-linux tree coreutils-single findutils curl tar gzip git zlib-devel gcc-c++ make openssl glibc-langpack-en libstdc++-static \
@@ -54,11 +53,7 @@ local setupLinuxEnvironment: Config.RunStep =
# install jdk # install jdk
curl -Lf \ curl -Lf \
https://github.com/adoptium/temurin\#(module.majorJdkVersion)-binaries/releases/download/\#(module https://github.com/adoptium/temurin\#(module.majorJdkVersion)-binaries/releases/download/\#(module.jdkGitHubReleaseName)/OpenJDK\#(module.majorJdkVersion)U-jdk_\#(if (arch == "amd64") "x64" else "aarch64")_linux_hotspot_\#(module.jdkVersionAlt).tar.gz -o /tmp/jdk.tar.gz
.jdkGitHubReleaseName)/OpenJDK\#(module.majorJdkVersion)U-jdk_\#(if (arch == "amd64")
"x64"
else
"aarch64")_linux_hotspot_\#(module.jdkVersionAlt).tar.gz -o /tmp/jdk.tar.gz
mkdir /jdk \ mkdir /jdk \
&& cd /jdk \ && cd /jdk \
@@ -104,18 +99,15 @@ local setupLinuxEnvironment: Config.RunStep =
}.join("\n\n") }.join("\n\n")
} }
local setupMacEnvironment: Config.RunStep = new { local setupMacEnvironment: Config.RunStep =
new {
name = "Set up environment" name = "Set up environment"
shell = "#!/bin/bash -exo pipefail" shell = "#!/bin/bash -exo pipefail"
command = command =
#""" #"""
# install jdk # install jdk
curl -Lf \ curl -Lf \
https://github.com/adoptium/temurin\#(module.majorJdkVersion)-binaries/releases/download/\#(module https://github.com/adoptium/temurin\#(module.majorJdkVersion)-binaries/releases/download/\#(module.jdkGitHubReleaseName)/OpenJDK\#(module.majorJdkVersion)U-jdk_\#(if (arch == "amd64") "x64" else "aarch64")_mac_hotspot_\#(module.jdkVersionAlt).tar.gz -o /tmp/jdk.tar.gz
.jdkGitHubReleaseName)/OpenJDK\#(module.majorJdkVersion)U-jdk_\#(if (arch == "amd64")
"x64"
else
"aarch64")_mac_hotspot_\#(module.jdkVersionAlt).tar.gz -o /tmp/jdk.tar.gz
mkdir $HOME/jdk \ mkdir $HOME/jdk \
&& cd $HOME/jdk \ && cd $HOME/jdk \
@@ -142,8 +134,7 @@ steps {
when (arch == "amd64") { when (arch == "amd64") {
new Config.RunStep { new Config.RunStep {
name = "Installing Rosetta 2" name = "Installing Rosetta 2"
command = command = """
"""
/usr/sbin/softwareupdate --install-rosetta --agree-to-license /usr/sbin/softwareupdate --install-rosetta --agree-to-license
""" """
} }
@@ -155,8 +146,7 @@ steps {
when (module.os == "windows") { when (module.os == "windows") {
shell = "bash.exe" shell = "bash.exe"
} }
command = command = #"""
#"""
export PATH=~/staticdeps/bin:$PATH export PATH=~/staticdeps/bin:$PATH
./gradlew \#(module.gradleArgs) \#(project):buildNative ./gradlew \#(module.gradleArgs) \#(project):buildNative
"""# """#
@@ -172,9 +162,9 @@ steps {
job { job {
when (os == "macOS") { when (os == "macOS") {
macos { macos {
xcode = "16.4.0" xcode = "15.3.0"
} }
resource_class = "m4pro.large" resource_class = "m2pro.large"
environment { environment {
["JAVA_HOME"] = "/Users/distiller/jdk/Contents/Home" ["JAVA_HOME"] = "/Users/distiller/jdk/Contents/Home"
} }
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
extends "GradleJob.pkl" extends "GradleJob.pkl"
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.7.0#/Config.pkl" import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
local self = this local self = this
+1 -1
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
extends "GradleJob.pkl" extends "GradleJob.pkl"
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.7.0#/Config.pkl" import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
steps { steps {
new Config.RunStep { new Config.RunStep {
+8 -11
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
abstract module GradleJob abstract module GradleJob
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.7.0#/Config.pkl" import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
import "package://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.uri@1.0.3#/URI.pkl" import "package://pkg.pkl-lang.org/pkl-pantry/pkl.experimental.uri@1.0.3#/URI.pkl"
/// Whether this is a release build or not. /// Whether this is a release build or not.
@@ -27,7 +27,9 @@ os: "macOS" | "linux" | "windows"
/// The version of Java to use. /// The version of Java to use.
javaVersion: "17.0"|"21.0" javaVersion: "17.0"|"21.0"
fixed javaVersionFull = if (javaVersion == "17.0") "17.0.9+9" else "21.0.5+11" fixed javaVersionFull =
if (javaVersion == "17.0") "17.0.9+9"
else "21.0.5+11"
fixed jdkVersionAlt = javaVersionFull.replaceLast("+", "_") fixed jdkVersionAlt = javaVersionFull.replaceLast("+", "_")
@@ -36,15 +38,12 @@ fixed majorJdkVersion = javaVersionFull.split(".").first
fixed jdkGitHubReleaseName = fixed jdkGitHubReleaseName =
let (ver = let (ver =
// 17.0.9+9 is missing some binaries (see https://github.com/adoptium/adoptium-support/issues/994) // 17.0.9+9 is missing some binaries (see https://github.com/adoptium/adoptium-support/issues/994)
if (javaVersionFull == "17.0.9+9" && os == "windows") if (javaVersionFull == "17.0.9+9" && os == "windows") "jdk-17.0.9+9.1"
"jdk-17.0.9+9.1" else "jdk-\(javaVersionFull)"
else
"jdk-\(javaVersionFull)"
) )
URI.encodeComponent(ver) URI.encodeComponent(ver)
fixed gradleArgs = fixed gradleArgs = new Listing {
new Listing {
"--info" "--info"
"--stacktrace" "--stacktrace"
"-DtestReportsDir=${HOME}/test-results" "-DtestReportsDir=${HOME}/test-results"
@@ -72,7 +71,6 @@ job: Config.Job = new {
image = "cimg/openjdk:\(javaVersion)" image = "cimg/openjdk:\(javaVersion)"
} }
} }
resource_class = "2xlarge"
} }
when (os == "windows") { when (os == "windows") {
machine { machine {
@@ -86,8 +84,7 @@ job: Config.Job = new {
new Config.RunStep { new Config.RunStep {
name = "Set up environment" name = "Set up environment"
shell = "bash.exe" shell = "bash.exe"
command = command = #"""
#"""
# install jdk # install jdk
curl -Lf \ curl -Lf \
https://github.com/adoptium/temurin\#(majorJdkVersion)-binaries/releases/download/\#(jdkGitHubReleaseName)/OpenJDK\#(majorJdkVersion)U-jdk_x64_windows_hotspot_\#(jdkVersionAlt).zip -o /tmp/jdk.zip https://github.com/adoptium/temurin\#(majorJdkVersion)-binaries/releases/download/\#(jdkGitHubReleaseName)/OpenJDK\#(majorJdkVersion)U-jdk_x64_windows_hotspot_\#(jdkVersionAlt).zip -o /tmp/jdk.zip
+2 -3
View File
@@ -15,7 +15,7 @@
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
extends "GradleJob.pkl" extends "GradleJob.pkl"
import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.7.0#/Config.pkl" import "package://pkg.pkl-lang.org/pkl-pantry/com.circleci.v2@1.5.0#/Config.pkl"
name: String = command name: String = command
@@ -28,8 +28,7 @@ javaVersion = "21.0"
steps { steps {
new Config.RunStep { new Config.RunStep {
name = module.name name = module.name
command = command = """
"""
./gradlew \(module.gradleArgs) \(module.command) ./gradlew \(module.gradleArgs) \(module.command)
""" """
} }
-1
View File
@@ -15,7 +15,6 @@ testgenerated/
!.idea/runConfigurations/ !.idea/runConfigurations/
!.idea/scopes/ !.idea/scopes/
!.idea/vcs.xml !.idea/vcs.xml
.intellijPlatform/
.vscode/ .vscode/
-11
View File
@@ -90,17 +90,6 @@ This will listen on port 5005.
Example: `./gradlew test -Djvmdebug=true` Example: `./gradlew test -Djvmdebug=true`
== Snippet Test Plugin
There is an IntelliJ plugin meant for development on the Pkl project itself.
This plugin provides a split pane window when viewing snippet tests such as LanguageSnippetTests and FormatterSnippetTests.
To install:
1. Run `./gradlew pkl-internal-intellij-plugin:buildPlugin`.
2. Within IntelliJ, run the action "Install Plugin From Disk...".
3. Select the zip file within `pkl-internal-intellij-plugin/build/distributions`.
== Resources == Resources
For automated build setup examples see our https://github.com/apple/pkl/blob/main/.circleci/[CircleCI] jobs like our https://github.com/apple/pkl/blob/main/.circleci/jobs/BuildNativeJob.pkl[BuildNativeJob.pkl], where we build Pkl automatically. For automated build setup examples see our https://github.com/apple/pkl/blob/main/.circleci/[CircleCI] jobs like our https://github.com/apple/pkl/blob/main/.circleci/jobs/BuildNativeJob.pkl[BuildNativeJob.pkl], where we build Pkl automatically.
+37 -52
View File
@@ -1,62 +1,47 @@
# This is a Gradle generated file for dependency locking. # This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised. # Manual edits can break the build and are not advised.
# This file is expected to be part of source control. # This file is expected to be part of source control.
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable net.bytebuddy:byte-buddy:1.15.11=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.sf.jopt-simple:jopt-simple:5.0.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath net.sf.jopt-simple:jopt-simple:5.0.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
org.apache.commons:commons-math3:3.6.1=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath org.apache.commons:commons-math3:3.6.1=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=jmhCompileClasspath,jmhImplementationDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=jmhCompileClasspath,jmhImplementationDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=jmh,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.compiler:compiler:24.1.2=graal
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.polyglot:polyglot:24.1.2=jmh,jmhRuntimeClasspath,truffle
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:collections:24.1.2=graal,jmh,jmhRuntimeClasspath,truffle
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:graal-sdk:24.1.2=jmh,jmhRuntimeClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.graalvm.sdk:nativeimage:24.1.2=jmh,jmhRuntimeClasspath,truffle
org.graalvm.compiler:compiler:25.0.0=graal org.graalvm.sdk:word:24.1.2=graal,jmh,jmhRuntimeClasspath,truffle
org.graalvm.polyglot:polyglot:25.0.0=jmh,jmhRuntimeClasspath,truffle org.graalvm.truffle:truffle-api:24.1.2=jmh,jmhRuntimeClasspath,truffle
org.graalvm.sdk:collections:25.0.0=graal,jmh,jmhRuntimeClasspath,truffle org.graalvm.truffle:truffle-compiler:24.1.2=graal
org.graalvm.sdk:graal-sdk:25.0.0=jmh,jmhRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.sdk:nativeimage:25.0.0=jmh,jmhRuntimeClasspath,truffle org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:word:25.0.0=graal,jmh,jmhRuntimeClasspath,truffle org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-api:25.0.0=jmh,jmhRuntimeClasspath,truffle org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-compiler:25.0.0=graal org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=jmh,jmhCompileClasspath,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-api:5.13.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-engine:5.13.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-params:5.13.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains:annotations:13.0=jmh,jmhCompileClasspath,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
org.junit:junit-bom:5.14.0=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=jmh,jmhRuntimeClasspath org.msgpack:msgpack-core:0.9.8=jmh,jmhRuntimeClasspath
org.openjdk.jmh:jmh-core:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath org.openjdk.jmh:jmh-core:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
org.openjdk.jmh:jmh-generator-asm:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath org.openjdk.jmh:jmh-generator-asm:1.37=jmh,jmhCompileClasspath,jmhImplementationDependenciesMetadata,jmhRuntimeClasspath
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -23,7 +23,6 @@ import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.util.TempFile; import org.openjdk.jmh.util.TempFile;
import org.openjdk.jmh.util.TempFileManager; import org.openjdk.jmh.util.TempFileManager;
import org.pkl.core.evaluatorSettings.TraceMode;
import org.pkl.core.http.HttpClient; import org.pkl.core.http.HttpClient;
import org.pkl.core.module.ModuleKeyFactories; import org.pkl.core.module.ModuleKeyFactories;
import org.pkl.core.repl.ReplRequest; import org.pkl.core.repl.ReplRequest;
@@ -52,8 +51,7 @@ public class ListSort {
null, null,
IoUtils.getCurrentWorkingDir(), IoUtils.getCurrentWorkingDir(),
StackFrameTransformers.defaultTransformer, StackFrameTransformers.defaultTransformer,
false, false);
TraceMode.COMPACT);
private static final List<Object> list = new ArrayList<>(100000); private static final List<Object> list = new ArrayList<>(100000);
static { static {
+3 -19
View File
@@ -84,13 +84,12 @@ open class BuildInfo(private val project: Project) {
} }
} }
val baseName: String by lazy { val baseName: String by lazy { "graalvm-jdk-${graalVmJdkVersion}_${osName}-${arch}_bin" }
"graalvm-community-jdk-${graalVmJdkVersion}_${osName}-${arch}_bin"
}
val downloadUrl: String by lazy { val downloadUrl: String by lazy {
val jdkMajor = graalVmJdkVersion.takeWhile { it != '.' }
val extension = if (os.isWindows) "zip" else "tar.gz" val extension = if (os.isWindows) "zip" else "tar.gz"
"https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${graalVmJdkVersion}/$baseName.$extension" "https://download.oracle.com/graalvm/$jdkMajor/archive/$baseName.$extension"
} }
val downloadFile: File by lazy { val downloadFile: File by lazy {
@@ -205,24 +204,9 @@ open class BuildInfo(private val project: Project) {
} }
} }
private val isArmWindows: Boolean
get() {
if (!os.isWindows) {
return false
}
// System.getProperty("os.arch") returns the architecture of the JVM, not the host OS.
val procArch = System.getenv("PROCESSOR_ARCHITECTURE")
return "ARM64".equals(procArch, ignoreCase = true)
}
// Assembles a collection of JDK versions which tests can be run against, considering ancillary // Assembles a collection of JDK versions which tests can be run against, considering ancillary
// parameters like `testAllJdks` and `testExperimentalJdks`. // parameters like `testAllJdks` and `testExperimentalJdks`.
val jdkTestRange: Collection<JavaLanguageVersion> by lazy { val jdkTestRange: Collection<JavaLanguageVersion> by lazy {
if (isArmWindows) {
// Java toolchains does not work on ARM windows: https://github.com/gradle/gradle/issues/29807
// prevent creating tasks to test different JDKs if developing on a Windows ARM machine.
return@lazy listOf()
}
JavaVersionRange.inclusive(jdkTestFloor, jdkTestCeiling).toList() JavaVersionRange.inclusive(jdkTestFloor, jdkTestCeiling).toList()
} }
+2 -2
View File
@@ -70,7 +70,7 @@ open class MergeSourcesJars : DefaultTask() {
val details = this val details = this
if (details.isDirectory) return@visit if (details.isDirectory) return@visit
var path = details.relativePath.parent!!.pathString var path = details.relativePath.parent.pathString
val relocatedPath = relocatedPaths.keys.find { path.startsWith(it) } val relocatedPath = relocatedPaths.keys.find { path.startsWith(it) }
if (relocatedPath != null) { if (relocatedPath != null) {
path = path.replace(relocatedPath, relocatedPaths.getValue(relocatedPath)) path = path.replace(relocatedPath, relocatedPaths.getValue(relocatedPath))
@@ -101,7 +101,7 @@ open class MergeSourcesJars : DefaultTask() {
project.zipTree(jar).visit { project.zipTree(jar).visit {
val details = this val details = this
if (details.isDirectory) return@visit // avoid adding empty dirs if (details.isDirectory) return@visit // avoid adding empty dirs
result.add(details.relativePath.parent!!.pathString) result.add(details.relativePath.parent.pathString)
} }
} }
return result return result
@@ -1,66 +0,0 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import com.diffplug.spotless.FormatterFunc
import com.diffplug.spotless.FormatterStep
import java.io.Serial
import java.io.Serializable
import java.net.URLClassLoader
import org.gradle.api.artifacts.Configuration
class PklFormatterStep(@Transient private val configuration: Configuration) : Serializable {
companion object {
@Serial private const val serialVersionUID: Long = 1L
}
fun create(): FormatterStep {
return FormatterStep.createLazy(
"pkl",
{ PklFormatterStep(configuration) },
{ PklFormatterFunc(configuration) },
)
}
}
class PklFormatterFunc(@Transient private val configuration: Configuration) :
FormatterFunc, Serializable {
companion object {
@Serial private const val serialVersionUID: Long = 1L
}
private val classLoader by lazy {
val urls = configuration.files.map { it.toURI().toURL() }
URLClassLoader(urls.toTypedArray())
}
private val formatterClass by lazy { classLoader.loadClass("org.pkl.formatter.Formatter") }
private val grammarVersionClass by lazy {
classLoader.loadClass("org.pkl.formatter.GrammarVersion")
}
private val grammarVersionLatestMethod by lazy { grammarVersionClass.getMethod("latest") }
private val formatMethod by lazy {
formatterClass.getMethod("format", String::class.java, grammarVersionClass)
}
private val formatterInstance by lazy { formatterClass.getConstructor().newInstance() }
override fun apply(input: String): String {
val latestGrammarVersion = grammarVersionLatestMethod(null)
return formatMethod(formatterInstance, input, latestGrammarVersion) as String
}
}
@@ -81,7 +81,7 @@ plugins.withType(MavenPublishPlugin::class).configureEach {
repositories { repositories {
maven { maven {
name = "projectLocal" // affects task names name = "projectLocal" // affects task names
url = rootDir.resolve("build/m2").toURI() url = uri("file:///$rootDir/build/m2")
} }
} }
// use resolved/locked (e.g., `1.15`) // use resolved/locked (e.g., `1.15`)
@@ -15,6 +15,7 @@
*/ */
import org.gradle.api.GradleException import org.gradle.api.GradleException
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.component.AdhocComponentWithVariants
import org.gradle.api.publish.maven.MavenPublication import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.tasks.bundling.Jar import org.gradle.api.tasks.bundling.Jar
import org.gradle.api.tasks.testing.Test import org.gradle.api.tasks.testing.Test
@@ -23,7 +24,7 @@ import org.gradle.kotlin.dsl.*
plugins { plugins {
`java-library` `java-library`
`maven-publish` `maven-publish`
id("com.gradleup.shadow") id("com.github.johnrengelman.shadow")
} }
// make fat Jar available to other subprojects // make fat Jar available to other subprojects
@@ -59,7 +60,6 @@ val relocations =
// pkl-doc dependencies // pkl-doc dependencies
"org.commonmark." to "org.pkl.thirdparty.commonmark.", "org.commonmark." to "org.pkl.thirdparty.commonmark.",
"org.jetbrains." to "org.pkl.thirdparty.jetbrains.", "org.jetbrains." to "org.pkl.thirdparty.jetbrains.",
"_COROUTINE." to "org.pkl.thirdparty.kotlinx._COROUTINE.",
// pkl-config-java dependencies // pkl-config-java dependencies
"io.leangen.geantyref." to "org.pkl.thirdparty.geantyref.", "io.leangen.geantyref." to "org.pkl.thirdparty.geantyref.",
@@ -93,16 +93,12 @@ tasks.shadowJar {
configurations = listOf(project.configurations.runtimeClasspath.get()) configurations = listOf(project.configurations.runtimeClasspath.get())
addMultiReleaseAttribute = true
// not required at runtime / fat JARs can't be used in native-image builds anyway // not required at runtime / fat JARs can't be used in native-image builds anyway
exclude("org/pkl/cli/svm/**") exclude("org/pkl/cli/svm/**")
exclude("META-INF/maven/**") exclude("META-INF/maven/**")
exclude("META-INF/upgrade/**") exclude("META-INF/upgrade/**")
exclude("DebugProbesKt.bin")
val info = project.extensions.getByType<BuildInfo>() val info = project.extensions.getByType<BuildInfo>()
val minimumJvmTarget = JavaVersion.toVersion(info.jvmTarget) val minimumJvmTarget = JavaVersion.toVersion(info.jvmTarget)
@@ -130,7 +126,10 @@ tasks.shadowJar {
mergeServiceFiles() mergeServiceFiles()
} }
shadow { addShadowVariantIntoJavaComponent = false } // workaround for https://github.com/johnrengelman/shadow/issues/651
components.withType(AdhocComponentWithVariants::class.java).forEach { c ->
c.withVariantsFromConfiguration(project.configurations.shadowRuntimeElements.get()) { skip() }
}
val testFatJar by val testFatJar by
tasks.registering(Test::class) { tasks.registering(Test::class) {
@@ -208,7 +207,7 @@ artifacts { add("fatJar", tasks.shadowJar) }
publishing { publishing {
publications { publications {
named<MavenPublication>("fatJar") { named<MavenPublication>("fatJar") {
from(components["shadow"]) project.shadow.component(this)
// sources Jar is fat // sources Jar is fat
artifact(fatSourcesJar.flatMap { it.outputJar.asFile }) { classifier = "sources" } artifact(fatSourcesJar.flatMap { it.outputJar.asFile }) { classifier = "sources" }
@@ -20,7 +20,7 @@ import org.gradle.kotlin.dsl.support.serviceOf
plugins { plugins {
id("pklJavaLibrary") id("pklJavaLibrary")
// id("pklPublishLibrary") // id("pklPublishLibrary")
id("com.gradleup.shadow") id("com.github.johnrengelman.shadow")
} }
val executableSpec = project.extensions.create("executable", ExecutableSpec::class.java) val executableSpec = project.extensions.create("executable", ExecutableSpec::class.java)
@@ -15,7 +15,6 @@
*/ */
import org.gradle.accessors.dm.LibrariesForLibs import org.gradle.accessors.dm.LibrariesForLibs
import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
plugins { plugins {
@@ -44,7 +43,6 @@ tasks.compileKotlin {
tasks.withType<KotlinJvmCompile>().configureEach { tasks.withType<KotlinJvmCompile>().configureEach {
compilerOptions { compilerOptions {
languageVersion = KotlinVersion.KOTLIN_2_1
jvmTarget = JvmTarget.fromTarget(buildInfo.jvmTarget.toString()) jvmTarget = JvmTarget.fromTarget(buildInfo.jvmTarget.toString())
freeCompilerArgs.addAll("-Xjdk-release=${buildInfo.jvmTarget}") freeCompilerArgs.addAll("-Xjdk-release=${buildInfo.jvmTarget}")
} }
@@ -15,14 +15,13 @@
*/ */
import kotlin.io.path.createDirectories import kotlin.io.path.createDirectories
import kotlin.io.path.writeText import kotlin.io.path.writeText
import org.gradle.accessors.dm.LibrariesForLibs
plugins { plugins {
id("pklGraalVm") id("pklGraalVm")
id("pklJavaLibrary") id("pklJavaLibrary")
id("pklNativeLifecycle") id("pklNativeLifecycle")
id("pklPublishLibrary") id("pklPublishLibrary")
id("com.gradleup.shadow") id("com.github.johnrengelman.shadow")
} }
// assumes that `pklJavaExecutable` is also applied // assumes that `pklJavaExecutable` is also applied
@@ -36,19 +35,6 @@ val stagedLinuxAarch64Executable: Configuration by configurations.creating
val stagedAlpineLinuxAmd64Executable: Configuration by configurations.creating val stagedAlpineLinuxAmd64Executable: Configuration by configurations.creating
val stagedWindowsAmd64Executable: Configuration by configurations.creating val stagedWindowsAmd64Executable: Configuration by configurations.creating
val nativeImageClasspath by
configurations.creating {
extendsFrom(configurations.runtimeClasspath.get())
// Ensure native-image version uses GraalVM C SDKs instead of Java FFI or JNA
// (comes from artifact `mordant-jvm-graal-ffi`).
exclude("com.github.ajalt.mordant", "mordant-jvm-ffm")
exclude("com.github.ajalt.mordant", "mordant-jvm-ffm-jvm")
exclude("com.github.ajalt.mordant", "mordant-jvm-jna")
exclude("com.github.ajalt.mordant", "mordant-jvm-jna-jvm")
}
val libs = the<LibrariesForLibs>()
dependencies { dependencies {
fun executableFile(suffix: String) = fun executableFile(suffix: String) =
files( files(
@@ -56,9 +42,6 @@ dependencies {
dir.file(executableSpec.name.map { "$it-$suffix" }) dir.file(executableSpec.name.map { "$it-$suffix" })
} }
) )
nativeImageClasspath(libs.truffleRuntime)
nativeImageClasspath(libs.graalSdk)
stagedMacAarch64Executable(executableFile("macos-aarch64")) stagedMacAarch64Executable(executableFile("macos-aarch64"))
stagedMacAmd64Executable(executableFile("macos-amd64")) stagedMacAmd64Executable(executableFile("macos-amd64"))
stagedLinuxAmd64Executable(executableFile("linux-amd64")) stagedLinuxAmd64Executable(executableFile("linux-amd64"))
@@ -82,7 +65,7 @@ private fun NativeImageBuild.setClasspath() {
classpath.from( classpath.from(
project(":pkl-commons-cli").extensions.getByType(SourceSetContainer::class)["svm"].output project(":pkl-commons-cli").extensions.getByType(SourceSetContainer::class)["svm"].output
) )
classpath.from(nativeImageClasspath) classpath.from(configurations.runtimeClasspath)
} }
val macExecutableAmd64 by val macExecutableAmd64 by
@@ -1,36 +0,0 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
plugins { id("com.diffplug.spotless") }
val pklFormatter by configurations.creating
dependencies { pklFormatter(rootProject.project("pkl-formatter")) }
spotless {
format("pkl") {
target("**/*.pkl")
addStep(PklFormatterStep(pklFormatter).create())
licenseHeaderFile(
rootProject.file("buildSrc/src/main/resources/license-header.line-comment.txt"),
"/// ",
)
}
}
for (taskName in
listOf("spotlessPkl", "spotlessPklApply", "spotlessPklCheck", "spotlessPklDiagnose")) {
tasks.named(taskName) { dependsOn(":pkl-formatter:assemble") }
}
+2 -2
View File
@@ -1,6 +1,6 @@
name: main name: main
title: Main Project title: Main Project
version: 0.30.0 version: 0.30.0-dev
prerelease: false prerelease: true
nav: nav:
- nav.adoc - nav.adoc
+35 -50
View File
@@ -1,59 +1,44 @@
# This is a Gradle generated file for dependency locking. # This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised. # Manual edits can break the build and are not advised.
# This file is expected to be part of source control. # This file is expected to be part of source control.
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.polyglot:polyglot:24.1.2=testRuntimeClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:collections:24.1.2=testRuntimeClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:graal-sdk:24.1.2=testRuntimeClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:nativeimage:24.1.2=testRuntimeClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.graalvm.sdk:word:24.1.2=testRuntimeClasspath
org.graalvm.polyglot:polyglot:25.0.0=testRuntimeClasspath org.graalvm.truffle:truffle-api:24.1.2=testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.sdk:graal-sdk:25.0.0=testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:nativeimage:25.0.0=testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:word:25.0.0=testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-api:25.0.0=testRuntimeClasspath org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testRuntimeClasspath org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-engine:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=testRuntimeClasspath org.msgpack:msgpack-core:0.9.8=testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=testRuntimeClasspath org.organicdesign:Paguro:3.10.3=testRuntimeClasspath
@@ -6,7 +6,7 @@
:pkl-version-no-suffix: 0.30.0 :pkl-version-no-suffix: 0.30.0
// tells whether pkl version corresponding to current git commit // tells whether pkl version corresponding to current git commit
// is a release version (:is-release-version: '') or dev version (:!is-release-version:) // is a release version (:is-release-version: '') or dev version (:!is-release-version:)
:is-release-version: '' :!is-release-version:
// the remaining attributes do not need to be updated regularly // the remaining attributes do not need to be updated regularly
@@ -74,9 +74,6 @@ endif::[]
:uri-stdlib-mathModule: {uri-pkl-stdlib-docs}/math :uri-stdlib-mathModule: {uri-pkl-stdlib-docs}/math
:uri-stdlib-xmlModule: {uri-pkl-stdlib-docs}/xml :uri-stdlib-xmlModule: {uri-pkl-stdlib-docs}/xml
:uri-stdlib-protobufModule: {uri-pkl-stdlib-docs}/protobuf :uri-stdlib-protobufModule: {uri-pkl-stdlib-docs}/protobuf
:uri-stdlib-pklbinaryModule: {uri-pkl-stdlib-docs}/pklbinary
:uri-stdlib-yamlModule: {uri-pkl-stdlib-docs}/yaml
:uri-stdlib-YamlParser: {uri-stdlib-yamlModule}/Parser
:uri-stdlib-evaluatorSettingsModule: {uri-pkl-stdlib-docs}/EvaluatorSettings :uri-stdlib-evaluatorSettingsModule: {uri-pkl-stdlib-docs}/EvaluatorSettings
:uri-stdlib-evaluatorSettingsHttpClass: {uri-stdlib-evaluatorSettingsModule}/Http :uri-stdlib-evaluatorSettingsHttpClass: {uri-stdlib-evaluatorSettingsModule}/Http
:uri-stdlib-Boolean: {uri-stdlib-baseModule}/Boolean :uri-stdlib-Boolean: {uri-stdlib-baseModule}/Boolean
@@ -133,10 +130,7 @@ endif::[]
:uri-stdlib-Class: {uri-stdlib-baseModule}/Class :uri-stdlib-Class: {uri-stdlib-baseModule}/Class
:uri-stdlib-TypeAlias: {uri-stdlib-baseModule}/TypeAlias :uri-stdlib-TypeAlias: {uri-stdlib-baseModule}/TypeAlias
:uri-stdlib-Deprecated: {uri-stdlib-baseModule}/Deprecated :uri-stdlib-Deprecated: {uri-stdlib-baseModule}/Deprecated
:uri-stdlib-BaseValueRenderer: {uri-stdlib-baseModule}/BaseValueRenderer
:uri-stdlib-ValueRenderer: {uri-stdlib-baseModule}/ValueRenderer :uri-stdlib-ValueRenderer: {uri-stdlib-baseModule}/ValueRenderer
:uri-stdlib-BytesRenderer: {uri-stdlib-baseModule}/BytesRenderer
:uri-stdlib-YamlRenderer: {uri-stdlib-baseModule}/YamlRenderer
:uri-stdlib-PcfRenderer-converters: {uri-stdlib-baseModule}/PcfRenderer#converters :uri-stdlib-PcfRenderer-converters: {uri-stdlib-baseModule}/PcfRenderer#converters
:uri-stdlib-Function: {uri-stdlib-baseModule}/Function :uri-stdlib-Function: {uri-stdlib-baseModule}/Function
:uri-stdlib-Function0: {uri-stdlib-baseModule}/Function0 :uri-stdlib-Function0: {uri-stdlib-baseModule}/Function0
@@ -1,15 +1,9 @@
= `pkl-binary` Encoding = Pkl Binary Encoding
include::ROOT:partial$component-attributes.adoc[] include::ROOT:partial$component-attributes.adoc[]
include::partial$component-attributes.adoc[] include::partial$component-attributes.adoc[]
:uri-pkl-core-Evaluator: {uri-pkl-core-main-sources}/Evaluator.java Pkl values can be encoded into a binary format.
This format is used for Pkl's non-JVM language bindings, for example, for its Go and Swift bindings.
Pkl values can be encoded into a binary format called "pkl-binary".
This format is a lossless serialization of the underlying Pkl values.
Pkl code can be rendered into this format using the {uri-stdlib-pklbinaryModule}[pkl:pklbinary] standard library module.
Alternatively, many language bindings also provide methods to evaluate into `pkl-binary`, such as the `evaluateExpressionPklBinary` method in link:{uri-pkl-core-Evaluator}[org.pkl.core.Evaluator].
The binary format is uses link:{uri-messagepack}[MessagePack] encoding. The binary format is uses link:{uri-messagepack}[MessagePack] encoding.
@@ -42,9 +36,7 @@ For example, value `8` gets encoded as MessagePack `int8` format.
== Non-primitives == Non-primitives
All non-primitive values are encoded as MessagePack arrays. All non-primitive values are encoded as MessagePack arrays.
The first slot of the array designates the value's type. The first slot of the array designates the value's type. The remaining slots have fixed meanings depending on the type.
The remaining slots have fixed meanings depending on the type.
Additional slots may be added to types in future Pkl releases. Decoders *must* be designed to defensively discard values beyond the number of known slots for a type or provide meaningful error messages.
The array's length is the number of slots that are filled. For example, xref:{uri-stdlib-List}[List] is encoded as an MessagePack array with two elements. The array's length is the number of slots that are filled. For example, xref:{uri-stdlib-List}[List] is encoded as an MessagePack array with two elements.
@@ -54,16 +46,16 @@ The array's length is the number of slots that are filled. For example, xref:{ur
||code |type |description |type |description |type |description ||code |type |description |type |description |type |description
|link:{uri-stdlib-Typed}[Typed], link:{uri-stdlib-Dynamic}[Dynamic] |link:{uri-stdlib-Typed}[Typed], link:{uri-stdlib-Dynamic}[Dynamic]
|`0x01` |`0x1`
|link:{uri-messagepack-str}[str] |link:{uri-messagepack-str}[str]
|<<type-name-encoding,Class name>> |Fully qualified class name
|link:{uri-messagepack-str}[str] |link:{uri-messagepack-str}[str]
|Enclosing module URI |Enclosing module URI
|link:{uri-messagepack-array}[array] |link:{uri-messagepack-array}[array]
|Array of <<object-members,object members>> |Array of <<object-members,object members>>
|link:{uri-stdlib-Map}[Map] |link:{uri-stdlib-Map}[Map]
|`0x02` |`0x2`
|link:{uri-messagepack-map}[map] |link:{uri-messagepack-map}[map]
|Map of `<value>` to `<value>` |Map of `<value>` to `<value>`
| |
@@ -72,7 +64,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-Mapping}[Mapping] |link:{uri-stdlib-Mapping}[Mapping]
|`0x03` |`0x3`
|link:{uri-messagepack-map}[map] |link:{uri-messagepack-map}[map]
|Map of `<value>` to `<value>` |Map of `<value>` to `<value>`
| |
@@ -81,7 +73,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-List}[List] |link:{uri-stdlib-List}[List]
|`0x04` |`0x4`
|link:{uri-messagepack-array}[array] |link:{uri-messagepack-array}[array]
|Array of `<value>` |Array of `<value>`
| |
@@ -90,7 +82,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-Listing}[Listing] |link:{uri-stdlib-Listing}[Listing]
|`0x05` |`0x5`
|link:{uri-messagepack-array}[array] |link:{uri-messagepack-array}[array]
|Array of `<value>` |Array of `<value>`
| |
@@ -99,7 +91,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-Set}[Set] |link:{uri-stdlib-Set}[Set]
|`0x06` |`0x6`
|link:{uri-messagepack-array}[array] |link:{uri-messagepack-array}[array]
|Array of `<value>` |Array of `<value>`
| |
@@ -108,7 +100,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-Duration}[Duration] |link:{uri-stdlib-Duration}[Duration]
|`0x07` |`0x7`
|{uri-messagepack-float}[float64] |{uri-messagepack-float}[float64]
|Duration value |Duration value
|link:{uri-messagepack-str}[str] |link:{uri-messagepack-str}[str]
@@ -117,7 +109,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-DataSize}[DataSize] |link:{uri-stdlib-DataSize}[DataSize]
|`0x08` |`0x8`
|link:{uri-messagepack-float}[float64] |link:{uri-messagepack-float}[float64]
|Value (float64) |Value (float64)
|link:{uri-messagepack-str}[str] |link:{uri-messagepack-str}[str]
@@ -126,7 +118,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-Pair}[Pair] |link:{uri-stdlib-Pair}[Pair]
|`0x09` |`0x9`
|`<value>` |`<value>`
|First value |First value
|`<value>` |`<value>`
@@ -135,7 +127,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-IntSeq}[IntSeq] |link:{uri-stdlib-IntSeq}[IntSeq]
|`0x0A` |`0xA`
|link:{uri-messagepack-int}[int] |link:{uri-messagepack-int}[int]
|Start |Start
|link:{uri-messagepack-int}[int] |link:{uri-messagepack-int}[int]
@@ -144,7 +136,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
|Step |Step
|link:{uri-stdlib-Regex}[Regex] |link:{uri-stdlib-Regex}[Regex]
|`0x0B` |`0xB`
|link:{uri-messagepack-str}[str] |link:{uri-messagepack-str}[str]
|Regex string representation |Regex string representation
| |
@@ -153,25 +145,25 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-Class}[Class] |link:{uri-stdlib-Class}[Class]
|`0x0C` |`0xC`
|link:{uri-messagepack-str}[str] |
|<<type-name-encoding,Class name>> |
|link:{uri-messagepack-str}[str] |
|Module URI |
| |
| |
|link:{uri-stdlib-TypeAlias}[TypeAlias] |link:{uri-stdlib-TypeAlias}[TypeAlias]
|`0x0D` |`0xD`
|link:{uri-messagepack-str}[str] |
|<<type-name-encoding,TypeAlias name>> |
|link:{uri-messagepack-str}[str] |
|Module URI |
| |
| |
|link:{uri-stdlib-Function}[Function] |link:{uri-stdlib-Function}[Function]
|`0x0E` |`0xE`
| |
| |
| |
@@ -180,7 +172,7 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|link:{uri-stdlib-Bytes}[Bytes] |link:{uri-stdlib-Bytes}[Bytes]
|`0x0F` |`0xF`
|link:{uri-messagepack-bin}[bin] |link:{uri-messagepack-bin}[bin]
|Binary contents |Binary contents
| |
@@ -189,19 +181,6 @@ The array's length is the number of slots that are filled. For example, xref:{ur
| |
|=== |===
[[type-name-encoding]]
[NOTE]
====
Type names have specific encoding rules:
* When the module URI is `pkl:base`:
** If the type name is `ModuleClass`, this type represents the module class of `pkl:base`.
** Otherwise, the type name corresponds to a type in `pkl:base`.
* For all other module URIs:
** When the type name contains `\#`, the string after the `#` character corresponds to a type in that module. The string before the `#` is the name of the module.
** Otherwise, the type name is the name of the module and represents the class of the module.
====
[[object-members]] [[object-members]]
== Object Members == Object Members
@@ -233,3 +212,4 @@ Like non-primitive values, object members are encoded as MessagePack arrays, whe
|`<value>` |`<value>`
|element value |element value
|=== |===
@@ -1423,7 +1423,7 @@ The recipe for transforming a listing is:
. Transform the list using ``List``'s link:{uri-stdlib-List}[rich API]. . Transform the list using ``List``'s link:{uri-stdlib-List}[rich API].
. If necessary, convert the list back to a listing. . If necessary, convert the list back to a listing.
TIP: Often, transformations happen in a link:{uri-stdlib-PcfRenderer-converters}[converter] of a link:{uri-stdlib-BaseValueRenderer}[value renderer]. TIP: Often, transformations happen in a link:{uri-stdlib-PcfRenderer-converters}[converter] of a link:{uri-stdlib-ValueRenderer}[value renderer].
Because most value renderers treat lists the same as listings, it is often not necessary to convert back to a listing. Because most value renderers treat lists the same as listings, it is often not necessary to convert back to a listing.
Equipped with this knowledge, let's try to accomplish our objective: Equipped with this knowledge, let's try to accomplish our objective:
@@ -1803,7 +1803,7 @@ The recipe for transforming a mapping is:
. Transform the map using ``Map``'s link:{uri-stdlib-Map}[rich API]. . Transform the map using ``Map``'s link:{uri-stdlib-Map}[rich API].
. If necessary, convert the map back to a mapping. . If necessary, convert the map back to a mapping.
TIP: Often, transformations happen in a link:{uri-stdlib-PcfRenderer-converters}[converter] of a link:{uri-stdlib-BaseValueRenderer}[value renderer]. TIP: Often, transformations happen in a link:{uri-stdlib-PcfRenderer-converters}[converter] of a link:{uri-stdlib-ValueRenderer}[value renderer].
As most value renderers treat maps the same as mappings, it is often not necessary to convert back to a mapping. As most value renderers treat maps the same as mappings, it is often not necessary to convert back to a mapping.
Equipped with this knowledge, let's try to accomplish our objective: Equipped with this knowledge, let's try to accomplish our objective:
+14 -31
View File
@@ -733,48 +733,31 @@ pkl shell-completion bash
pkl shell-completion zsh pkl shell-completion zsh
---- ----
[[command-format]] [[command-format-check]]
=== `pkl format` === `pkl format check`
*Synopsis*: `pkl format <options> [<paths>]` *Synopsis*: `pkl format check <file-or-dir-path>`
This command formats or checks formatting of Pkl files. + This command checks for format violations on the given file or directory and print their names to stdout. +
Exit codes: It returns a non-zero status code in case violations are found.
* 0: No violations found.
* 1: An unexpected error happened (ex.: IO error)
* 11: Violations were found.
If the path is a directory, recursively looks for files with a `.pkl` extension, or files named `PklProject`. If the path is a directory, recursively looks for files with a `.pkl` extension, or files named `PklProject`.
By default, the input files are formatted, and written to standard out. [[command-format-apply]]
=== `pkl format apply`
*Synopsis*: `pkl format apply [<options>] <file-or-dir-path>`
This command formats the given files overwriting them.
If the path is a directory, recursively looks for files with a `.pkl` extension, or files named `PklProject`.
==== Options ==== Options
.--grammar-version
[%collapsible]
====
Default: `2` (latest version) +
Select the grammar compatibility version for the formatter.
New versions are created for each backward incompatible grammar change.
====
.-s, --silent .-s, --silent
[%collapsible] [%collapsible]
==== ====
Skip writing to standard out. Mutually exclusive with `--diff-name-only`. Do not write the name of wrongly formatted files to stdout.
====
.-w, --write
[%collapsible]
====
Format files in place, overwriting them. Implies `--diff-name-only`.
====
.--diff-name-only
[%collapsible]
====
Write the path of files with formatting violations to stdout.
==== ====
[[common-options]] [[common-options]]
@@ -163,11 +163,3 @@ The left-hand side describes the source prefix, and the right-hand describes the
This option is commonly used to enable package mirroring. This option is commonly used to enable package mirroring.
The above example will rewrite URL `\https://pkg.pkl-lang.org/pkl-k8s/k8s@1.0.0` to `\https://my.internal.mirror/pkl-k8s/k8s@1.0.0`. The above example will rewrite URL `\https://pkg.pkl-lang.org/pkl-k8s/k8s@1.0.0` to `\https://my.internal.mirror/pkl-k8s/k8s@1.0.0`.
==== ====
.--trace-mode
[%collapsible]
====
Default: `compact` +
Specifies how `trace()` output is formatted.
Possible options are `compact` and `pretty`.
====
@@ -342,7 +342,6 @@ In Pkl 0.29, it is an error to load a module or resource with an opaque `file:`
NOTE: To import or read a relative path, omit `file:` from the import string. For example, `import("foo/bar.txt")` instead of `import("file:foo/bar.txt")`. NOTE: To import or read a relative path, omit `file:` from the import string. For example, `import("foo/bar.txt")` instead of `import("file:foo/bar.txt")`.
[[new-base-module-names]]
=== New base module names: `Bytes` and `Charset` === New base module names: `Bytes` and `Charset`
Two new names are introduced to the base module: `Bytes` and `Charset`. Two new names are introduced to the base module: `Bytes` and `Charset`.
+12 -390
View File
@@ -1,429 +1,51 @@
= Pkl 0.30 Release Notes = Pkl 0.30 Release Notes
:version: 0.30 :version: 0.30
:version-minor: 0.30.0 :version-minor: 0.30.0
:release-date: November 3rd, 2025 :release-date: TBD
:yaml-binary-scalar: https://yaml.org/type/binary.html link:ROOT:partial$component-attributes.adoc[role=include]
include::ROOT:partial$component-attributes.adoc[]
Pkl {version} was released on {release-date}. + Pkl {version} was released on {release-date}. +
[.small]#The latest bugfix release is {version-minor}. (xref:changelog.adoc[All Versions])# [.small]#The latest bugfix release is {version-minor}. (xref:changelog.adoc[All Versions])#
This release introduces a code formatter, and an in-language API for producing `pkl-binary` output. The next release (0.XX) is scheduled for ???..
The next release (0.31) is scheduled for February 2026.
To see what's coming in the future, follow the {uri-pkl-roadmap}[Pkl Roadmap]. To see what's coming in the future, follow the {uri-pkl-roadmap}[Pkl Roadmap].
Please send feedback and questions to https://github.com/apple/pkl/discussions[GitHub Discussions], or submit an issue on https://github.com/apple/pkl/issues/new[GitHub]. + Please send feedback and questions to https://github.com/apple/pkl/discussions[GitHub Discussions], or submit an issue on https://github.com/apple/pkl/issues/new[Github]. +
[small]#Pkl is hosted on https://github.com/apple/pkl[GitHub]. [small]#Pkl is hosted on https://github.com/apple/pkl[GitHub].
To get started, follow xref:pkl-cli:index.adoc#installation[Installation].# To get started, follow xref:pkl-cli:index.adoc#installation[Installation].#
== Highlights [small]#💖# == Highlights [small]#💖#
[[formatter]] News you don't want to miss.
=== Formatter
Pkl now has a formatter (https://github.com/apple/pkl/pull/1107[#1107], https://github.com/apple/pkl/pull/1208[#1208], https://github.com/apple/pkl/pull/1211[#1211], https://github.com/apple/pkl/pull/1215[#1215], https://github.com/apple/pkl/pull/1217[#1217], https://github.com/apple/pkl/pull/1235[#1235], https://github.com/apple/pkl/pull/1246[#1246], https://github.com/apple/pkl/pull/1247[#1247], https://github.com/apple/pkl/pull/1252[#1252], https://github.com/apple/pkl/pull/1256[#1256], https://github.com/apple/pkl/pull/1259[#1259], https://github.com/apple/pkl/pull/1260[#1260], https://github.com/apple/pkl/pull/1263[#1263], https://github.com/apple/pkl/pull/1265[#1265], https://github.com/apple/pkl/pull/1266[#1266], https://github.com/apple/pkl/pull/1267[#1267], https://github.com/apple/pkl/pull/1268[#1268], https://github.com/apple/pkl/pull/1270[#1270], https://github.com/apple/pkl/pull/1271[#1271], https://github.com/apple/pkl/pull/1272[#1272], https://github.com/apple/pkl/pull/1273[#1273], https://github.com/apple/pkl/pull/1274[#1274], https://github.com/apple/pkl/pull/1280[#1280], https://github.com/apple/pkl/pull/1283[#1283], https://github.com/apple/pkl/pull/1289[#1289], https://github.com/apple/pkl/pull/1290[#1290])! === XXX
Pkl's formatter is _canonical_, which means that it has a single set of formatting rules, with (almost) no configuration options.
The goal is to eliminate the possibility of formatting debates, which can lead to churn and bike-shedding.
The formatter is available both as a CLI subcommand and as a Java API.
To learn more about this feature, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0014-canonical-formatter.adoc[SPICE-0014].
==== Using the CLI
The Pkl formatter is available under the `pkl format` subcommand. By default, the command will concatenate and write all formatted content to standard out.
To simply check for formatting violations, getting formatted output on stdout is likely too verbose.
The `--silent` flag can be used to omit any output, and the <<formatting-exit-codes,exit code>> can be used to determine
if there are formatting violations.
[source,shell]
----
pkl format --silent . || echo "Formatting violations were found!"
----
Alternatively, the `--names` flag will print out the names of any files that have formatting violations.
[source,shell]
----
pkl format --diff-name-only .
----
To apply formatting, use the `--write` (`-w`) flag.
This also implies the `--diff-name-only` flag.
[source,shell]
----
pkl format -w .
----
[[formatting-exit-codes]]
==== Exit codes
The formatter will exit with the following codes:
|===
|Code |Description
|0
|No formatting violations were found.
|1
|Non-formatting errors occurred.
|11
|Formatting violations were found.
|===
==== Grammar version
The formatter can be configured with a _grammar version_, which maps to a Pkl version range.
|===
|Grammar version |Pkl versions
|1
|0.25 - 0.29
|2
|0.30+
|===
Grammar version 2 uses the newly introduced <<trailing-commas,trailing commas>> feature, and therefore is not compatible with existing versions of Pkl.
To ensure compatibility, use the `--grammar-version 1` CLI flag.
[[binary-renderer-parser]]
=== `pkl-binary` in-language Renderer
A new in-language API has been added to render values into xref:bindings-specification:binary-encoding.adoc[pkl-binary encoding] (https://github.com/apple/pkl/pull/1203[#1203],
https://github.com/apple/pkl/pull/1250[#1250], https://github.com/apple/pkl/pull/1275[#1275]).
It's sometimes useful to separate Pkl evaluation from data consumption when used as application or service configuration.
This is possible with the `pkl-binary` format, which is a lossless encoding of Pkl data.
In this approach, Pkl is first rendered into `pkl-binary` during build time, and then deserialized into classes and structs at startup time.
This means that the Pkl evaluator does not need to be shipped with the application, which improves code portability and eliminates runtime overhead.
However, currently, the API for getting this binary format is somewhat cumbersome.
Only the host languages have access to this API (for example, https://swiftpackageindex.com/apple/pkl-swift/0.6.0/documentation/pklswift/evaluator/evaluateexpressionraw(source:expression:)[`evaluateExpressionRaw`] in pkl-swift).
This means that one-off logic must be written to render this format in the host language.
In 0.30, this renderer is added as an in-language API, through the {uri-stdlib-pklbinaryModule}[`pkl:pklbinary`] standard library module.
Additionally, it is available through CLI flag `--format pkl-binary`.
For example:
// this is parsed instead of tested because DocSnippetTests only handles textual output (via ReplServer)
[source%parsed,pkl]
----
import "pkl:pklbinary"
output {
renderer = new pklbinary.Renderer {}
}
----
To learn more about this feature, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0021-binary-renderer-and-parser.adoc[SPICE-0021].
==== New renderer type: `BytesRenderer`
To enable the `pkl-binary` renderer feature, Pkl now supports renderers that produce `Bytes` output (https://github.com/apple/pkl/pull/1203[#1203]).
The existing `ValueRenderer` class now extends new class `BaseValueRenderer`, and a new `BytesRenderer` class is introduced.
Setting a module's output renderer to a `BytesRenderer` will control its resulting `output.bytes`.
This affects usage scenarios where a module's `output.bytes` is evaluated, for example, when using `pkl eval`.
==== Using `pkl-binary` data
Users of Pkl's language binding libraries can decode `pkl-binary` data into instances of code-generated types.
[tabs]
====
Java::
+
[source,java]
----
var encodedData = fetchEncodedData(); // some byte[] or InputStream
var config = Config.fromPklBinary(encodedData);
var appConfig = config.as(AppConfig.class);
----
Kotlin::
+
[source,kotlin]
----
val encodedData = fetchEncodedData() // some ByteArray or InputStream
val config = Config.fromPklBinary(encodedData, ValueMapper.preconfigured().forKotlin())
val appConfig = config.to<AppConfig>()
----
Go::
+
[source,go]
----
encodedData := fetchEncodedData() // some []byte
var appConfig AppConfig
if err := pkl.Unmarshal(encodedData, &appConfig); err != nil {
// handle error
}
----
Swift::
+
[source,swift]
----
let encodedData = fetchEncodedData() // some [UInt8]
let appConfig = try PklDecoder.decode(AppConfig.self, from: encodedData)
----
====
== Noteworthy [small]#🎶# == Noteworthy [small]#🎶#
[[trailing-commas]] Ready when you need them.
=== Trailing Commas
Pkl's grammar has been updated to allow including a comma following the final item of comma-separated syntax elements (https://github.com/apple/pkl/pull/1137[#1137]). === XXX
These syntax elements are affected:
[source%tested,pkl]
----
function add(
bar,
baz, // <1>
) = bar + baz
foo = add(
1,
2, // <2>
)
typealias MyMapping<
Key,
Value, // <3>
> = Mapping<Key, Value>
bar: Mapping<
String,
Int, // <4>
>
baz: Mapping(
!containsKey("forbidden key"),
!containsKey("forbidden value"), // <5>
)
qux: (
String,
Int, // <6>
) -> Dynamic =
(paramA, paramB) -> new Dynamic {
quux = "\(paramA): \(paramB)"
}
corge = (qux) {
paramA,
paramB, // <7>
->
grault = paramA.length * paramB
}
----
<1> Function parameter lists in method definitions.
<2> Argument lists in method calls.
<3> Type parameter lists in generic type definitions.
<4> Type argument lists in type annotations and casts.
<5> Type constraint lists.
<6> Function type parameter lists in function type annotations.
<7> Object body parameter lists.
To learn more about this change, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0019-trailing-commas.adoc[SPICE-0019].
=== Pretty-printed traces
A new evaluator option is added to enable pretty-printed traces (https://github.com/apple/pkl/pull/1100[#1100], https://github.com/apple/pkl/pull/1227[#1227], https://github.com/apple/pkl/pull/1230[#1230]).
Currently, the `trace()` operator will render values as a single line, and trims the output after 100 characters.
This can obscure information when debugging.
In 0.30, a new evaluator option is added to control how traces are emitted.
Two trace modes are introduced:
* `compact` - the current output mode (default).
* `pretty` - multiline, with no limit on output size.
For example, users of the CLI can specify `--trace-mode` as a flag.
[source,shell]
----
pkl eval --trace-mode pretty myModule.pkl
----
Thanks to https://github.com/ssalevan[@ssalevan] for their contribution to this feature!
=== Better support for `Bytes` when rendering YAML
Previously, attempting to render a `Bytes` value using {uri-stdlib-YamlRenderer}[`YamlRenderer`] required the use of a link:{uri-stdlib-PcfRenderer-converters}[converter].
Now, Pkl can natively render YAML containing link:{yaml-binary-scalar}[binary scalars] (https://github.com/apple/pkl/pull/1276[#1276]).
[source,pkl%tested]
----
foo {
bar = Bytes(1, 2, 3)
}
rendered = new YamlRenderer {}.renderValue(foo) // <1>
----
<1> Result: `bar: !!binary AQID`
Similarly, link:{uri-stdlib-YamlParser}[`yaml.Parser`] now parses binary YAML values as Pkl link:{uri-stdlib-Bytes}[`Bytes`] values (https://github.com/apple/pkl/pull/1277[#1277]).
This is a breaking change; previously these values were parsed as link:{uri-stdlib-String}[`String`] value containing the base64-encoded binary data.
[source,pkl%tested]
----
import "pkl:yaml"
yamlData =
"""
bytes: !!binary AQID
"""
parsed = new yaml.Parser {}.parse(yamlData).bytes // <1>
----
<1> Result: `Bytes(1, 2, 3)`
[[pkldoc-perf-improvements]]
=== `pkldoc` performance improvements
The `pkldoc` documentation generator has been overhauled (https://github.com/apple/pkl/pull/1169[#1169], https://github.com/apple/pkl/pull/1224[#1224], https://github.com/apple/pkl/pull/1241[#1241], https://github.com/apple/pkl/pull/1242[#1242]).
Currently, the `pkldoc` tool needs to consume much of an existing documentation website whenever generating new documentation.
This adds significant I/O overhead as a pkldoc documentation website grows.
The generator has been overhauled to minimize the amount of data needed to be read from the current site.
To read more about this change, consult https://github.com/apple/pkl-evolution/blob/main/spices/SPICE-0018-pkldoc-io-improvements.adoc[SPICE-0018].
[[pkldoc-migration]]
==== Migration
The new pkldoc website introduces breaking changes to the data model.
Because of this, existing sites must be migrated before using the `0.30` version of pkldoc.
To migrate, run the one-time command `pkldoc --migrate`.
=== Java API changes
==== New classes
New classes are introduced to the Java API.
* `org.pkl.core.PklBinaryDecoder`
==== New methods
New methods are introduced to the Java API.
* `org.pkl.core.Evaluator.evaluateExpressionPklBinary`
* `org.pkl.core.EvaluatorBuilder.setTraceMode`
* `org.pkl.core.EvaluatorBuilder.getTraceMode`
* `org.pkl.config.java.Config.fromPklBinary`
=== Standard Library changes
New modules, properties, methods, classes and typealiases have been added to the standard library (https://github.com/apple/pkl/pull/1106[#1106]).
==== Changes to `pkl:base`
Additions:
* New class: {uri-stdlib-BaseValueRenderer}[`BaseValueRenderer`]
* {uri-stdlib-ValueRenderer}[`ValueRenderer`] (now a subclass of {uri-stdlib-BaseValueRenderer}[`BaseValueRenderer`])
* {uri-stdlib-BytesRenderer}[`BytesRenderer`]
* {uri-stdlib-baseModule}/RenderDirective#bytes[`RenderDirective.bytes`]
==== Additions to `pkl:EvaluatorSettings`
* {uri-stdlib-evaluatorSettingsModule}#traceMode[`traceMode`]
==== Additions to `pkl:reflect`
* {uri-stdlib-reflectModule}/Class#allMethods[`Class.allMethods`]
* {uri-stdlib-reflectModule}/Class#allProperties[`Class.allProperties`]
* {uri-stdlib-reflectModule}/Property#allAnnotations[`Propterty.allAnnotations`]
* {uri-stdlib-reflectModule}/Propterty#allModifiers[`Propterty.allModifiers`]
==== New module: `pkl:pklbinary`
The `pkl:pklbinary` standard library module is added.
=== `pkl repl` improvements
The REPL now handles interrupts (Ctrl-C) in a more user-friendly way (https://github.com/apple/pkl/pull/1188[#1188]).
Instead of exiting immediately, it behaves like other REPLs:
* If the line is non-empty or in a continuation, the buffer is cleared.
* If the line is empty, print a message with instructions on exiting the REPL.
** If another interrupt is sent immediately after, exit.
== Breaking Changes [small]#💔# == Breaking Changes [small]#💔#
Things to watch out for when upgrading. Things to watch out for when upgrading.
=== Binary data handling `yaml.Parser` === XXX
link:{yaml-binary-scalar}[YAML binary scalars] are now parsed as link:{uri-stdlib-Bytes}[`Bytes`] values.
Prior versions of Pkl parsed binary scalars as link:{uri-stdlib-String}[`String`] values containing the base64-encoded binary data.
=== Minimum Kotlin version bump
For users of Pkl's Kotlin libraries, the minimum Kotlin version has been bumped to 2.1 (https://github.com/apple/pkl/pull/1232[#1232]).
=== New base module names: `BaseValueRenderer`, `BytesRenderer`
Two new names are introduced to the base module: `BaseValueRenderer`, and `BytesRenderer`.
That means that any code that currently references these names on implicit `this` will break (https://github.com/apple/pkl/pull/1203[#1203]).
To learn more about how this breaks code and how to fix it, see xref:0.29.adoc#new-base-module-names[New base module names] in 0.29's release notes.
=== `pkldoc` sites need to be migrated
Due to breaking changes made in pkldoc's data model, existing pkldoc websites must be migrated.
See <<pkldoc-migration>> for more details.
== Miscellaneous [small]#🐸# == Miscellaneous [small]#🐸#
* Dependency updates (https://github.com/apple/pkl/pull/1184[#1184], https://github.com/apple/pkl/pull/1225[#1225], https://github.com/apple/pkl/pull/1226[#1226], https://github.com/apple/pkl/pull/1228[#1228]). * XXX
* Enforce Pkl formatting of stdlib (https://github.com/apple/pkl/pull/1236[#1236], https://github.com/apple/pkl/pull/1253[#1253], https://github.com/apple/pkl/pull/1258[#1258], https://github.com/apple/pkl/pull/1278[#1278], https://github.com/apple/pkl/pull/1279[#1279]).
* Add internal IntelliJ plugin that's meant to assist with development of the Pkl codebase itself (https://github.com/apple/pkl/pull/1248[#1248]).
* Update CircleCI macOS instance type and Xcode version (https://github.com/apple/pkl/pull/1243[#1243], https://github.com/apple/pkl/pull/1244[#1244]).
* Disable multi-jdk testing when running on Windows ARM (https://github.com/apple/pkl/pull/1223[#1223]).
* Refine documentation for class `Any` (https://github.com/apple/pkl/pull/1194[#1194]).
== Bugs fixed [small]#🐜# == Bugs fixed [small]#🐜#
The following bugs have been fixed. The following bugs have been fixed.
* Incorrect error message when refusing to read past root dir (https://github.com/apple/pkl/pull/1234[#1233]). * XXX (https://github.com/apple/pkl/issues/XXX[XXX])
* Unicode U+7FFF character (翿) incorrectly parsed as EOF (https://github.com/apple/pkl/pull/1251[#1251]).
* Fallback certificates do not work in certain classloader setups (https://github.com/apple/pkl/pull/1198[#1199]).
== Contributors [small]#🙏# == Contributors [small]#🙏#
We would like to thank the contributors to this release (in alphabetical order): We would like to thank the contributors to this release (in alphabetical order):
* https://github.com/bioball[@bioball] * XXX
* https://github.com/HT154[@HT154]
* https://github.com/netvl[@netvl]
* https://github.com/spyoungtech[@spyoungtech]
* https://github.com/srueg[@srueg]
* https://github.com/ssalevan[@ssalevan]
* https://github.com/stackoverflow[@stackoverflow]
@@ -2,9 +2,7 @@
include::ROOT:partial$component-attributes.adoc[] include::ROOT:partial$component-attributes.adoc[]
[[release-0.30.0]] [[release-0.30.0]]
== 0.30.0 (2025-10-30) == 0.30.0 (TBD)
xref:0.30.adoc[Release notes]
[[release-0.29.1]] [[release-0.29.1]]
== 0.29.1 (2025-08-27) == 0.29.1 (2025-08-27)
+17 -6
View File
@@ -98,7 +98,7 @@ A module that doesn't add new properties shouldn't use the `extends` clause.
==== Imports ==== Imports
Sort imports sections using https://en.wikipedia.org/wiki/Natural_sort_order[natural sorting] by their module URI. Sort imports sections using https://en.wikipedia.org/wiki/Natural_sort_order[natural sorting] by their module URI.
Relative path and package imports should be in their own section, separated by a newline. Relative path imports should be in their own section, separated by a newline.
There should be no unused imports. There should be no unused imports.
[source%parsed,{pkl}] [source%parsed,{pkl}]
@@ -106,8 +106,6 @@ There should be no unused imports.
import "modulepath:/foo.pkl" import "modulepath:/foo.pkl"
import "package://example.com/mypackage@1.0.0#/foo.pkl" import "package://example.com/mypackage@1.0.0#/foo.pkl"
import "@mypackage/baz.pkl"
import ".../my/file/bar2.pkl" import ".../my/file/bar2.pkl"
import ".../my/file/bar11.pkl" import ".../my/file/bar11.pkl"
---- ----
@@ -268,6 +266,7 @@ Use line comments or block comments to convey implementation concerns to authors
Doc comments should start with a one sentence summary paragraph, followed by additional paragraphs if necessary. Doc comments should start with a one sentence summary paragraph, followed by additional paragraphs if necessary.
Start new sentences on their own line. Start new sentences on their own line.
Add a single space after `///`.
[source%parsed,{pkl}] [source%parsed,{pkl}]
---- ----
@@ -336,6 +335,7 @@ class ZebraParty {}
[source%tested,{pkl}] [source%tested,{pkl}]
---- ----
class zebraParty {} class zebraParty {}
class zebraparty {}
---- ----
== Strings == Strings
@@ -472,6 +472,13 @@ else
if (bar) bar else foo if (bar) bar else foo
---- ----
.good.pkl
[source%parsed,{pkl-expr}]
----
if (bar) bar
else foo
----
.good.pkl .good.pkl
[source%parsed,{pkl-expr}] [source%parsed,{pkl-expr}]
---- ----
@@ -617,15 +624,19 @@ res2 = 1 + 2 // <3>
res3 = res2 as Number // <3> res3 = res2 as Number // <3>
res4 = List(1, 2, 3) // <4> res4 = List(1, 2, 3) // <4>
res5 = if (foo) bar else baz // <5> res5 = if (foo) bar else baz // <5>
typealias Foo = "foo" | "bar" | "baz" // <6>
---- ----
<1> After keywords <1> After keywords
<2> Before and after braces <2> Before and after braces
<3> Around infix operators <3> Around infix operators
<4> After a comma <4> After a comma
<5> Before opening parentheses in control operators (`if`, `for`, `when` are control operators) <5> Before opening parentheses in control operators (`if`, `for`, `when` are control operators)
<6> Before and after the pipe symbol (`|`)
NOTE: No spaces are added around the pipe symbol (`|`) in union types.
[source%tested,{pkl}]
----
typealias Foo = "foo"|"bar"|"baz"
----
=== Object bodies === Object bodies
-2
View File
@@ -15,7 +15,6 @@ import org.pkl.commons.test.FileTestUtils.rootProjectDir
import org.pkl.core.Loggers import org.pkl.core.Loggers
import org.pkl.core.SecurityManagers import org.pkl.core.SecurityManagers
import org.pkl.core.StackFrameTransformers import org.pkl.core.StackFrameTransformers
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.module.ModuleKeyFactories import org.pkl.core.module.ModuleKeyFactories
import org.pkl.core.repl.ReplRequest import org.pkl.core.repl.ReplRequest
import org.pkl.core.repl.ReplResponse import org.pkl.core.repl.ReplResponse
@@ -98,7 +97,6 @@ class DocSnippetTestsEngine : HierarchicalTestEngine<DocSnippetTestsEngine.Execu
IoUtils.getCurrentWorkingDir(), IoUtils.getCurrentWorkingDir(),
StackFrameTransformers.defaultTransformer, StackFrameTransformers.defaultTransformer,
false, false,
TraceMode.COMPACT,
) )
return ExecutionContext(replServer) return ExecutionContext(replServer)
} }
+11 -17
View File
@@ -8,17 +8,15 @@ geantyref = "1.+"
googleJavaFormat = "1.25.2" googleJavaFormat = "1.25.2"
# must not use `+` because used in download URL # must not use `+` because used in download URL
# 23.1.x requires JDK 20+ # 23.1.x requires JDK 20+
graalVm = "25.0.0" graalVm = "24.1.2"
graalVmJdkVersion = "25.0.0" graalVmJdkVersion = "21.0.8"
# slightly hacky but convenient place so we remember to update the checksum # slightly hacky but convenient place so we remember to update the checksum
graalVmSha256-macos-x64 = "04278cf867d040e29dc71dd7727793f0ea67eb72adce8a35d04b87b57906778d" graalVmSha256-macos-x64 = "1a63681c9042f92f27da535c3b0fada62aae094da1f705ecb0ef0270b80f873b"
graalVmSha256-macos-aarch64 = "c446d5aaeda98660a4c14049d299e9fba72105a007df89f19d27cf3979d37158" graalVmSha256-macos-aarch64 = "3de4049d254dd3c04fd65a66be904d6cf490dca4ece2e2b5fcdfa91d34760f4f"
graalVmSha256-linux-x64 = "1862f2ce97387a303cae4c512cb21baf36fafd2457c3cbbc10d87db94b89d3dd" graalVmSha256-linux-x64 = "c8035b3ce6e45f1481752c6b38153bb4a53eeb477c5345d5bec5ca44ed18a056"
graalVmSha256-linux-aarch64 = "6c3c8b7617006c5d174d9cf7d357ccfb4bae77a4df1294ee28084fcb6eea8921" graalVmSha256-linux-aarch64 = "aa1100beb3377717a0ba1937e51878c48917615922a36c4508baf46927a9a6e4"
graalVmSha256-windows-x64 = "33ef1d186b5c1e95465fcc97e637bc26e72d5f2250a8615b9c5d667ed5c17fd0" graalVmSha256-windows-x64 = "0401a5c9b4a5478640b0d5563a5e0f2c97513ab689c5ee647d41293b92eed0e4"
ideaExtPlugin = "1.1.9" ideaExtPlugin = "1.1.9"
intellijPlugin = "2.10.1"
intellij = "2025.2.3"
javaPoet = "0.+" javaPoet = "0.+"
javaxInject = "1" javaxInject = "1"
jansi = "2.+" jansi = "2.+"
@@ -31,12 +29,11 @@ jmhPlugin = "0.7.2"
jsr305 = "3.+" jsr305 = "3.+"
junit = "5.+" junit = "5.+"
junitPlatform = "1.+" junitPlatform = "1.+"
kotlin = "2.2.20" kotlin = "2.0.21"
# 1.7+ generates much more verbose code # 1.7+ generates much more verbose code
kotlinPoet = "1.6.+" kotlinPoet = "1.6.+"
kotlinxHtml = "0.11.0" kotlinxHtml = "0.11.0"
kotlinxSerialization = "1.8.0" kotlinxSerialization = "1.8.0"
kotlinxCoroutines = "1.+"
ktfmt = "0.53" ktfmt = "0.53"
# replaces nuValidator's log4j dependency # replaces nuValidator's log4j dependency
# something related to log4j-1.2-api is apparently broken in 2.17.2 # something related to log4j-1.2-api is apparently broken in 2.17.2
@@ -45,7 +42,7 @@ msgpack = "0.9.8"
nexusPublishPlugin = "2.0.0" nexusPublishPlugin = "2.0.0"
nuValidator = "20.+" nuValidator = "20.+"
paguro = "3.+" paguro = "3.+"
shadowPlugin = "9.+" shadowPlugin = "8.1.1"
slf4j = "1.+" slf4j = "1.+"
snakeYaml = "2.+" snakeYaml = "2.+"
spotlessPlugin = "6.25.0" spotlessPlugin = "6.25.0"
@@ -62,7 +59,6 @@ geantyref = { group = "io.leangen.geantyref", name = "geantyref", version.ref =
graalCompiler = { group = "org.graalvm.compiler", name = "compiler", version.ref = "graalVm" } graalCompiler = { group = "org.graalvm.compiler", name = "compiler", version.ref = "graalVm" }
graalSdk = { group = "org.graalvm.sdk", name = "graal-sdk", version.ref = "graalVm" } graalSdk = { group = "org.graalvm.sdk", name = "graal-sdk", version.ref = "graalVm" }
graalJs = { group = "org.graalvm.js", name = "js", version.ref = "graalVm" } graalJs = { group = "org.graalvm.js", name = "js", version.ref = "graalVm" }
intellij = { group = "com.jetbrains.intellij.idea", name = "ideaIC", version.ref = "intellij" }
javaPoet = { group = "com.palantir.javapoet", name = "javapoet", version.ref = "javaPoet" } javaPoet = { group = "com.palantir.javapoet", name = "javapoet", version.ref = "javaPoet" }
javaxInject = { group = "javax.inject", name = "javax.inject", version.ref = "javaxInject" } javaxInject = { group = "javax.inject", name = "javax.inject", version.ref = "javaxInject" }
jansi = { group = "org.fusesource.jansi", name = "jansi", version.ref = "jansi" } jansi = { group = "org.fusesource.jansi", name = "jansi", version.ref = "jansi" }
@@ -83,14 +79,13 @@ kotlinScripting = { group = "org.jetbrains.kotlin", name = "kotlin-scripting-jsr
kotlinStdLib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" } kotlinStdLib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlinxHtml = { group = "org.jetbrains.kotlinx", name = "kotlinx-html-jvm", version.ref = "kotlinxHtml" } kotlinxHtml = { group = "org.jetbrains.kotlinx", name = "kotlinx-html-jvm", version.ref = "kotlinxHtml" }
kotlinxSerializationJson = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" } kotlinxSerializationJson = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
kotlinxCoroutinesCore = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
log4j12Api = { group = "org.apache.logging.log4j", name = "log4j-1.2-api", version.ref = "log4j" } log4j12Api = { group = "org.apache.logging.log4j", name = "log4j-1.2-api", version.ref = "log4j" }
msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" } msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" }
nuValidator = { group = "nu.validator", name = "validator", version.ref = "nuValidator" } nuValidator = { group = "nu.validator", name = "validator", version.ref = "nuValidator" }
# to be replaced with https://github.com/usethesource/capsule or https://github.com/lacuna/bifurcan # to be replaced with https://github.com/usethesource/capsule or https://github.com/lacuna/bifurcan
paguro = { group = "org.organicdesign", name = "Paguro", version.ref = "paguro" } paguro = { group = "org.organicdesign", name = "Paguro", version.ref = "paguro" }
pklConfigJavaAll025 = { group = "org.pkl-lang", name = "pkl-config-java-all", version = "0.25.0" } pklConfigJavaAll025 = { group = "org.pkl-lang", name = "pkl-config-java-all", version = "0.25.0" }
shadowPlugin = { group = "com.gradleup.shadow", name = "com.gradleup.shadow.gradle.plugin", version.ref = "shadowPlugin" } shadowPlugin = { group = "com.github.johnrengelman", name = "shadow", version.ref = "shadowPlugin" }
slf4jApi = { group = "org.slf4j", name = "slf4j-api", version.ref = "slf4j" } slf4jApi = { group = "org.slf4j", name = "slf4j-api", version.ref = "slf4j" }
slf4jSimple = { group = "org.slf4j", name = "slf4j-simple", version.ref = "slf4j" } slf4jSimple = { group = "org.slf4j", name = "slf4j-simple", version.ref = "slf4j" }
snakeYaml = { group = "org.snakeyaml", name = "snakeyaml-engine", version.ref = "snakeYaml" } snakeYaml = { group = "org.snakeyaml", name = "snakeyaml-engine", version.ref = "snakeYaml" }
@@ -108,5 +103,4 @@ ideaExt = { id = "org.jetbrains.gradle.plugin.idea-ext", version.ref = "ideaExtP
jmh = { id = "me.champeau.jmh", version.ref = "jmhPlugin" } jmh = { id = "me.champeau.jmh", version.ref = "jmhPlugin" }
kotlinxSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } kotlinxSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexusPublishPlugin" } nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexusPublishPlugin" }
shadow = { id = "com.gradleup.shadow", version.ref = "shadowPlugin" } shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadowPlugin" }
intellij = { id = "org.jetbrains.intellij.platform", version.ref = "intellijPlugin" }
+2 -2
View File
@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionSha256Sum=a17ddd85a26b6a7f5ddb71ff8b05fc5104c0202c6e64782429790c933686c806 distributionSha256Sum=bd71102213493060956ec229d946beee57158dbd89d0e62b91bca0fa2c5f3531
distributionUrl=https\://services.gradle.org/distributions/gradle-9.1.0-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
+3 -3
View File
@@ -2,15 +2,15 @@
"catalogs": {}, "catalogs": {},
"aliases": { "aliases": {
"pkl": { "pkl": {
"script-ref": "org.pkl-lang:pkl-cli-java:0.30.0", "script-ref": "org.pkl-lang:pkl-cli-java:0.29.1",
"java-agents": [] "java-agents": []
}, },
"pkl-codegen-java": { "pkl-codegen-java": {
"script-ref": "org.pkl-lang:pkl-codegen-java:0.30.0", "script-ref": "org.pkl-lang:pkl-codegen-java:0.29.1",
"java-agents": [] "java-agents": []
}, },
"pkl-codegen-kotlin": { "pkl-codegen-kotlin": {
"script-ref": "org.pkl-lang:pkl-codegen-kotlin:0.30.0", "script-ref": "org.pkl-lang:pkl-codegen-kotlin:0.29.1",
"java-agents": [] "java-agents": []
} }
}, },
+64 -79
View File
@@ -8,30 +8,28 @@ com.fasterxml.jackson.core:jackson-databind:2.19.0=testCompileClasspath,testImpl
com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.fasterxml.jackson:jackson-bom:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.fasterxml.jackson:jackson-bom:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ajalt.clikt:clikt-core-jvm:5.0.3=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.ajalt.clikt:clikt-core-jvm:5.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.clikt:clikt-core:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.clikt:clikt-core:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ajalt.clikt:clikt-jvm:5.0.3=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.ajalt.clikt:clikt-jvm:5.0.3=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.clikt:clikt-markdown-jvm:5.0.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath com.github.ajalt.clikt:clikt-markdown-jvm:5.0.3=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.clikt:clikt-markdown:5.0.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath com.github.ajalt.clikt:clikt-markdown:5.0.3=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.clikt:clikt:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.clikt:clikt:5.0.3=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ajalt.colormath:colormath-jvm:3.6.0=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.ajalt.colormath:colormath-jvm:3.6.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.colormath:colormath:3.6.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.colormath:colormath:3.6.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ajalt.mordant:mordant-core-jvm:3.0.1=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-core-jvm:3.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-core:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.mordant:mordant-core:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ajalt.mordant:mordant-jvm-ffm-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-jvm-ffm-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-jvm-ffm:3.0.1=runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-jvm-ffm:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-jvm-graal-ffi-jvm:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-jvm-graal-ffi-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-jvm-graal-ffi:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-jvm-graal-ffi:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-jvm-jna-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-jvm-jna-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-jvm-jna:3.0.1=runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-jvm-jna:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-jvm:3.0.1=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-jvm:3.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-markdown:3.0.1=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-markdown:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
com.github.jknack:handlebars-helpers:4.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.jknack:handlebars-helpers:4.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.jknack:handlebars:4.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.jknack:handlebars:4.3.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
com.google.errorprone:error_prone_annotations:2.36.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.google.errorprone:error_prone_annotations:2.36.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.google.guava:failureaccess:1.0.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.google.guava:failureaccess:1.0.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.google.guava:guava:33.4.8-jre=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.google.guava:guava:33.4.8-jre=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
@@ -41,10 +39,7 @@ com.jayway.jsonpath:json-path:2.9.0=testCompileClasspath,testImplementationDepen
com.networknt:json-schema-validator:1.5.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.networknt:json-schema-validator:1.5.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
commons-fileupload:commons-fileupload:1.6.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath commons-fileupload:commons-fileupload:1.6.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
commons-io:commons-io:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath commons-io:commons-io:2.19.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath
net.javacrumbs.json-unit:json-unit-core:2.40.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath net.javacrumbs.json-unit:json-unit-core:2.40.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.minidev:accessors-smart:2.5.0=testRuntimeClasspath net.minidev:accessors-smart:2.5.0=testRuntimeClasspath
@@ -54,12 +49,7 @@ org.apache.httpcomponents.client5:httpclient5:5.5=testCompileClasspath,testImple
org.apache.httpcomponents.core5:httpcore5-h2:5.3.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.apache.httpcomponents.core5:httpcore5-h2:5.3.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.apache.httpcomponents.core5:httpcore5:5.3.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.apache.httpcomponents.core5:httpcore5:5.3.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable
org.eclipse.jetty.http2:http2-common:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.eclipse.jetty.http2:http2-common:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty.http2:http2-hpack:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.eclipse.jetty.http2:http2-hpack:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty.http2:http2-server:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.eclipse.jetty.http2:http2-server:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
@@ -80,63 +70,58 @@ org.eclipse.jetty:jetty-servlets:11.0.24=testCompileClasspath,testImplementation
org.eclipse.jetty:jetty-util:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.eclipse.jetty:jetty-util:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-webapp:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.eclipse.jetty:jetty-webapp:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.eclipse.jetty:jetty-xml:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.eclipse.jetty:jetty-xml:11.0.24=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.fusesource.jansi:jansi:2.4.2=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.fusesource.jansi:jansi:2.4.2=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.polyglot:polyglot:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.polyglot:polyglot:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.sdk:collections:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:graal-sdk:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testRuntimeClasspath org.graalvm.sdk:graal-sdk:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,runtimeClasspath,testRuntimeClasspath
org.graalvm.sdk:jniutils:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.sdk:jniutils:24.1.2=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:nativeimage:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.sdk:nativeimage:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:word:25.0.0=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.sdk:word:24.1.2=compileClasspath,compileOnlyDependenciesMetadata,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.truffle:truffle-api:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.truffle:truffle-api:24.1.2=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.truffle:truffle-compiler:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.truffle:truffle-compiler:24.1.2=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.truffle:truffle-runtime:25.0.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.truffle:truffle-runtime:24.1.2=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.hamcrest:hamcrest-core:2.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.hamcrest:hamcrest-core:2.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.hamcrest:hamcrest:2.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.hamcrest:hamcrest:2.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,nativeImageClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.jline:jline-native:3.23.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,nativeImageClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.jline:jline-reader:3.23.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains:markdown-jvm:0.7.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath org.jline:jline-terminal-jansi:3.23.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains:markdown:0.7.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath org.jline:jline-terminal:3.23.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jline:jline-native:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jline:jline-reader:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jline:jline-terminal-jansi:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jline:jline-terminal:3.23.0=compileClasspath,implementationDependenciesMetadata,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jspecify:jspecify:1.0.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jspecify:jspecify:1.0.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.8=runtimeClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath org.organicdesign:Paguro:3.10.3=runtimeClasspath,testRuntimeClasspath
org.slf4j:slf4j-api:2.0.17=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.slf4j:slf4j-api:2.0.17=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.snakeyaml:snakeyaml-engine:2.10=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath org.snakeyaml:snakeyaml-engine:2.10=runtimeClasspath,testRuntimeClasspath
org.wiremock:wiremock:3.13.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.wiremock:wiremock:3.13.1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.xmlunit:xmlunit-core:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.xmlunit:xmlunit-core:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.xmlunit:xmlunit-legacy:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.xmlunit:xmlunit-legacy:2.10.2=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
@@ -0,0 +1,57 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.cli
import java.io.IOException
import java.nio.file.Files
import java.nio.file.Path
import kotlin.io.path.writeText
import org.pkl.commons.cli.CliBaseOptions
import org.pkl.commons.cli.CliException
class CliFormatterApply(
cliBaseOptions: CliBaseOptions,
paths: List<Path>,
private val silent: Boolean,
) : CliFormatterCommand(cliBaseOptions, paths) {
override fun doRun() {
var status = 0
for (path in paths()) {
val contents = Files.readString(path)
val (formatted, stat) = format(path, contents)
status = if (status == 0) stat else status
if (stat != 0) continue
if (!silent && contents != formatted) {
consoleWriter.write(path.toAbsolutePath().toString())
consoleWriter.appendLine()
consoleWriter.flush()
}
try {
path.writeText(formatted, Charsets.UTF_8)
} catch (e: IOException) {
consoleWriter.write("Could not overwrite `$path`: ${e.message}")
consoleWriter.appendLine()
consoleWriter.flush()
status = 1
}
}
if (status != 0) {
throw CliException("Formatting violations found.", status)
}
}
}
@@ -0,0 +1,44 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.cli
import java.nio.file.Files
import java.nio.file.Path
import org.pkl.commons.cli.CliBaseOptions
import org.pkl.commons.cli.CliException
class CliFormatterCheck(cliBaseOptions: CliBaseOptions, paths: List<Path>) :
CliFormatterCommand(cliBaseOptions, paths) {
override fun doRun() {
var status = 0
for (path in paths()) {
val contents = Files.readString(path)
val (formatted, stat) = format(path, contents)
status = if (status == 0) stat else status
if (contents != formatted) {
consoleWriter.write(path.toAbsolutePath().toString())
consoleWriter.appendLine()
consoleWriter.flush()
status = 1
}
}
if (status != 0) {
throw CliException("Formatting violations found.", status)
}
}
}
@@ -15,139 +15,46 @@
*/ */
package org.pkl.cli package org.pkl.cli
import java.io.IOException
import java.io.Writer import java.io.Writer
import java.nio.file.Files
import java.nio.file.Path import java.nio.file.Path
import java.util.stream.Stream import kotlin.io.path.ExperimentalPathApi
import kotlin.io.path.extension import kotlin.io.path.extension
import kotlin.io.path.isDirectory import kotlin.io.path.isDirectory
import kotlin.io.path.name import kotlin.io.path.name
import kotlin.io.path.writeText import kotlin.io.path.walk
import kotlin.math.max
import org.pkl.commons.cli.CliBaseOptions import org.pkl.commons.cli.CliBaseOptions
import org.pkl.commons.cli.CliCommand import org.pkl.commons.cli.CliCommand
import org.pkl.commons.cli.CliException
import org.pkl.commons.cli.CliTestException
import org.pkl.core.util.IoUtils
import org.pkl.formatter.Formatter import org.pkl.formatter.Formatter
import org.pkl.formatter.GrammarVersion
import org.pkl.parser.GenericParserError import org.pkl.parser.GenericParserError
class CliFormatterCommand abstract class CliFormatterCommand
@JvmOverloads @JvmOverloads
constructor( constructor(
private val paths: List<Path>, options: CliBaseOptions,
private val grammarVersion: GrammarVersion, protected val paths: List<Path>,
private val overwrite: Boolean, protected val consoleWriter: Writer = System.out.writer(),
private val diffNameOnly: Boolean, ) : CliCommand(options) {
private val silent: Boolean, protected fun format(file: Path, contents: String): Pair<String, Int> {
private val consoleWriter: Writer = System.out.writer(), try {
private val errWriter: Writer = System.err.writer(), return Formatter().format(contents) to 0
) : CliCommand(CliBaseOptions()) { } catch (pe: GenericParserError) {
private fun format(contents: String): String { consoleWriter.write("Could not format `$file`: $pe")
return Formatter().format(contents, grammarVersion)
}
private fun writeErr(error: String) {
errWriter.write(error)
errWriter.appendLine()
errWriter.flush()
}
private fun write(message: String) {
if (silent) return
consoleWriter.write(message)
consoleWriter.appendLine() consoleWriter.appendLine()
consoleWriter.flush() consoleWriter.flush()
} return "" to 1
private fun allPaths(): Stream<Path> {
return paths.distinct().stream().flatMap { path ->
when {
path.toString() == "-" -> Stream.of(path)
path.isDirectory() ->
Files.walk(path)
.filter { it.extension == "pkl" || it.name == "PklProject" }
.map { it.normalize() }
else -> Stream.of(path.normalize())
}
}
}
override fun doRun() {
val status = Status(SUCCESS)
handlePaths(status)
when (status.status) {
FORMATTING_VIOLATION -> {
// using CliTestException instead of CliException because we want full control on how to
// print errors
throw CliTestException("", status.status)
}
ERROR -> {
if (!silent) {
writeErr("An error occurred during formatting.")
}
throw CliTestException("", status.status)
}
}
}
private fun handlePaths(status: Status) {
for (path in allPaths()) {
val pathStr = path.toString()
try {
val contents =
when {
pathStr == "-" -> IoUtils.readString(System.`in`)
else -> Files.readString(path)
}
if (pathStr == "-" && overwrite) {
throw CliException("Cannot write to stdin", ERROR)
}
val formatted = format(contents)
if (contents != formatted) {
status.update(FORMATTING_VIOLATION)
if (diffNameOnly || overwrite) {
// if `--diff-name-only` or `-w` is specified, only write file names
write(pathStr)
}
if (overwrite) {
path.writeText(formatted, Charsets.UTF_8)
} }
} }
if (!diffNameOnly && !overwrite) { @OptIn(ExperimentalPathApi::class)
write(formatted) protected fun paths(): Set<Path> {
} val allPaths = mutableSetOf<Path>()
} catch (pe: GenericParserError) { for (path in paths) {
writeErr("Could not format `$pathStr`: $pe") if (path.isDirectory()) {
status.update(ERROR) allPaths.addAll(path.walk().filter { it.extension == "pkl" || it.name == "PklProject" })
} catch (e: IOException) { } else {
writeErr("IO error while reading `$pathStr`: ${e.message}") allPaths.add(path)
status.update(ERROR)
}
}
}
companion object {
private const val SUCCESS = 0
private const val FORMATTING_VIOLATION = 11
private const val ERROR = 1
private class Status(var status: Int) {
fun update(newStatus: Int) {
status =
when {
status == ERROR -> status
newStatus == ERROR -> newStatus
else -> max(status, newStatus)
}
} }
} }
return allPaths
} }
} }
@@ -19,7 +19,6 @@ import org.pkl.cli.repl.Repl
import org.pkl.commons.cli.CliCommand import org.pkl.commons.cli.CliCommand
import org.pkl.core.Loggers import org.pkl.core.Loggers
import org.pkl.core.SecurityManagers import org.pkl.core.SecurityManagers
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.module.ModuleKeyFactories import org.pkl.core.module.ModuleKeyFactories
import org.pkl.core.module.ModulePathResolver import org.pkl.core.module.ModulePathResolver
import org.pkl.core.repl.ReplServer import org.pkl.core.repl.ReplServer
@@ -69,7 +68,6 @@ internal class CliRepl(private val options: CliEvaluatorOptions) : CliCommand(op
options.base.normalizedWorkingDir, options.base.normalizedWorkingDir,
stackFrameTransformer, stackFrameTransformer,
options.base.color?.hasColor() ?: false, options.base.color?.hasColor() ?: false,
options.base.traceMode ?: TraceMode.COMPACT,
) )
Repl(options.base.normalizedWorkingDir, server).run() Repl(options.base.normalizedWorkingDir, server).run()
} }
@@ -15,85 +15,60 @@
*/ */
package org.pkl.cli.commands package org.pkl.cli.commands
import com.github.ajalt.clikt.core.CliktCommand
import com.github.ajalt.clikt.core.Context import com.github.ajalt.clikt.core.Context
import com.github.ajalt.clikt.core.NoOpCliktCommand
import com.github.ajalt.clikt.core.subcommands
import com.github.ajalt.clikt.parameters.arguments.argument import com.github.ajalt.clikt.parameters.arguments.argument
import com.github.ajalt.clikt.parameters.arguments.multiple import com.github.ajalt.clikt.parameters.arguments.multiple
import com.github.ajalt.clikt.parameters.options.default
import com.github.ajalt.clikt.parameters.options.flag import com.github.ajalt.clikt.parameters.options.flag
import com.github.ajalt.clikt.parameters.options.option import com.github.ajalt.clikt.parameters.options.option
import com.github.ajalt.clikt.parameters.types.enum
import com.github.ajalt.clikt.parameters.types.path import com.github.ajalt.clikt.parameters.types.path
import java.nio.file.Path import java.nio.file.Path
import org.pkl.cli.CliFormatterCommand import org.pkl.cli.CliFormatterApply
import org.pkl.formatter.GrammarVersion import org.pkl.cli.CliFormatterCheck
import org.pkl.commons.cli.commands.BaseCommand
class FormatterCommand : CliktCommand(name = "format") { class FormatterCommand : NoOpCliktCommand(name = "format") {
override fun help(context: Context) = override fun help(context: Context) = "Run commands related to formatting"
"""
Format or check formatting of Pkl files.
Examples:
```
# Overwrite all Pkl files inside `my/folder/`, recursively.
$ pkl format -w my/folder/
# Check formatting of all files, printing filenames with formatting violations to stdout.
# Exit with exit code `11` if formatting violations were found.
$ pkl format --diff-name-only my/folder/
# Format Pkl code from stdin.
$ echo "foo = 1" | pkl format -
```
"""
.trimIndent()
override fun helpEpilog(context: Context) = "For more information, visit $helpLink" override fun helpEpilog(context: Context) = "For more information, visit $helpLink"
init {
subcommands(FormatterCheckCommand(), FormatterApplyCommand())
}
}
class FormatterCheckCommand : BaseCommand(name = "check", helpLink = helpLink) {
override val helpString: String =
"Check if the given files are properly formatted, printing the file name to stdout in case they are not. Returns non-zero in case of failure."
val paths: List<Path> by val paths: List<Path> by
argument(name = "paths", help = "Files or directory to check. Use `-` to read from stdin.") argument(name = "paths", help = "Files or directory to check.")
.path(mustExist = false, canBeDir = true) .path(mustExist = true, canBeDir = true)
.multiple() .multiple()
val grammarVersion: GrammarVersion by override fun run() {
option( CliFormatterCheck(baseOptions.baseOptions(emptyList()), paths).run()
names = arrayOf("--grammar-version"), }
help = }
"""
The grammar compatibility version to use.$NEWLINE
${GrammarVersion.entries.joinToString("$NEWLINE", prefix = " ") {
val default = if (it == GrammarVersion.latest()) " `(default)`" else ""
"`${it.version}`: ${it.versionSpan}$default"
}}
"""
.trimIndent(),
)
.enum<GrammarVersion> { "${it.version}" }
.default(GrammarVersion.latest())
val overwrite: Boolean by class FormatterApplyCommand : BaseCommand(name = "apply", helpLink = helpLink) {
option( override val helpString: String =
names = arrayOf("-w", "--write"), "Overwrite all the files in place with the formatted version. Returns non-zero in case of failure."
help = "Format files in place, overwriting them. Implies `---diff-name-only`.",
)
.flag(default = false)
val diffNameOnly: Boolean by val paths: List<Path> by
option( argument(name = "paths", help = "Files or directory to format.")
names = arrayOf("--diff-name-only"), .path(mustExist = true, canBeDir = true)
help = "Write the path of files with formatting violations to stdout.", .multiple()
)
.flag(default = false)
val silent: Boolean by val silent: Boolean by
option( option(
names = arrayOf("-s", "--silent"), names = arrayOf("-s", "--silent"),
help = "Don't write to stdout or stderr. Mutually exclusive with `--diff-name-only`.", help = "Do not write the name of the files that failed formatting to stdout.",
) )
.flag(default = false) .flag()
override fun run() { override fun run() {
CliFormatterCommand(paths, grammarVersion, overwrite, diffNameOnly, silent).run() CliFormatterApply(baseOptions.baseOptions(emptyList()), paths, silent).run()
} }
} }
@@ -33,6 +33,8 @@ import org.pkl.commons.cli.commands.BaseCommand
import org.pkl.commons.cli.commands.TestOptions import org.pkl.commons.cli.commands.TestOptions
import org.pkl.commons.cli.commands.single import org.pkl.commons.cli.commands.single
private const val NEWLINE = '\u0085'
class ProjectCommand : NoOpCliktCommand(name = "project") { class ProjectCommand : NoOpCliktCommand(name = "project") {
override fun help(context: Context) = "Run commands related to projects" override fun help(context: Context) = "Run commands related to projects"
@@ -1,18 +0,0 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.cli.commands
internal const val NEWLINE = '\u0085'
@@ -21,7 +21,6 @@ import org.pkl.commons.toPath
import org.pkl.core.Loggers import org.pkl.core.Loggers
import org.pkl.core.SecurityManagers import org.pkl.core.SecurityManagers
import org.pkl.core.StackFrameTransformers import org.pkl.core.StackFrameTransformers
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.http.HttpClient import org.pkl.core.http.HttpClient
import org.pkl.core.module.ModuleKeyFactories import org.pkl.core.module.ModuleKeyFactories
import org.pkl.core.repl.ReplRequest import org.pkl.core.repl.ReplRequest
@@ -44,7 +43,6 @@ class ReplMessagesTest {
"/".toPath(), "/".toPath(),
StackFrameTransformers.defaultTransformer, StackFrameTransformers.defaultTransformer,
false, false,
TraceMode.COMPACT,
) )
@Test @Test
+35 -50
View File
@@ -21,63 +21,48 @@ com.github.ajalt.mordant:mordant-jvm:3.0.1=compileClasspath,runtimeClasspath,tes
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-markdown:3.0.1=runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-markdown:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
com.palantir.javapoet:javapoet:0.7.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.palantir.javapoet:javapoet:0.7.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.polyglot:polyglot:24.1.2=runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:collections:24.1.2=runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:graal-sdk:24.1.2=runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:nativeimage:24.1.2=runtimeClasspath,testRuntimeClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.graalvm.sdk:word:24.1.2=runtimeClasspath,testRuntimeClasspath
org.graalvm.polyglot:polyglot:25.0.0=runtimeClasspath,testRuntimeClasspath org.graalvm.truffle:truffle-api:24.1.2=runtimeClasspath,testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.sdk:graal-sdk:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:nativeimage:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:word:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-api:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath
org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=runtimeClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.8=runtimeClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=runtimeClasspath,testRuntimeClasspath org.organicdesign:Paguro:3.10.3=runtimeClasspath,testRuntimeClasspath
+38 -52
View File
@@ -21,64 +21,50 @@ com.github.ajalt.mordant:mordant-jvm:3.0.1=compileClasspath,runtimeClasspath,tes
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-markdown:3.0.1=runtimeClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-markdown:3.0.1=runtimeClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
com.squareup:kotlinpoet:1.6.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.squareup:kotlinpoet:1.6.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation io.leangen.geantyref:geantyref:1.3.16=testRuntimeClasspath
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.polyglot:polyglot:24.1.2=runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:collections:24.1.2=runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:graal-sdk:24.1.2=runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:nativeimage:24.1.2=runtimeClasspath,testRuntimeClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.graalvm.sdk:word:24.1.2=runtimeClasspath,testRuntimeClasspath
org.graalvm.polyglot:polyglot:25.0.0=runtimeClasspath,testRuntimeClasspath org.graalvm.truffle:truffle-api:24.1.2=runtimeClasspath,testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,testRuntimeClasspath
org.graalvm.sdk:graal-sdk:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:nativeimage:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:word:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-api:25.0.0=runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,testRuntimeClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-reflect:2.0.21=compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testRuntimeClasspath org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testRuntimeClasspath org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testRuntimeClasspath org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testRuntimeClasspath org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-scripting-jsr223:2.2.20=testRuntimeClasspath org.jetbrains.kotlin:kotlin-scripting-jsr223:2.0.21=testRuntimeClasspath
org.jetbrains.kotlin:kotlin-scripting-jvm-host:2.2.20=testRuntimeClasspath org.jetbrains.kotlin:kotlin-scripting-jvm-host:2.0.21=testRuntimeClasspath
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testRuntimeClasspath org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testRuntimeClasspath org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath
org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=runtimeClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.8=runtimeClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=runtimeClasspath,testRuntimeClasspath org.organicdesign:Paguro:3.10.3=runtimeClasspath,testRuntimeClasspath
+44 -63
View File
@@ -21,74 +21,55 @@ com.github.ajalt.mordant:mordant-jvm:3.0.1=compileClasspath,runtimeClasspath,tes
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
com.github.ajalt.mordant:mordant-markdown:3.0.1=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.mordant:mordant-markdown:3.0.1=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath com.github.ajalt.mordant:mordant:3.0.1=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath net.java.dev.jna:jna:5.14.0=runtimeClasspath,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.compiler:compiler:24.1.2=svmClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.nativeimage:native-image-base:24.1.2=svmClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.nativeimage:objectfile:24.1.2=svmClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.nativeimage:pointsto:24.1.2=svmClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.graalvm.nativeimage:svm:24.1.2=svmClasspath
org.graalvm.compiler:compiler:25.0.0=svmClasspath org.graalvm.nativeimage:truffle-runtime-svm:24.1.2=svmClasspath
org.graalvm.espresso:espresso-svm:25.0.0=svmClasspath org.graalvm.polyglot:polyglot:24.1.2=runtimeClasspath,svmClasspath,testRuntimeClasspath
org.graalvm.nativeimage:native-image-base:25.0.0=svmClasspath org.graalvm.sdk:collections:24.1.2=runtimeClasspath,svmClasspath,testRuntimeClasspath
org.graalvm.nativeimage:objectfile:25.0.0=svmClasspath org.graalvm.sdk:graal-sdk:24.1.2=runtimeClasspath,svmClasspath,testRuntimeClasspath
org.graalvm.nativeimage:pointsto:25.0.0=svmClasspath org.graalvm.sdk:jniutils:24.1.2=svmClasspath
org.graalvm.nativeimage:svm-capnproto-runtime:25.0.0=svmClasspath org.graalvm.sdk:nativeimage:24.1.2=runtimeClasspath,svmClasspath,testRuntimeClasspath
org.graalvm.nativeimage:svm-configure:25.0.0=svmClasspath org.graalvm.sdk:word:24.1.2=runtimeClasspath,svmClasspath,testRuntimeClasspath
org.graalvm.nativeimage:svm:25.0.0=svmClasspath org.graalvm.truffle:truffle-api:24.1.2=runtimeClasspath,svmClasspath,testRuntimeClasspath
org.graalvm.nativeimage:truffle-runtime-svm:25.0.0=svmClasspath org.graalvm.truffle:truffle-compiler:24.1.2=svmClasspath
org.graalvm.polyglot:polyglot:25.0.0=runtimeClasspath,svmClasspath,testRuntimeClasspath org.graalvm.truffle:truffle-runtime:24.1.2=svmClasspath
org.graalvm.sdk:collections:25.0.0=runtimeClasspath,svmClasspath,testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.sdk:graal-sdk:25.0.0=runtimeClasspath,svmClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:jniutils:25.0.0=svmClasspath org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:nativeimage-libgraal:25.0.0=svmClasspath org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:nativeimage:25.0.0=runtimeClasspath,svmClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.sdk:word:25.0.0=runtimeClasspath,svmClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-api:25.0.0=runtimeClasspath,svmClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-compiler:25.0.0=svmClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.truffle:truffle-runtime:25.0.0=svmClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath
org.jetbrains:markdown:0.7.3=implementationDependenciesMetadata,runtimeClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains:markdown:0.7.3=implementationDependenciesMetadata,runtimeClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=runtimeClasspath,svmClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.8=runtimeClasspath,svmClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=runtimeClasspath,svmClasspath,testRuntimeClasspath org.organicdesign:Paguro:3.10.3=runtimeClasspath,svmClasspath,testRuntimeClasspath
@@ -22,7 +22,6 @@ import java.time.Duration
import java.util.regex.Pattern import java.util.regex.Pattern
import org.pkl.core.evaluatorSettings.Color import org.pkl.core.evaluatorSettings.Color
import org.pkl.core.evaluatorSettings.PklEvaluatorSettings.ExternalReader import org.pkl.core.evaluatorSettings.PklEvaluatorSettings.ExternalReader
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.module.ProjectDependenciesManager import org.pkl.core.module.ProjectDependenciesManager
import org.pkl.core.util.IoUtils import org.pkl.core.util.IoUtils
@@ -149,9 +148,6 @@ data class CliBaseOptions(
/** External resource reader process specs */ /** External resource reader process specs */
val externalResourceReaders: Map<String, ExternalReader> = mapOf(), val externalResourceReaders: Map<String, ExternalReader> = mapOf(),
/** Defines options for the formatting of calls to the trace() method. */
val traceMode: TraceMode? = null,
) { ) {
companion object { companion object {
@@ -22,7 +22,6 @@ import java.util.regex.Pattern
import kotlin.io.path.isRegularFile import kotlin.io.path.isRegularFile
import org.pkl.core.* import org.pkl.core.*
import org.pkl.core.evaluatorSettings.PklEvaluatorSettings import org.pkl.core.evaluatorSettings.PklEvaluatorSettings
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.externalreader.ExternalReaderProcess import org.pkl.core.externalreader.ExternalReaderProcess
import org.pkl.core.http.HttpClient import org.pkl.core.http.HttpClient
import org.pkl.core.module.ModuleKeyFactories import org.pkl.core.module.ModuleKeyFactories
@@ -206,10 +205,6 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
} }
} }
private val traceMode: TraceMode by lazy {
cliOptions.traceMode ?: project?.evaluatorSettings?.traceMode ?: TraceMode.COMPACT
}
private fun HttpClient.Builder.addDefaultCliCertificates() { private fun HttpClient.Builder.addDefaultCliCertificates() {
val caCertsDir = IoUtils.getPklHomeDir().resolve("cacerts") val caCertsDir = IoUtils.getPklHomeDir().resolve("cacerts")
var certsAdded = false var certsAdded = false
@@ -307,6 +302,5 @@ abstract class CliCommand(protected val cliOptions: CliBaseOptions) {
.setLogger(Loggers.stdErr()) .setLogger(Loggers.stdErr())
.setTimeout(cliOptions.timeout) .setTimeout(cliOptions.timeout)
.setModuleCacheDir(moduleCacheDir) .setModuleCacheDir(moduleCacheDir)
.setTraceMode(traceMode)
} }
} }
@@ -26,13 +26,9 @@ open class CliException(
*/ */
message: String, message: String,
/** The cause */
cause: Throwable?,
/** The process exit code to use. */ /** The process exit code to use. */
val exitCode: Int = 1, val exitCode: Int = 1,
) : RuntimeException(message, cause) { ) : RuntimeException(message) {
constructor(message: String, exitCode: Int = 1) : this(message, null, exitCode)
override fun toString(): String = message!! override fun toString(): String = message!!
} }
@@ -45,11 +41,7 @@ class CliBugException(
/** The process exit code to use. */ /** The process exit code to use. */
exitCode: Int = 1, exitCode: Int = 1,
) : ) :
CliException( CliException("An unexpected error has occurred. Would you mind filing a bug report?", exitCode) {
"An unexpected error has occurred. Would you mind filing a bug report?",
theCause,
exitCode,
) {
override fun toString(): String = "$message\n\n${theCause.printStackTraceToString()}" override fun toString(): String = "$message\n\n${theCause.printStackTraceToString()}"
} }
@@ -33,7 +33,6 @@ import org.pkl.commons.cli.CliException
import org.pkl.commons.shlex import org.pkl.commons.shlex
import org.pkl.core.evaluatorSettings.Color import org.pkl.core.evaluatorSettings.Color
import org.pkl.core.evaluatorSettings.PklEvaluatorSettings.ExternalReader import org.pkl.core.evaluatorSettings.PklEvaluatorSettings.ExternalReader
import org.pkl.core.evaluatorSettings.TraceMode
import org.pkl.core.runtime.VmUtils import org.pkl.core.runtime.VmUtils
import org.pkl.core.util.IoUtils import org.pkl.core.util.IoUtils
@@ -295,16 +294,6 @@ class BaseOptions : OptionGroup() {
.multiple() .multiple()
.toMap() .toMap()
val traceMode: TraceMode? by
option(
names = arrayOf("--trace-mode"),
metavar = "style",
help =
"Specifies how calls to trace() are formatted. Possible values of <style> are 'compact' and 'pretty'.",
)
.enum<TraceMode> { it.name.lowercase() }
.single()
// hidden option used by native tests // hidden option used by native tests
private val testPort: Int by private val testPort: Int by
option(names = arrayOf("--test-port"), help = "Internal test option", hidden = true) option(names = arrayOf("--test-port"), help = "Internal test option", hidden = true)
@@ -342,7 +331,6 @@ class BaseOptions : OptionGroup() {
httpRewrites = httpRewrites.ifEmpty { null }, httpRewrites = httpRewrites.ifEmpty { null },
externalModuleReaders = externalModuleReaders, externalModuleReaders = externalModuleReaders,
externalResourceReaders = externalResourceReaders, externalResourceReaders = externalResourceReaders,
traceMode = traceMode,
) )
} }
} }
+29 -45
View File
@@ -1,52 +1,36 @@
# This is a Gradle generated file for dependency locking. # This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised. # Manual edits can break the build and are not advised.
# This file is expected to be part of source control. # This file is expected to be part of source control.
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable net.bytebuddy:byte-buddy:1.15.11=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-api:5.13.4=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-engine:5.13.4=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-params:5.13.4=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
org.junit:junit-bom:5.14.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=compileClasspath
org.opentest4j:opentest4j:1.3.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
empty=annotationProcessor,compileOnlyDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions empty=annotationProcessor,compileOnlyDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
@@ -28,7 +28,6 @@ dependencies {
api(libs.junitParams) api(libs.junitParams)
api(projects.pklCommons) // for convenience api(projects.pklCommons) // for convenience
implementation(libs.assertj) implementation(libs.assertj)
implementation(libs.msgpack)
} }
/** /**
@@ -1,27 +0,0 @@
{
"schemaVersion": 1,
"name": "birds",
"packageUri": "package://localhost:0/birds@0.6.0",
"packageZipUrl": "https://localhost:0/birds@0.6.0/birds@0.6.0.zip",
"dependencies": {
"fruities": {
"uri": "package://localhost:0/fruit@1.1.0",
"checksums": {
"sha256": "8d982761d182f2185e4180c82190791d9a60c721cb3393bb2e946fab90131e8c"
}
}
},
"version": "0.6.0",
"packageZipChecksums": {
"sha256": "$computedChecksum"
},
"sourceCodeUrlScheme": "https://example.com/birds/v0.6.0/blob%{path}#L%{line}-L%{endLine}",
"sourceCode": "https://example.com/birds",
"documentation": "https://example.com/bird-docs",
"license": "UNLICENSED",
"authors": [
"petey-bird@example.com",
"polly-bird@example.com"
],
"issueTracker": "https://example.com/birds/issues"
}
@@ -1,7 +0,0 @@
open module birds.Bird
import "@fruities/Fruit.pkl"
name: String
favoriteFruit: Fruit
@@ -1,4 +0,0 @@
module birds.allFruit
fruit = import*("@fruities/catalog/*.pkl")
fruitFiles = read*("@fruities/catalog/*.pkl")
@@ -1,4 +0,0 @@
module birds.catalog
catalog = import*("catalog/*.pkl")
catalogFiles = read*("catalog/*.pkl")
@@ -1,7 +0,0 @@
amends "../Bird.pkl"
name = "Ostrich"
favoriteFruit {
name = "Orange"
}
@@ -1,7 +0,0 @@
amends "../Bird.pkl"
import "@fruities/catalog/apple.pkl"
name = "Swallow"
favoriteFruit = apple
@@ -1,7 +0,0 @@
amends "..."
name = "Bird"
favoriteFruit {
name = "Fruit"
}
@@ -1,27 +0,0 @@
{
"schemaVersion": 1,
"name": "birds",
"packageUri": "package://localhost:0/birds@0.7.0",
"packageZipUrl": "https://localhost:0/birds@0.7.0/birds@0.7.0.zip",
"dependencies": {
"fruities": {
"uri": "package://localhost:0/fruit@1.1.0",
"checksums": {
"sha256": "8d982761d182f2185e4180c82190791d9a60c721cb3393bb2e946fab90131e8c"
}
}
},
"version": "0.7.0",
"packageZipChecksums": {
"sha256": "$computedChecksum"
},
"sourceCodeUrlScheme": "https://example.com/birds/v0.7.0/blob%{path}#L%{line}-L%{endLine}",
"sourceCode": "https://example.com/birds",
"documentation": "https://example.com/bird-docs",
"license": "UNLICENSED",
"authors": [
"petey-bird@example.com",
"polly-bird@example.com"
],
"issueTracker": "https://example.com/birds/issues"
}
@@ -1,7 +0,0 @@
open module birds.Bird
import "@fruities/Fruit.pkl"
name: String
favoriteFruit: Fruit
@@ -1,4 +0,0 @@
module birds.allFruit
fruit = import*("@fruities/catalog/*.pkl")
fruitFiles = read*("@fruities/catalog/*.pkl")
@@ -1,4 +0,0 @@
module birds.catalog
catalog = import*("catalog/*.pkl")
catalogFiles = read*("catalog/*.pkl")
@@ -1,7 +0,0 @@
amends "../Bird.pkl"
name = "Ostrich"
favoriteFruit {
name = "Orange"
}
@@ -1,7 +0,0 @@
amends "../Bird.pkl"
import "@fruities/catalog/apple.pkl"
name = "Swallow"
favoriteFruit = apple
@@ -1,7 +0,0 @@
amends "..."
name = "Bird"
favoriteFruit {
name = "Fruit"
}
@@ -111,10 +111,7 @@ data class SnippetOutcome(val expectedOutFile: Path, val actual: String, val suc
} }
} }
private fun failWithDiff(message: String): Nothing = failWithDiff(message, expected, actual) private fun failWithDiff(message: String): Nothing =
}
fun failWithDiff(message: String, expected: String, actual: String): Nothing =
if (System.getProperty("sun.java.command", "").contains("intellij")) { if (System.getProperty("sun.java.command", "").contains("intellij")) {
// IntelliJ only shows diffs for AssertionFailedError // IntelliJ only shows diffs for AssertionFailedError
throw AssertionFailedError(message, expected, actual) throw AssertionFailedError(message, expected, actual)
@@ -122,3 +119,4 @@ fun failWithDiff(message: String, expected: String, actual: String): Nothing =
// Gradle test logging/report only shows diffs for PklAssertionFailedError // Gradle test logging/report only shows diffs for PklAssertionFailedError
throw PklAssertionFailedError(message, expected, actual) throw PklAssertionFailedError(message, expected, actual)
} }
}
+29 -44
View File
@@ -1,51 +1,36 @@
# This is a Gradle generated file for dependency locking. # This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised. # Manual edits can break the build and are not advised.
# This file is expected to be part of source control. # This file is expected to be part of source control.
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-engine:5.13.4=testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
empty=annotationProcessor,compileOnlyDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,signatures,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions empty=annotationProcessor,compileOnlyDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,signatures,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
@@ -1,33 +0,0 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.commons
import java.util.WeakHashMap
import kotlin.reflect.KProperty
// Adapted from https://stackoverflow.com/a/38084930
fun <This, Return> lazyWithReceiver(
initializer: This.() -> Return
): LazyWithReceiver<This, Return> = LazyWithReceiver(initializer)
class LazyWithReceiver<This, out Return>(val initializer: This.() -> Return) {
private val values = WeakHashMap<This, Return>()
private val lock = Object()
operator fun getValue(thisValue: This, property: KProperty<*>): Return =
synchronized(lock) { values.getOrPut(thisValue) { thisValue.initializer() } }
}
+36 -51
View File
@@ -21,65 +21,50 @@ com.github.ajalt.mordant:mordant-jvm:3.0.1=pklCodegenJava
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=pklCodegenJava com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=pklCodegenJava
com.github.ajalt.mordant:mordant-markdown:3.0.1=pklCodegenJava com.github.ajalt.mordant:mordant-markdown:3.0.1=pklCodegenJava
com.github.ajalt.mordant:mordant:3.0.1=pklCodegenJava com.github.ajalt.mordant:mordant:3.0.1=pklCodegenJava
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
com.palantir.javapoet:javapoet:0.7.0=pklCodegenJava com.palantir.javapoet:javapoet:0.7.0=pklCodegenJava
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation
io.leangen.geantyref:geantyref:1.3.16=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath io.leangen.geantyref:geantyref:1.3.16=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
javax.inject:javax.inject:1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath javax.inject:javax.inject:1=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.java.dev.jna:jna:5.14.0=pklCodegenJava net.java.dev.jna:jna:5.14.0=pklCodegenJava
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.polyglot:polyglot:24.1.2=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:collections:24.1.2=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:graal-sdk:24.1.2=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:nativeimage:24.1.2=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.graalvm.sdk:word:24.1.2=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
org.graalvm.polyglot:polyglot:25.0.0=pklCodegenJava,runtimeClasspath,testRuntimeClasspath org.graalvm.truffle:truffle-api:24.1.2=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=pklCodegenJava,runtimeClasspath,testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.sdk:graal-sdk:25.0.0=pklCodegenJava,runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:nativeimage:25.0.0=pklCodegenJava,runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:word:25.0.0=pklCodegenJava,runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-api:25.0.0=pklCodegenJava,runtimeClasspath,testRuntimeClasspath org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=pklCodegenJava,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=pklCodegenJava,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=pklCodegenJava,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=pklCodegenJava,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,pklCodegenJava,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,pklCodegenJava,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,pklCodegenJava,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,pklCodegenJava,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
org.jetbrains:markdown-jvm:0.7.3=pklCodegenJava org.jetbrains:markdown-jvm:0.7.3=pklCodegenJava
org.jetbrains:markdown:0.7.3=pklCodegenJava org.jetbrains:markdown:0.7.3=pklCodegenJava
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.13.4=testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=compileClasspath,pklCodegenJava,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.8=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=pklCodegenJava,runtimeClasspath,testRuntimeClasspath org.organicdesign:Paguro:3.10.3=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
org.snakeyaml:snakeyaml-engine:2.10=pklCodegenJava,runtimeClasspath,testRuntimeClasspath org.snakeyaml:snakeyaml-engine:2.10=pklCodegenJava,runtimeClasspath,testRuntimeClasspath
+1 -2
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -82,7 +82,6 @@ dependencies {
api(projects.pklCore) api(projects.pklCore)
implementation(libs.geantyref) implementation(libs.geantyref)
implementation(libs.msgpack)
testImplementation(libs.javaxInject) testImplementation(libs.javaxInject)
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -15,14 +15,9 @@
*/ */
package org.pkl.config.java; package org.pkl.config.java;
import java.io.InputStream;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.Map;
import org.pkl.config.java.mapper.ConversionException; import org.pkl.config.java.mapper.ConversionException;
import org.pkl.config.java.mapper.ValueMapper;
import org.pkl.core.Composite;
import org.pkl.core.Evaluator; import org.pkl.core.Evaluator;
import org.pkl.core.PklBinaryDecoder;
/** /**
* A root, intermediate, or leaf node in a configuration tree. Child nodes can be obtained by name * A root, intermediate, or leaf node in a configuration tree. Child nodes can be obtained by name
@@ -72,51 +67,4 @@ public interface Config {
* @throws ConversionException if the value cannot be converted to the given type * @throws ConversionException if the value cannot be converted to the given type
*/ */
<T> T as(JavaType<T> type); <T> T as(JavaType<T> type);
/**
* Decode a config from the supplied byte array.
*
* @return the encoded config
*/
static Config fromPklBinary(byte[] bytes, ValueMapper mapper) {
return makeConfig(PklBinaryDecoder.decode(bytes), mapper);
}
/**
* Decode a config from the supplied byte array using a preconfigured {@link ValueMapper}.
*
* @return the encoded config
*/
static Config fromPklBinary(byte[] bytes) {
return fromPklBinary(bytes, ValueMapper.preconfigured());
}
/**
* Decode a config from the supplied {@link InputStream} using a preconfigured {@link
* ValueMapper}.
*
* @return the encoded config
*/
static Config fromPklBinary(InputStream inputStream, ValueMapper mapper) {
return makeConfig(PklBinaryDecoder.decode(inputStream), mapper);
}
/**
* Decode a config from the supplied {@link InputStream}.
*
* @return the encoded config
*/
static Config fromPklBinary(InputStream inputStream) {
return fromPklBinary(inputStream, ValueMapper.preconfigured());
}
private static Config makeConfig(Object decoded, ValueMapper mapper) {
if (decoded instanceof Composite composite) {
return new CompositeConfig("", mapper, composite);
}
if (decoded instanceof Map<?, ?> map) {
return new MapConfig("", mapper, map);
}
return new LeafConfig("", mapper, decoded);
}
} }
@@ -1,175 +0,0 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.config.java;
import static org.assertj.core.api.Assertions.*;
import java.nio.file.Path;
import java.util.List;
import org.junit.jupiter.api.Test;
import org.pkl.config.java.mapper.Named;
import org.pkl.config.java.mapper.Types;
import org.pkl.core.PObject;
public abstract class AbstractConfigTest {
private final Config pigeonConfig = getPigeonConfig();
private final Config pigeonModuleConfig = getPigeonModuleConfig();
private final Config pairConfig = getPairConfig();
private final Config mapConfig = getMapConfig();
protected abstract Config getPigeonConfig();
protected abstract Config getPigeonModuleConfig();
protected abstract Config getPairConfig();
protected abstract Config getMapConfig();
@Test
public void navigate() {
var pigeon = pigeonConfig.get("pigeon");
assertThat(pigeon.getQualifiedName()).isEqualTo("pigeon");
assertThat(pigeon.getRawValue()).isInstanceOf(PObject.class);
var address = pigeon.get("address");
assertThat(address.getQualifiedName()).isEqualTo("pigeon.address");
assertThat(address.getRawValue()).isInstanceOf(PObject.class);
var street = address.get("street");
assertThat(street.getQualifiedName()).isEqualTo("pigeon.address.street");
assertThat(street.getRawValue()).isInstanceOf(String.class);
assertThat(street.as(String.class)).isEqualTo("Fuzzy St.");
}
@Test
public void navigateToNonExistingObjectChild() {
var pigeon = pigeonConfig.get("pigeon");
var t = catchThrowable(() -> pigeon.get("non-existing"));
assertThat(t)
.isInstanceOf(NoSuchChildException.class)
.hasMessageStartingWith(
"Node `pigeon` of type `pkl.base#Dynamic` "
+ "does not have a property named `non-existing`.");
}
@Test
public void navigateToNonExistingMapChild() {
var map = mapConfig.get("x");
var t = catchThrowable(() -> map.get("non-existing"));
assertThat(t)
.isInstanceOf(NoSuchChildException.class)
.hasMessageStartingWith(
"Node `x` of type `pkl.base#Map` does not have a key named `non-existing`.");
}
@Test
public void navigateToNonExistingLeafChild() {
var age = pigeonConfig.get("pigeon").get("age");
var t = catchThrowable(() -> age.get("non-existing"));
assertThat(t)
.isInstanceOf(NoSuchChildException.class)
.hasMessageStartingWith(
"Leaf node `pigeon.age` of type `pkl.base#Int` does not have a child named `non-existing`.");
}
@Test
public void convertObjectToPojoByType() {
Person pigeon = pigeonConfig.get("pigeon").as(Person.class);
checkPigeon(pigeon);
}
@Test
public void convertObjectToPojoByJavaType() {
var pigeon = pigeonConfig.get("pigeon").as(JavaType.of(Person.class));
checkPigeon(pigeon);
}
@Test
public void convertModuleToPojoByType() {
var pigeon = pigeonModuleConfig.as(Person.class);
checkPigeon(pigeon);
}
@Test
public void convertModuleToPojoByJavaType() {
var pigeon = pigeonModuleConfig.as(JavaType.of(Person.class));
checkPigeon(pigeon);
}
private void checkPigeon(Person pigeon) {
assertThat(pigeon).isNotNull();
assertThat(pigeon.age).isEqualTo(30);
assertThat(pigeon.friends).containsExactly("john", "mary");
assertThat(pigeon.address.street).isEqualTo("Fuzzy St.");
}
@Test
public void convertToParameterizedTypeByType() {
Pair<Path, Integer> pair =
pairConfig.get("x").as(Types.parameterizedType(Pair.class, Path.class, Integer.class));
checkPair(pair);
}
@Test
public void convertToParameterizedTypeByJavaType() {
var pair = pairConfig.get("x").as(new JavaType<Pair<Path, Integer>>() {});
checkPair(pair);
}
private void checkPair(Pair<?, ?> pair) {
assertThat(pair).isNotNull();
assertThat(pair.first).isEqualTo(Path.of("file/path"));
assertThat(pair.second).isEqualTo(42);
}
public static class Person {
final int age;
final List<String> friends;
final Address address;
public Person(
@Named("age") int age,
@Named("friends") List<String> friends,
@Named("address") Address address) {
this.age = age;
this.friends = friends;
this.address = address;
}
}
public static class Address {
final String street;
public Address(@Named("street") String street) {
this.street = street;
}
}
public static class Pair<S, T> {
final S first;
final T second;
public Pair(@Named("first") S first, @Named("second") T second) {
this.first = first;
this.second = second;
}
}
}
@@ -1,56 +0,0 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.config.java;
import java.util.Base64;
public class ConfigPklBinaryDecoderTest extends AbstractConfigTest {
// generate via: pbpaste | ./pkl-cli/build/executable/jpkl eval /dev/stdin -f pkl-binary | base64
@Override
protected Config getPigeonConfig() {
// pigeon { age = 30; friends = List("john", "mary"); address { street = "Fuzzy St." } }
return Config.fromPklBinary(
Base64.getDecoder()
.decode(
"lAGkdGVzdNklZmlsZTovLy9Vc2Vycy9qYmFzY2gvc3JjL3BrbC90ZXN0LnBrbJGTEKZwaWdlb26UAadEeW5hbWljqHBrbDpiYXNlk5MQo2FnZR6TEKdmcmllbmRzkgSSpGpvaG6kbWFyeZMQp2FkZHJlc3OUAadEeW5hbWljqHBrbDpiYXNlkZMQpnN0cmVldKlGdXp6eSBTdC4="));
}
@Override
protected Config getPigeonModuleConfig() {
// age = 30; friends = List("john", "mary"); address { street = "Fuzzy St." }
return Config.fromPklBinary(
Base64.getDecoder()
.decode(
"lAGlc3RkaW6xZmlsZTovLy9kZXYvc3RkaW6TkxCjYWdlHpMQp2ZyaWVuZHOSBJKkam9obqRtYXJ5kxCnYWRkcmVzc5QBp0R5bmFtaWOocGtsOmJhc2WRkxCmc3RyZWV0qUZ1enp5IFN0Lg=="));
}
@Override
protected Config getPairConfig() {
// x { first = "file/path"; second = 42 }
return Config.fromPklBinary(
Base64.getDecoder()
.decode(
"lAGlc3RkaW6xZmlsZTovLy9kZXYvc3RkaW6RkxCheJQBp0R5bmFtaWOocGtsOmJhc2WSkxClZmlyc3SpZmlsZS9wYXRokxCmc2Vjb25kKg=="));
}
@Override
protected Config getMapConfig() {
// x = Map("one", 1, "two", 2)
return Config.fromPklBinary(
Base64.getDecoder().decode("lAGlc3RkaW6xZmlsZTovLy9kZXYvc3RkaW6RkxCheJICgqNvbmUBo3R3bwI="));
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -15,31 +15,164 @@
*/ */
package org.pkl.config.java; package org.pkl.config.java;
import static org.assertj.core.api.Assertions.*;
import static org.pkl.core.ModuleSource.text; import static org.pkl.core.ModuleSource.text;
public class ConfigTest extends AbstractConfigTest { import java.nio.file.Path;
private static final ConfigEvaluator evaluator = ConfigEvaluator.preconfigured(); import java.util.List;
import org.junit.jupiter.api.Test;
import org.pkl.config.java.mapper.Named;
import org.pkl.config.java.mapper.Types;
import org.pkl.core.PObject;
@Override public class ConfigTest {
protected Config getPigeonConfig() { private final ConfigEvaluator evaluator = ConfigEvaluator.preconfigured();
return evaluator.evaluate(
private final Config pigeonConfig =
evaluator.evaluate(
text( text(
"pigeon { age = 30; friends = List(\"john\", \"mary\"); address { street = \"Fuzzy St.\" } }")); "pigeon { age = 30; friends = List(\"john\", \"mary\"); address { street = \"Fuzzy St.\" } }"));
}
@Override private final Config pigeonModuleConfig =
protected Config getPigeonModuleConfig() { evaluator.evaluate(
return evaluator.evaluate(
text("age = 30; friends = List(\"john\", \"mary\"); address { street = \"Fuzzy St.\" }")); text("age = 30; friends = List(\"john\", \"mary\"); address { street = \"Fuzzy St.\" }"));
private final Config pairConfig =
evaluator.evaluate(text("x { first = \"file/path\"; second = 42 }"));
private final Config mapConfig = evaluator.evaluate(text("x = Map(\"one\", 1, \"two\", 2)"));
@Test
public void navigate() {
var pigeon = pigeonConfig.get("pigeon");
assertThat(pigeon.getQualifiedName()).isEqualTo("pigeon");
assertThat(pigeon.getRawValue()).isInstanceOf(PObject.class);
var address = pigeon.get("address");
assertThat(address.getQualifiedName()).isEqualTo("pigeon.address");
assertThat(address.getRawValue()).isInstanceOf(PObject.class);
var street = address.get("street");
assertThat(street.getQualifiedName()).isEqualTo("pigeon.address.street");
assertThat(street.getRawValue()).isInstanceOf(String.class);
assertThat(street.as(String.class)).isEqualTo("Fuzzy St.");
} }
@Override @Test
protected Config getPairConfig() { public void navigateToNonExistingObjectChild() {
return evaluator.evaluate(text("x { first = \"file/path\"; second = 42 }")); var pigeon = pigeonConfig.get("pigeon");
var t = catchThrowable(() -> pigeon.get("non-existing"));
assertThat(t)
.isInstanceOf(NoSuchChildException.class)
.hasMessageStartingWith(
"Node `pigeon` of type `pkl.base#Dynamic` "
+ "does not have a property named `non-existing`.");
} }
@Override @Test
protected Config getMapConfig() { public void navigateToNonExistingMapChild() {
return evaluator.evaluate(text("x = Map(\"one\", 1, \"two\", 2)")); var map = mapConfig.get("x");
var t = catchThrowable(() -> map.get("non-existing"));
assertThat(t)
.isInstanceOf(NoSuchChildException.class)
.hasMessageStartingWith(
"Node `x` of type `pkl.base#Map` does not have a key named `non-existing`.");
}
@Test
public void navigateToNonExistingLeafChild() {
var age = pigeonConfig.get("pigeon").get("age");
var t = catchThrowable(() -> age.get("non-existing"));
assertThat(t)
.isInstanceOf(NoSuchChildException.class)
.hasMessageStartingWith(
"Leaf node `pigeon.age` of type `pkl.base#Int` does not have a child named `non-existing`.");
}
@Test
public void convertObjectToPojoByType() {
Person pigeon = pigeonConfig.get("pigeon").as(Person.class);
checkPigeon(pigeon);
}
@Test
public void convertObjectToPojoByJavaType() {
var pigeon = pigeonConfig.get("pigeon").as(JavaType.of(Person.class));
checkPigeon(pigeon);
}
@Test
public void convertModuleToPojoByType() {
var pigeon = pigeonModuleConfig.as(Person.class);
checkPigeon(pigeon);
}
@Test
public void convertModuleToPojoByJavaType() {
var pigeon = pigeonModuleConfig.as(JavaType.of(Person.class));
checkPigeon(pigeon);
}
private void checkPigeon(Person pigeon) {
assertThat(pigeon).isNotNull();
assertThat(pigeon.age).isEqualTo(30);
assertThat(pigeon.friends).containsExactly("john", "mary");
assertThat(pigeon.address.street).isEqualTo("Fuzzy St.");
}
@Test
public void convertToParameterizedTypeByType() {
Pair<Path, Integer> pair =
pairConfig.get("x").as(Types.parameterizedType(Pair.class, Path.class, Integer.class));
checkPair(pair);
}
@Test
public void convertToParameterizedTypeByJavaType() {
var pair = pairConfig.get("x").as(new JavaType<Pair<Path, Integer>>() {});
checkPair(pair);
}
private void checkPair(Pair<?, ?> pair) {
assertThat(pair).isNotNull();
assertThat(pair.first).isEqualTo(Path.of("file/path"));
assertThat(pair.second).isEqualTo(42);
}
public static class Person {
final int age;
final List<String> friends;
final Address address;
public Person(
@Named("age") int age,
@Named("friends") List<String> friends,
@Named("address") Address address) {
this.age = age;
this.friends = friends;
this.address = address;
}
}
public static class Address {
final String street;
public Address(@Named("street") String street) {
this.street = street;
}
}
public static class Pair<S, T> {
final S first;
final T second;
public Pair(@Named("first") S first, @Named("second") T second) {
this.first = first;
this.second = second;
}
} }
} }
+40 -55
View File
@@ -21,65 +21,50 @@ com.github.ajalt.mordant:mordant-jvm:3.0.1=pklCodegenKotlin
com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=pklCodegenKotlin com.github.ajalt.mordant:mordant-markdown-jvm:3.0.1=pklCodegenKotlin
com.github.ajalt.mordant:mordant-markdown:3.0.1=pklCodegenKotlin com.github.ajalt.mordant:mordant-markdown:3.0.1=pklCodegenKotlin
com.github.ajalt.mordant:mordant:3.0.1=pklCodegenKotlin com.github.ajalt.mordant:mordant:3.0.1=pklCodegenKotlin
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
com.squareup:kotlinpoet:1.6.0=pklCodegenKotlin com.squareup:kotlinpoet:1.6.0=pklCodegenKotlin
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation io.leangen.geantyref:geantyref:1.3.16=pklConfigJava,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.leangen.geantyref:geantyref:1.3.16=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
net.java.dev.jna:jna:5.14.0=pklCodegenKotlin net.java.dev.jna:jna:5.14.0=pklCodegenKotlin
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.polyglot:polyglot:24.1.2=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:collections:24.1.2=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:graal-sdk:24.1.2=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:nativeimage:24.1.2=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.graalvm.sdk:word:24.1.2=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
org.graalvm.polyglot:polyglot:25.0.0=pklCodegenKotlin,testRuntimeClasspath org.graalvm.truffle:truffle-api:24.1.2=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=pklCodegenKotlin,testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.sdk:graal-sdk:25.0.0=pklCodegenKotlin,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:nativeimage:25.0.0=pklCodegenKotlin,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:word:25.0.0=pklCodegenKotlin,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-api:25.0.0=pklCodegenKotlin,testRuntimeClasspath org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,pklCodegenKotlin,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-reflect:2.0.21=compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath,pklCodegenKotlin,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,pklCodegenKotlin,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,pklCodegenKotlin,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,pklCodegenKotlin,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,pklCodegenKotlin,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,pklCodegenKotlin,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=apiDependenciesMetadata,compileClasspath,implementationDependenciesMetadata,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,pklCodegenKotlin,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,pklCodegenKotlin,runtimeClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable
org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,pklCodegenKotlin,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath
org.jetbrains:markdown-jvm:0.7.3=pklCodegenKotlin org.jetbrains:markdown-jvm:0.7.3=pklCodegenKotlin
org.jetbrains:markdown:0.7.3=pklCodegenKotlin org.jetbrains:markdown:0.7.3=pklCodegenKotlin
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:5.13.4=testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=compileClasspath,pklCodegenKotlin,pklConfigJava,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.8=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=pklCodegenKotlin,testRuntimeClasspath org.organicdesign:Paguro:3.10.3=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
org.snakeyaml:snakeyaml-engine:2.10=pklCodegenKotlin,testRuntimeClasspath org.snakeyaml:snakeyaml-engine:2.10=pklCodegenKotlin,pklConfigJava,runtimeClasspath,testRuntimeClasspath
empty=annotationProcessor,compileOnlyDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,pklConfigJava,pklConfigJavaAll,signatures,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions empty=annotationProcessor,compileOnlyDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,pklConfigJavaAll,signatures,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions
+29 -33
View File
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -25,27 +25,20 @@ val pklConfigJavaAll: Configuration by configurations.creating
val pklCodegenKotlin: Configuration by configurations.creating val pklCodegenKotlin: Configuration by configurations.creating
val buildInfo = project.extensions.getByType<BuildInfo>() // Ideally, api would extend pklConfigJavaAll,
// instead of extending pklConfigJava and then patching test task and POM.
// However, this wouldn't work for IntelliJ.
configurations.api.get().extendsFrom(pklConfigJava)
dependencies { dependencies {
pklCodegenKotlin(projects.pklCodegenKotlin) pklConfigJava(projects.pklConfigJava)
implementation(libs.kotlinReflect)
implementation(libs.msgpack) pklConfigJavaAll(project(":pkl-config-java", "fatJar"))
pklCodegenKotlin(projects.pklCodegenKotlin)
implementation(libs.kotlinReflect)
// Don't declare a runtime dependency to pkl-config-java because Gradle cannot resolve
// the correct publication (library vs fatJar) when generating the POM.
// We add the dependency manually to the POM later.
//
// Avoids this error during publish:
//
// > Failed to query the value of property 'dependencies'.
// > Publishing is not able to resolve a dependency on a project with multiple publications that
// have different coordinates.
// Found the following publications in project ':pkl-config-java':
// - Maven publication 'fatJar' with coordinates org.pkl-lang:pkl-config-java-all:0.30.0-SNAPSHOT
// - Maven publication 'library' with coordinates org.pkl-lang:pkl-config-java:0.30.0-SNAPSHOT
compileOnly(projects.pklConfigJava)
testImplementation(projects.pklConfigJava)
testImplementation(libs.geantyref) testImplementation(libs.geantyref)
} }
@@ -74,6 +67,9 @@ tasks.processTestResources { dependsOn(generateTestConfigClasses) }
tasks.compileTestKotlin { dependsOn(generateTestConfigClasses) } tasks.compileTestKotlin { dependsOn(generateTestConfigClasses) }
// use pkl-config-java-all for testing (same as for publishing)
tasks.test { classpath = classpath - pklConfigJava + pklConfigJavaAll }
// disable publishing of .module until we find a way to manipulate it like POM (or ideally both // disable publishing of .module until we find a way to manipulate it like POM (or ideally both
// together) // together)
tasks.withType<GenerateModuleMetadata> { enabled = false } tasks.withType<GenerateModuleMetadata> { enabled = false }
@@ -87,23 +83,23 @@ publishing {
"Kotlin extensions for pkl-config-java, a Java config library based on the Pkl config language." "Kotlin extensions for pkl-config-java, a Java config library based on the Pkl config language."
) )
// Modify POM and add pkl-config-java-all dependency // change dependency pkl-config-java to pkl-config-java-all
withXml { withXml {
val dependenciesNode = asNode().get("dependencies") as groovy.util.NodeList val projectElement = asElement()
val dependencies = val dependenciesElement =
if (dependenciesNode.isNotEmpty()) { projectElement.getElementsByTagName("dependencies").item(0) as org.w3c.dom.Element
dependenciesNode[0] as groovy.util.Node val dependencyElements = dependenciesElement.getElementsByTagName("dependency")
} else { for (idx in 0 until dependencyElements.length) {
asNode().appendNode("dependencies") val dependencyElement = dependencyElements.item(idx) as org.w3c.dom.Element
} val artifactIdElement =
dependencyElement.getElementsByTagName("artifactId").item(0) as org.w3c.dom.Element
dependencies.appendNode("dependency").apply { if (artifactIdElement.textContent == "pkl-config-java") {
appendNode("groupId", "org.pkl-lang") artifactIdElement.textContent = "pkl-config-java-all"
appendNode("artifactId", "pkl-config-java-all") return@withXml
appendNode("version", project.version)
appendNode("scope", "runtime")
} }
} }
throw GradleException("Failed to edit POM of module `pkl-config-kotlin`.")
}
} }
} }
} }
+36 -51
View File
@@ -1,61 +1,46 @@
# This is a Gradle generated file for dependency locking. # This is a Gradle generated file for dependency locking.
# Manual edits can break the build and are not advised. # Manual edits can break the build and are not advised.
# This file is expected to be part of source control. # This file is expected to be part of source control.
com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable
com.google.code.findbugs:jsr305:3.0.2=compileClasspath,compileOnlyDependenciesMetadata com.google.code.findbugs:jsr305:3.0.2=compileClasspath,compileOnlyDependenciesMetadata
com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable
com.palantir.javapoet:javapoet:0.7.0=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath com.palantir.javapoet:javapoet:0.7.0=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath
io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable
io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable
net.bytebuddy:byte-buddy:1.17.7=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata
org.assertj:assertj-core:3.27.6=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.assertj:assertj-core:3.27.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpg-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.polyglot:polyglot:24.1.2=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:collections:24.1.2=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:graal-sdk:24.1.2=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.graalvm.sdk:nativeimage:24.1.2=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable org.graalvm.sdk:word:24.1.2=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.polyglot:polyglot:25.0.0=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.truffle:truffle-api:24.1.2=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.graalvm.sdk:collections:25.0.0=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.truffle:truffle-dsl-processor:24.1.2=annotationProcessor
org.graalvm.sdk:graal-sdk:25.0.0=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.graalvm.sdk:nativeimage:25.0.0=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.sdk:word:25.0.0=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-api:25.0.0=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath
org.graalvm.truffle:truffle-dsl-processor:25.0.0=annotationProcessor org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:abi-tools-api:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:abi-tools:2.2.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-build-tools-api:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.20=kotlinBuildToolsApiClasspath org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-compiler-runner:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-client:2.2.20=kotlinBuildToolsApiClasspath
org.jetbrains.kotlin:kotlin-daemon-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.2.20=kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-metadata-jvm:2.2.20=kotlinInternalAbiValidation
org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration
org.jetbrains.kotlin:kotlin-reflect:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-script-runtime:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath
org.jetbrains.kotlin:kotlin-scripting-common:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-scripting-jvm:2.2.20=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest
org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.2.20=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.2.20=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:kotlin-stdlib:2.2.20=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.jetbrains.kotlin:kotlin-stdlib:2.0.21=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlin:swift-export-embeddable:2.2.20=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable org.jetbrains:annotations:13.0=generatorCompileClasspath,generatorRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinKlibCommonizerClasspath,testCompileClasspath,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-api:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-engine:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.junit.jupiter:junit-jupiter-params:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.jetbrains:annotations:13.0=generatorCompileClasspath,generatorRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.junit.platform:junit-platform-commons:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-api:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-engine:1.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.jupiter:junit-jupiter-engine:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit.platform:junit-platform-launcher:1.13.4=testRuntimeClasspath
org.junit.jupiter:junit-jupiter-params:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.junit:junit-bom:5.13.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-commons:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-engine:1.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.junit.platform:junit-platform-launcher:1.14.0=testRuntimeClasspath
org.junit:junit-bom:5.14.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.msgpack:msgpack-core:0.9.8=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.msgpack:msgpack-core:0.9.8=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
org.organicdesign:Paguro:3.10.3=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.organicdesign:Paguro:3.10.3=compileClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath
@@ -22,7 +22,6 @@ import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Context;
import org.pkl.core.evaluatorSettings.TraceMode;
import org.pkl.core.http.HttpClient; import org.pkl.core.http.HttpClient;
import org.pkl.core.http.HttpClientInitException; import org.pkl.core.http.HttpClientInitException;
import org.pkl.core.module.ModuleKeyFactory; import org.pkl.core.module.ModuleKeyFactory;
@@ -47,7 +46,6 @@ public class Analyzer {
private final @Nullable DeclaredDependencies projectDependencies; private final @Nullable DeclaredDependencies projectDependencies;
private final ModuleResolver moduleResolver; private final ModuleResolver moduleResolver;
private final HttpClient httpClient; private final HttpClient httpClient;
private final TraceMode traceMode;
public Analyzer( public Analyzer(
StackFrameTransformer transformer, StackFrameTransformer transformer,
@@ -56,8 +54,7 @@ public class Analyzer {
Collection<ModuleKeyFactory> moduleKeyFactories, Collection<ModuleKeyFactory> moduleKeyFactories,
@Nullable Path moduleCacheDir, @Nullable Path moduleCacheDir,
@Nullable DeclaredDependencies projectDependencies, @Nullable DeclaredDependencies projectDependencies,
HttpClient httpClient, HttpClient httpClient) {
TraceMode traceMode) {
this.transformer = transformer; this.transformer = transformer;
this.color = color; this.color = color;
this.securityManager = securityManager; this.securityManager = securityManager;
@@ -65,7 +62,6 @@ public class Analyzer {
this.projectDependencies = projectDependencies; this.projectDependencies = projectDependencies;
this.moduleResolver = new ModuleResolver(moduleKeyFactories); this.moduleResolver = new ModuleResolver(moduleKeyFactories);
this.httpClient = httpClient; this.httpClient = httpClient;
this.traceMode = traceMode;
} }
/** /**
@@ -119,8 +115,7 @@ public class Analyzer {
projectDependencies == null projectDependencies == null
? null ? null
: new ProjectDependenciesManager( : new ProjectDependenciesManager(
projectDependencies, moduleResolver, securityManager), projectDependencies, moduleResolver, securityManager)));
traceMode));
}); });
} }
} }
@@ -172,15 +172,6 @@ public interface Evaluator extends AutoCloseable {
*/ */
Object evaluateExpression(ModuleSource moduleSource, String expression); Object evaluateExpression(ModuleSource moduleSource, String expression);
/**
* Evaluates the Pkl expression represented as {@code expression}, returning a byte array of the
* <code>pkl-binary</code>-encoded representation of the result.
*
* @throws PklException if an error occurs during evaluation
* @throws IllegalStateException if this evaluator has already been closed
*/
byte[] evaluateExpressionPklBinary(ModuleSource moduleSource, String expression);
/** /**
* Evaluates the Pkl expression, returning the stringified result. * Evaluates the Pkl expression, returning the stringified result.
* *
@@ -21,7 +21,6 @@ import java.util.*;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.pkl.core.SecurityManagers.StandardBuilder; import org.pkl.core.SecurityManagers.StandardBuilder;
import org.pkl.core.evaluatorSettings.PklEvaluatorSettings.ExternalReader; import org.pkl.core.evaluatorSettings.PklEvaluatorSettings.ExternalReader;
import org.pkl.core.evaluatorSettings.TraceMode;
import org.pkl.core.externalreader.ExternalReaderProcess; import org.pkl.core.externalreader.ExternalReaderProcess;
import org.pkl.core.http.HttpClient; import org.pkl.core.http.HttpClient;
import org.pkl.core.module.ModuleKeyFactories; import org.pkl.core.module.ModuleKeyFactories;
@@ -68,8 +67,6 @@ public final class EvaluatorBuilder {
private @Nullable DeclaredDependencies dependencies; private @Nullable DeclaredDependencies dependencies;
private TraceMode traceMode = TraceMode.COMPACT;
private EvaluatorBuilder() {} private EvaluatorBuilder() {}
/** /**
@@ -457,17 +454,6 @@ public final class EvaluatorBuilder {
return this.dependencies; return this.dependencies;
} }
/** Sets whether calls to trace() produce indented, multi-line output. */
public EvaluatorBuilder setTraceMode(TraceMode traceMode) {
this.traceMode = traceMode;
return this;
}
/** Returns whether calls to trace() produce indented, multi-line output. */
public TraceMode getTraceMode() {
return this.traceMode;
}
/** /**
* Given a project, sets its dependencies, and also applies any evaluator settings if set. * Given a project, sets its dependencies, and also applies any evaluator settings if set.
* *
@@ -531,7 +517,6 @@ public final class EvaluatorBuilder {
procs.computeIfAbsent(entry.getValue(), ExternalReaderProcess::of))); procs.computeIfAbsent(entry.getValue(), ExternalReaderProcess::of)));
} }
} }
if (settings.http() != null) { if (settings.http() != null) {
var httpClientBuilder = HttpClient.builder(); var httpClientBuilder = HttpClient.builder();
if (settings.http().proxy() != null) { if (settings.http().proxy() != null) {
@@ -546,11 +531,6 @@ public final class EvaluatorBuilder {
} }
setHttpClient(httpClientBuilder.buildLazily()); setHttpClient(httpClientBuilder.buildLazily());
} }
if (settings.traceMode() != null) {
setTraceMode(settings.traceMode());
}
return this; return this;
} }
@@ -577,7 +557,6 @@ public final class EvaluatorBuilder {
timeout, timeout,
moduleCacheDir, moduleCacheDir,
dependencies, dependencies,
outputFormat, outputFormat);
traceMode);
} }
} }
@@ -28,11 +28,8 @@ import java.util.concurrent.TimeUnit;
import java.util.function.Function; import java.util.function.Function;
import java.util.function.Supplier; import java.util.function.Supplier;
import org.graalvm.polyglot.Context; import org.graalvm.polyglot.Context;
import org.msgpack.core.MessageBufferPacker;
import org.msgpack.core.MessagePack;
import org.pkl.core.ast.ConstantValueNode; import org.pkl.core.ast.ConstantValueNode;
import org.pkl.core.ast.internal.ToStringNodeGen; import org.pkl.core.ast.internal.ToStringNodeGen;
import org.pkl.core.evaluatorSettings.TraceMode;
import org.pkl.core.http.HttpClient; import org.pkl.core.http.HttpClient;
import org.pkl.core.module.ModuleKeyFactory; import org.pkl.core.module.ModuleKeyFactory;
import org.pkl.core.module.ProjectDependenciesManager; import org.pkl.core.module.ProjectDependenciesManager;
@@ -50,7 +47,6 @@ import org.pkl.core.runtime.VmExceptionBuilder;
import org.pkl.core.runtime.VmLanguage; import org.pkl.core.runtime.VmLanguage;
import org.pkl.core.runtime.VmMapping; import org.pkl.core.runtime.VmMapping;
import org.pkl.core.runtime.VmNull; import org.pkl.core.runtime.VmNull;
import org.pkl.core.runtime.VmPklBinaryEncoder;
import org.pkl.core.runtime.VmStackOverflowException; import org.pkl.core.runtime.VmStackOverflowException;
import org.pkl.core.runtime.VmTyped; import org.pkl.core.runtime.VmTyped;
import org.pkl.core.runtime.VmUtils; import org.pkl.core.runtime.VmUtils;
@@ -59,18 +55,17 @@ import org.pkl.core.runtime.VmValueRenderer;
import org.pkl.core.util.ErrorMessages; import org.pkl.core.util.ErrorMessages;
import org.pkl.core.util.Nullable; import org.pkl.core.util.Nullable;
public final class EvaluatorImpl implements Evaluator { public class EvaluatorImpl implements Evaluator {
private final StackFrameTransformer frameTransformer; protected final StackFrameTransformer frameTransformer;
private final boolean color; protected final boolean color;
private final ModuleResolver moduleResolver; protected final ModuleResolver moduleResolver;
private final Context polyglotContext; protected final Context polyglotContext;
private final @Nullable Duration timeout; protected final @Nullable Duration timeout;
private final @Nullable ScheduledExecutorService timeoutExecutor; protected final @Nullable ScheduledExecutorService timeoutExecutor;
private final SecurityManager securityManager; protected final SecurityManager securityManager;
private final BufferedLogger logger; protected final BufferedLogger logger;
private final PackageResolver packageResolver; protected final PackageResolver packageResolver;
private final VmValueRenderer vmValueRenderer = VmValueRenderer.singleLine(1000); private final VmValueRenderer vmValueRenderer = VmValueRenderer.singleLine(1000);
private @Nullable MessageBufferPacker messagePacker;
public EvaluatorImpl( public EvaluatorImpl(
StackFrameTransformer transformer, StackFrameTransformer transformer,
@@ -85,8 +80,7 @@ public final class EvaluatorImpl implements Evaluator {
@Nullable Duration timeout, @Nullable Duration timeout,
@Nullable Path moduleCacheDir, @Nullable Path moduleCacheDir,
@Nullable DeclaredDependencies projectDependencies, @Nullable DeclaredDependencies projectDependencies,
@Nullable String outputFormat, @Nullable String outputFormat) {
TraceMode traceMode) {
securityManager = manager; securityManager = manager;
frameTransformer = transformer; frameTransformer = transformer;
@@ -114,8 +108,7 @@ public final class EvaluatorImpl implements Evaluator {
projectDependencies == null projectDependencies == null
? null ? null
: new ProjectDependenciesManager( : new ProjectDependenciesManager(
projectDependencies, moduleResolver, securityManager), projectDependencies, moduleResolver, securityManager)));
traceMode));
}); });
this.timeout = timeout; this.timeout = timeout;
// NOTE: would probably make sense to share executor between evaluators // NOTE: would probably make sense to share executor between evaluators
@@ -221,37 +214,6 @@ public final class EvaluatorImpl implements Evaluator {
}; };
} }
private MessageBufferPacker getMessagePacker() {
if (messagePacker == null) {
messagePacker = MessagePack.newDefaultBufferPacker();
}
messagePacker.clear();
return messagePacker;
}
@Override
public byte[] evaluateExpressionPklBinary(ModuleSource moduleSource, String expression) {
return doEvaluate(
moduleSource,
(module) -> {
var expressionResult =
switch (expression) {
case "module" -> module;
case "output.text" -> VmUtils.readTextProperty(readModuleOutput(module));
case "output.value" ->
VmUtils.readMember(readModuleOutput(module), Identifier.VALUE);
case "output.bytes" -> VmUtils.readBytesProperty(readModuleOutput(module));
default ->
VmUtils.evaluateExpression(module, expression, securityManager, moduleResolver);
};
VmValue.force(expressionResult, false);
var packer = getMessagePacker();
new VmPklBinaryEncoder(packer).renderDocument(expressionResult);
return packer.toByteArray();
});
}
@Override @Override
public String evaluateExpressionString(ModuleSource moduleSource, String expression) { public String evaluateExpressionString(ModuleSource moduleSource, String expression) {
// optimization: if the expression is `output.text` (the common case), read members // optimization: if the expression is `output.text` (the common case), read members
@@ -398,7 +360,7 @@ public final class EvaluatorImpl implements Evaluator {
return evalResult; return evalResult;
} }
private <T> T doEvaluate(ModuleSource moduleSource, Function<VmTyped, T> doEvaluate) { protected <T> T doEvaluate(ModuleSource moduleSource, Function<VmTyped, T> doEvaluate) {
return doEvaluate( return doEvaluate(
() -> { () -> {
var moduleKey = moduleResolver.resolve(moduleSource); var moduleKey = moduleResolver.resolve(moduleSource);
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -80,13 +80,6 @@ public final class Loggers {
} }
private static String formatMessage(String level, String message, StackFrame frame) { private static String formatMessage(String level, String message, StackFrame frame) {
return "pkl: " return "pkl: " + level + ": " + message + " (" + frame.getModuleUri() + ')';
+ level
+ ": "
+ message
+ (message.endsWith("\n") ? "" : " ")
+ "("
+ frame.getModuleUri()
+ ')';
} }
} }
@@ -1,184 +0,0 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.core;
import java.io.IOException;
import java.io.InputStream;
import java.io.UncheckedIOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessageUnpacker;
import org.pkl.core.runtime.BaseModule;
import org.pkl.core.util.CollectionUtils;
import org.pkl.core.util.pklbinary.AbstractPklBinaryDecoder;
/**
* A decoder/parser for <code>pkl-binary</code>.
*
* <p>For how pkl-binary turns Java, see {@link Value}.
*/
public class PklBinaryDecoder extends AbstractPklBinaryDecoder {
private PklBinaryDecoder(MessageUnpacker unpacker) {
super(unpacker);
}
/** Decode a value from the supplied byte array. */
public static Object decode(byte[] bytes) {
return new PklBinaryDecoder(MessagePack.newDefaultUnpacker(bytes)).decode();
}
/** Decode a value from the supplied {@link InputStream}. */
public static Object decode(InputStream inputStream) {
return new PklBinaryDecoder(MessagePack.newDefaultUnpacker(inputStream)).decode();
}
@Override
protected RuntimeException doFail(Exception cause, long offset, List<String> path) {
return new RuntimeException(
String.format(
"Exception while decoding binary data at offset %d, path [%s]",
offset, String.join(", ", path)),
cause);
}
@Override
protected RuntimeException doIOFail(IOException cause) {
return new UncheckedIOException("IO exception during decoding", cause);
}
@Override
protected Object doDecodeNull() {
return PNull.getInstance();
}
@Override
protected Object doDecodeDuration(double value, DurationUnit unit) {
return new Duration(value, unit);
}
@Override
protected Object doDecodeObject(
String className, URI moduleUri, DecodeIterator<DecodedObjectMember> iter) {
var properties = CollectionUtils.<String, Object>newLinkedHashMap(iter.getSize());
while (iter.hasNext()) {
var member = iter.next();
properties.put(member.key().toString(), member.value());
}
if (moduleUri.equals(PClassInfo.pklBaseUri)) {
// dynamic
if (className.equals(BaseModule.getDynamicClass().getDisplayName())) {
return new PObject(PClassInfo.Dynamic, properties);
}
// pkl:base typed
if (!className.equals(BaseModule.getModule().getVmClass().getDisplayName())) {
return new PObject(PClassInfo.get("pkl.base", className, moduleUri), properties);
}
// fall through to module case
}
// module
var hashIndex = className.lastIndexOf("#");
if (hashIndex < 0) {
return new PModule(
moduleUri, className, PClassInfo.get(className, "ModuleClass", moduleUri), properties);
}
// non-pkl:base class
return new PObject(
PClassInfo.get(
className.substring(0, hashIndex), className.substring(hashIndex + 1), moduleUri),
properties);
}
@Override
protected Object doDecodeMap(MapDecodeIterator iter) {
var map = CollectionUtils.newLinkedHashMap(iter.getSize());
while (iter.hasNext()) {
var entry = iter.next();
map.put(entry.getFirst(), entry.getSecond());
}
return map;
}
@Override
protected Object doDecodeMapping(MapDecodeIterator iter) {
return doDecodeMap(iter); // same exported result!
}
@Override
protected Object doDecodeList(CollectionDecodeIterator iter) {
var listing = new ArrayList<>(iter.getSize());
while (iter.hasNext()) {
listing.add(iter.next());
}
return listing;
}
@Override
protected Object doDecodeListing(CollectionDecodeIterator iter) {
return doDecodeList(iter); // same exported result!
}
@Override
protected Object doDecodeSet(CollectionDecodeIterator iter) {
var set = CollectionUtils.newLinkedHashSet(iter.getSize());
while (iter.hasNext()) {
set.add(iter.next());
}
return set;
}
@Override
protected Object doDecodeDataSize(double value, DataSizeUnit unit) {
return new DataSize(value, unit);
}
@Override
protected Object doDecodePair(Object first, Object second) {
return new Pair<>(first, second);
}
@Override
protected Object doDecodeIntSeq(long start, long end, long step) {
throw new DecodeException("Cannot decode IntSeq value");
}
@Override
protected Object doDecodeRegex(Pattern pattern) {
return pattern;
}
@Override
protected Object doDecodeClass(String qualifiedName, URI moduleUri) {
throw new DecodeException("Cannot decode Class value");
}
@Override
protected Object doDecodeTypeAlias(String qualifiedName, URI moduleUri) {
throw new DecodeException("Cannot decode TypeAlias value");
}
@Override
protected Object doDecodeBytes(byte[] bytes) {
return bytes;
}
}
@@ -145,17 +145,17 @@ public final class SecurityManagers {
@Override @Override
public void checkResolveModule(URI uri) throws SecurityManagerException { public void checkResolveModule(URI uri) throws SecurityManagerException {
checkRead(uri, allowedModules, false); checkRead(uri, allowedModules, "moduleNotInAllowList");
} }
@Override @Override
public void checkResolveResource(URI resource) throws SecurityManagerException { public void checkResolveResource(URI resource) throws SecurityManagerException {
checkRead(resource, allowedResources, true); checkRead(resource, allowedResources, "resourceNotInAllowList");
} }
@Override @Override
public void checkReadResource(URI uri) throws SecurityManagerException { public void checkReadResource(URI uri) throws SecurityManagerException {
checkRead(uri, allowedResources, true); checkRead(uri, allowedResources, "resourceNotInAllowList");
} }
@Override @Override
@@ -185,21 +185,21 @@ public final class SecurityManagers {
} }
} }
private void checkRead(URI uri, List<Pattern> allowedPatterns, boolean isResource) private void checkRead(URI uri, List<Pattern> allowedPatterns, String errorMessageKey)
throws SecurityManagerException { throws SecurityManagerException {
for (var pattern : allowedPatterns) { for (var pattern : allowedPatterns) {
if (pattern.matcher(uri.toString()).lookingAt()) { if (pattern.matcher(uri.toString()).lookingAt()) {
checkIsUnderRootDir(uri, isResource); checkIsUnderRootDir(uri, errorMessageKey);
return; return;
} }
} }
var messageKey = isResource ? "resourceNotInAllowList" : "moduleNotInAllowList"; var message = ErrorMessages.create(errorMessageKey, uri);
var message = ErrorMessages.create(messageKey, uri);
throw new SecurityManagerException(message); throw new SecurityManagerException(message);
} }
private void checkIsUnderRootDir(URI uri, boolean isResource) throws SecurityManagerException { private void checkIsUnderRootDir(URI uri, String errorMessageKey)
throws SecurityManagerException {
if (!uri.isAbsolute()) { if (!uri.isAbsolute()) {
throw new AssertionError("Expected absolute URI but got: " + uri); throw new AssertionError("Expected absolute URI but got: " + uri);
} }
@@ -220,8 +220,7 @@ public final class SecurityManagers {
} }
if (!path.startsWith(rootDir)) { if (!path.startsWith(rootDir)) {
var errorMessageKey = isResource ? "resourcePastRootDir" : "modulePastRootDir"; var message = ErrorMessages.create(errorMessageKey, uri);
var message = ErrorMessages.create(errorMessageKey, uri, rootDir);
throw new SecurityManagerException(message); throw new SecurityManagerException(message);
} }
} }
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -53,7 +53,7 @@ public final class TypeAlias extends Member implements Value {
/** /**
* Returns the name of the module that this type alias is declared in. Note that a module name is * Returns the name of the module that this type alias is declared in. Note that a module name is
* not guaranteed to be unique, especially if it is not declared but inferred from the module URI. * not guaranteed to be unique, especially if it not declared but inferred from the module URI.
*/ */
public String getModuleName() { public String getModuleName() {
return moduleName; return moduleName;
@@ -153,7 +153,8 @@ final class YamlRenderer implements ValueRenderer {
@Override @Override
public void visitBytes(byte[] value) { public void visitBytes(byte[] value) {
emitter.emit(YamlUtils.bytesScalar(value)); throw new RendererException(
String.format("Values of type `Bytes` cannot be rendered as YAML. Value: %s", value));
} }
@Override @Override
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -18,18 +18,13 @@ package org.pkl.core.ast.expression.unary;
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.source.SourceSection; import com.oracle.truffle.api.source.SourceSection;
import java.util.Arrays;
import java.util.stream.Collectors;
import org.pkl.core.ast.ExpressionNode; import org.pkl.core.ast.ExpressionNode;
import org.pkl.core.runtime.*; import org.pkl.core.runtime.*;
public final class TraceNode extends ExpressionNode { public final class TraceNode extends ExpressionNode {
@Child private ExpressionNode valueNode; @Child private ExpressionNode valueNode;
private static final int MAX_RENDERER_LENGTH = 1000000; private final VmValueRenderer renderer = VmValueRenderer.singleLine(1000000);
private final VmValueRenderer compactRenderer = VmValueRenderer.singleLine(MAX_RENDERER_LENGTH);
private final VmValueRenderer prettyRenderer = VmValueRenderer.multiLine(Integer.MAX_VALUE);
public TraceNode(SourceSection sourceSection, ExpressionNode valueNode) { public TraceNode(SourceSection sourceSection, ExpressionNode valueNode) {
super(sourceSection); super(sourceSection);
@@ -45,23 +40,20 @@ public final class TraceNode extends ExpressionNode {
@TruffleBoundary @TruffleBoundary
private void doTrace(Object value, VmContext context) { private void doTrace(Object value, VmContext context) {
VmValue.force(value, true); if (value instanceof VmObjectLike objectLike) {
var sourceSection = valueNode.getSourceSection(); try {
var lhs = sourceSection.isAvailable() ? sourceSection.getCharacters().toString() : "<value>"; objectLike.force(true, true);
var message = } catch (VmException ignored) {
switch (context.getTraceMode()) {
case COMPACT -> lhs + " = " + compactRenderer.render(value);
case PRETTY -> {
var rhs = prettyRenderer.render(value);
yield (lhs.contains("\n") ? "\n" + addIndent(lhs, " ") + "\n=" : lhs + " =")
+ (rhs.contains("\n") ? "\n" + addIndent(rhs, " ") : " " + rhs)
+ "\n";
} }
};
context.getLogger().trace(message, VmUtils.createStackFrame(sourceSection, null));
} }
private static String addIndent(String s, String indent) { var sourceSection = valueNode.getSourceSection();
return Arrays.stream(s.split("\n")).map((it) -> indent + it).collect(Collectors.joining("\n")); var renderedValue = renderer.render(value);
var message =
(sourceSection.isAvailable() ? sourceSection.getCharacters() : "<value")
+ " = "
+ renderedValue;
context.getLogger().trace(message, VmUtils.createStackFrame(sourceSection, null));
} }
} }
@@ -16,7 +16,6 @@
package org.pkl.core.ast.member; package org.pkl.core.ast.member;
import com.oracle.truffle.api.source.SourceSection; import com.oracle.truffle.api.source.SourceSection;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.pkl.core.Member.SourceLocation; import org.pkl.core.Member.SourceLocation;
import org.pkl.core.PClass; import org.pkl.core.PClass;
@@ -68,44 +67,8 @@ public final class ClassProperty extends ClassMember {
return name.toString(); return name.toString();
} }
public static final class Mirror { public VmTyped getMirror() {
private final ClassProperty prop; return MirrorFactories.propertyFactory.create(this);
private final VmClass clazz;
Mirror(ClassProperty prop, VmClass clazz) {
this.prop = prop;
this.clazz = clazz;
}
public ClassProperty getProperty() {
return prop;
}
public List<VmTyped> getAllAnnotations() {
var annotations = new ArrayList<VmTyped>();
for (var klazz = clazz; klazz != null; klazz = klazz.getSuperclass()) {
var p = klazz.getDeclaredProperty(prop.getName());
if (p != null) {
annotations.addAll(p.getAnnotations());
}
}
return annotations;
}
public VmSet getAllModifierMirrors() {
var mods = 0;
for (var klazz = clazz; klazz != null; klazz = klazz.getSuperclass()) {
var parent = klazz.getDeclaredProperty(prop.getName());
if (parent != null) {
mods |= parent.getModifiers();
}
}
return VmModifier.getMirrors(mods, false);
}
}
public VmTyped getMirror(VmClass clazz) {
return MirrorFactories.propertyFactory.create(new Mirror(this, clazz));
} }
public VmSet getModifierMirrors() { public VmSet getModifierMirrors() {
@@ -50,8 +50,7 @@ public record PklEvaluatorSettings(
@Nullable Path rootDir, @Nullable Path rootDir,
@Nullable Http http, @Nullable Http http,
@Nullable Map<String, ExternalReader> externalModuleReaders, @Nullable Map<String, ExternalReader> externalModuleReaders,
@Nullable Map<String, ExternalReader> externalResourceReaders, @Nullable Map<String, ExternalReader> externalResourceReaders) {
@Nullable TraceMode traceMode) {
/** Initializes a {@link PklEvaluatorSettings} from a raw object representation. */ /** Initializes a {@link PklEvaluatorSettings} from a raw object representation. */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@@ -107,7 +106,6 @@ public record PklEvaluatorSettings(
Entry::getKey, entry -> ExternalReader.parse(entry.getValue()))); Entry::getKey, entry -> ExternalReader.parse(entry.getValue())));
var color = (String) pSettings.get("color"); var color = (String) pSettings.get("color");
var traceMode = (String) pSettings.get("traceMode");
return new PklEvaluatorSettings( return new PklEvaluatorSettings(
(Map<String, String>) pSettings.get("externalProperties"), (Map<String, String>) pSettings.get("externalProperties"),
@@ -122,8 +120,7 @@ public record PklEvaluatorSettings(
rootDir, rootDir,
Http.parse((Value) pSettings.get("http")), Http.parse((Value) pSettings.get("http")),
externalModuleReaders, externalModuleReaders,
externalResourceReaders, externalResourceReaders);
traceMode == null ? null : TraceMode.valueOf(traceMode.toUpperCase()));
} }
public record Http(@Nullable Proxy proxy, @Nullable Map<URI, URI> rewrites) { public record Http(@Nullable Proxy proxy, @Nullable Map<URI, URI> rewrites) {
@@ -234,8 +231,7 @@ public record PklEvaluatorSettings(
&& Objects.equals(moduleCacheDir, that.moduleCacheDir) && Objects.equals(moduleCacheDir, that.moduleCacheDir)
&& Objects.equals(timeout, that.timeout) && Objects.equals(timeout, that.timeout)
&& Objects.equals(rootDir, that.rootDir) && Objects.equals(rootDir, that.rootDir)
&& Objects.equals(http, that.http) && Objects.equals(http, that.http);
&& Objects.equals(traceMode, that.traceMode);
} }
private int hashPatterns(@Nullable List<Pattern> patterns) { private int hashPatterns(@Nullable List<Pattern> patterns) {
@@ -253,15 +249,7 @@ public record PklEvaluatorSettings(
public int hashCode() { public int hashCode() {
var result = var result =
Objects.hash( Objects.hash(
externalProperties, externalProperties, env, color, noCache, moduleCacheDir, timeout, rootDir, http);
env,
color,
noCache,
moduleCacheDir,
timeout,
rootDir,
http,
traceMode);
result = 31 * result + hashPatterns(allowedModules); result = 31 * result + hashPatterns(allowedModules);
result = 31 * result + hashPatterns(allowedResources); result = 31 * result + hashPatterns(allowedResources);
return result; return result;
@@ -1,24 +0,0 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.core.evaluatorSettings;
/** Dictates the rendering of calls to the trace() method within Pkl. */
public enum TraceMode {
/** All structures passed to trace() will be emitted on a single line. */
COMPACT,
/** All structures passed to trace() will be indented and emitted across multiple lines. */
PRETTY
}
@@ -79,8 +79,7 @@ public abstract class AbstractMessagePackEncoder implements MessageEncoder {
@Nullable Object valueC, @Nullable Object valueC,
@Nullable Object valueD, @Nullable Object valueD,
@Nullable Object valueE, @Nullable Object valueE,
@Nullable Object valueF, @Nullable Object valueF)
@Nullable Object valueG)
throws IOException { throws IOException {
packer.packMapHeader( packer.packMapHeader(
size size
@@ -98,8 +97,7 @@ public abstract class AbstractMessagePackEncoder implements MessageEncoder {
+ (valueC != null ? 1 : 0) + (valueC != null ? 1 : 0)
+ (valueD != null ? 1 : 0) + (valueD != null ? 1 : 0)
+ (valueE != null ? 1 : 0) + (valueE != null ? 1 : 0)
+ (valueF != null ? 1 : 0) + (valueF != null ? 1 : 0));
+ (valueG != null ? 1 : 0));
} }
protected void packKeyValue(String name, @Nullable Integer value) throws IOException { protected void packKeyValue(String name, @Nullable Integer value) throws IOException {
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -43,7 +43,6 @@ import org.pkl.core.StackFrameTransformers;
import org.pkl.core.Value; import org.pkl.core.Value;
import org.pkl.core.Version; import org.pkl.core.Version;
import org.pkl.core.evaluatorSettings.PklEvaluatorSettings; import org.pkl.core.evaluatorSettings.PklEvaluatorSettings;
import org.pkl.core.evaluatorSettings.TraceMode;
import org.pkl.core.module.ModuleKeyFactories; import org.pkl.core.module.ModuleKeyFactories;
import org.pkl.core.packages.Checksums; import org.pkl.core.packages.Checksums;
import org.pkl.core.packages.Dependency.RemoteDependency; import org.pkl.core.packages.Dependency.RemoteDependency;
@@ -198,8 +197,7 @@ public final class Project {
builder.getModuleKeyFactories(), builder.getModuleKeyFactories(),
builder.getModuleCacheDir(), builder.getModuleCacheDir(),
builder.getProjectDependencies(), builder.getProjectDependencies(),
builder.getHttpClient(), builder.getHttpClient());
builder.getTraceMode());
var importGraph = analyzer.importGraph(moduleSource.getUri()); var importGraph = analyzer.importGraph(moduleSource.getUri());
var ret = ImportGraphUtils.findImportCycles(importGraph); var ret = ImportGraphUtils.findImportCycles(importGraph);
// we only care about cycles in the same scheme as `moduleSource` // we only care about cycles in the same scheme as `moduleSource`
@@ -513,8 +511,7 @@ public final class Project {
@Nullable Path moduleCacheDir, @Nullable Path moduleCacheDir,
@Nullable List<Path> modulePath, @Nullable List<Path> modulePath,
@Nullable Duration timeout, @Nullable Duration timeout,
@Nullable Path rootDir, @Nullable Path rootDir) {
@Nullable TraceMode traceMode) {
this.delegate = this.delegate =
new PklEvaluatorSettings( new PklEvaluatorSettings(
externalProperties, externalProperties,
@@ -529,8 +526,7 @@ public final class Project {
rootDir, rootDir,
null, null,
null, null,
null, null);
traceMode);
} }
@Deprecated(forRemoval = true) @Deprecated(forRemoval = true)
@@ -614,8 +610,6 @@ public final class Project {
+ delegate.timeout() + delegate.timeout()
+ ", rootDir=" + ", rootDir="
+ delegate.rootDir() + delegate.rootDir()
+ ", traceMode="
+ delegate.traceMode()
+ '}'; + '}';
} }
} }
@@ -32,7 +32,6 @@ import org.pkl.core.ast.builder.AstBuilder;
import org.pkl.core.ast.member.*; import org.pkl.core.ast.member.*;
import org.pkl.core.ast.repl.ResolveClassMemberNode; import org.pkl.core.ast.repl.ResolveClassMemberNode;
import org.pkl.core.ast.type.TypeNode; import org.pkl.core.ast.type.TypeNode;
import org.pkl.core.evaluatorSettings.TraceMode;
import org.pkl.core.http.HttpClient; import org.pkl.core.http.HttpClient;
import org.pkl.core.module.*; import org.pkl.core.module.*;
import org.pkl.core.packages.PackageResolver; import org.pkl.core.packages.PackageResolver;
@@ -83,8 +82,7 @@ public class ReplServer implements AutoCloseable {
@Nullable String outputFormat, @Nullable String outputFormat,
Path workingDir, Path workingDir,
StackFrameTransformer frameTransformer, StackFrameTransformer frameTransformer,
boolean color, boolean color) {
TraceMode traceMode) {
this.workingDir = workingDir; this.workingDir = workingDir;
this.securityManager = securityManager; this.securityManager = securityManager;
@@ -116,8 +114,7 @@ public class ReplServer implements AutoCloseable {
moduleCacheDir, moduleCacheDir,
outputFormat, outputFormat,
packageResolver, packageResolver,
projectDependenciesManager, projectDependenciesManager));
traceMode));
}); });
language = languageRef.get(); language = languageRef.get();
} }
@@ -143,9 +143,6 @@ public final class Identifier implements Comparable<Identifier> {
// members of pkl.yaml // members of pkl.yaml
public static final Identifier MAX_COLLECTION_ALIASES = get("maxCollectionAliases"); public static final Identifier MAX_COLLECTION_ALIASES = get("maxCollectionAliases");
// members of pkl.encoding
public static final Identifier IMPORTS = get("imports");
// common in lambdas etc // common in lambdas etc
public static final Identifier IT = get("it"); public static final Identifier IT = get("it");
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -37,7 +37,7 @@ public final class MirrorFactories {
public static final VmObjectFactory<VmTypeAlias> typeAliasFactory = public static final VmObjectFactory<VmTypeAlias> typeAliasFactory =
new VmObjectFactory<>(ReflectModule::getTypeAliasClass); new VmObjectFactory<>(ReflectModule::getTypeAliasClass);
public static final VmObjectFactory<ClassProperty.Mirror> propertyFactory = public static final VmObjectFactory<ClassProperty> propertyFactory =
new VmObjectFactory<>(ReflectModule::getPropertyClass); new VmObjectFactory<>(ReflectModule::getPropertyClass);
public static final VmObjectFactory<ClassMethod> methodFactory = public static final VmObjectFactory<ClassMethod> methodFactory =
@@ -146,10 +146,8 @@ public final class MirrorFactories {
.addProperty("superclass", VmClass::getSuperclassMirror) .addProperty("superclass", VmClass::getSuperclassMirror)
.addProperty("supertype", VmClass::getSupertypeMirror) .addProperty("supertype", VmClass::getSupertypeMirror)
.addMapProperty("properties", VmClass::getPropertyMirrors) .addMapProperty("properties", VmClass::getPropertyMirrors)
.addMapProperty("allProperties", VmClass::getAllPropertyMirrors)
.addTypedProperty("enclosingDeclaration", VmClass::getModuleMirror) .addTypedProperty("enclosingDeclaration", VmClass::getModuleMirror)
.addMapProperty("methods", VmClass::getMethodMirrors) .addMapProperty("methods", VmClass::getMethodMirrors);
.addMapProperty("allMethods", VmClass::getAllMethodMirrors);
typeAliasFactory typeAliasFactory
.addTypedProperty( .addTypedProperty(
@@ -166,30 +164,24 @@ public final class MirrorFactories {
propertyFactory propertyFactory
.addTypedProperty( .addTypedProperty(
"location", "location", property -> sourceLocationFactory.create(property.getHeaderSection()))
property -> sourceLocationFactory.create(property.getProperty().getHeaderSection()))
.addProperty( .addProperty(
"docComment", "docComment",
property -> property -> VmNull.lift(VmUtils.exportDocComment(property.getDocComment())))
VmNull.lift(VmUtils.exportDocComment(property.getProperty().getDocComment()))) .addListProperty("annotations", property -> VmList.create(property.getAnnotations()))
.addListProperty( .addSetProperty("modifiers", ClassProperty::getModifierMirrors)
"annotations", property -> VmList.create(property.getProperty().getAnnotations())) .addStringProperty("name", property -> property.getName().toString())
.addListProperty("allAnnotations", property -> VmList.create(property.getAllAnnotations())) .addTypedProperty("type", ClassProperty::getTypeMirror)
.addSetProperty("modifiers", property -> property.getProperty().getModifierMirrors())
.addSetProperty("allModifiers", ClassProperty.Mirror::getAllModifierMirrors)
.addStringProperty("name", property -> property.getProperty().getName().toString())
.addTypedProperty("type", property -> property.getProperty().getTypeMirror())
.addProperty( .addProperty(
"defaultValue", "defaultValue",
property -> property ->
property.getProperty().isAbstract() property.isAbstract()
|| property.getProperty().isExternal() || property.isExternal()
|| property.getProperty().getInitializer().isUndefined() || property.getInitializer().isUndefined()
? VmNull.withoutDefault() ? VmNull.withoutDefault()
: :
// get default from prototype because it's cached there // get default from prototype because it's cached there
VmUtils.readMember( VmUtils.readMember(property.getOwner(), property.getName()));
property.getProperty().getOwner(), property.getProperty().getName()));
methodFactory methodFactory
.addTypedProperty( .addTypedProperty(
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -92,8 +92,6 @@ public final class ModuleCache {
return BaseModule.getModule(); return BaseModule.getModule();
case "Benchmark": case "Benchmark":
return BenchmarkModule.getModule(); return BenchmarkModule.getModule();
case "pklbinary":
return PklBinaryModule.getModule();
case "jsonnet": case "jsonnet":
return JsonnetModule.getModule(); return JsonnetModule.getModule();
case "math": case "math":
@@ -1,30 +0,0 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.pkl.core.runtime;
import java.net.URI;
public class PklBinaryModule extends StdLibModule {
private static final VmTyped instance = VmUtils.createEmptyModule();
static {
loadModule(URI.create("pkl:pklbinary"), instance);
}
public static VmTyped getModule() {
return instance;
}
}
@@ -1,5 +1,5 @@
/* /*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -22,7 +22,6 @@ import java.util.Map;
import org.pkl.core.Loggers; import org.pkl.core.Loggers;
import org.pkl.core.SecurityManagers; import org.pkl.core.SecurityManagers;
import org.pkl.core.StackFrameTransformers; import org.pkl.core.StackFrameTransformers;
import org.pkl.core.evaluatorSettings.TraceMode;
import org.pkl.core.http.HttpClient; import org.pkl.core.http.HttpClient;
import org.pkl.core.module.ModuleKeyFactories; import org.pkl.core.module.ModuleKeyFactories;
import org.pkl.core.module.ModuleKeys; import org.pkl.core.module.ModuleKeys;
@@ -50,8 +49,7 @@ public abstract class StdLibModule {
null, null,
null, null,
null, null,
null, null));
TraceMode.COMPACT));
var language = VmLanguage.get(null); var language = VmLanguage.get(null);
var moduleKey = ModuleKeys.standardLibrary(uri); var moduleKey = ModuleKeys.standardLibrary(uri);
var source = VmUtils.loadSource((ResolvedModuleKey) moduleKey); var source = VmUtils.loadSource((ResolvedModuleKey) moduleKey);

Some files were not shown because too many files have changed in this diff Show More