-
-
Notifications
You must be signed in to change notification settings - Fork 3
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
Improve type-safety of string-based props #2
Comments
davesnx
added a commit
to davesnx/opam-repository
that referenced
this issue
Feb 10, 2024
CHANGES: ## 0.0.1 - First working version of the ppx and library - Supports most of features from [JSX](https://reasonml.github.io/docs/en/jsx) (uppercase components, fragments, optional attributes, punning) - but with a few improvements (lowercase components, no need to add annotations) - No React idioms (no `className`, no `htmlFor`, no `onChange`, etc...) - Type-safe, validates attributes and their types ([it can be better thought](davesnx/html_of_jsx#2)) - Minimal - `Html_of_jsx.render` to render an element to HTML - `Jsx.*` to construct DOM Elements and DOM nodes (`Jsx.text`, `Jsx.int`, `Jsx.null`, `Jsx.list`) - Works with [Reason](https://reasonml.github.io) and [mlx](https://github.com/andreypopp/mlx) - Supports some htmx under the ppx (`html_of_jsx.ppx -htmx`)
davesnx
added a commit
to davesnx/opam-repository
that referenced
this issue
Apr 26, 2024
CHANGES: ## 0.0.1 - First working version of the ppx and library - Supports most of features from [JSX](https://reasonml.github.io/docs/en/jsx) (uppercase components, fragments, optional attributes, punning) - but with a few improvements (lowercase components, no need to add annotations) - No React idioms (no `className`, no `htmlFor`, no `onChange`, etc...) - Type-safe, validates attributes and their types ([it can be better thought](davesnx/html_of_jsx#2)) - Minimal - `Html_of_jsx.render` to render an element to HTML - `Jsx.*` to construct DOM Elements and DOM nodes (`Jsx.text`, `Jsx.int`, `Jsx.null`, `Jsx.list`) - Works with [Reason](https://reasonml.github.io) and [mlx](https://github.com/andreypopp/mlx) - Supports some htmx under the ppx (`html_of_jsx.ppx -htmx`)
davesnx
added a commit
to davesnx/opam-repository
that referenced
this issue
Apr 26, 2024
CHANGES: ## 0.0.2 - Add `Jsx.unsafe` to allow unsafe HTML as children - Fix HTML attributes formatting (charset, autocomplete, tabindex, inputmode, etc...) - Enable HTMX attributes via `html_of_jsx.ppx -htmx` ## 0.0.1 - First working version of the ppx and library - Supports most of features from [JSX](https://reasonml.github.io/docs/en/jsx) (uppercase components, fragments, optional attributes, punning) - but with a few improvements (lowercase components, no need to add annotations) - No React idioms (no `className`, no `htmlFor`, no `onChange`, etc...) - Type-safe, validates attributes and their types ([it can be better thought](davesnx/html_of_jsx#2)) - Minimal - `Html_of_jsx.render` to render an element to HTML - `Jsx.*` to construct DOM Elements and DOM nodes (`Jsx.text`, `Jsx.int`, `Jsx.null`, `Jsx.list`) - Works with [Reason](https://reasonml.github.io) and [mlx](https://github.com/andreypopp/mlx) - Supports some htmx under the ppx (`html_of_jsx.ppx -htmx`)
davesnx
added a commit
to davesnx/opam-repository
that referenced
this issue
Jun 7, 2024
CHANGES: ## 0.0.3 - [BREAKING] `Html_of_jsx.render` lives under `JSX.render` (removing the `Html_of_jsx` module entirely) - [BREAKING] Module `Jsx` is turned into `JSX` - [BREAKING] dune's library is now `html_of_jsx` instead of (`html_of_jsx.lib`) - [BREAKING] `JSX.element` is opaque (can't see the type from outside), but we have a `JSX.Debug` module to inspect and re-construct `JSX.element` (cc @leandro) - Improved performance of `JSX.render` ## 0.0.2 - Add `Jsx.unsafe` to allow unsafe HTML as children - Fix HTML attributes formatting (charset, autocomplete, tabindex, inputmode, etc...) - Enable HTMX attributes via `html_of_jsx.ppx -htmx` ## 0.0.1 - First working version of the ppx and library - Supports most of features from [JSX](https://reasonml.github.io/docs/en/jsx) (uppercase components, fragments, optional attributes, punning) - but with a few improvements (lowercase components, no need to add annotations) - No React idioms (no `className`, no `htmlFor`, no `onChange`, etc...) - Type-safe, validates attributes and their types ([it can be better thought](davesnx/html_of_jsx#2)) - Minimal - `Html_of_jsx.render` to render an element to HTML - `Jsx.*` to construct DOM Elements and DOM nodes (`Jsx.text`, `Jsx.int`, `Jsx.null`, `Jsx.list`) - Works with [Reason](https://reasonml.github.io) and [mlx](https://github.com/andreypopp/mlx) - Supports some htmx under the ppx (`html_of_jsx.ppx -htmx`)
nberth
pushed a commit
to nberth/opam-repository
that referenced
this issue
Jun 18, 2024
CHANGES: ## 0.0.1 - First working version of the ppx and library - Supports most of features from [JSX](https://reasonml.github.io/docs/en/jsx) (uppercase components, fragments, optional attributes, punning) - but with a few improvements (lowercase components, no need to add annotations) - No React idioms (no `className`, no `htmlFor`, no `onChange`, etc...) - Type-safe, validates attributes and their types ([it can be better thought](davesnx/html_of_jsx#2)) - Minimal - `Html_of_jsx.render` to render an element to HTML - `Jsx.*` to construct DOM Elements and DOM nodes (`Jsx.text`, `Jsx.int`, `Jsx.null`, `Jsx.list`) - Works with [Reason](https://reasonml.github.io) and [mlx](https://github.com/andreypopp/mlx) - Supports some htmx under the ppx (`html_of_jsx.ppx -htmx`)
davesnx
added a commit
to davesnx/opam-repository
that referenced
this issue
Jun 26, 2024
CHANGES: ## 0.0.4 - [BREAKING] Handle HTML encoding for `'` (@davesnx) - Handle HTML encoding for `"` (from `&davesnx/html_of_jsx#34;` to `"`) (@davesnx) - Improved performance of `JSX.render` (@davesnx) - [BREAKING] Remove `Fragment` in favor of `JSX.list` (@davesnx) - Remove unused `Component (unit -> element)` since it isn't needed (@davesnx) - [BREAKING] Change attributes representation (@andreypopp) - [BREAKING] Remove melange dependency (@andreypopp) - [BREAKING] Lower the OCaml bound to 4.14 (@davesnx) - Make lib wrapped (@andreypopp) ## 0.0.3 - [BREAKING] `Html_of_jsx.render` lives under `JSX.render` (removing the `Html_of_jsx` module entirely) (@lessp) - [BREAKING] Module `Jsx` is turned into `JSX` (@lessp) - [BREAKING] dune's library is now `html_of_jsx` instead of (`html_of_jsx.lib`) (@lessp) - [BREAKING] `JSX.element` is opaque (can't see the type from outside), but we have a `JSX.Debug` module to inspect and re-construct `JSX.element` (cc @leostera) (@lessp) - Improved performance of `JSX.render` (@lessp) - add `hx-trigger` to htmx ppx davesnx/html_of_jsx#13 (@lessp) - `htmlFor` -> `for_` (@lessp) - Fix aria-autocomplete (@davesnx) ## 0.0.2 - Add `Jsx.unsafe` to allow unsafe HTML as children - Fix HTML attributes formatting (charset, autocomplete, tabindex, inputmode, etc...) - Enable HTMX attributes via `html_of_jsx.ppx -htmx` ## 0.0.1 - First working version of the ppx and library - Supports most of features from [JSX](https://reasonml.github.io/docs/en/jsx) (uppercase components, fragments, optional attributes, punning) - but with a few improvements (lowercase components, no need to add annotations) - No React idioms (no `className`, no `htmlFor`, no `onChange`, etc...) - Type-safe, validates attributes and their types ([it can be better thought](davesnx/html_of_jsx#2)) - Minimal - `Html_of_jsx.render` to render an element to HTML - `Jsx.*` to construct DOM Elements and DOM nodes (`Jsx.text`, `Jsx.int`, `Jsx.null`, `Jsx.list`) - Works with [Reason](https://reasonml.github.io) and [mlx](https://github.com/andreypopp/mlx) - Supports some htmx under the ppx (`html_of_jsx.ppx -htmx`)
avsm
pushed a commit
to avsm/opam-repository
that referenced
this issue
Sep 5, 2024
CHANGES: ## 0.0.3 - [BREAKING] `Html_of_jsx.render` lives under `JSX.render` (removing the `Html_of_jsx` module entirely) - [BREAKING] Module `Jsx` is turned into `JSX` - [BREAKING] dune's library is now `html_of_jsx` instead of (`html_of_jsx.lib`) - [BREAKING] `JSX.element` is opaque (can't see the type from outside), but we have a `JSX.Debug` module to inspect and re-construct `JSX.element` (cc @leandro) - Improved performance of `JSX.render` ## 0.0.2 - Add `Jsx.unsafe` to allow unsafe HTML as children - Fix HTML attributes formatting (charset, autocomplete, tabindex, inputmode, etc...) - Enable HTMX attributes via `html_of_jsx.ppx -htmx` ## 0.0.1 - First working version of the ppx and library - Supports most of features from [JSX](https://reasonml.github.io/docs/en/jsx) (uppercase components, fragments, optional attributes, punning) - but with a few improvements (lowercase components, no need to add annotations) - No React idioms (no `className`, no `htmlFor`, no `onChange`, etc...) - Type-safe, validates attributes and their types ([it can be better thought](davesnx/html_of_jsx#2)) - Minimal - `Html_of_jsx.render` to render an element to HTML - `Jsx.*` to construct DOM Elements and DOM nodes (`Jsx.text`, `Jsx.int`, `Jsx.null`, `Jsx.list`) - Works with [Reason](https://reasonml.github.io) and [mlx](https://github.com/andreypopp/mlx) - Supports some htmx under the ppx (`html_of_jsx.ppx -htmx`)
avsm
pushed a commit
to avsm/opam-repository
that referenced
this issue
Sep 5, 2024
CHANGES: ## 0.0.4 - [BREAKING] Handle HTML encoding for `'` (@davesnx) - Handle HTML encoding for `"` (from `&davesnx/html_of_jsx#34;` to `"`) (@davesnx) - Improved performance of `JSX.render` (@davesnx) - [BREAKING] Remove `Fragment` in favor of `JSX.list` (@davesnx) - Remove unused `Component (unit -> element)` since it isn't needed (@davesnx) - [BREAKING] Change attributes representation (@andreypopp) - [BREAKING] Remove melange dependency (@andreypopp) - [BREAKING] Lower the OCaml bound to 4.14 (@davesnx) - Make lib wrapped (@andreypopp) ## 0.0.3 - [BREAKING] `Html_of_jsx.render` lives under `JSX.render` (removing the `Html_of_jsx` module entirely) (@lessp) - [BREAKING] Module `Jsx` is turned into `JSX` (@lessp) - [BREAKING] dune's library is now `html_of_jsx` instead of (`html_of_jsx.lib`) (@lessp) - [BREAKING] `JSX.element` is opaque (can't see the type from outside), but we have a `JSX.Debug` module to inspect and re-construct `JSX.element` (cc @leostera) (@lessp) - Improved performance of `JSX.render` (@lessp) - add `hx-trigger` to htmx ppx davesnx/html_of_jsx#13 (@lessp) - `htmlFor` -> `for_` (@lessp) - Fix aria-autocomplete (@davesnx) ## 0.0.2 - Add `Jsx.unsafe` to allow unsafe HTML as children - Fix HTML attributes formatting (charset, autocomplete, tabindex, inputmode, etc...) - Enable HTMX attributes via `html_of_jsx.ppx -htmx` ## 0.0.1 - First working version of the ppx and library - Supports most of features from [JSX](https://reasonml.github.io/docs/en/jsx) (uppercase components, fragments, optional attributes, punning) - but with a few improvements (lowercase components, no need to add annotations) - No React idioms (no `className`, no `htmlFor`, no `onChange`, etc...) - Type-safe, validates attributes and their types ([it can be better thought](davesnx/html_of_jsx#2)) - Minimal - `Html_of_jsx.render` to render an element to HTML - `Jsx.*` to construct DOM Elements and DOM nodes (`Jsx.text`, `Jsx.int`, `Jsx.null`, `Jsx.list`) - Works with [Reason](https://reasonml.github.io) and [mlx](https://github.com/andreypopp/mlx) - Supports some htmx under the ppx (`html_of_jsx.ppx -htmx`)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Many attributes are defined as
string
when in reality (the HTML spec) doesn't allow any string and it defines an enum. There's the case of attributes defined also as a polymorphic typeint
orbool
as well or more strangeThe benefit from moving away from string-based API are:
There have been a few efforts on
rescript-react
to push that direction but didn't land yet (a few comments by @dodomorandi in rescript-lang/syntax#235) and I'm not sure if there's a positive intent to do so.We have the possibility to do it
Other references:
The plan for this is to check TyXML and https://html.spec.whatwg.org/#global-attributes and manually ensure that most of our attributes make sense.
Doubts
Ppx_static_attributes
on both the ppx and the runtime? (Maybe mergingJsx.Attributes
andPpx_static_attributes
The text was updated successfully, but these errors were encountered: