Tags: davesnx/melange
Tags
Release 5.0.1-414 CHANGES: - Fix `[@mel.send]` and `[@mel.this]` interaction in the presence of constant `[@mel.as ".."]` arguments ([melange-re#1328](melange-re#1328)) - Allow skipping over `[@mel.as ".."]` constant arguments in `[@mel.send]` in the absence of `@mel.this` ([melange-re#1328](melange-re#1328)) - core: fix missed function argument fusion optimization on OCaml versions 5.2 and above, caused by [ocaml/ocaml#12236](ocaml/ocaml#12236) generating multiple function nodes for `fun a -> fun b -> ...` in the Lambda IR. This issue, while partially fixed in Melange 5.0.0, didn't account for default arguments ([melange-re#1253](melange-re#1253), [melange-re#1334](melange-re#1334)).
Release 5.0.0-414 CHANGES: - Make the `unprocessed` alert fatal by default ([melange-re#1135](melange-re#1135)) - support `-H` for hidden include dirs in OCaml 5.2 ([melange-re#1137](melange-re#1137)) - support `[@mel.*]` attributes in uncurried externals ([melange-re#1140](melange-re#1140)) - add Worker types to `melange.dom` ([melange-re#1147](melange-re#1147)) - Add support for dynamic `import()` ([melange-re#1164](melange-re#1164)) - Fix code generation of custom `true` / `false` constructors ([melange-re#1175](melange-re#1175)) - Fix code generation of OCaml objects that refers to an init variable in scope ([melange-re#1183](melange-re#1183)) - Support `[@mel.as "string"]` in variant definitions ([melange-re#884](melange-re#884)) - BREAKING: remove `[@@deriving jsConverter]` for variant definitions ([melange-re#884](melange-re#884)). Use `[@mel.as "string here"]` instead. - Support OCaml 5.3 ([melange-re#1168](melange-re#1168)) - Upgrade Stdlib to the OCaml 5.3 Stdlib ([melange-re#1182](melange-re#1182)) - Support `[@mel.tag "the_tag"]` in variant definitions ([melange-re#1189](melange-re#1189)) - combined with `[@mel.as ..]` in variant definitions and inline record payloads, Melange can now express types for discriminated union object shapes. - melange-ppx: don't silence warning 20 (`ignored-extra-argument`) for `%mel.raw` application ([melange-re#1166](melange-re#1166)). - This change reverts the behavior introduced in ([melange-re#915](melange-re#915)). - The new recommendation is to annotate `%mel.raw` functions or disable warning 20 at the project level. - ppx,core: propagate internal FFI information via attributes instead of adding marshalled data in the native primitive name ([melange-re#1222](melange-re#1222)) - melange-ppx: allow `@mel.unwrap` polyvariants not to have a payload ([melange-re#1239](melange-re#1239)) - `melange.node`: fix `Buffer.fromString` and add `Buffer.fromStringWithEncoding` ([melange-re#1246](melange-re#1246)) - `melange.node`: bind to all supported Node.js `Buffer` encodings in `Node.Buffer` ([melange-re#1246](melange-re#1246)) - `melange.js`: Add `Js.FormData` with bindings to the [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) API ([melange-re#1153](melange-re#1153), [melange-re#1270](melange-re#1270), [melange-re#1281](melange-re#1281) - `melange.js`: Add `Js.Blob` and `Js.File` with bindings to the [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) and [File](https://developer.mozilla.org/en-US/docs/Web/API/File) APIs ([melange-re#1218](melange-re#1218)) - `melange.js`: add `TypedArray` types at the toplevel in the `Js` module ([melange-re#1248](melange-re#1248)) - BREAKING: remove `--mel-g` ([melange-re#1234](melange-re#1234)) - runtime(`melange.js`): port `[@mel.send.pipe]` functions to `[@mel.send]`, taking advantage of the `@mel.send` + labeled argument improvement (see above) ([melange-re#1260](melange-re#1260), [melange-re#1264](melange-re#1264), [melange-re#1265](melange-re#1265), [melange-re#1266](melange-re#1266), [melange-re#1280](melange-re#1280), [melange-re#1278](melange-re#1278)) - core: fix a crash related to finding constructor names in pattern matching triggered by dune's earlier implementation of `(implicit_transitive_deps false)` ([melange-re#1238](melange-re#1238), [melange-re#1262](melange-re#1262)) - core: pre-compute the closure param map for functions inlined with `--mel-cross-module-opt` ([melange-re#1219](melange-re#1219)) - BREAKING: ppx: print the `deprecated` alert for `@@deriving abstract` at the declaration site rather than at (all) usages ([melange-re#1269](melange-re#1269)) - JS generation: prettify `for` loops ([melange-re#1275](melange-re#1275)) - JS generation: improve formatting for `throw` and `return` statements, JS objects ([melange-re#1286](melange-re#1286), [melange-re#1289](melange-re#1289)) - JS generation: improve formatting for empty return and continue statements ([melange-re#1288](melange-re#1288)) - JS generation: remove trailing spaces before commas in `export` ([melange-re#1287](melange-re#1287)) - JS generation: remove redundant switch cases branches ([melange-re#1295](melange-re#1295)) - JS generation: move space before comma inside `for` definition ([melange-re#1296](melange-re#1296)) - JS generation: add space before while loop condition ([melange-re#1297](melange-re#1297)) - JS generation: improve indentation of parenthesized blocks ([melange-re#1293](melange-re#1293)) - JS generation: add space after constructor comments ([melange-re#1294](melange-re#1294)) - JS generation: improve identation of `switch` cases ([melange-re#1299](melange-re#1299)) - JS generation: don't generate empty `default:` cases in `switch` ([melange-re#1300](melange-re#1300)) - JS generation: emit `module.exports` in CommonJS instead of `exports.x` ([melange-re#1314](melange-re#1314)) - JS generation: remove trailing newline after `switch` ([melange-re#1313](melange-re#1313)) - ffi: allow annotating `@mel.send` FFI with `@mel.this` to specify which parameter should represent the "self" argument. ([melange-re#1303](melange-re#1285), [melange-re#1310](melange-re#1310)) - This improvement to the FFI allows expressing more FFI constructs via labeled and optionally labeled arguments, e.g. `external foo: value:string -> (t [@mel.this]) -> unit = "foo" [@@mel.send]` will now produce `t.foo(value)` instead of `value.foo(t)`. - It also allows removing usages of `[@mel.send.pipe: t]` in favor of `[@mel.send]` with `[@mel.this]`, including when used with `@mel.variadic`. - ppx: deprecate `[@mel.send.pipe]` ([melange-re#1321](melange-re#1321)) - core: fix missed optimization on OCaml versions 5.2 and above, caused by [ocaml/ocaml#12236](ocaml/ocaml#12236) generating multiple function nodes for `fun a -> fun b -> ...` in the Lambda IR.
Release 5.0.0-53 CHANGES: - Make the `unprocessed` alert fatal by default ([melange-re#1135](melange-re#1135)) - support `-H` for hidden include dirs in OCaml 5.2 ([melange-re#1137](melange-re#1137)) - support `[@mel.*]` attributes in uncurried externals ([melange-re#1140](melange-re#1140)) - add Worker types to `melange.dom` ([melange-re#1147](melange-re#1147)) - Add support for dynamic `import()` ([melange-re#1164](melange-re#1164)) - Fix code generation of custom `true` / `false` constructors ([melange-re#1175](melange-re#1175)) - Fix code generation of OCaml objects that refers to an init variable in scope ([melange-re#1183](melange-re#1183)) - Support `[@mel.as "string"]` in variant definitions ([melange-re#884](melange-re#884)) - BREAKING: remove `[@@deriving jsConverter]` for variant definitions ([melange-re#884](melange-re#884)). Use `[@mel.as "string here"]` instead. - Support OCaml 5.3 ([melange-re#1168](melange-re#1168)) - Upgrade Stdlib to the OCaml 5.3 Stdlib ([melange-re#1182](melange-re#1182)) - Support `[@mel.tag "the_tag"]` in variant definitions ([melange-re#1189](melange-re#1189)) - combined with `[@mel.as ..]` in variant definitions and inline record payloads, Melange can now express types for discriminated union object shapes. - melange-ppx: don't silence warning 20 (`ignored-extra-argument`) for `%mel.raw` application ([melange-re#1166](melange-re#1166)). - This change reverts the behavior introduced in ([melange-re#915](melange-re#915)). - The new recommendation is to annotate `%mel.raw` functions or disable warning 20 at the project level. - ppx,core: propagate internal FFI information via attributes instead of adding marshalled data in the native primitive name ([melange-re#1222](melange-re#1222)) - melange-ppx: allow `@mel.unwrap` polyvariants not to have a payload ([melange-re#1239](melange-re#1239)) - `melange.node`: fix `Buffer.fromString` and add `Buffer.fromStringWithEncoding` ([melange-re#1246](melange-re#1246)) - `melange.node`: bind to all supported Node.js `Buffer` encodings in `Node.Buffer` ([melange-re#1246](melange-re#1246)) - `melange.js`: Add `Js.FormData` with bindings to the [FormData](https://developer.mozilla.org/en-US/docs/Web/API/FormData) API ([melange-re#1153](melange-re#1153), [melange-re#1270](melange-re#1270), [melange-re#1281](melange-re#1281) - `melange.js`: Add `Js.Blob` and `Js.File` with bindings to the [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) and [File](https://developer.mozilla.org/en-US/docs/Web/API/File) APIs ([melange-re#1218](melange-re#1218)) - `melange.js`: add `TypedArray` types at the toplevel in the `Js` module ([melange-re#1248](melange-re#1248)) - BREAKING: remove `--mel-g` ([melange-re#1234](melange-re#1234)) - runtime(`melange.js`): port `[@mel.send.pipe]` functions to `[@mel.send]`, taking advantage of the `@mel.send` + labeled argument improvement (see above) ([melange-re#1260](melange-re#1260), [melange-re#1264](melange-re#1264), [melange-re#1265](melange-re#1265), [melange-re#1266](melange-re#1266), [melange-re#1280](melange-re#1280), [melange-re#1278](melange-re#1278)) - core: fix a crash related to finding constructor names in pattern matching triggered by dune's earlier implementation of `(implicit_transitive_deps false)` ([melange-re#1238](melange-re#1238), [melange-re#1262](melange-re#1262)) - core: pre-compute the closure param map for functions inlined with `--mel-cross-module-opt` ([melange-re#1219](melange-re#1219)) - BREAKING: ppx: print the `deprecated` alert for `@@deriving abstract` at the declaration site rather than at (all) usages ([melange-re#1269](melange-re#1269)) - JS generation: prettify `for` loops ([melange-re#1275](melange-re#1275)) - JS generation: improve formatting for `throw` and `return` statements, JS objects ([melange-re#1286](melange-re#1286), [melange-re#1289](melange-re#1289)) - JS generation: improve formatting for empty return and continue statements ([melange-re#1288](melange-re#1288)) - JS generation: remove trailing spaces before commas in `export` ([melange-re#1287](melange-re#1287)) - JS generation: remove redundant switch cases branches ([melange-re#1295](melange-re#1295)) - JS generation: move space before comma inside `for` definition ([melange-re#1296](melange-re#1296)) - JS generation: add space before while loop condition ([melange-re#1297](melange-re#1297)) - JS generation: improve indentation of parenthesized blocks ([melange-re#1293](melange-re#1293)) - JS generation: add space after constructor comments ([melange-re#1294](melange-re#1294)) - JS generation: improve identation of `switch` cases ([melange-re#1299](melange-re#1299)) - JS generation: don't generate empty `default:` cases in `switch` ([melange-re#1300](melange-re#1300)) - JS generation: emit `module.exports` in CommonJS instead of `exports.x` ([melange-re#1314](melange-re#1314)) - JS generation: remove trailing newline after `switch` ([melange-re#1313](melange-re#1313)) - ffi: allow annotating `@mel.send` FFI with `@mel.this` to specify which parameter should represent the "self" argument. ([melange-re#1303](melange-re#1285), [melange-re#1310](melange-re#1310)) - This improvement to the FFI allows expressing more FFI constructs via labeled and optionally labeled arguments, e.g. `external foo: value:string -> (t [@mel.this]) -> unit = "foo" [@@mel.send]` will now produce `t.foo(value)` instead of `value.foo(t)`. - It also allows removing usages of `[@mel.send.pipe: t]` in favor of `[@mel.send]` with `[@mel.this]`, including when used with `@mel.variadic`. - ppx: deprecate `[@mel.send.pipe]` ([melange-re#1321](melange-re#1321)) - core: fix missed optimization on OCaml versions 5.2 and above, caused by [ocaml/ocaml#12236](ocaml/ocaml#12236) generating multiple function nodes for `fun a -> fun b -> ...` in the Lambda IR.
Release 4.0.1-52 CHANGES: - Support `-bin-annot-occurrences` on OCaml 5.2 ([PR](melange-re#1132))
Release 4.0.0-52 CHANGES: - CLI: passing `--eval` to `melc` now works as expected ([melange-re#1040](melange-re#1040)) - runtime: add some bindings to `Js.Bigint` ([melange-re#1044](melange-re#1044)) - core: emit `throw new Error(..)` rather than throwing a JS object with the Melange exception payload ([melange-re#1036](melange-re#1036)) - stdlib: fix runtime primitive for `Float.{min,max}` and related functions ([melange-re#1050](melange-re#1050)) - core: emit `let` instead of `var` in compiled JS ([melange-re#1019](melange-re#1019)) - core: in compiled JS, stop generating closures in loops that capture mutable variables ([melange-re#1020](melange-re#1020)) - runtime: add bindings to `Js.Set` ([melange-re#1047](melange-re#1047)) - runtime: add minimal bindings for JS iterators ([melange-re#1060](melange-re#1060)) - core: in compiled JS, emit `const` for variables that Melange knows aren't going to be reassigned ([melange-re#1019](melange-re#1019), [melange-re#1059](melange-re#1059)). - runtime: add minimal bindings for JS iterators ([melange-re#1060](melange-re#1060)) - core: handle missing `.cmj` when compiling dune virtual libraries ([melange-re#1067](melange-re#1067), fixes [melange-re#658](melange-re#658)) - core: print lambda IR after TRMC pass when `--drawlambda` is passed ([melange-re#1072](melange-re#1072)) - core: remove unnecessary internal code from melange-compiler-libs, slimming down the melange executable and speeding up the build ([melange-re#1075](melange-re#1075)) - core: implement warning 51 in Melange (`wrong-tailcall-expectation`) - This warning had previously been disabled entirely in the typechecker version that Melange uses. It becomes more important with TRMC support added in Melange 2.1.0. - core: accept `esm{,-global}` in addition to `es6{,-global}` for `--mel-module-type`; accept `--mel-module-system` in addition to `--mel-module-type` too ([melange-re#1086](melange-re#1086)). - core: upgrade the OCaml type checker version to OCaml 5.2 ([melange-re#1074](melange-re#1074)) - core: upgrade the Stdlib to match OCaml 5.2's ([melange-re#1078](melange-re#1078)) - runtime: add bindings for functions in `WeakMap` and `WeakSet` ([melange-re#1058](melange-re#1058)) - runtime: add bindings to `Js.Map` ([melange-re#1101](melange-re#1101)) - core: fix a recursive module code generation bug when submodule names inside recursive modules are mangled ([melange-re#1111](melange-re#1111))
Release 2.1.0 CHANGES: - Add TRMC (Tail Recursion Modulo Cons) support ([melange-re#743](melange-re#743)) - [playground]: Add `melange.dom` to bundle ([melange-re#779](melange-re#779)) - Fix `Sys.argv` runtime to match declared type ([melange-re#791](melange-re#791)) - Make `'a Js.t` abstract (again), fixing a regression when bringing back OCaml-style objects BuckleScript ([melange-re#786](melange-re#786)) - Don't issue "unused attribute" warning for well-formed `@@@mel.config` in interface files ([melange-re#800](melange-re#800)) - Stop showing `Js__.Js_internal` in types and error messages ([melange-re#798](melange-re#798)) - Fix printing of OCaml-style objects and uncurried application ([melange-re#807](melange-re#807))
Release 2.0.0 CHANGES: - Build executables for bytecode-only platforms too ([melange-re#596](melange-re#596)) - Move the entire builtin PPX to `melange.ppx`. Preprocessing with `melange.ppx` will needed in most cases going forward, as it's responsible for processing `external` declarations, `@deriving` attributes and more, compared to the previous release where `melange.ppx` just processed AST extension nodes ([melange-re#583](melange-re#583)) - Remove old BuckleScript-style conditional compilation ([melange-re#605](melange-re#605)) - Don't emit JS import / require paths with `foo/./bar.js` ([melange-re#598](melange-re#598), [melange-re#612](melange-re#612)) - Wrap the melange runtime ([melange-re#624](melange-re#624), [melange-re#637](melange-re#637)). After this change, Melange exposes fewer toplevel modules. Melange runtime / stdlib modules are now wrapped under: - `Caml*` / `Curry` modules are part of the runtime and keep being exposed as before - `Js.*` contains all the modules previously accessible via `Js_*`, e.g. `Js_int` -> `Js.Int` - `Belt.*` wraps all the `Belt` modules; `Belt_List` etc. are not exposed anymore, but rather nested under `Belt`, e.g. `Belt.List` - `Node.*`: we now ship a `melange.node` library that includes the modules containing Node.js bindings. After this change, users will have to depend on `melange.node` explicitly in order to use the `Node.*` modules - `Dom.*`: we now ship a `melange.dom` library that includes the modules containing Node.js bindings. This library is included by default so the `Dom` module will always be available in Melange projects. - Disable warning 61 (`unboxable-type-in-prim-decl`) for externals generated by Melange ([melange-re#641](melange-re#641), [melange-re#643](melange-re#643)) - Add `--rectypes` ([melange-re#644](melange-re#644)) to enable [recursive types](https://v2.ocaml.org/releases/5.0/htmlman/types.html#sss:typexpr-aliased-recursive) - [melange.ppx]: Deprecate `bs.*` attributes in favor of `mel.*` ([melange-re#566](melange-re#566), [melange-re#662](melange-re#662), [melange-re#663](melange-re#663)) - [melange]: Fix field access code generation when `open`in inline functor applications ([melange-re#661](melange-re#661), [melange-re#664](melange-re#664)) - [melange]: Upgrade the OCaml typechecker version to 5.1 ([melange-re#668](melange-re#668)) - [melange.ppx]: Deprecate `[@@mel.val]` and suggest its removal. This attribute is redundant and unnecessary ([melange-re#675](melange-re#675), [melange-re#678](melange-re#678)) - [melange]: remove old, unused CLI flags: `-bs-ns`, `-bs-cmi`, `-bs-cmj`, `-bs-no-builtin-ppx`, `-bs-super-errors` ([melange-re#686](melange-re#686)). - [melange]: generate correct code for types with the `option` shape ([melange-re#700](melange-re#700)). - [melange]: stop exporting `$$default` in the generated JavaScript when using ES6 default exports `let default = ..` ([melange-re#708](melange-re#708)). - [melange]: allow exporting invalid OCaml identifiers in the resulting JavaScript with `@mel.as` ([melange-re#714](melange-re#714), fixes [melange-re#713](melange-re#713)). - [melange]: Allow using `@mel.as` in external declarations without explicitly annotating `@mel.{string,int}` ([melange-re#722](melange-re#722), fixes [melange-re#578](melange-re#578)). - [melange]: Allow using `@mel.unwrap` in external declarations with `@mel.obj` ([melange-re#724](melange-re#724), fixes [melange-re#679](melange-re#679)). - [melange]: Support renaming fields in inline records / record extensions with `@mel.as` ([melange-re#732](melange-re#732), fixes [melange-re#730](melange-re#730)).
Release 1.0.0 CHANGES: - melange: print an error message if `$MELANGELIB` is set to a directory that doesn't exist ([melange-re#449](melange-re#449)) - melange: fix bug where `--bs-module-name` didn't always affect generated JS file casing ([melange-re#446](melange-re#446)) - melange: fix bug where `-o output.js` didn't always write a JavaScript file ([melange-re#454](melange-re#454)) - melange: remove the `-bs-read-cmi` flag in favor of the builtin `-intf-suffix` flag, standard in OCaml ([melange-re#458](melange-re#458), [melange-re#460](melange-re#460)) - melange: return an actionable error message when no output is specified with `-impl` / `-intf` ([melange-re#465](melange-re#465), [melange-re#466](melange-re#466)) - melange: use `Object.prototype.hasOwnProperty` in the `Caml_obj` runtime ([melange-re#469](melange-re#469)) - melange: transform [`NonEscapeCharacter`](https://tc39.es/ecma262/#prod-NonEscapeCharacter) correctly in JS strings (those written using `{js|string here|js}`) ([melange-re#469](melange-re#469)) - melange: define `MELANGE` conditional compilation variable ([melange-re#472](melange-re#472)) - melange: Make `Pervasives` exactly match the `Stdlib` behavior ([melange-re#476](melange-re#476)) - melange: fix unbound error when trying to use `Printexc.exn_slot_id` ([melange-re#482](melange-re#482)) - melange: fix codegen issue accessing a nested module path that is also `include`d ([melange-re#487](melange-re#487)) - melange: preserve the correct command-line order for load path directories ([melange-re#492](melange-re#492)) - melange: respect the `-nostdlib` option; don't add stdlib / runtime to the load path in that case ([melange-re#496](melange-re#496)) - melange: build the Melange runtime / stdlib / runtime tests with the dune integration ([melange-re#493](melange-re#493)). Thus melange now requires Dune 3.8. - melange: allow shadowing sub-modules of Stdlib in user projects ([melange-re#512](melange-re#512)) - melange, reactjs-jsx-ppx: introduce a `reactjs-jsx-ppx` package, remove its dependency from melange ([melange-re#517](melange-re#517)) - melange: remove the `--bs-jsx <version>` flag from `melc` now that `reactjs-jsx-ppx` is a separate package ([melange-re#525](melange-re#525)) - melange: add `melpp` executable to preprocess `#if` conditionals with the melange parser ([melange-re#539](melange-re#539)) - mel: delete the `mel` package. The dune integration is now the only officially supported workflow for orchestrating melange builds ([melange-re#546](melange-re#546)) - melange: Extract `melange.ppx` from the melange package. This preprocessing step interprets extensions such as `%bs.obj`, `%bs.raw`, `%bs.re`, etc. ([melange-re#534](melange-re#534)) - melange: allow installing melange in more OCaml versions and compiler switches. Melange now migrates binary AST to the version it understands ([melange-re#548](melange-re#548)) - melange: don't run anonymous args function from `[@@@bs.config {flags = [| ... |]}]` attributes ([melange-re#554](melange-re#554)) - melange: add `--preamble` flag to add a preamble to emitted JS. An example is `"use client";` in React Server Components, which needs to appear before imports ([melange-re#545](melange-re#545), [melange-re#574](melange-re#574)) - melange: turn off warning 20 (`ignore-extra-argument`) by default. This warning is rarely useful in Melange due to false positives when invoking functions defined with `%bs.raw` ([melange-re#488](melange-re#488), [melange-re#576](melange-re#576))
Release 0.3.2 CHANGES: - `ppx_rescript_compat` (ReScript compatibility layer): fix conversion for cases such as `foo["bar"] = assignment` ([melange-re#441](melange-re#441)): - These are now correctly converted to the OCaml equivalent: `foo##bar #= assignment` - [mel]: fix merlin generation, broken since `mel` was moved to its own package ([melange-re#442](melange-re#442))
Release 0.3.1 CHANGES: - Disable warning 69 (`unused-field` in record) for the private record generated by the `bs.deriving` attribute ([melange-re#414](melange-re#414)) - Disable warning 20 (`ignored-extra-argument`) when applying `foo##fn arg1 arg2` ([melange-re#416](melange-re#416)): - in cases such as `external x : < .. > Js.t = ""`, the typechecker doesn't know the arity of the function, even though Melange will emit an uncurried function call. - Disable warning 61 (`unboxable-type-in-prim-decl`) in `external` declarations ([melange-re#415](melange-re#415)): - Melange externals are substantially different from OCaml externals. This warning doesn't make sense in a JS runtime. - melc: introduce `--bs-module-name` flag to specify the original file name for the current compilation unit ([melange-re#413](melange-re#413)) - Dune's namespacing implementation generates modules such as `lib__Original_name`. Passing `--bs-module-name original_name` allows melange to issue correct `import` / `require` statements to the unmangled JS file names.
PreviousNext