diff --git a/package-lock.json b/package-lock.json index 8c33cde..f8b45fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "@rescript/react", "version": "0.16.0-beta.1", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -9,21 +9,23 @@ "version": "0.16.0-beta.1", "license": "MIT", "devDependencies": { + "@rescript/webapi": "0.1.0-alpha-b1d58f9", "pkg-pr-new": "^0.0.75", "react": "^19.2.0", "react-dom": "^19.2.0", - "rescript": "^13.0.0-alpha.5" + "rescript": "^13.0.0-alpha.6" }, "peerDependencies": { - "@rescript/runtime": ">=13.0.0-alpha.5", + "@rescript/runtime": ">=13.0.0-alpha.6", + "@rescript/webapi": ">=0.1.0-alpha-b1d58f9", "react": ">=19.2.0", "react-dom": ">=19.2.0" } }, "node_modules/@rescript/darwin-arm64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-13.0.0-alpha.5.tgz", - "integrity": "sha512-OCpT4VYLkxTjm56y+CG4SfrqotMLCaqKY5pxGq75hOPRZLZ5n5BG3OvA1rBsmz5+gT7VpKm1Do9YhmO0JvYZfg==", + "version": "13.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-13.0.0-alpha.6.tgz", + "integrity": "sha512-wb08dh/miY3OGUTCJL/0m8Q9xgDkd5Klh+vi7dAVl1y94g/JgVzxsU6ElB6Bb3baQeXcZW5A8tu5QnAZwwdxdw==", "cpu": [ "arm64" ], @@ -38,9 +40,9 @@ } }, "node_modules/@rescript/darwin-x64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-13.0.0-alpha.5.tgz", - "integrity": "sha512-UT143XnOVmUUayrD/1ceKrXb8rbhNmXKhhfnTnRGRLWp1Hxyiq5uq3OGNorSIW6jHsszsP0VvjKA+Z31h04E6Q==", + "version": "13.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-13.0.0-alpha.6.tgz", + "integrity": "sha512-N0QJzzhvBC25zt8FVSRQYSVsM6Pv8OATVANbSZUZBX/wv5HCISgUWTaZ1q0RLHpEvRymalT+kXEZGG6fUvcDCg==", "cpu": [ "x64" ], @@ -55,9 +57,9 @@ } }, "node_modules/@rescript/linux-arm64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-13.0.0-alpha.5.tgz", - "integrity": "sha512-lQ3trljExrH1uqS3hsjjoi6fnaImG/tYppcF2X4Yk8u0AP1t6AC6LUM0KR2kjctG5b7OVUrujOu91NnjovN46A==", + "version": "13.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-13.0.0-alpha.6.tgz", + "integrity": "sha512-/HEgh1Ocsyy//VsQ3e+f0qNIi/9JGqcFCM95bh/Ee0m/8RbswmUtfFjvcs/WLrhSPW9BndkLWBGMRwIYpBkRgQ==", "cpu": [ "arm64" ], @@ -72,9 +74,9 @@ } }, "node_modules/@rescript/linux-x64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-13.0.0-alpha.5.tgz", - "integrity": "sha512-Cu73xGa2nMcSgW274tAJDexlBqJGFKpv/v9wHAxqFxXzIwSkET51N9xkf42GljejeVzwyDEfgQId2Znme/PWkg==", + "version": "13.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-13.0.0-alpha.6.tgz", + "integrity": "sha512-kQlCnbUPwyxrC3KGLIR7ASdDKVkDd4hNBD+eD3t/yIIfR6lCs00EeVWbbfHMbs/Rg7TmQvGKkZTgAEQ6IoIhoQ==", "cpu": [ "x64" ], @@ -89,15 +91,26 @@ } }, "node_modules/@rescript/runtime": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-13.0.0-alpha.5.tgz", - "integrity": "sha512-k0iQhrDasCD5K5orSrps21ZVgvMgOIwh03QjUAxtMkVwyPclg6LbgG5eAAgduyecXXm3ii30o3nDaXvCryu/Tw==", + "version": "13.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-13.0.0-alpha.6.tgz", + "integrity": "sha512-PtIAApHWITR8nX//wh7eMQIdQbyl/Ynhr+oMcyUtQN98mXnU/F5UpGDGAK6QXanDpdVSW6korsqHyDcMtIscEg==", + "dev": true, "license": "MIT" }, + "node_modules/@rescript/webapi": { + "version": "0.1.0-alpha-b1d58f9", + "resolved": "https://registry.npmjs.org/@rescript/webapi/-/webapi-0.1.0-alpha-b1d58f9.tgz", + "integrity": "sha512-vqV41M1H08/k7eX4Mihm0MWHPnQXMRMKEvq37C4jbTsUXkBysaS7uAUDNB1l3/Ga7H7JCKQsoLt3BH5bgJM2IA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "rescript": ">=13" + } + }, "node_modules/@rescript/win32-x64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-13.0.0-alpha.5.tgz", - "integrity": "sha512-7uUkUY0pXDdPB5znHQYWsGml3E2pQ68KSaM7HZoFfnOEIuPqGz/hssgLgsXHkfHxrHB0waX9fsqx2Qckn6IGsw==", + "version": "13.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-13.0.0-alpha.6.tgz", + "integrity": "sha512-JGHbh8xuRtOPJeE86vzDLqSnL471CeAV3uWacEBCi6K7ZNHZlihCQhEUqWf7ir9gf46xcpnS//8A5L1Baa6Q3w==", "cpu": [ "x64" ], @@ -122,9 +135,9 @@ } }, "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", "dev": true, "license": "MIT", "engines": { @@ -132,22 +145,22 @@ } }, "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.3.0.tgz", + "integrity": "sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==", "dev": true, "license": "MIT", "dependencies": { - "scheduler": "^0.27.0" + "scheduler": "^0.28.0" }, "peerDependencies": { - "react": "^19.2.4" + "react": "^19.3.0" } }, "node_modules/rescript": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/rescript/-/rescript-13.0.0-alpha.5.tgz", - "integrity": "sha512-rv/xA1OQLN5l90/szD82IR8p/bNzwKNPLnEVaR89oiuBZYG7IhHfRxEKAvpOHqlrpnV8zKmc16IXcjCQxlni/w==", + "version": "13.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/rescript/-/rescript-13.0.0-alpha.6.tgz", + "integrity": "sha512-8bnerL6UZ11xrbt8VSa2FuFYOW1pyEIx3CGYgVz2tXsG+cVlMPjHaalquLJdZCTdz7ypJJclxAFFuGfH7B+nKg==", "dev": true, "license": "(LGPL-3.0-or-later AND MIT)", "workspaces": [ @@ -157,6 +170,7 @@ "tests/dependencies/**", "tests/analysis_tests/**", "tests/docstring_tests", + "tests/belt_tests", "tests/gentype_tests/**", "tests/tests", "tests/tools_tests", @@ -164,7 +178,7 @@ "scripts/res" ], "dependencies": { - "@rescript/runtime": "13.0.0-alpha.5" + "@rescript/runtime": "13.0.0-alpha.6" }, "bin": { "bsc": "cli/bsc.js", @@ -175,102 +189,19 @@ "node": ">=22" }, "optionalDependencies": { - "@rescript/darwin-arm64": "13.0.0-alpha.5", - "@rescript/darwin-x64": "13.0.0-alpha.5", - "@rescript/linux-arm64": "13.0.0-alpha.5", - "@rescript/linux-x64": "13.0.0-alpha.5", - "@rescript/win32-x64": "13.0.0-alpha.5" + "@rescript/darwin-arm64": "13.0.0-alpha.6", + "@rescript/darwin-x64": "13.0.0-alpha.6", + "@rescript/linux-arm64": "13.0.0-alpha.6", + "@rescript/linux-x64": "13.0.0-alpha.6", + "@rescript/win32-x64": "13.0.0-alpha.6" } }, "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.28.0.tgz", + "integrity": "sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==", "dev": true, "license": "MIT" } - }, - "dependencies": { - "@rescript/darwin-arm64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-13.0.0-alpha.5.tgz", - "integrity": "sha512-OCpT4VYLkxTjm56y+CG4SfrqotMLCaqKY5pxGq75hOPRZLZ5n5BG3OvA1rBsmz5+gT7VpKm1Do9YhmO0JvYZfg==", - "dev": true, - "optional": true - }, - "@rescript/darwin-x64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-13.0.0-alpha.5.tgz", - "integrity": "sha512-UT143XnOVmUUayrD/1ceKrXb8rbhNmXKhhfnTnRGRLWp1Hxyiq5uq3OGNorSIW6jHsszsP0VvjKA+Z31h04E6Q==", - "dev": true, - "optional": true - }, - "@rescript/linux-arm64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-13.0.0-alpha.5.tgz", - "integrity": "sha512-lQ3trljExrH1uqS3hsjjoi6fnaImG/tYppcF2X4Yk8u0AP1t6AC6LUM0KR2kjctG5b7OVUrujOu91NnjovN46A==", - "dev": true, - "optional": true - }, - "@rescript/linux-x64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-13.0.0-alpha.5.tgz", - "integrity": "sha512-Cu73xGa2nMcSgW274tAJDexlBqJGFKpv/v9wHAxqFxXzIwSkET51N9xkf42GljejeVzwyDEfgQId2Znme/PWkg==", - "dev": true, - "optional": true - }, - "@rescript/runtime": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-13.0.0-alpha.5.tgz", - "integrity": "sha512-k0iQhrDasCD5K5orSrps21ZVgvMgOIwh03QjUAxtMkVwyPclg6LbgG5eAAgduyecXXm3ii30o3nDaXvCryu/Tw==" - }, - "@rescript/win32-x64": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-13.0.0-alpha.5.tgz", - "integrity": "sha512-7uUkUY0pXDdPB5znHQYWsGml3E2pQ68KSaM7HZoFfnOEIuPqGz/hssgLgsXHkfHxrHB0waX9fsqx2Qckn6IGsw==", - "dev": true, - "optional": true - }, - "pkg-pr-new": { - "version": "0.0.75", - "resolved": "https://registry.npmjs.org/pkg-pr-new/-/pkg-pr-new-0.0.75.tgz", - "integrity": "sha512-u9mdErTewKSMsr+ceCt8VcNuNP0ro5AXiPXhUVApuEyqr2Zlvt+DdCFBcm+yGWN8mhOdZJ27meIDbnoZgfzpOw==", - "dev": true - }, - "react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", - "dev": true - }, - "react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", - "dev": true, - "requires": { - "scheduler": "^0.27.0" - } - }, - "rescript": { - "version": "13.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/rescript/-/rescript-13.0.0-alpha.5.tgz", - "integrity": "sha512-rv/xA1OQLN5l90/szD82IR8p/bNzwKNPLnEVaR89oiuBZYG7IhHfRxEKAvpOHqlrpnV8zKmc16IXcjCQxlni/w==", - "dev": true, - "requires": { - "@rescript/darwin-arm64": "13.0.0-alpha.5", - "@rescript/darwin-x64": "13.0.0-alpha.5", - "@rescript/linux-arm64": "13.0.0-alpha.5", - "@rescript/linux-x64": "13.0.0-alpha.5", - "@rescript/runtime": "13.0.0-alpha.5", - "@rescript/win32-x64": "13.0.0-alpha.5" - } - }, - "scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", - "dev": true - } } } diff --git a/package.json b/package.json index c957e3b..d60fb42 100644 --- a/package.json +++ b/package.json @@ -29,13 +29,15 @@ }, "homepage": "https://rescript-lang.org/docs/react/latest/introduction", "devDependencies": { + "@rescript/webapi": "0.1.0-alpha-b1d58f9", "pkg-pr-new": "^0.0.75", "react": "^19.2.0", "react-dom": "^19.2.0", - "rescript": "^13.0.0-alpha.5" + "rescript": "^13.0.0-alpha.6" }, "peerDependencies": { - "@rescript/runtime": ">=13.0.0-alpha.5", + "@rescript/webapi": ">=0.1.0-alpha-b1d58f9", + "@rescript/runtime": ">=13.0.0-alpha.6", "react": ">=19.2.0", "react-dom": ">=19.2.0" } diff --git a/rescript.json b/rescript.json index a0897f3..7209d75 100644 --- a/rescript.json +++ b/rescript.json @@ -14,5 +14,8 @@ "in-source": true } ], - "suffix": ".res.js" + "suffix": ".res.js", + "dependencies": [ + "@rescript/webapi" + ] } \ No newline at end of file diff --git a/src/ReactDOM.res b/src/ReactDOM.res index 64670af..2c6ccfc 100644 --- a/src/ReactDOM.res +++ b/src/ReactDOM.res @@ -6,8 +6,11 @@ calls and add the appropriate `require("react-dom")` in the file calling this `render` */ // Helper so that ReactDOM itself doesn't bring any runtime + +open WebAPI + @val @return(nullable) -external querySelector: string => option = "document.querySelector" +external querySelector: string => option = "document.querySelector" module Client = { module Root = { @@ -19,10 +22,10 @@ module Client = { } @module("react-dom/client") - external createRoot: Dom.element => Root.t = "createRoot" + external createRoot: Element.t => Root.t = "createRoot" @module("react-dom/client") - external hydrateRoot: (Dom.element, React.element) => Root.t = "hydrateRoot" + external hydrateRoot: (Element.t, React.element) => Root.t = "hydrateRoot" } // Very rudimentary form data bindings @@ -72,9 +75,9 @@ module FormData = { } @module("react-dom") -external createPortal: (React.element, Dom.element) => React.element = "createPortal" +external createPortal: (React.element, Element.t) => React.element = "createPortal" -external domElementToObj: Dom.element => {..} = "%identity" +external domElementToObj: Element.t => {..} = "%identity" type style = ReactDOMStyle.t @@ -82,8 +85,8 @@ type domRef = JsxDOM.domRef module Ref = { type t = domRef - type currentDomRef = React.ref> - type callbackDomRef = nullable => option unit> + type currentDomRef = React.ref> + type callbackDomRef = nullable => option unit> external domRef: currentDomRef => domRef = "%identity" external callbackDomRef: callbackDomRef => domRef = "%identity" diff --git a/src/ReactDOM.res.js b/src/ReactDOM.res.js index 766ec05..3e42e50 100644 --- a/src/ReactDOM.res.js +++ b/src/ReactDOM.res.js @@ -1,6 +1,6 @@ // Generated by ReScript, PLEASE EDIT WITH CARE -import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js"; +import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.mjs"; let Root = {}; diff --git a/src/ReactEvent.res b/src/ReactEvent.res index 54ac591..03e690d 100644 --- a/src/ReactEvent.res +++ b/src/ReactEvent.res @@ -5,40 +5,43 @@ module MakeEventWithType = ( type t }, ) => { + open WebAPI + @get external bubbles: Type.t => bool = "bubbles" @get external cancelable: Type.t => bool = "cancelable" @get - external currentTarget: Type.t => {..} = "currentTarget" /* Should return Dom.eventTarget */ + external currentTarget: Type.t => Node.t = "currentTarget" @get external defaultPrevented: Type.t => bool = "defaultPrevented" @get external eventPhase: Type.t => int = "eventPhase" @get external isTrusted: Type.t => bool = "isTrusted" - @get external nativeEvent: Type.t => {..} = "nativeEvent" /* Should return Dom.event */ + @get external nativeEvent: Type.t => DOM.event = "nativeEvent" @send external preventDefault: Type.t => unit = "preventDefault" @send external isDefaultPrevented: Type.t => bool = "isDefaultPrevented" @send external stopPropagation: Type.t => unit = "stopPropagation" @send external isPropagationStopped: Type.t => bool = "isPropagationStopped" - @get external target: Type.t => {..} = "target" /* Should return Dom.eventTarget */ + @get external target: Type.t => Node.t = "target" @get external timeStamp: Type.t => float = "timeStamp" @get external type_: Type.t => string = "type" @send external persist: Type.t => unit = "persist" } +open WebAPI + module Synthetic = { type tag = JsxEvent.Synthetic.tag type t = synthetic @get external bubbles: synthetic<'a> => bool = "bubbles" @get external cancelable: synthetic<'a> => bool = "cancelable" @get - external currentTarget: synthetic<'a> => {..} = - "currentTarget" /* Should return Dom.eventTarget */ + external currentTarget: synthetic<'a> => Node.t = "currentTarget" @get external defaultPrevented: synthetic<'a> => bool = "defaultPrevented" @get external eventPhase: synthetic<'a> => int = "eventPhase" @get external isTrusted: synthetic<'a> => bool = "isTrusted" @get - external nativeEvent: synthetic<'a> => {..} = "nativeEvent" /* Should return Dom.event */ + external nativeEvent: synthetic<'a> => DOM.event = "nativeEvent" @send external preventDefault: synthetic<'a> => unit = "preventDefault" @send @@ -47,7 +50,7 @@ module Synthetic = { external stopPropagation: synthetic<'a> => unit = "stopPropagation" @send external isPropagationStopped: synthetic<'a> => bool = "isPropagationStopped" - @get external target: synthetic<'a> => {..} = "target" /* Should return Dom.eventTarget */ + @get external target: synthetic<'a> => Node.t = "target" @get external timeStamp: synthetic<'a> => float = "timeStamp" @get external type_: synthetic<'a> => string = "type" @send external persist: synthetic<'a> => unit = "persist" @@ -59,8 +62,9 @@ external toSyntheticEvent: synthetic<'a> => Synthetic.t = "%identity" module Clipboard = { type tag = JsxEvent.Clipboard.tag type t = synthetic + include MakeEventWithType({type t = t}) - @get external clipboardData: t => {..} = "clipboardData" /* Should return Dom.dataTransfer */ + @get external clipboardData: t => UiEventsTypes.dataTransfer = "clipboardData" } module Composition = { @@ -95,7 +99,7 @@ module Focus = { type t = synthetic include MakeEventWithType({type t = t}) @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" } module Form = { @@ -122,7 +126,7 @@ module Mouse = { @get external pageX: t => int = "pageX" @get external pageY: t => int = "pageY" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" @get external screenX: t => int = "screenX" @get external screenY: t => int = "screenY" @get external shiftKey: t => bool = "shiftKey" @@ -135,7 +139,7 @@ module Pointer = { // UIEvent @get external detail: t => int = "detail" - @get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */ + @get external view: t => Window.t = "view" // MouseEvent @get external screenX: t => int = "screenX" @@ -158,10 +162,10 @@ module Pointer = { @get external buttons: t => int = "buttons" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" // PointerEvent - @get external pointerId: t => Dom.eventPointerId = "pointerId" + @get external pointerId: t => int = "pointerId" @get external width: t => float = "width" @get external height: t => float = "height" @get external pressure: t => float = "pressure" @@ -184,14 +188,14 @@ module Touch = { type t = synthetic include MakeEventWithType({type t = t}) @get external altKey: t => bool = "altKey" - @get external changedTouches: t => {..} = "changedTouches" /* Should return Dom.touchList */ + @get external changedTouches: t => UiEventsTypes.touchList = "changedTouches" @get external ctrlKey: t => bool = "ctrlKey" @send external getModifierState: (t, string) => bool = "getModifierState" @get external metaKey: t => bool = "metaKey" @get external shiftKey: t => bool = "shiftKey" - @get external targetTouches: t => {..} = "targetTouches" /* Should return Dom.touchList */ - @get external touches: t => {..} = "touches" /* Should return Dom.touchList */ + @get external targetTouches: t => UiEventsTypes.touchList = "targetTouches" + @get external touches: t => UiEventsTypes.touchList = "touches" } module UI = { @@ -199,7 +203,7 @@ module UI = { type t = synthetic include MakeEventWithType({type t = t}) @get external detail: t => int = "detail" - @get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */ + @get external view: t => Window.t = "view" } module Wheel = { diff --git a/src/ReactEvent.resi b/src/ReactEvent.resi index 61b5d4b..52b704b 100644 --- a/src/ReactEvent.resi +++ b/src/ReactEvent.resi @@ -38,19 +38,21 @@ */ type synthetic<'a> = JsxEvent.synthetic<'a> +open WebAPI + module Synthetic: { type tag = JsxEvent.Synthetic.tag type t = synthetic @get external bubbles: synthetic<'a> => bool = "bubbles" @get external cancelable: synthetic<'a> => bool = "cancelable" @get - external currentTarget: synthetic<'a> => {..} = "currentTarget" + external currentTarget: synthetic<'a> => Node.t = "currentTarget" @get external defaultPrevented: synthetic<'a> => bool = "defaultPrevented" @get external eventPhase: synthetic<'a> => int = "eventPhase" @get external isTrusted: synthetic<'a> => bool = "isTrusted" @get - external nativeEvent: synthetic<'a> => {..} = "nativeEvent" + external nativeEvent: synthetic<'a> => DOM.event = "nativeEvent" @send external preventDefault: synthetic<'a> => unit = "preventDefault" @send @@ -59,7 +61,7 @@ module Synthetic: { external stopPropagation: synthetic<'a> => unit = "stopPropagation" @send external isPropagationStopped: synthetic<'a> => bool = "isPropagationStopped" - @get external target: synthetic<'a> => {..} = "target" + @get external target: synthetic<'a> => Node.t = "target" @get external timeStamp: synthetic<'a> => float = "timeStamp" @get external type_: synthetic<'a> => string = "type" @send external persist: synthetic<'a> => unit = "persist" @@ -73,20 +75,20 @@ module Clipboard: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" - @get external clipboardData: t => {..} = "clipboardData" /* Should return Dom.dataTransfer */ + @get external clipboardData: t => UiEventsTypes.dataTransfer = "clipboardData" } module Composition: { @@ -94,16 +96,16 @@ module Composition: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -115,16 +117,16 @@ module Keyboard: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -149,21 +151,21 @@ module Focus: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" } module Form: { @@ -171,16 +173,16 @@ module Form: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -191,16 +193,16 @@ module Mouse: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -218,7 +220,7 @@ module Mouse: { @get external pageX: t => int = "pageX" @get external pageY: t => int = "pageY" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" @get external screenX: t => int = "screenX" @get external screenY: t => int = "screenY" @get external shiftKey: t => bool = "shiftKey" @@ -230,8 +232,8 @@ module Pointer: { // Event @get external type_: t => string = "type" - @get external target: t => {..} = "target" - @get external currentTarget: t => {..} = "currentTarget" + @get external target: t => Node.t = "target" + @get external currentTarget: t => Node.t = "currentTarget" @get external eventPhase: t => int = "eventPhase" @@ -245,14 +247,14 @@ module Pointer: { @get external timeStamp: t => float = "timeStamp" // SyntheticEvent - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external isPropagationStopped: t => bool = "isPropagationStopped" @send external persist: t => unit = "persist" // UIEvent @get external detail: t => int = "detail" - @get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */ + @get external view: t => Window.t = "view" // MouseEvent @get external screenX: t => int = "screenX" @@ -275,10 +277,10 @@ module Pointer: { @get external buttons: t => int = "buttons" @get @return(nullable) - external relatedTarget: t => option<{..}> = "relatedTarget" /* Should return Dom.eventTarget */ + external relatedTarget: t => option = "relatedTarget" // PointerEvent - @get external pointerId: t => Dom.eventPointerId = "pointerId" + @get external pointerId: t => int = "pointerId" @get external width: t => float = "width" @get external height: t => float = "height" @get external pressure: t => float = "pressure" @@ -295,16 +297,16 @@ module Selection: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -315,28 +317,28 @@ module Touch: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @get external altKey: t => bool = "altKey" - @get external changedTouches: t => {..} = "changedTouches" /* Should return Dom.touchList */ + @get external changedTouches: t => UiEventsTypes.touchList = "changedTouches" @get external ctrlKey: t => bool = "ctrlKey" @send external getModifierState: (t, string) => bool = "getModifierState" @get external metaKey: t => bool = "metaKey" @get external shiftKey: t => bool = "shiftKey" - @get external targetTouches: t => {..} = "targetTouches" /* Should return Dom.touchList */ - @get external touches: t => {..} = "touches" /* Should return Dom.touchList */ + @get external targetTouches: t => UiEventsTypes.touchList = "targetTouches" + @get external touches: t => UiEventsTypes.touchList = "touches" } module UI: { @@ -344,21 +346,21 @@ module UI: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @get external detail: t => int = "detail" - @get external view: t => Dom.window = "view" /* Should return DOMAbstractView/WindowProxy */ + @get external view: t => Window.t = "view" } module Wheel: { @@ -366,16 +368,16 @@ module Wheel: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -390,16 +392,16 @@ module Media: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -410,16 +412,16 @@ module Image: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -430,16 +432,16 @@ module Animation: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" @@ -453,16 +455,16 @@ module Transition: { type t = synthetic @get external bubbles: t => bool = "bubbles" @get external cancelable: t => bool = "cancelable" - @get external currentTarget: t => {..} = "currentTarget" + @get external currentTarget: t => Node.t = "currentTarget" @get external defaultPrevented: t => bool = "defaultPrevented" @get external eventPhase: t => int = "eventPhase" @get external isTrusted: t => bool = "isTrusted" - @get external nativeEvent: t => {..} = "nativeEvent" + @get external nativeEvent: t => DOM.event = "nativeEvent" @send external preventDefault: t => unit = "preventDefault" @send external isDefaultPrevented: t => bool = "isDefaultPrevented" @send external stopPropagation: t => unit = "stopPropagation" @send external isPropagationStopped: t => bool = "isPropagationStopped" - @get external target: t => {..} = "target" + @get external target: t => Node.t = "target" @get external timeStamp: t => float = "timeStamp" @get external type_: t => string = "type" @send external persist: t => unit = "persist" diff --git a/src/ReactTestUtils.res b/src/ReactTestUtils.res index 3b92614..139394e 100644 --- a/src/ReactTestUtils.res +++ b/src/ReactTestUtils.res @@ -39,15 +39,15 @@ external isCompositeComponentWithType: ('element, React.component<'props>) => bo module Simulate = { @module("react-dom/test-utils") @scope("Simulate") - external click: Dom.element => unit = "click" + external click: WebAPI.Element.t => unit = "click" @module("react-dom/test-utils") @scope("Simulate") - external clickWithEvent: (Dom.element, 'event) => unit = "click" + external clickWithEvent: (WebAPI.Element.t, 'event) => unit = "click" @module("react-dom/test-utils") @scope("Simulate") - external change: Dom.element => unit = "change" + external change: WebAPI.Element.t => unit = "change" @module("react-dom/test-utils") @scope("Simulate") - external blur: Dom.element => unit = "blur" + external blur: WebAPI.Element.t => unit = "blur" @module("react-dom/test-utils") @scope("Simulate") - external changeWithEvent: (Dom.element, 'event) => unit = "change" + external changeWithEvent: (WebAPI.Element.t, 'event) => unit = "change" let changeWithValue = (element, value) => { let event = { "target": { @@ -65,37 +65,37 @@ module Simulate = { changeWithEvent(element, event) } @module("react-dom/test-utils") @scope("Simulate") - external canPlay: Dom.element => unit = "canPlay" + external canPlay: WebAPI.Element.t => unit = "canPlay" @module("react-dom/test-utils") @scope("Simulate") - external timeUpdate: Dom.element => unit = "timeUpdate" + external timeUpdate: WebAPI.Element.t => unit = "timeUpdate" @module("react-dom/test-utils") @scope("Simulate") - external ended: Dom.element => unit = "ended" + external ended: WebAPI.Element.t => unit = "ended" @module("react-dom/test-utils") @scope("Simulate") - external focus: Dom.element => unit = "focus" + external focus: WebAPI.Element.t => unit = "focus" } -@val external document: Dom.document = "document" +@val external document: WebAPI.DOM.document = "document" @send -external querySelector: (Dom.element, string) => option = "querySelector" +external querySelector: (WebAPI.Element.t, string) => option = "querySelector" @send -external querySelectorAll: (Dom.element, string) => Array.arrayLike = +external querySelectorAll: (WebAPI.Element.t, string) => Array.arrayLike = "querySelectorAll" -@get external textContent: Dom.element => string = "textContent" -@get external body: Dom.document => option = "body" +@get external textContent: WebAPI.Element.t => string = "textContent" +@get external body: WebAPI.DOM.document => option = "body" @send -external createElement: (Dom.document, string) => Dom.element = "createElement" -@send external remove: Dom.element => unit = "remove" +external createElement: (WebAPI.DOM.document, string) => WebAPI.Element.t = "createElement" +@send external remove: WebAPI.Element.t => unit = "remove" @send -external appendChild: (Dom.element, Dom.element) => Dom.element = "appendChild" +external appendChild: (WebAPI.Element.t, WebAPI.Element.t) => WebAPI.Element.t = "appendChild" let querySelectorAll = (element, string) => Array.fromArrayLike(querySelectorAll(element, string)) module DOM = { @return(nullable) @get - external value: Dom.element => option = "value" + external value: WebAPI.Element.t => option = "value" let findBySelector = (element, selector) => querySelector(element, selector) @@ -110,7 +110,7 @@ module DOM = { ) } -let prepareContainer = (container: ref>, ()) => { +let prepareContainer = (container: ref>, ()) => { let containerElement = document->createElement("div") switch document->body { | Some(body) => body->appendChild(containerElement)->ignore @@ -119,7 +119,7 @@ let prepareContainer = (container: ref>, ()) => { container := Some(containerElement) } -let cleanupContainer = (container: ref>, ()) => { +let cleanupContainer = (container: ref>, ()) => { switch container.contents { | Some(contents) => remove(contents) | None => () diff --git a/src/ReactTestUtils.res.js b/src/ReactTestUtils.res.js index 2166cce..e454f86 100644 --- a/src/ReactTestUtils.res.js +++ b/src/ReactTestUtils.res.js @@ -1,6 +1,6 @@ // Generated by ReScript, PLEASE EDIT WITH CARE -import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js"; +import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.mjs"; import * as TestUtils from "react-dom/test-utils"; function act(func) { @@ -64,15 +64,15 @@ function prepareContainer(container, param) { let containerElement = document.createElement("div"); let body = document.body; if (body !== undefined) { - Primitive_option.valFromOption(body).appendChild(containerElement); + body.appendChild(containerElement); } - container.contents = Primitive_option.some(containerElement); + container.contents = containerElement; } function cleanupContainer(container, param) { let contents = container.contents; if (contents !== undefined) { - Primitive_option.valFromOption(contents).remove(); + contents.remove(); } container.contents = undefined; } diff --git a/src/ReactTestUtils.resi b/src/ReactTestUtils.resi index f87e6d1..5327c26 100644 --- a/src/ReactTestUtils.resi +++ b/src/ReactTestUtils.resi @@ -20,37 +20,41 @@ external isCompositeComponentWithType: ('element, React.component<'props>) => bo module Simulate: { @module("react-dom/test-utils") @scope("Simulate") - external click: Dom.element => unit = "click" + external click: WebAPI.Element.t => unit = "click" @module("react-dom/test-utils") @scope("Simulate") - external clickWithEvent: (Dom.element, 'event) => unit = "click" + external clickWithEvent: (WebAPI.Element.t, 'event) => unit = "click" @module("react-dom/test-utils") @scope("Simulate") - external change: Dom.element => unit = "change" + external change: WebAPI.Element.t => unit = "change" @module("react-dom/test-utils") @scope("Simulate") - external blur: Dom.element => unit = "blur" + external blur: WebAPI.Element.t => unit = "blur" @module("react-dom/test-utils") @scope("Simulate") - external changeWithEvent: (Dom.element, 'event) => unit = "change" - let changeWithValue: (Dom.element, string) => unit - let changeWithChecked: (Dom.element, bool) => unit + external changeWithEvent: (WebAPI.Element.t, 'event) => unit = "change" + let changeWithValue: (WebAPI.Element.t, string) => unit + let changeWithChecked: (WebAPI.Element.t, bool) => unit @module("react-dom/test-utils") @scope("Simulate") - external canPlay: Dom.element => unit = "canPlay" + external canPlay: WebAPI.Element.t => unit = "canPlay" @module("react-dom/test-utils") @scope("Simulate") - external timeUpdate: Dom.element => unit = "timeUpdate" + external timeUpdate: WebAPI.Element.t => unit = "timeUpdate" @module("react-dom/test-utils") @scope("Simulate") - external ended: Dom.element => unit = "ended" + external ended: WebAPI.Element.t => unit = "ended" @module("react-dom/test-utils") @scope("Simulate") - external focus: Dom.element => unit = "focus" + external focus: WebAPI.Element.t => unit = "focus" } module DOM: { @return(nullable) @get - external value: Dom.element => option = "value" - - let findBySelector: (Dom.element, string) => option - let findByAllSelector: (Dom.element, string) => array - let findBySelectorAndTextContent: (Dom.element, string, string) => option - let findBySelectorAndPartialTextContent: (Dom.element, string, string) => option + external value: WebAPI.Element.t => option = "value" + + let findBySelector: (WebAPI.Element.t, string) => option + let findByAllSelector: (WebAPI.Element.t, string) => array + let findBySelectorAndTextContent: (WebAPI.Element.t, string, string) => option + let findBySelectorAndPartialTextContent: ( + WebAPI.Element.t, + string, + string, + ) => option } -let prepareContainer: (ref>, unit) => unit -let cleanupContainer: (ref>, unit) => unit -let getContainer: ref> => Dom.element +let prepareContainer: (ref>, unit) => unit +let cleanupContainer: (ref>, unit) => unit +let getContainer: ref> => WebAPI.Element.t diff --git a/src/RescriptReactRouter.res b/src/RescriptReactRouter.res index 7471541..dacfed8 100644 --- a/src/RescriptReactRouter.res +++ b/src/RescriptReactRouter.res @@ -1,32 +1,35 @@ +open WebAPI + @scope("globalThis") -external window: option = "window" +external window: option = "window" @scope("globalThis") -external history: option = "history" +external history: option = "history" -@get external location: Dom.window => Dom.location = "location" +@get external location: Window.t => Location.t = "location" -/* actually the cb is Dom.event => unit, but let's restrict the access for now */ +/* actually the cb is DOM.event => unit, but let's restrict the access for now */ @send -external addEventListener: (Dom.window, string, unit => unit) => unit = "addEventListener" +external addEventListener: (Window.t, string, unit => unit) => unit = "addEventListener" @send -external removeEventListener: (Dom.window, string, unit => unit) => unit = "removeEventListener" +external removeEventListener: (Window.t, string, unit => unit) => unit = "removeEventListener" @send -external dispatchEvent: (Dom.window, Dom.event) => unit = "dispatchEvent" +external dispatchEvent: (Window.t, DOM.event) => unit = "dispatchEvent" -@get external pathname: Dom.location => string = "pathname" +@get external pathname: Location.t => string = "pathname" -@get external hash: Dom.location => string = "hash" +@get external hash: Location.t => string = "hash" -@get external search: Dom.location => string = "search" +@get external search: Location.t => string = "search" @send -external pushState: (Dom.history, @as(json`null`) _, @as("") _, ~href: string) => unit = "pushState" +external pushState: (HistoryTypes.history, @as(json`null`) _, @as("") _, ~href: string) => unit = + "pushState" @send -external replaceState: (Dom.history, @as(json`null`) _, @as("") _, ~href: string) => unit = +external replaceState: (HistoryTypes.history, @as(json`null`) _, @as("") _, ~href: string) => unit = "replaceState" type makeEventOptions = { @@ -34,7 +37,7 @@ type makeEventOptions = { cancelable?: bool, composed?: bool, } -@new external makeEvent: (string, ~options: makeEventOptions=?) => Dom.event = "Event" +@new external makeEvent: (string, ~options: makeEventOptions=?) => DOM.event = "Event" /* This is copied from array.ml. We want to cut dependencies for rescript-react so that it's friendlier to use in size-constrained codebases */ @@ -78,12 +81,12 @@ let path = (~serverUrlString=?, ()) => switch (serverUrlString, window) { | (None, None) => list{} | (Some(serverUrlString), _) => pathParse(serverUrlString) - | (_, Some(window: Dom.window)) => pathParse(window->location->pathname) + | (_, Some(window: Window.t)) => pathParse(window->location->pathname) } let hash = () => switch window { | None => "" - | Some(window: Dom.window) => + | Some(window: Window.t) => switch window->location->hash { | "" | "#" => "" @@ -108,14 +111,14 @@ let search = (~serverUrlString=?, ()) => switch (serverUrlString, window) { | (None, None) => "" | (Some(serverUrlString), _) => searchParse(serverUrlString) - | (_, Some(window: Dom.window)) => searchParse(window->location->search) + | (_, Some(window: Window.t)) => searchParse(window->location->search) } let push = path => switch (history, window) { | (None, _) | (_, None) => () - | (Some(history: Dom.history), Some(window: Dom.window)) => + | (Some(history: HistoryTypes.history), Some(window: Window.t)) => pushState(history, ~href=path) dispatchEvent(window, makeEvent("popstate", ~options={bubbles: true, cancelable: true})) } @@ -124,7 +127,7 @@ let replace = path => switch (history, window) { | (None, _) | (_, None) => () - | (Some(history: Dom.history), Some(window: Dom.window)) => + | (Some(history: HistoryTypes.history), Some(window: Window.t)) => replaceState(history, ~href=path) dispatchEvent(window, makeEvent("popstate", ~options={bubbles: true, cancelable: true})) } @@ -165,7 +168,7 @@ let dangerouslyGetInitialUrl = url let watchUrl = callback => switch window { | None => () => () - | Some(window: Dom.window) => + | Some(window: Window.t) => let watcherID = () => callback(url()) addEventListener(window, "popstate", watcherID) watcherID @@ -174,7 +177,7 @@ let watchUrl = callback => let unwatchUrl = watcherID => switch window { | None => () - | Some(window: Dom.window) => removeEventListener(window, "popstate", watcherID) + | Some(window: Window.t) => removeEventListener(window, "popstate", watcherID) } let useUrl = (~serverUrl=?, ()) => { diff --git a/src/RescriptReactRouter.res.js b/src/RescriptReactRouter.res.js index 0a17734..9c2e768 100644 --- a/src/RescriptReactRouter.res.js +++ b/src/RescriptReactRouter.res.js @@ -1,7 +1,6 @@ // Generated by ReScript, PLEASE EDIT WITH CARE import * as React from "react"; -import * as Primitive_option from "@rescript/runtime/lib/es6/Primitive_option.js"; function pathParse(str) { switch (str) { @@ -38,7 +37,7 @@ function path(serverUrlString, param) { if (serverUrlString !== undefined) { return pathParse(serverUrlString); } else if (match !== undefined) { - return pathParse(Primitive_option.valFromOption(match).location.pathname); + return pathParse(match.location.pathname); } else { return /* [] */0; } @@ -49,7 +48,7 @@ function hash() { if (window === undefined) { return ""; } - let raw = Primitive_option.valFromOption(window).location.hash; + let raw = window.location.hash; switch (raw) { case "" : case "#" : @@ -79,7 +78,7 @@ function search(serverUrlString, param) { if (serverUrlString !== undefined) { return searchParse(serverUrlString); } else if (match !== undefined) { - return searchParse(Primitive_option.valFromOption(match).location.search); + return searchParse(match.location.search); } else { return ""; } @@ -89,8 +88,8 @@ function push(path) { let match = globalThis.history; let match$1 = globalThis.window; if (match !== undefined && match$1 !== undefined) { - Primitive_option.valFromOption(match).pushState(null, "", path); - Primitive_option.valFromOption(match$1).dispatchEvent(new Event("popstate", { + match.pushState(null, "", path); + match$1.dispatchEvent(new Event("popstate", { bubbles: true, cancelable: true })); @@ -102,8 +101,8 @@ function replace(path) { let match = globalThis.history; let match$1 = globalThis.window; if (match !== undefined && match$1 !== undefined) { - Primitive_option.valFromOption(match).replaceState(null, "", path); - Primitive_option.valFromOption(match$1).dispatchEvent(new Event("popstate", { + match.replaceState(null, "", path); + match$1.dispatchEvent(new Event("popstate", { bubbles: true, cancelable: true })); @@ -150,14 +149,14 @@ function watchUrl(callback) { return () => {}; } let watcherID = () => callback(url(undefined, undefined)); - Primitive_option.valFromOption(window).addEventListener("popstate", watcherID); + window.addEventListener("popstate", watcherID); return watcherID; } function unwatchUrl(watcherID) { let window = globalThis.window; if (window !== undefined) { - Primitive_option.valFromOption(window).removeEventListener("popstate", watcherID); + window.removeEventListener("popstate", watcherID); return; } }