diff --git a/integrations/kotlin/NG_NAMESPACE_PARITY.md b/integrations/kotlin/NG_NAMESPACE_PARITY.md index 402e91486..d8a438eab 100644 --- a/integrations/kotlin/NG_NAMESPACE_PARITY.md +++ b/integrations/kotlin/NG_NAMESPACE_PARITY.md @@ -77,6 +77,11 @@ part of the Kotlin public facade. | `LinkFn` | generated | | `Model` | generated | | `ModelChange` | generated | +| `ModelValidationContext` | generated | +| `ModelParser` | manual | +| `ModelFormatter` | manual | +| `ModelValidators` | manual | +| `AsyncModelValidators` | manual | | `ModelRestoreOptions` | generated | | `ModelSyncFailureMode` | generated | | `ModelSyncOptions` | generated | @@ -174,6 +179,7 @@ part of the Kotlin public facade. | `StreamService` | generated | | `TemplateCacheService` | generated | | `TemplateRequestService` | generated | +| `TemplateRequestOptions` | manual | | `TransitionsService` | generated | | `WebComponentService` | generated | | `WebSocketService` | generated | diff --git a/integrations/kotlin/src/jsTest/kotlin/angular/ts/AngularTsTest.kt b/integrations/kotlin/src/jsTest/kotlin/angular/ts/AngularTsTest.kt index 3fdc733ed..5a7b2822e 100644 --- a/integrations/kotlin/src/jsTest/kotlin/angular/ts/AngularTsTest.kt +++ b/integrations/kotlin/src/jsTest/kotlin/angular/ts/AngularTsTest.kt @@ -30,13 +30,24 @@ class AngularTsTest { val parser: ModelParser = { text -> text.toDoubleOrNull() } control.addParser(parser) assertTrue(control.parsers[0]("invalid").asDynamic() === js("undefined")) - control.formatters = arrayOf({ value: Double? -> value?.toString() ?: "" }) + val formatter: ModelFormatter = { value -> value?.toString() ?: "" } + control.formatters = arrayOf(formatter) + assertEquals("", control.formatters[0](null)) control.validators["positive"] = { value, text -> (value ?: 0.0) > 0 && text != "" } assertEquals(true, control.validators["positive"]?.invoke(12.0, "12")) assertEquals(24.0, control.parsers[0]("24")) control.setViewValue("24") assertEquals("24", control.viewValue) val abort = js("new AbortController()") + val context = js("({})").unsafeCast() + context.signal = abort.signal + var validationSignal: dynamic = null + control.asyncValidators["remote"] = { value, text, validation -> + validationSignal = validation.signal + Promise.resolve(value != null && text != null) + } + assertNotNull(control.asyncValidators["remote"]).invoke(12.0, "12", context) + assertSame(abort.signal, validationSignal) var captured: dynamic = null val request: dynamic = { _: String, options: dynamic -> captured = options.signal } val templateRequest = TemplateRequestService(request.unsafeCast()) diff --git a/integrations/kotlin/tool/check_ng_namespace_members.mjs b/integrations/kotlin/tool/check_ng_namespace_members.mjs index 6f36e3e79..668737cdd 100644 --- a/integrations/kotlin/tool/check_ng_namespace_members.mjs +++ b/integrations/kotlin/tool/check_ng_namespace_members.mjs @@ -30,6 +30,7 @@ const stalePatterns = [ ...staleObjectKeys("types", overrides.types, collectReferencedTypeNames()), ...staleListPatterns("callableProperties", overrides.callableProperties), ...staleListPatterns("manual", overrides.manual), + ...staleListPatterns("manualCoverage", overrides.manualCoverage), ...staleListPatterns("unsupported", overrides.unsupported), ]; const orderingProblems = [ @@ -38,6 +39,7 @@ const orderingProblems = [ ...objectOrderingProblems("types", overrides.types), ...listOrderingProblems("callableProperties", overrides.callableProperties), ...listOrderingProblems("manual", overrides.manual), + ...listOrderingProblems("manualCoverage", overrides.manualCoverage), ...listOrderingProblems("unsupported", overrides.unsupported), ]; const missingCoverage = uncoveredImplementedMembers(); @@ -189,7 +191,7 @@ function isRepoTypesNode(node) { } function uncoveredImplementedMembers() { - const manual = new Set(overrides.manual ?? []); + const manual = new Set([...(overrides.manual ?? []), ...(overrides.manualCoverage ?? [])]); const unsupported = new Set(overrides.unsupported ?? []); const missing = []; diff --git a/integrations/kotlin/tool/generator-overrides.json b/integrations/kotlin/tool/generator-overrides.json index 0c7e5b379..badd5c732 100644 --- a/integrations/kotlin/tool/generator-overrides.json +++ b/integrations/kotlin/tool/generator-overrides.json @@ -1,6 +1,11 @@ { "callableProperties": [], "manual": [], + "manualCoverage": [ + "ModelFormatter.call", + "ModelParser.call", + "TemplateRequestOptions.signal" + ], "propertyTypes": { "GeolocationValue.altitude": "Double?", "GeolocationValue.altitudeAccuracy": "Double?", @@ -19,11 +24,11 @@ "Element": "org.w3c.dom.Element", "Event": "org.w3c.dom.events.Event", "HTMLElement": "org.w3c.dom.HTMLElement", + "ModelValidationContext": "ModelValidationContext", "Node": "org.w3c.dom.Node", + "TemplateRequestOptions": "TemplateRequestOptions", "TModel": "TModel", - "TView": "TView", - "ModelValidationContext": "ModelValidationContext", - "TemplateRequestOptions": "TemplateRequestOptions" + "TView": "TView" }, "unsupported": [] }