diff --git a/README.md b/README.md index 62b25b0..5adebb1 100644 --- a/README.md +++ b/README.md @@ -7,11 +7,12 @@ ### Versions -| @rescript/react | ReScript | ReactJS | Documentation | -| --------------- | -------- | ------- | ----------------------------------------------------------------- | -| 0.12.0+ | 11.0+ | 18.0.0+ | [Link](https://rescript-lang.org/docs/react/latest/introduction) | -| 0.11.0 | 10.1 | 18.0.0+ | [Link](https://rescript-lang.org/docs/react/v0.11.0/introduction) | -| 0.10.3 | 8.3 | 16.8.1+ | [Link](https://rescript-lang.org/docs/react/v0.10.0/introduction) | +| @rescript/react | ReScript | ReactJS | Documentation | +| --------------- | ---------------------------------- | ------- | ----------------------------------------------------------------- | +| next (master) | 11.0+ (JSX4 + uncurried mode only) | 18.0.0+ | | +| 0.12.x, 0.13.x | 11.0+ | 18.0.0+ | [Link](https://rescript-lang.org/docs/react/latest/introduction) | +| 0.11.0 | 10.1 | 18.0.0+ | [Link](https://rescript-lang.org/docs/react/v0.11.0/introduction) | +| 0.10.3 | 8.3 | 16.8.1+ | [Link](https://rescript-lang.org/docs/react/v0.10.0/introduction) | ### Development diff --git a/rescript.json b/rescript.json index c13a738..599e1f6 100644 --- a/rescript.json +++ b/rescript.json @@ -8,6 +8,5 @@ "package-specs": [{ "module": "commonjs", "in-source": true }], "suffix": ".bs.js", "bs-dev-dependencies": [], - "bsc-flags": [], - "uncurried": false + "bsc-flags": [] } diff --git a/src/React.bs.js b/src/React.bs.js index 08a9db0..c2471b6 100644 --- a/src/React.bs.js +++ b/src/React.bs.js @@ -1,7 +1,6 @@ // Generated by ReScript, PLEASE EDIT WITH CARE 'use strict'; -var Curry = require("rescript/lib/js/curry.js"); var React = require("react"); var Ref = {}; @@ -17,9 +16,9 @@ var StrictMode = {}; var Suspense = {}; function lazy_(load) { - return React.lazy(async function (param) { + return React.lazy(async function () { return { - default: await Curry._1(load, undefined) + default: await load() }; }); } diff --git a/src/React.res b/src/React.res index 89f4d5b..0beaa59 100644 --- a/src/React.res +++ b/src/React.res @@ -52,11 +52,11 @@ module Children = { @module("react") @scope("Children") external map: (element, element => element) => element = "map" @module("react") @scope("Children") - external mapWithIndex: (element, @uncurry (element, int) => element) => element = "map" + external mapWithIndex: (element, (element, int) => element) => element = "map" @module("react") @scope("Children") external forEach: (element, element => unit) => unit = "forEach" @module("react") @scope("Children") - external forEachWithIndex: (element, @uncurry (element, int) => unit) => unit = "forEach" + external forEachWithIndex: (element, (element, int) => unit) => unit = "forEach" @module("react") @scope("Children") external count: element => int = "count" @module("react") @scope("Children") @@ -81,7 +81,7 @@ module Context = { external createContext: 'a => Context.t<'a> = "createContext" @module("react") -external forwardRef: (@uncurry ('props, Js.Nullable.t>) => element) => component<'props> = +external forwardRef: (('props, Js.Nullable.t>) => element) => component<'props> = "forwardRef" @module("react") @@ -90,7 +90,7 @@ external memo: component<'props> => component<'props> = "memo" @module("react") external memoCustomCompareProps: ( component<'props>, - @uncurry ('props, 'props) => bool, + ('props, 'props) => bool, ) => component<'props> = "memo" @module("react") external fragment: component = "Fragment" @@ -132,108 +132,93 @@ let lazy_ = load => lazy_(async () => {default: await load()}) * only way to safely have any type of state and be able to update it correctly. */ @module("react") -external useState: (@uncurry (unit => 'state)) => ('state, ('state => 'state) => unit) = "useState" +external useState: (unit => 'state) => ('state, ('state => 'state) => unit) = "useState" @module("react") -external useReducer: (@uncurry ('state, 'action) => 'state, 'state) => ('state, 'action => unit) = +external useReducer: (('state, 'action) => 'state, 'state) => ('state, 'action => unit) = "useReducer" @module("react") external useReducerWithMapState: ( - @uncurry ('state, 'action) => 'state, + ('state, 'action) => 'state, 'initialState, - @uncurry ('initialState => 'state), + 'initialState => 'state, ) => ('state, 'action => unit) = "useReducer" @module("react") -external useEffectOnEveryRender: (@uncurry (unit => option unit>)) => unit = "useEffect" +external useEffectOnEveryRender: (unit => option unit>) => unit = "useEffect" @module("react") -external useEffect: (@uncurry (unit => option unit>), 'deps) => unit = "useEffect" +external useEffect: (unit => option unit>, 'deps) => unit = "useEffect" @module("react") -external useEffect0: (@uncurry (unit => option unit>), @as(json`[]`) _) => unit = - "useEffect" +external useEffect0: (unit => option unit>, @as(json`[]`) _) => unit = "useEffect" @module("react") -external useEffect1: (@uncurry (unit => option unit>), array<'a>) => unit = "useEffect" +external useEffect1: (unit => option unit>, array<'a>) => unit = "useEffect" @module("react") -external useEffect2: (@uncurry (unit => option unit>), ('a, 'b)) => unit = "useEffect" +external useEffect2: (unit => option unit>, ('a, 'b)) => unit = "useEffect" @module("react") -external useEffect3: (@uncurry (unit => option unit>), ('a, 'b, 'c)) => unit = "useEffect" +external useEffect3: (unit => option unit>, ('a, 'b, 'c)) => unit = "useEffect" @module("react") -external useEffect4: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd)) => unit = - "useEffect" +external useEffect4: (unit => option unit>, ('a, 'b, 'c, 'd)) => unit = "useEffect" @module("react") -external useEffect5: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e)) => unit = - "useEffect" +external useEffect5: (unit => option unit>, ('a, 'b, 'c, 'd, 'e)) => unit = "useEffect" @module("react") -external useEffect6: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e, 'f)) => unit = - "useEffect" +external useEffect6: (unit => option unit>, ('a, 'b, 'c, 'd, 'e, 'f)) => unit = "useEffect" @module("react") -external useEffect7: ( - @uncurry (unit => option unit>), - ('a, 'b, 'c, 'd, 'e, 'f, 'g), -) => unit = "useEffect" +external useEffect7: (unit => option unit>, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => unit = + "useEffect" @module("react") -external useLayoutEffectOnEveryRender: (@uncurry (unit => option unit>)) => unit = - "useLayoutEffect" +external useLayoutEffectOnEveryRender: (unit => option unit>) => unit = "useLayoutEffect" @module("react") -external useLayoutEffect: (@uncurry (unit => option unit>), 'deps) => unit = - "useLayoutEffect" +external useLayoutEffect: (unit => option unit>, 'deps) => unit = "useLayoutEffect" @module("react") -external useLayoutEffect0: (@uncurry (unit => option unit>), @as(json`[]`) _) => unit = +external useLayoutEffect0: (unit => option unit>, @as(json`[]`) _) => unit = "useLayoutEffect" @module("react") -external useLayoutEffect1: (@uncurry (unit => option unit>), array<'a>) => unit = - "useLayoutEffect" +external useLayoutEffect1: (unit => option unit>, array<'a>) => unit = "useLayoutEffect" @module("react") -external useLayoutEffect2: (@uncurry (unit => option unit>), ('a, 'b)) => unit = - "useLayoutEffect" +external useLayoutEffect2: (unit => option unit>, ('a, 'b)) => unit = "useLayoutEffect" @module("react") -external useLayoutEffect3: (@uncurry (unit => option unit>), ('a, 'b, 'c)) => unit = - "useLayoutEffect" +external useLayoutEffect3: (unit => option unit>, ('a, 'b, 'c)) => unit = "useLayoutEffect" @module("react") -external useLayoutEffect4: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd)) => unit = +external useLayoutEffect4: (unit => option unit>, ('a, 'b, 'c, 'd)) => unit = "useLayoutEffect" @module("react") -external useLayoutEffect5: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd, 'e)) => unit = +external useLayoutEffect5: (unit => option unit>, ('a, 'b, 'c, 'd, 'e)) => unit = "useLayoutEffect" @module("react") -external useLayoutEffect6: ( - @uncurry (unit => option unit>), - ('a, 'b, 'c, 'd, 'e, 'f), -) => unit = "useLayoutEffect" +external useLayoutEffect6: (unit => option unit>, ('a, 'b, 'c, 'd, 'e, 'f)) => unit = + "useLayoutEffect" @module("react") -external useLayoutEffect7: ( - @uncurry (unit => option unit>), - ('a, 'b, 'c, 'd, 'e, 'f, 'g), -) => unit = "useLayoutEffect" +external useLayoutEffect7: (unit => option unit>, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => unit = + "useLayoutEffect" @module("react") -external useMemo: (@uncurry (unit => 'any), 'deps) => 'any = "useMemo" +external useMemo: (unit => 'any, 'deps) => 'any = "useMemo" @module("react") -external useMemo0: (@uncurry (unit => 'any), @as(json`[]`) _) => 'any = "useMemo" +external useMemo0: (unit => 'any, @as(json`[]`) _) => 'any = "useMemo" @module("react") -external useMemo1: (@uncurry (unit => 'any), array<'a>) => 'any = "useMemo" +external useMemo1: (unit => 'any, array<'a>) => 'any = "useMemo" @module("react") -external useMemo2: (@uncurry (unit => 'any), ('a, 'b)) => 'any = "useMemo" +external useMemo2: (unit => 'any, ('a, 'b)) => 'any = "useMemo" @module("react") -external useMemo3: (@uncurry (unit => 'any), ('a, 'b, 'c)) => 'any = "useMemo" +external useMemo3: (unit => 'any, ('a, 'b, 'c)) => 'any = "useMemo" @module("react") -external useMemo4: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd)) => 'any = "useMemo" +external useMemo4: (unit => 'any, ('a, 'b, 'c, 'd)) => 'any = "useMemo" @module("react") -external useMemo5: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e)) => 'any = "useMemo" +external useMemo5: (unit => 'any, ('a, 'b, 'c, 'd, 'e)) => 'any = "useMemo" @module("react") -external useMemo6: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = "useMemo" +external useMemo6: (unit => 'any, ('a, 'b, 'c, 'd, 'e, 'f)) => 'any = "useMemo" @module("react") -external useMemo7: (@uncurry (unit => 'any), ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" +external useMemo7: (unit => 'any, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => 'any = "useMemo" @module("react") external useCallback: ('f, 'deps) => 'f = "useCallback" @@ -268,71 +253,57 @@ external useContext: Context.t<'any> => 'any = "useContext" @module("react") external useRef: 'value => ref<'value> = "useRef" @module("react") -external useImperativeHandleOnEveryRender: ( - Js.Nullable.t>, - @uncurry (unit => 'value), -) => unit = "useImperativeHandle" +external useImperativeHandleOnEveryRender: (Js.Nullable.t>, unit => 'value) => unit = + "useImperativeHandle" @module("react") -external useImperativeHandle: ( - Js.Nullable.t>, - @uncurry (unit => 'value), - 'deps, -) => unit = "useImperativeHandle" +external useImperativeHandle: (Js.Nullable.t>, unit => 'value, 'deps) => unit = + "useImperativeHandle" @module("react") external useImperativeHandle0: ( Js.Nullable.t>, - @uncurry (unit => 'value), + unit => 'value, @as(json`[]`) _, ) => unit = "useImperativeHandle" @module("react") -external useImperativeHandle1: ( - Js.Nullable.t>, - @uncurry (unit => 'value), - array<'a>, -) => unit = "useImperativeHandle" +external useImperativeHandle1: (Js.Nullable.t>, unit => 'value, array<'a>) => unit = + "useImperativeHandle" @module("react") -external useImperativeHandle2: ( - Js.Nullable.t>, - @uncurry (unit => 'value), - ('a, 'b), -) => unit = "useImperativeHandle" +external useImperativeHandle2: (Js.Nullable.t>, unit => 'value, ('a, 'b)) => unit = + "useImperativeHandle" @module("react") -external useImperativeHandle3: ( - Js.Nullable.t>, - @uncurry (unit => 'value), - ('a, 'b, 'c), -) => unit = "useImperativeHandle" +external useImperativeHandle3: (Js.Nullable.t>, unit => 'value, ('a, 'b, 'c)) => unit = + "useImperativeHandle" @module("react") external useImperativeHandle4: ( Js.Nullable.t>, - @uncurry (unit => 'value), + unit => 'value, ('a, 'b, 'c, 'd), ) => unit = "useImperativeHandle" @module("react") external useImperativeHandle5: ( Js.Nullable.t>, - @uncurry (unit => 'value), + unit => 'value, ('a, 'b, 'c, 'd, 'e), ) => unit = "useImperativeHandle" @module("react") external useImperativeHandle6: ( Js.Nullable.t>, - @uncurry (unit => 'value), + unit => 'value, ('a, 'b, 'c, 'd, 'e, 'f), ) => unit = "useImperativeHandle" @module("react") external useImperativeHandle7: ( Js.Nullable.t>, - @uncurry (unit => 'value), + unit => 'value, ('a, 'b, 'c, 'd, 'e, 'f, 'g), ) => unit = "useImperativeHandle" @@ -341,75 +312,65 @@ external useImperativeHandle7: ( @module("react") external useDeferredValue: 'value => 'value = "useDeferredValue" @module("react") -external useTransition: unit => (bool, (. unit => unit) => unit) = "useTransition" +external useTransition: unit => (bool, (unit => unit) => unit) = "useTransition" @module("react") -external useInsertionEffectOnEveryRender: (@uncurry (unit => option unit>)) => unit = +external useInsertionEffectOnEveryRender: (unit => option unit>) => unit = "useInsertionEffect" @module("react") -external useInsertionEffect: (@uncurry (unit => option unit>), 'deps) => unit = - "useInsertionEffect" +external useInsertionEffect: (unit => option unit>, 'deps) => unit = "useInsertionEffect" @module("react") -external useInsertionEffect0: (@uncurry (unit => option unit>), @as(json`[]`) _) => unit = +external useInsertionEffect0: (unit => option unit>, @as(json`[]`) _) => unit = "useInsertionEffect" @module("react") -external useInsertionEffect1: (@uncurry (unit => option unit>), array<'a>) => unit = +external useInsertionEffect1: (unit => option unit>, array<'a>) => unit = "useInsertionEffect" @module("react") -external useInsertionEffect2: (@uncurry (unit => option unit>), ('a, 'b)) => unit = +external useInsertionEffect2: (unit => option unit>, ('a, 'b)) => unit = "useInsertionEffect" @module("react") -external useInsertionEffect3: (@uncurry (unit => option unit>), ('a, 'b, 'c)) => unit = +external useInsertionEffect3: (unit => option unit>, ('a, 'b, 'c)) => unit = "useInsertionEffect" @module("react") -external useInsertionEffect4: (@uncurry (unit => option unit>), ('a, 'b, 'c, 'd)) => unit = +external useInsertionEffect4: (unit => option unit>, ('a, 'b, 'c, 'd)) => unit = "useInsertionEffect" @module("react") -external useInsertionEffect5: ( - @uncurry (unit => option unit>), - ('a, 'b, 'c, 'd, 'e), -) => unit = "useInsertionEffect" +external useInsertionEffect5: (unit => option unit>, ('a, 'b, 'c, 'd, 'e)) => unit = + "useInsertionEffect" @module("react") -external useInsertionEffect6: ( - @uncurry (unit => option unit>), - ('a, 'b, 'c, 'd, 'e, 'f), -) => unit = "useInsertionEffect" +external useInsertionEffect6: (unit => option unit>, ('a, 'b, 'c, 'd, 'e, 'f)) => unit = + "useInsertionEffect" @module("react") -external useInsertionEffect7: ( - @uncurry (unit => option unit>), - ('a, 'b, 'c, 'd, 'e, 'f, 'g), -) => unit = "useInsertionEffect" +external useInsertionEffect7: (unit => option unit>, ('a, 'b, 'c, 'd, 'e, 'f, 'g)) => unit = + "useInsertionEffect" @module("react") external useSyncExternalStore: ( - ~subscribe: @uncurry ((unit => unit) => (. unit) => unit), - ~getSnapshot: @uncurry (unit => 'state), + ~subscribe: (unit => unit) => unit => unit, + ~getSnapshot: unit => 'state, ) => 'state = "useSyncExternalStore" @module("react") external useSyncExternalStoreWithServerSnapshot: ( - ~subscribe: @uncurry ((unit => unit) => (. unit) => unit), - ~getSnapshot: @uncurry (unit => 'state), - ~getServerSnapshot: @uncurry (unit => 'state), + ~subscribe: (unit => unit) => unit => unit, + ~getSnapshot: unit => 'state, + ~getServerSnapshot: unit => 'state, ) => 'state = "useSyncExternalStore" module Uncurried = { @module("react") - external useState: (@uncurry (unit => 'state)) => ('state, (. 'state => 'state) => unit) = - "useState" + external useState: (unit => 'state) => ('state, ('state => 'state) => unit) = "useState" @module("react") - external useReducer: ( - @uncurry ('state, 'action) => 'state, - 'state, - ) => ('state, (. 'action) => unit) = "useReducer" + external useReducer: (('state, 'action) => 'state, 'state) => ('state, 'action => unit) = + "useReducer" @module("react") external useReducerWithMapState: ( - @uncurry ('state, 'action) => 'state, + ('state, 'action) => 'state, 'initialState, - @uncurry ('initialState => 'state), - ) => ('state, (. 'action) => unit) = "useReducer" + 'initialState => 'state, + ) => ('state, 'action => unit) = "useReducer" @module("react") external useCallback: ('f, 'deps) => 'f = "useCallback" diff --git a/src/ReactTestUtils.bs.js b/src/ReactTestUtils.bs.js index 9913094..7ddadac 100644 --- a/src/ReactTestUtils.bs.js +++ b/src/ReactTestUtils.bs.js @@ -1,20 +1,19 @@ // Generated by ReScript, PLEASE EDIT WITH CARE 'use strict'; -var Curry = require("rescript/lib/js/curry.js"); var Caml_option = require("rescript/lib/js/caml_option.js"); var TestUtils = require("react-dom/test-utils"); function act(func) { var reactFunc = function () { - Curry._1(func, undefined); + func(); }; TestUtils.act(reactFunc); } function actAsync(func) { return TestUtils.act(function () { - return Curry._1(func, undefined); + return func(); }); } diff --git a/src/ReactTestUtils.res b/src/ReactTestUtils.res index 5b3bc09..a6c2b5e 100644 --- a/src/ReactTestUtils.res +++ b/src/ReactTestUtils.res @@ -3,10 +3,10 @@ type undefined = Js.undefined let undefined: undefined = Js.Undefined.empty @module("react-dom/test-utils") -external reactAct: ((. unit) => undefined) => unit = "act" +external reactAct: (unit => undefined) => unit = "act" let act: (unit => unit) => unit = func => { - let reactFunc = (. ()) => { + let reactFunc = () => { func() undefined } @@ -14,10 +14,10 @@ let act: (unit => unit) => unit = func => { } @module("react-dom/test-utils") -external reactActAsync: ((. unit) => Js.Promise.t<'a>) => Js.Promise.t = "act" +external reactActAsync: (unit => Js.Promise.t<'a>) => Js.Promise.t = "act" let actAsync = func => { - let reactFunc = (. ()) => func() + let reactFunc = () => func() reactActAsync(reactFunc) } diff --git a/src/RescriptReactRouter.bs.js b/src/RescriptReactRouter.bs.js index 3ca19e8..eb542b6 100644 --- a/src/RescriptReactRouter.bs.js +++ b/src/RescriptReactRouter.bs.js @@ -1,7 +1,6 @@ // Generated by ReScript, PLEASE EDIT WITH CARE 'use strict'; -var Curry = require("rescript/lib/js/curry.js"); var React = require("react"); var Caml_option = require("rescript/lib/js/caml_option.js"); @@ -57,7 +56,7 @@ function path(serverUrlString, param) { } } -function hash(param) { +function hash() { var $$window = globalThis.window; if ($$window === undefined) { return ""; @@ -160,12 +159,12 @@ function url(serverUrlString, param) { function watchUrl(callback) { var $$window = globalThis.window; if ($$window === undefined) { - return function (param) { + return function () { }; } - var watcherID = function (param) { - Curry._1(callback, url(undefined, undefined)); + var watcherID = function () { + callback(url(undefined, undefined)); }; Caml_option.valFromOption($$window).addEventListener("popstate", watcherID); return watcherID; @@ -181,7 +180,7 @@ function unwatchUrl(watcherID) { } function useUrl(serverUrl, param) { - var match = React.useState(function (param) { + var match = React.useState(function () { if (serverUrl !== undefined) { return serverUrl; } else { @@ -190,19 +189,19 @@ function useUrl(serverUrl, param) { }); var setUrl = match[1]; var url$1 = match[0]; - React.useEffect((function (param) { + React.useEffect((function () { var watcherId = watchUrl(function (url) { - Curry._1(setUrl, (function (param) { - return url; - })); + setUrl(function (param) { + return url; + }); }); var newUrl = url(undefined, undefined); if (urlNotEqual(newUrl, url$1)) { - Curry._1(setUrl, (function (param) { - return newUrl; - })); + setUrl(function (param) { + return newUrl; + }); } - return (function (param) { + return (function () { unwatchUrl(watcherId); }); }), []);