diff --git a/json-schema-validator/build.gradle.kts b/json-schema-validator/build.gradle.kts index c1ed4fea..3545b0a8 100644 --- a/json-schema-validator/build.gradle.kts +++ b/json-schema-validator/build.gradle.kts @@ -145,6 +145,9 @@ kotlin { generateTypeScriptDefinitions() nodejs() } + wasmJs { + nodejs() + } applyDefaultHierarchyTemplate() val macOsTargets = @@ -168,7 +171,7 @@ kotlin { ) sourceSets { - commonMain { + val commonMain by getting { kotlin.srcDirs(generatedSourceDirectory) dependencies { @@ -182,11 +185,33 @@ kotlin { ) { because("simplifies work with unicode codepoints") } + } + } + + val wasmJsMain by getting { + + } + + val nonWasmJsMain by creating { + dependsOn(commonMain) + + dependencies { implementation(libs.normalize.get().toString()) { because("provides normalization required by IDN-hostname format") } } } + + val jvmMain by getting { + dependsOn(nonWasmJsMain) + } + val jsMain by getting { + dependsOn(nonWasmJsMain) + } + val nativeMain by getting { + dependsOn(nonWasmJsMain) + } + commonTest { dependencies { implementation(libs.kotest.assertions.core) diff --git a/json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/formats/IdnHostnameFormatValidator.kt b/json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/formats/IdnHostnameFormatValidator.kt index 898dcfca..9a881b65 100644 --- a/json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/formats/IdnHostnameFormatValidator.kt +++ b/json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/formats/IdnHostnameFormatValidator.kt @@ -7,8 +7,8 @@ import io.github.optimumcode.json.schema.FormatValidator import io.github.optimumcode.json.schema.internal.formats.IdnHostnameFormatValidator.BidiLabelType.LTR import io.github.optimumcode.json.schema.internal.formats.IdnHostnameFormatValidator.BidiLabelType.NONE import io.github.optimumcode.json.schema.internal.formats.IdnHostnameFormatValidator.BidiLabelType.RTL -import io.github.optimumcode.json.schema.internal.hostname.Normalizer import io.github.optimumcode.json.schema.internal.hostname.Punycode +import io.github.optimumcode.json.schema.internal.hostname.isNormalized import io.github.optimumcode.json.schema.internal.unicode.CharacterCategory import io.github.optimumcode.json.schema.internal.unicode.CharacterCategory.ENCLOSING_MARK import io.github.optimumcode.json.schema.internal.unicode.CharacterCategory.NONSPACING_MARK @@ -108,7 +108,7 @@ internal object IdnHostnameFormatValidator : AbstractStringFormatValidator() { label } - if (!Normalizer.isNormalized(unicode)) { + if (!isNormalized(unicode)) { return false } diff --git a/json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.kt b/json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.kt index 1f78b1a7..01b5cb9c 100644 --- a/json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.kt +++ b/json-schema-validator/src/commonMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.kt @@ -1,10 +1,3 @@ package io.github.optimumcode.json.schema.internal.hostname -import doist.x.normalize.Form -import doist.x.normalize.normalize - -internal object Normalizer { - fun isNormalized(label: String): Boolean { - return label.normalize(Form.NFC) == label - } -} \ No newline at end of file +public expect fun isNormalized(label: String): Boolean \ No newline at end of file diff --git a/json-schema-validator/src/nonWasmJsMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.nonWasmJs.kt b/json-schema-validator/src/nonWasmJsMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.nonWasmJs.kt new file mode 100644 index 00000000..75201a13 --- /dev/null +++ b/json-schema-validator/src/nonWasmJsMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.nonWasmJs.kt @@ -0,0 +1,8 @@ +package io.github.optimumcode.json.schema.internal.hostname + +import doist.x.normalize.Form +import doist.x.normalize.normalize + +public actual fun isNormalized(label: String): Boolean { + return label.normalize(Form.NFC) == label +} \ No newline at end of file diff --git a/json-schema-validator/src/wasmJsMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.wasmJs.kt b/json-schema-validator/src/wasmJsMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.wasmJs.kt new file mode 100644 index 00000000..c52964be --- /dev/null +++ b/json-schema-validator/src/wasmJsMain/kotlin/io/github/optimumcode/json/schema/internal/hostname/Normalizer.wasmJs.kt @@ -0,0 +1,6 @@ +package io.github.optimumcode.json.schema.internal.hostname + +public actual fun isNormalized(label: String): Boolean { + // depending library does not yet support wasm: https://github.com/OptimumCode/json-schema-validator/issues/177#issuecomment-2268482409 + return true +} \ No newline at end of file diff --git a/test-suites/build.gradle.kts b/test-suites/build.gradle.kts index 55c11e16..b1905da6 100644 --- a/test-suites/build.gradle.kts +++ b/test-suites/build.gradle.kts @@ -27,6 +27,9 @@ kotlin { js(IR) { nodejs() } + wasmJs { + nodejs() + } applyDefaultHierarchyTemplate() val macOsTargets =