Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

browser_only: don't convert to runtime errors on identifiers or function application #138

Merged
merged 4 commits into from
Jun 19, 2024

Conversation

jchavarri
Copy link
Contributor

I had a case where I used browser_only in some event handler using a curried function, e.g.:

onKeyDown=[%browser_only
  onKeyDown(~foo)
]

This code converted to plain Runtime.fail_impossible_action_in_ssr, crashing the server application at runtime.

This PR removes some of the cases where browser_only can be used:

  • identifiers
  • function application (pexp_apply)

so this extension can only be used to convert function definitions.

Users can still use switch%platform for identifiers and function applications, which prevents running on footguns like the one mentioned above.

@davesnx davesnx merged commit 8b900ef into main Jun 19, 2024
2 checks passed
@davesnx davesnx deleted the dont-runtime-error-on-iden branch June 19, 2024 13:54
davesnx added a commit to davesnx/opam-repository that referenced this pull request Jul 23, 2024
CHANGES:

## 0.3.1
* Update quickjs dependency to 0.1.2 by @davesnx

## 0.3.0

* browser-ppx: process stritems by @jchavarri in ml-in-barcelona/server-reason-react#127
* Make React.Children.* APIs work as expected by @davesnx in ml-in-barcelona/server-reason-react#130
* Improve global crashes by @davesnx in ml-in-barcelona/server-reason-react#132
* Support assets in `mel.module` by @jchavarri in ml-in-barcelona/server-reason-react#134
* browser_only: don't convert to runtime errors on identifiers or function application by @jchavarri in ml-in-barcelona/server-reason-react#138
* Port `j` quoted strings interpolation from Melange by @jchavarri in ml-in-barcelona/server-reason-react#139
* mel.module: handle asset prefix by @jchavarri in ml-in-barcelona/server-reason-react#140
* Add browser_only transformation to useEffect automatically by @davesnx in ml-in-barcelona/server-reason-react#145
* Append doctype tag on html lowercase by @davesnx in ml-in-barcelona/server-reason-react#136
* Transform Pexp_function with browser_only by @davesnx in ml-in-barcelona/server-reason-react#146

## 0.2.0

- Remove data-reactroot attr from ReactDOM.renderToString ml-in-barcelona/server-reason-react#129 by @pedrobslisboa
- Make useUrl return the provided serverUrl ml-in-barcelona/server-reason-react#125 by @purefunctor
- Replace Js.Re implemenation from `pcre` to quickjs b1a3e225cdad1298d705fbbd9618e15b0427ef0f by @davesnx
- Remove Belt.Array.push ml-in-barcelona/server-reason-react#122 by @davesnx

## 0.1.0

Initial release of server-reason-react, includes:

- Server-side rendering of ReasonReact components (renderToString, renderToStaticMarkup & renderToLwtStream)
- `server-reason-react.browser_ppx` for skipping code from the server
- `server-reason-react.melange_ppx` for enabling melange bindings and extensions which run on the server
- `server-reason-react.belt` a native Belt implementation
- `server-reason-react.js` a native Js implementation (unsafe and limited)
- `server-reason-react.url` and `server-reason-react.url-native` a universal library with both implementations to work with URLs on the server and the client
- `server-reason-react.promise` and `server-reason-react.promise-native` a universal library with both implementations to work with Promises on the server and the client. Based on https://github.com/aantron/promise
- `server-reason-react.melange-fetch` a fork of melange-fetch which is a melange library to fetch data on the client via the Fetch API. This fork is to be able to compile it on the server (not running).
- `server-reason-react.webapi` a fork of melange-webapi which is a melange library to work with the Web API on the client. This fork is to be able to compile it on the server (not running).
avsm pushed a commit to avsm/opam-repository that referenced this pull request Sep 5, 2024
CHANGES:

## 0.3.1
* Update quickjs dependency to 0.1.2 by @davesnx

## 0.3.0

* browser-ppx: process stritems by @jchavarri in ml-in-barcelona/server-reason-react#127
* Make React.Children.* APIs work as expected by @davesnx in ml-in-barcelona/server-reason-react#130
* Improve global crashes by @davesnx in ml-in-barcelona/server-reason-react#132
* Support assets in `mel.module` by @jchavarri in ml-in-barcelona/server-reason-react#134
* browser_only: don't convert to runtime errors on identifiers or function application by @jchavarri in ml-in-barcelona/server-reason-react#138
* Port `j` quoted strings interpolation from Melange by @jchavarri in ml-in-barcelona/server-reason-react#139
* mel.module: handle asset prefix by @jchavarri in ml-in-barcelona/server-reason-react#140
* Add browser_only transformation to useEffect automatically by @davesnx in ml-in-barcelona/server-reason-react#145
* Append doctype tag on html lowercase by @davesnx in ml-in-barcelona/server-reason-react#136
* Transform Pexp_function with browser_only by @davesnx in ml-in-barcelona/server-reason-react#146

## 0.2.0

- Remove data-reactroot attr from ReactDOM.renderToString ml-in-barcelona/server-reason-react#129 by @pedrobslisboa
- Make useUrl return the provided serverUrl ml-in-barcelona/server-reason-react#125 by @purefunctor
- Replace Js.Re implemenation from `pcre` to quickjs b1a3e225cdad1298d705fbbd9618e15b0427ef0f by @davesnx
- Remove Belt.Array.push ml-in-barcelona/server-reason-react#122 by @davesnx

## 0.1.0

Initial release of server-reason-react, includes:

- Server-side rendering of ReasonReact components (renderToString, renderToStaticMarkup & renderToLwtStream)
- `server-reason-react.browser_ppx` for skipping code from the server
- `server-reason-react.melange_ppx` for enabling melange bindings and extensions which run on the server
- `server-reason-react.belt` a native Belt implementation
- `server-reason-react.js` a native Js implementation (unsafe and limited)
- `server-reason-react.url` and `server-reason-react.url-native` a universal library with both implementations to work with URLs on the server and the client
- `server-reason-react.promise` and `server-reason-react.promise-native` a universal library with both implementations to work with Promises on the server and the client. Based on https://github.com/aantron/promise
- `server-reason-react.melange-fetch` a fork of melange-fetch which is a melange library to fetch data on the client via the Fetch API. This fork is to be able to compile it on the server (not running).
- `server-reason-react.webapi` a fork of melange-webapi which is a melange library to work with the Web API on the client. This fork is to be able to compile it on the server (not running).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants