From f516f3368d52088987bc39b51a3c4d6bb4477096 Mon Sep 17 00:00:00 2001 From: Florian Hammerschmidt Date: Tue, 20 Oct 2026 15:23:21 +0200 Subject: [PATCH] fix: support playground compiler API v9 Recognize the API version introduced by rescript-lang/rescript#8636 and route its bundles through the current ReScript compiler path. Keep the existing settings and language support available for v9. Add coverage for version recognition and settings alongside the existing legacy API tests. Signed-off-by: Florian Hammerschmidt --- apps/docs/__tests__/RescriptCompilerApi_.test.res | 10 ++++++++++ packages/playground/src/CompilerManagerHook.res | 4 ++-- packages/shared/src/RescriptCompilerApi.res | 5 ++++- packages/shared/src/RescriptCompilerApi.resi | 1 + 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/apps/docs/__tests__/RescriptCompilerApi_.test.res b/apps/docs/__tests__/RescriptCompilerApi_.test.res index 3b2752407..75deabb9a 100644 --- a/apps/docs/__tests__/RescriptCompilerApi_.test.res +++ b/apps/docs/__tests__/RescriptCompilerApi_.test.res @@ -1,6 +1,16 @@ open Vitest open RescriptCompilerApi +test("recognizes compiler API v9 and enables existing settings", async () => { + let version = Version.fromString("9") + + expect(version->Version.toString)->toBe("9.0") + expect(version->Version.availableLanguages)->toEqual([Lang.Res]) + expect(version->Version.isMinimumVersion(V4))->toBe(true) + expect(version->Version.isMinimumVersion(V6))->toBe(true) + expect(version->Version.isMinimumVersion(V9))->toBe(true) +}) + test("recognizes the compiler API used by v13 alpha 6", async () => { let version = Version.fromString("8") diff --git a/packages/playground/src/CompilerManagerHook.res b/packages/playground/src/CompilerManagerHook.res index 1b3f35c53..2f9f2728a 100644 --- a/packages/playground/src/CompilerManagerHook.res +++ b/packages/playground/src/CompilerManagerHook.res @@ -91,7 +91,7 @@ let getLibrariesForVersion = (~version: Semver.t): array => { let getOpenModules = (~apiVersion: Version.t, ~libraries: array): option> => switch apiVersion { | V1 | V2 | V3 | UnknownVersion(_) => None - | V4 | V5 | V6 | V7 | V8 => + | V4 | V5 | V6 | V7 | V8 | V9 => libraries->Array.some(el => el === "@rescript/core") ? Some(["RescriptCore"]) : None } @@ -572,7 +572,7 @@ let useCompilerManager = ( ) | Lang.Res => instance->Compiler.resCompile(code) } - | V5 | V6 | V7 | V8 => + | V5 | V6 | V7 | V8 | V9 => switch lang { | Lang.Res => instance->Compiler.resCompile(code) | _ => CompilationResult.UnexpectedError(`Can't handle with lang: ${lang->Lang.toString}`) diff --git a/packages/shared/src/RescriptCompilerApi.res b/packages/shared/src/RescriptCompilerApi.res index ff67ea683..f13e86860 100644 --- a/packages/shared/src/RescriptCompilerApi.res +++ b/packages/shared/src/RescriptCompilerApi.res @@ -37,6 +37,7 @@ module Version = { | @as(6) V6 | @as(7) V7 | @as(8) V8 + | @as(9) V9 type t = | ...numbered @@ -66,6 +67,7 @@ module Version = { | list{"6"} => V6 | list{"7"} => V7 | list{"8"} => V8 + | list{"9"} => V9 | _ => UnknownVersion(apiVersion) } @@ -79,6 +81,7 @@ module Version = { | V6 => "6.0" | V7 => "7.0" | V8 => "8.0" + | V9 => "9.0" | UnknownVersion(version) => version } @@ -87,7 +90,7 @@ module Version = { let availableLanguages = t => switch t { | V1 => [Lang.Reason, Res] - | V2 | V3 | V4 | V5 | V6 | V7 | V8 => [Lang.Res] + | V2 | V3 | V4 | V5 | V6 | V7 | V8 | V9 => [Lang.Res] | UnknownVersion(_) => [Res] } diff --git a/packages/shared/src/RescriptCompilerApi.resi b/packages/shared/src/RescriptCompilerApi.resi index 1c5032715..aecce6aac 100644 --- a/packages/shared/src/RescriptCompilerApi.resi +++ b/packages/shared/src/RescriptCompilerApi.resi @@ -28,6 +28,7 @@ module Version: { | @as(6) V6 | @as(7) V7 | @as(8) V8 + | @as(9) V9 type t = | ...numbered