diff --git a/.github/workflows/deploy-fork-preview.yml b/.github/workflows/deploy-fork-preview.yml index f2692a7b7..52a8d1372 100644 --- a/.github/workflows/deploy-fork-preview.yml +++ b/.github/workflows/deploy-fork-preview.yml @@ -81,7 +81,7 @@ jobs: workingDirectory: apps/docs command: pages deploy out --project-name=rescript-lang-org gitHubToken: ${{ secrets.GITHUB_TOKEN }} - wranglerVersion: 4.61.1 + wranglerVersion: 4.85.0 continue-on-error: true env: FORCE_COLOR: 0 diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 7b4be86a7..685f57808 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -64,7 +64,7 @@ jobs: workingDirectory: apps/docs command: pages deploy out --project-name=rescript-lang-org --branch=${{ env.SAFE_BRANCH }} gitHubToken: ${{ secrets.GITHUB_TOKEN }} - wranglerVersion: 4.63.0 + wranglerVersion: 4.85.0 env: FORCE_COLOR: 0 - name: Comment PR with deployment link diff --git a/.gitignore b/.gitignore index f9b1e0f1e..5bbdf6eb1 100644 --- a/.gitignore +++ b/.gitignore @@ -25,11 +25,14 @@ apps/docs/temp-jsx-preserve .merlin lib/ apps/docs/lib/ +packages/*/lib/ .vercel apps/docs/src/**/*.mjs apps/docs/src/**/*.jsx +packages/*/src/**/*.mjs +packages/*/src/**/*.jsx apps/docs/scripts/gendocs.mjs apps/docs/scripts/generate_*.mjs apps/docs/scripts/gendocs.jsx diff --git a/apps/docs/__tests__/BlogArticle_.test.res b/apps/docs/__tests__/BlogArticle_.test.res index c71e37459..59b3cd464 100644 --- a/apps/docs/__tests__/BlogArticle_.test.res +++ b/apps/docs/__tests__/BlogArticle_.test.res @@ -141,7 +141,7 @@ let mockFrontmatterWithArticleImg: BlogFrontmatter.t = { co_authors: [], date: DateStr.fromString("2025-06-01"), previewImg: Nullable.null, - articleImg: Nullable.Value("https://rescript-lang.org/brand/rescript-brandmark.svg"), + articleImg: Nullable.Value("/brand/rescript-brandmark.svg"), title: "Blog Post With Article Image", badge: Nullable.Value(Release), description: Nullable.Value("A post with an article image."), @@ -166,6 +166,7 @@ test("desktop blog article with article image shows image", async () => { await element(title)->toBeVisible let wrapper = await screen->getByTestId("blog-article-wrapper") + await waitForImages("[data-testid='blog-article-wrapper']") await element(wrapper)->toMatchScreenshot("desktop-blog-article-with-image") }) diff --git a/apps/docs/__tests__/LandingPage_.test.res b/apps/docs/__tests__/LandingPage_.test.res index d84bb2d45..28124cf72 100644 --- a/apps/docs/__tests__/LandingPage_.test.res +++ b/apps/docs/__tests__/LandingPage_.test.res @@ -48,6 +48,7 @@ let snapshotSection = async (~width, ~height, ~sectionTestId, ~screenshotName) = let snapshotTarget = await snapshotScreen->getByTestId(sandboxTestId) await element(snapshotTarget)->toBeVisible + await waitForImages(`[data-testid="${sandboxTestId}"]`) await element(snapshotTarget)->toMatchScreenshot(screenshotName) await snapshotScreen->unmount } diff --git a/apps/docs/__tests__/MarkdownComponents_.test.res b/apps/docs/__tests__/MarkdownComponents_.test.res index 62ffc75c1..ae4ff4923 100644 --- a/apps/docs/__tests__/MarkdownComponents_.test.res +++ b/apps/docs/__tests__/MarkdownComponents_.test.res @@ -204,7 +204,7 @@ test("renders Image with caption", async () => {
, @@ -214,6 +214,7 @@ test("renders Image with caption", async () => { await element(caption)->toBeVisible let wrapper = await screen->getByTestId("image-wrapper") + await waitForImages("[data-testid='image-wrapper']") await element(wrapper)->toMatchScreenshot("markdown-image") }) diff --git a/apps/docs/package.json b/apps/docs/package.json index 9a06a554a..dbe1267c3 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -33,33 +33,21 @@ "vitest:update": "vitest --run --browser.headless --update" }, "dependencies": { - "@babel/generator": "^7.29.1", - "@babel/parser": "^7.29.2", - "@babel/traverse": "^7.29.0", "@cloudflare/pages-plugin-vercel-og": "^0.1.2", - "@codemirror/commands": "^6.10.3", - "@codemirror/lang-javascript": "^6.2.5", - "@codemirror/language": "^6.12.3", - "@codemirror/lint": "^6.9.5", - "@codemirror/search": "^6.6.0", - "@codemirror/state": "^6.6.0", - "@codemirror/view": "^6.41.0", "@docsearch/react": "^4.6.2", "@headlessui/react": "^2.2.9", - "@lezer/highlight": "^1.2.3", "@mdx-js/mdx": "^3.1.1", "@node-cli/static-server": "^3.1.10", "@react-router/node": "^7.14.0", - "@replit/codemirror-vim": "^6.3.0", + "@rescript-lang/playground": "workspace:*", + "@rescript-lang/shared": "workspace:*", "@rescript/react": "^0.14.2", "@rescript/webapi": "0.1.0-experimental-29db5f4", - "@tsnobip/rescript-lezer": "^0.8.0", "docson": "^2.1.0", "fuse.js": "^6.6.2", "highlight.js": "^11.11.1", "highlightjs-rescript": "^0.2.2", "isbot": "^5.1.37", - "lz-string": "^1.5.0", "mdast-util-from-markdown": "^2.0.3", "mdast-util-to-string": "^4.0.0", "mdast-util-toc": "^7.1.0", diff --git a/apps/docs/rescript.json b/apps/docs/rescript.json index 9b0acd7f9..927e59552 100644 --- a/apps/docs/rescript.json +++ b/apps/docs/rescript.json @@ -1,7 +1,12 @@ { "name": "@rescript-lang/docs", "namespace": false, - "dependencies": ["@rescript/react", "@rescript/webapi"], + "dependencies": [ + "@rescript-lang/shared", + "@rescript-lang/playground", + "@rescript/react", + "@rescript/webapi" + ], "compiler-flags": ["-open WebAPI.Global"], "sources": [ { diff --git a/apps/docs/src/bindings/Vitest.res b/apps/docs/src/bindings/Vitest.res index f80d7f651..1f15e6f79 100644 --- a/apps/docs/src/bindings/Vitest.res +++ b/apps/docs/src/bindings/Vitest.res @@ -56,6 +56,24 @@ external getAllByLabelText: (element, string) => promise> = "getA @send external getByRole: (element, [#button]) => promise = "getByRole" +external imageFromNode: WebAPI.DOMAPI.node => WebAPI.DOMAPI.htmlImageElement = "%identity" + +let waitForImages = async (selector: string) => { + let root = switch document->WebAPI.Document.querySelector(selector) { + | Value(root) => root + | Null => failwith(`expected to find screenshot target ${selector}`) + } + + let images = root->WebAPI.Element.querySelectorAll("img") + + if images.length > 0 { + for i in 0 to images.length - 1 { + let image = images->WebAPI.NodeList.item(i)->imageFromNode + await image->WebAPI.HTMLImageElement.decode + } + } +} + /** * Actions */ diff --git a/apps/docs/vitest.config.mjs b/apps/docs/vitest.config.mjs index cd0c3930e..73d369250 100644 --- a/apps/docs/vitest.config.mjs +++ b/apps/docs/vitest.config.mjs @@ -3,9 +3,26 @@ import { playwright } from "@vitest/browser-playwright"; import react from "@vitejs/plugin-react"; import tailwindcss from "@tailwindcss/vite"; +const setupDeps = [ + "highlight.js/lib/core", + "highlight.js/lib/languages/bash", + "highlight.js/lib/languages/css", + "highlight.js/lib/languages/diff", + "highlight.js/lib/languages/ini", + "highlight.js/lib/languages/javascript", + "highlight.js/lib/languages/json", + "highlight.js/lib/languages/plaintext", + "highlight.js/lib/languages/typescript", + "highlight.js/lib/languages/xml", + "highlightjs-rescript", +]; + export default defineConfig({ envDir: "../..", plugins: [react(), tailwindcss()], + optimizeDeps: { + include: setupDeps, + }, test: { include: ["__tests__/*.jsx"], setupFiles: ["./vitest.setup.mjs"], diff --git a/apps/docs/src/ffi/loadScript.js b/packages/playground/ffi/loadScript.js similarity index 100% rename from apps/docs/src/ffi/loadScript.js rename to packages/playground/ffi/loadScript.js diff --git a/packages/playground/package.json b/packages/playground/package.json new file mode 100644 index 000000000..23bb0d831 --- /dev/null +++ b/packages/playground/package.json @@ -0,0 +1,15 @@ +{ + "name": "@rescript-lang/playground", + "version": "1.0.0", + "private": true, + "type": "module", + "dependencies": { + "@rescript-lang/shared": "workspace:*", + "@rescript/react": "^0.14.2", + "@rescript/webapi": "0.1.0-experimental-29db5f4", + "lz-string": "^1.5.0", + "react": "^19.2.4", + "react-dom": "^19.2.4", + "react-router": "^7.14.0" + } +} diff --git a/packages/playground/rescript.json b/packages/playground/rescript.json new file mode 100644 index 000000000..997cde23e --- /dev/null +++ b/packages/playground/rescript.json @@ -0,0 +1,19 @@ +{ + "name": "@rescript-lang/playground", + "namespace": false, + "dependencies": [ + "@rescript-lang/shared", + "@rescript/react", + "@rescript/webapi" + ], + "compiler-flags": ["-open WebAPI.Global"], + "sources": [ + { + "dir": "src", + "subdirs": true + } + ], + "warnings": { + "error": "+8" + } +} diff --git a/apps/docs/src/playground/CompilerManagerHook.res b/packages/playground/src/CompilerManagerHook.res similarity index 99% rename from apps/docs/src/playground/CompilerManagerHook.res rename to packages/playground/src/CompilerManagerHook.res index 363a5bd7d..8dd18c2a1 100644 --- a/apps/docs/src/playground/CompilerManagerHook.res +++ b/packages/playground/src/CompilerManagerHook.res @@ -251,7 +251,7 @@ let useCompilerManager = ( ~versions: array, ) => { let (state, setState) = React.useState(_ => Init) - let {pathname} = ReactRouter.useLocation() + let {pathname} = PlaygroundReactRouter.useLocation() // Dispatch method for the public interface let dispatch = React.useCallback((action: action): unit => { diff --git a/apps/docs/src/playground/CompilerManagerHook.resi b/packages/playground/src/CompilerManagerHook.resi similarity index 100% rename from apps/docs/src/playground/CompilerManagerHook.resi rename to packages/playground/src/CompilerManagerHook.resi diff --git a/apps/docs/src/playground/ConsolePanel.res b/packages/playground/src/ConsolePanel.res similarity index 100% rename from apps/docs/src/playground/ConsolePanel.res rename to packages/playground/src/ConsolePanel.res diff --git a/apps/docs/src/playground/EvalIFrame.res b/packages/playground/src/EvalIFrame.res similarity index 100% rename from apps/docs/src/playground/EvalIFrame.res rename to packages/playground/src/EvalIFrame.res diff --git a/apps/docs/src/playground/LzString.res b/packages/playground/src/LzString.res similarity index 100% rename from apps/docs/src/playground/LzString.res rename to packages/playground/src/LzString.res diff --git a/apps/docs/src/playground/OutputPanel.res b/packages/playground/src/OutputPanel.res similarity index 100% rename from apps/docs/src/playground/OutputPanel.res rename to packages/playground/src/OutputPanel.res diff --git a/apps/docs/src/playground/Playground.res b/packages/playground/src/Playground.res similarity index 97% rename from apps/docs/src/playground/Playground.res rename to packages/playground/src/Playground.res index a45a22b86..07f0e565f 100644 --- a/apps/docs/src/playground/Playground.res +++ b/packages/playground/src/Playground.res @@ -37,7 +37,42 @@ module ExperimentalFeatures = { let breakingPoint = 1024 let playgroundThemeStorageKey = "playgroundTheme" +let playgroundVersionStorageKey = "playground_version" let newLightModeToastSeenStorageKey = "playgroundLightModeToastSeen" +let dropdownLabelNext = "--- Next ---" +let dropdownLabelReleased = "--- Released ---" + +let getLocalStorageItem = key => { + try { + WebAPI.Storage.getItem(window.localStorage, key)->Null.toOption + } catch { + | JsExn(_) => None + } +} + +let setLocalStorageItem = (~key, ~value) => { + try { + WebAPI.Storage.setItem(window.localStorage, ~key, ~value) + } catch { + | JsExn(_) => () + } +} + +let getSessionStorageItem = key => { + try { + WebAPI.Storage.getItem(window.sessionStorage, key)->Null.toOption + } catch { + | JsExn(_) => None + } +} + +let setSessionStorageItem = (~key, ~value) => { + try { + WebAPI.Storage.setItem(window.sessionStorage, ~key, ~value) + } catch { + | JsExn(_) => () + } +} let isDarkTheme = (theme: CodeMirror.Theme.t): bool => switch theme { @@ -126,6 +161,12 @@ module ToggleSelection = { } } +module SelectSectionHeader = { + @react.component + let make = (~value) => + +} + module ResultPane = { module PreWrap = { @react.component @@ -317,9 +358,13 @@ module ResultPane = { {React.string( "The compiler bundle API returned a result that couldn't be interpreted. Please open an issue on our ", )} - + {React.string("issue tracker")} - + {React.string(".")}
@@ -960,7 +1005,7 @@ module Settings = { switch id->Semver.parse { | Some(v) => onCompilerSelect(v) - WebAPI.Storage.setItem(localStorage, ~key=(Url.Playground :> string), ~value=id) + setLocalStorageItem(~key=playgroundVersionStorageKey, ~value=id) | None => () } }} @@ -1009,7 +1054,7 @@ module Settings = { }->Float.fromInt }) <> - + {versionByOrder ->Array.map(version => { let version = Semver.toString(version) @@ -1018,7 +1063,7 @@ module Settings = { }) ->React.array} - + }} {switch stableVersions { @@ -1599,7 +1644,7 @@ let initialReContent = `Js.log("Hello Reason 3.6!");` @react.component let make = (~bundleBaseUrl: string, ~versions: array) => { - let (searchParams, _) = ReactRouter.useSearchParams() + let (searchParams, _) = PlaygroundReactRouter.useSearchParams() let containerRef = React.useRef(Nullable.null) let editorRef: React.ref> = React.useRef(None) let (_, setScrollLock) = ScrollLockContext.useScrollLock() @@ -1647,7 +1692,7 @@ let make = (~bundleBaseUrl: string, ~versions: array) => { ) { | Nullable.Value(version) => version->Semver.parse | _ => - switch Url.getVersionFromStorage(Playground) { + switch getLocalStorageItem(playgroundVersionStorageKey) { | Some(v) => v->Semver.parse | None => lastStableVersion } @@ -1711,8 +1756,7 @@ let make = (~bundleBaseUrl: string, ~versions: array) => { let (keyMap, setKeyMap) = React.useState(() => CodeMirror.KeyMap.Default) let (theme, setTheme) = React.useState(() => - WebAPI.Storage.getItem(window.localStorage, playgroundThemeStorageKey) - ->Null.toOption + getLocalStorageItem(playgroundThemeStorageKey) ->Option.map(CodeMirror.Theme.fromString) ->Option.getOr(CodeMirror.Theme.Dark) ) @@ -1722,8 +1766,7 @@ let make = (~bundleBaseUrl: string, ~versions: array) => { React.useEffect(() => { setKeyMap(_ => - WebAPI.Storage.getItem(window.localStorage, "vimMode") - ->Null.toOption + getLocalStorageItem("vimMode") ->Option.map(CodeMirror.KeyMap.fromString) ->Option.getOr(CodeMirror.KeyMap.Default) ) @@ -1731,10 +1774,7 @@ let make = (~bundleBaseUrl: string, ~versions: array) => { }, []) React.useEffect(() => { - let hasSeenToast = - WebAPI.Storage.getItem(window.sessionStorage, newLightModeToastSeenStorageKey) - ->Null.toOption - ->Option.isSome + let hasSeenToast = getSessionStorageItem(newLightModeToastSeenStorageKey)->Option.isSome if hasSeenToast { None @@ -1743,11 +1783,7 @@ let make = (~bundleBaseUrl: string, ~versions: array) => { let hideToast = () => { setShowNewLightModeToast(_ => false) - WebAPI.Storage.setItem( - window.sessionStorage, - ~key=newLightModeToastSeenStorageKey, - ~value="true", - ) + setSessionStorageItem(~key=newLightModeToastSeenStorageKey, ~value="true") } let timer = setTimeout(~handler=hideToast, ~timeout=10000) @@ -1796,21 +1832,13 @@ let make = (~bundleBaseUrl: string, ~versions: array) => { }, []) React.useEffect(() => { - WebAPI.Storage.setItem( - window.localStorage, - ~key="vimMode", - ~value=CodeMirror.KeyMap.toString(keyMap), - ) + setLocalStorageItem(~key="vimMode", ~value=CodeMirror.KeyMap.toString(keyMap)) editorRef.current->Option.forEach(CodeMirror.editorSetKeyMap(_, keyMap)) None }, [keyMap]) React.useEffect(() => { - WebAPI.Storage.setItem( - window.localStorage, - ~key=playgroundThemeStorageKey, - ~value=theme->CodeMirror.Theme.toString, - ) + setLocalStorageItem(~key=playgroundThemeStorageKey, ~value=theme->CodeMirror.Theme.toString) editorRef.current->Option.forEach(CodeMirror.editorSetTheme(_, theme)) None }, [theme]) diff --git a/apps/docs/src/playground/Playground.resi b/packages/playground/src/Playground.resi similarity index 100% rename from apps/docs/src/playground/Playground.resi rename to packages/playground/src/Playground.resi diff --git a/apps/docs/src/playground/PlaygroundLazy.res b/packages/playground/src/PlaygroundLazy.res similarity index 100% rename from apps/docs/src/playground/PlaygroundLazy.res rename to packages/playground/src/PlaygroundLazy.res diff --git a/packages/playground/src/PlaygroundReactRouter.res b/packages/playground/src/PlaygroundReactRouter.res new file mode 100644 index 000000000..0b8fce77d --- /dev/null +++ b/packages/playground/src/PlaygroundReactRouter.res @@ -0,0 +1,11 @@ +type location = { + pathname: string, + search?: string, + hash?: string, +} + +@module("react-router") +external useLocation: unit => location = "useLocation" + +@module("react-router") +external useSearchParams: unit => (WebAPI.URLAPI.urlSearchParams, {..} => unit) = "useSearchParams" diff --git a/apps/docs/src/playground/RenderPanel.res b/packages/playground/src/RenderPanel.res similarity index 100% rename from apps/docs/src/playground/RenderPanel.res rename to packages/playground/src/RenderPanel.res diff --git a/apps/docs/src/playground/RenderPanel.resi b/packages/playground/src/RenderPanel.resi similarity index 100% rename from apps/docs/src/playground/RenderPanel.resi rename to packages/playground/src/RenderPanel.resi diff --git a/apps/docs/src/components/ToggleButton.res b/packages/playground/src/ToggleButton.res similarity index 100% rename from apps/docs/src/components/ToggleButton.res rename to packages/playground/src/ToggleButton.res diff --git a/packages/shared/package.json b/packages/shared/package.json new file mode 100644 index 000000000..1a7585dce --- /dev/null +++ b/packages/shared/package.json @@ -0,0 +1,26 @@ +{ + "name": "@rescript-lang/shared", + "version": "1.0.0", + "private": true, + "type": "module", + "dependencies": { + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.2", + "@babel/traverse": "^7.29.0", + "@codemirror/commands": "^6.10.3", + "@codemirror/lang-javascript": "^6.2.5", + "@codemirror/language": "^6.12.3", + "@codemirror/lint": "^6.9.5", + "@codemirror/search": "^6.6.0", + "@codemirror/state": "^6.6.0", + "@codemirror/view": "^6.41.0", + "@lezer/highlight": "^1.2.3", + "@replit/codemirror-vim": "^6.3.0", + "@rescript/react": "^0.14.2", + "@rescript/webapi": "0.1.0-experimental-29db5f4", + "@tsnobip/rescript-lezer": "^0.8.0", + "highlight.js": "^11.11.1", + "react": "^19.2.4", + "react-dom": "^19.2.4" + } +} diff --git a/apps/docs/plugins/cm6-reason-mode.js b/packages/shared/plugins/cm6-reason-mode.js similarity index 100% rename from apps/docs/plugins/cm6-reason-mode.js rename to packages/shared/plugins/cm6-reason-mode.js diff --git a/packages/shared/rescript.json b/packages/shared/rescript.json new file mode 100644 index 000000000..40328e643 --- /dev/null +++ b/packages/shared/rescript.json @@ -0,0 +1,15 @@ +{ + "name": "@rescript-lang/shared", + "namespace": false, + "dependencies": ["@rescript/react", "@rescript/webapi"], + "compiler-flags": ["-open WebAPI.Global"], + "sources": [ + { + "dir": "src", + "subdirs": true + } + ], + "warnings": { + "error": "+8" + } +} diff --git a/apps/docs/src/common/Ansi.res b/packages/shared/src/Ansi.res similarity index 100% rename from apps/docs/src/common/Ansi.res rename to packages/shared/src/Ansi.res diff --git a/apps/docs/src/common/Ansi.resi b/packages/shared/src/Ansi.resi similarity index 100% rename from apps/docs/src/common/Ansi.resi rename to packages/shared/src/Ansi.resi diff --git a/apps/docs/src/components/AnsiPre.res b/packages/shared/src/AnsiPre.res similarity index 100% rename from apps/docs/src/components/AnsiPre.res rename to packages/shared/src/AnsiPre.res diff --git a/apps/docs/src/components/AnsiPre.resi b/packages/shared/src/AnsiPre.resi similarity index 100% rename from apps/docs/src/components/AnsiPre.resi rename to packages/shared/src/AnsiPre.resi diff --git a/apps/docs/src/bindings/Babel.res b/packages/shared/src/Babel.res similarity index 100% rename from apps/docs/src/bindings/Babel.res rename to packages/shared/src/Babel.res diff --git a/apps/docs/src/components/CodeMirror.res b/packages/shared/src/CodeMirror.res similarity index 99% rename from apps/docs/src/components/CodeMirror.res rename to packages/shared/src/CodeMirror.res index 596e4be1a..15fb80401 100644 --- a/apps/docs/src/components/CodeMirror.res +++ b/packages/shared/src/CodeMirror.res @@ -572,7 +572,7 @@ module CM6 = { } module CustomLanguages = { - @module("../../plugins/cm6-reason-mode.js") @val + @module("../plugins/cm6-reason-mode.js") @val external reasonLanguage: extension = "reasonLanguage" } } diff --git a/apps/docs/src/components/CodeMirror.resi b/packages/shared/src/CodeMirror.resi similarity index 100% rename from apps/docs/src/components/CodeMirror.resi rename to packages/shared/src/CodeMirror.resi diff --git a/apps/docs/src/common/HighlightJs.res b/packages/shared/src/HighlightJs.res similarity index 100% rename from apps/docs/src/common/HighlightJs.res rename to packages/shared/src/HighlightJs.res diff --git a/apps/docs/src/common/HighlightJs.resi b/packages/shared/src/HighlightJs.resi similarity index 100% rename from apps/docs/src/common/HighlightJs.resi rename to packages/shared/src/HighlightJs.resi diff --git a/apps/docs/src/components/Icon.res b/packages/shared/src/Icon.res similarity index 100% rename from apps/docs/src/components/Icon.res rename to packages/shared/src/Icon.res diff --git a/apps/docs/src/components/Icon.resi b/packages/shared/src/Icon.resi similarity index 100% rename from apps/docs/src/components/Icon.resi rename to packages/shared/src/Icon.resi diff --git a/apps/docs/src/bindings/RescriptCompilerApi.res b/packages/shared/src/RescriptCompilerApi.res similarity index 100% rename from apps/docs/src/bindings/RescriptCompilerApi.res rename to packages/shared/src/RescriptCompilerApi.res diff --git a/apps/docs/src/bindings/RescriptCompilerApi.resi b/packages/shared/src/RescriptCompilerApi.resi similarity index 100% rename from apps/docs/src/bindings/RescriptCompilerApi.resi rename to packages/shared/src/RescriptCompilerApi.resi diff --git a/apps/docs/src/common/ScrollLockContext.res b/packages/shared/src/ScrollLockContext.res similarity index 100% rename from apps/docs/src/common/ScrollLockContext.res rename to packages/shared/src/ScrollLockContext.res diff --git a/apps/docs/src/common/Semver.res b/packages/shared/src/Semver.res similarity index 100% rename from apps/docs/src/common/Semver.res rename to packages/shared/src/Semver.res diff --git a/apps/docs/src/common/Semver.resi b/packages/shared/src/Semver.resi similarity index 100% rename from apps/docs/src/common/Semver.resi rename to packages/shared/src/Semver.resi diff --git a/apps/docs/src/components/Text.res b/packages/shared/src/Text.res similarity index 100% rename from apps/docs/src/components/Text.res rename to packages/shared/src/Text.res diff --git a/apps/docs/src/components/Text.resi b/packages/shared/src/Text.resi similarity index 100% rename from apps/docs/src/components/Text.resi rename to packages/shared/src/Text.resi diff --git a/apps/docs/src/common/WarningFlagDescription.res b/packages/shared/src/WarningFlagDescription.res similarity index 100% rename from apps/docs/src/common/WarningFlagDescription.res rename to packages/shared/src/WarningFlagDescription.res diff --git a/apps/docs/src/common/WarningFlagDescription.resi b/packages/shared/src/WarningFlagDescription.resi similarity index 100% rename from apps/docs/src/common/WarningFlagDescription.resi rename to packages/shared/src/WarningFlagDescription.resi diff --git a/rescript.json b/rescript.json index 9babbd1df..095144ecb 100644 --- a/rescript.json +++ b/rescript.json @@ -1,6 +1,10 @@ { "name": "rescript-lang.org-monorepo", - "dependencies": ["@rescript-lang/docs"], + "dependencies": [ + "@rescript-lang/shared", + "@rescript-lang/playground", + "@rescript-lang/docs" + ], "sources": [], "jsx": { "preserve": true, diff --git a/yarn.lock b/yarn.lock index c2e215e47..b77c3ab05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2234,29 +2234,18 @@ __metadata: version: 0.0.0-use.local resolution: "@rescript-lang/docs@workspace:apps/docs" dependencies: - "@babel/generator": "npm:^7.29.1" - "@babel/parser": "npm:^7.29.2" - "@babel/traverse": "npm:^7.29.0" "@cloudflare/pages-plugin-vercel-og": "npm:^0.1.2" - "@codemirror/commands": "npm:^6.10.3" - "@codemirror/lang-javascript": "npm:^6.2.5" - "@codemirror/language": "npm:^6.12.3" - "@codemirror/lint": "npm:^6.9.5" - "@codemirror/search": "npm:^6.6.0" - "@codemirror/state": "npm:^6.6.0" - "@codemirror/view": "npm:^6.41.0" "@docsearch/react": "npm:^4.6.2" "@headlessui/react": "npm:^2.2.9" - "@lezer/highlight": "npm:^1.2.3" "@mdx-js/mdx": "npm:^3.1.1" "@node-cli/static-server": "npm:^3.1.10" "@react-router/dev": "npm:^7.14.0" "@react-router/node": "npm:^7.14.0" - "@replit/codemirror-vim": "npm:^6.3.0" + "@rescript-lang/playground": "workspace:*" + "@rescript-lang/shared": "workspace:*" "@rescript/react": "npm:^0.14.2" "@rescript/webapi": "npm:0.1.0-experimental-29db5f4" "@tailwindcss/vite": "npm:^4.2.2" - "@tsnobip/rescript-lezer": "npm:^0.8.0" "@types/react": "npm:^19.2.14" "@vitejs/plugin-react": "npm:^6.0.1" "@vitest/browser-playwright": "npm:^4.1.2" @@ -2272,7 +2261,6 @@ __metadata: jsdom: "npm:^26.1.0" lefthook: "npm:^2.1.4" lightningcss: "npm:^1.32.0" - lz-string: "npm:^1.5.0" mdast-util-from-markdown: "npm:^2.0.3" mdast-util-to-string: "npm:^4.0.0" mdast-util-toc: "npm:^7.1.0" @@ -2309,6 +2297,45 @@ __metadata: languageName: unknown linkType: soft +"@rescript-lang/playground@workspace:*, @rescript-lang/playground@workspace:packages/playground": + version: 0.0.0-use.local + resolution: "@rescript-lang/playground@workspace:packages/playground" + dependencies: + "@rescript-lang/shared": "workspace:*" + "@rescript/react": "npm:^0.14.2" + "@rescript/webapi": "npm:0.1.0-experimental-29db5f4" + lz-string: "npm:^1.5.0" + react: "npm:^19.2.4" + react-dom: "npm:^19.2.4" + react-router: "npm:^7.14.0" + languageName: unknown + linkType: soft + +"@rescript-lang/shared@workspace:*, @rescript-lang/shared@workspace:packages/shared": + version: 0.0.0-use.local + resolution: "@rescript-lang/shared@workspace:packages/shared" + dependencies: + "@babel/generator": "npm:^7.29.1" + "@babel/parser": "npm:^7.29.2" + "@babel/traverse": "npm:^7.29.0" + "@codemirror/commands": "npm:^6.10.3" + "@codemirror/lang-javascript": "npm:^6.2.5" + "@codemirror/language": "npm:^6.12.3" + "@codemirror/lint": "npm:^6.9.5" + "@codemirror/search": "npm:^6.6.0" + "@codemirror/state": "npm:^6.6.0" + "@codemirror/view": "npm:^6.41.0" + "@lezer/highlight": "npm:^1.2.3" + "@replit/codemirror-vim": "npm:^6.3.0" + "@rescript/react": "npm:^0.14.2" + "@rescript/webapi": "npm:0.1.0-experimental-29db5f4" + "@tsnobip/rescript-lezer": "npm:^0.8.0" + highlight.js: "npm:^11.11.1" + react: "npm:^19.2.4" + react-dom: "npm:^19.2.4" + languageName: unknown + linkType: soft + "@rescript/darwin-arm64@npm:12.2.0": version: 12.2.0 resolution: "@rescript/darwin-arm64@npm:12.2.0"