Implementation of mjml in rust

Overview

MRML

Crates.io Crates.io

Build Status codecov

Maintainability

Introduction

This project is a reimplementation of the nice MJML markup language in Rust.

How to use it

use mrml;

fn main() {
    match mrml::to_html("<mjml><mj-body></mj-body></mjml>", mrml::Options::default()) {
        Ok(content) => println!("{}", content),
        Err(_) => println!("couldn't convert mjml template"),
    };
}

Why?

  • A Node server rendering a mjml template takes around 20Mo of RAM at startup and 130Mo under stress test. In Rust, less than 1.7Mo at startup and a bit less that 3Mo under stress test. The Rust version can also handle 2 times more requests per seconds. You can run the bench by doing bash script/run-bench.sh.
  • The JS implementation cannot be run in the browser. In Rust (and Wasm), you can.

You want to contribute?

Feel free to read our contributing section and the code of conduct.

Performance

With the same linux amd64 machine, to render the amario template

  • Node: 62.803ms
  • Rust: 13.180ms

To reproduce those results:

  • Node, in example/mjml-bench run npm start -- ../../resources/template-amario.mjml
  • Rust, run cargo bench amario

With a web server, as of today, on a mac book pro from 2017. (Old result)

Rust Node
Requests per seconds 520.50 272.61
CPU usage at boot time 0.20% 1.74%
CPU usage under bench 49.81% 136.83%
RAM usage at boot time 1.12MB 17.27MB
RAM usage under bench 2.85MB 128.32MB
Docker image size 77.3MB 178MB
Comments
  • Support parsing elements with no closing tag

    Support parsing elements with no closing tag

    I am trying to parse MJML that includes <br> tags, but I get the following error: invalid format. JavaScript parser for MJML doesn't seem to have to this issue. For example, the following MJML renders without any issues on https://mjml.io/try-it-live:

    <mjml>
      <mj-body>
        <mj-section>
          <mj-column>
            <mj-text><br>Some Test Content</mj-text>
          </mj-column>
        </mj-section>
      </mj-body>
    </mjml>
    

    It works when I replace <br> with <br/> but I am trying to parse some external templates and in some of these templates, <br> tags have additional data attributes, so I can't do a simple find and replace.

    Please let me know if this can be supported.

    bug wontfix 
    opened by DGulshan 7
  • Style attributes randomly reorder causing inconsistent styles

    Style attributes randomly reorder causing inconsistent styles

    Styles take priority based on where they are in the css list. These properties are randomly ordered which causes style shifts when rendering the same mjml.

    For example this set of style rules would end up adding a padding-top of 50px:

    padding: 0;
    padding-top: 50px;
    

    But with random ordering, this happens which makes the padding-top come out as 0:

    padding-top: 50px;
    padding: 0;
    

    Styles should remain in the same order in which they were defined, while also honoring the apply order that is mentioned in the mjml docs:

    Note that the apply order of attributes is: inline attributes, then classes, then default mj-attributes and then defaultMJMLDefinition

    • inline
    • classes
    • mj-attributes
    • default mjml styles
    bug 
    opened by zachzurn 6
  • mrml-cli crate fails to compile when installed

    mrml-cli crate fails to compile when installed

    Installing the mrml-cli crate yields a bunch of compile errors due to Clap macros:

    monkatraz@pop-os:~$ cargo install mrml-cli
        Updating crates.io index
      Installing mrml-cli v1.3.2
       Compiling libc v0.2.110
       Compiling proc-macro2 v1.0.33
       Compiling cfg-if v1.0.0
       Compiling unicode-xid v0.2.2
       Compiling memchr v2.4.1
       Compiling syn v1.0.82
       Compiling serde_derive v1.0.131
       Compiling ryu v1.0.6
       Compiling serde v1.0.131
       Compiling autocfg v1.0.1
       Compiling log v0.4.14
       Compiling serde_json v1.0.72
       Compiling ppv-lite86 v0.2.15
       Compiling termcolor v1.1.2
       Compiling regex-syntax v0.6.25
       Compiling itoa v0.4.8
       Compiling hashbrown v0.11.2
       Compiling bitflags v1.3.2
       Compiling xmlparser v0.13.3
       Compiling textwrap v0.14.2
       Compiling humantime v2.1.0
       Compiling strsim v0.10.0
       Compiling indexmap v1.7.0
       Compiling aho-corasick v0.7.18
       Compiling os_str_bytes v6.0.0
       Compiling getrandom v0.2.3
       Compiling atty v0.2.14
       Compiling quote v1.0.10
       Compiling rand_core v0.6.3
       Compiling clap v3.0.0-rc.3
       Compiling rand_chacha v0.3.1
       Compiling regex v1.5.4
       Compiling rand v0.8.4
       Compiling env_logger v0.8.4
       Compiling mrml v1.2.6
       Compiling mrml-cli v1.3.2
    error[E0432]: unresolved imports `clap::crate_authors`, `clap::crate_description`, `clap::crate_name`, `clap::crate_version`, `clap::Clap`
     --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:1:12
      |
    1 | use clap::{crate_authors, crate_description, crate_name, crate_version, Clap};
      |            ^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^^^  ^^^^^^^^^^  ^^^^^^^^^^^^^  ^^^^ no `Clap` in the root
      |            |              |                  |           |
      |            |              |                  |           no `crate_version` in the root
      |            |              |                  no `crate_name` in the root
      |            |              no `crate_description` in the root
      |            no `crate_authors` in the root
    
    error: cannot determine resolution for the derive macro `Clap`
     --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:8:10
      |
    8 | #[derive(Clap)]
      |          ^^^^
      |
      = note: import resolution is stuck, try simplifying macro imports
    
    error: cannot find attribute `clap` in this scope
     --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:9:3
      |
    9 | #[clap(name = crate_name!(), about = crate_description!(), version = crate_version!(), author = crate_authors!())]
      |   ^^^^
      |
      = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
      --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:11:7
       |
    11 |     #[clap(subcommand)]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
      --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:13:7
       |
    13 |     #[clap(about = "Path to your mjml file", index = 1)]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot determine resolution for the derive macro `Clap`
      --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:78:10
       |
    78 | #[derive(Clap)]
       |          ^^^^
       |
       = note: import resolution is stuck, try simplifying macro imports
    
    error: cannot find attribute `clap` in this scope
      --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:80:7
       |
    80 |     #[clap(about = "Format template to JSON")]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
      --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:82:7
       |
    82 |     #[clap(about = "Format template to MJML")]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
      --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:84:7
       |
    84 |     #[clap(about = "Render template to HTML")]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
      --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:86:7
       |
    86 |     #[clap(about = "Read input file and validate its structure")]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot determine resolution for the derive macro `Clap`
       --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:122:10
        |
    122 | #[derive(Clap)]
        |          ^^^^
        |
        = note: import resolution is stuck, try simplifying macro imports
    
    error: cannot find attribute `clap` in this scope
       --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:124:7
        |
    124 |     #[clap(long, about = "Pretty print")]
        |       ^^^^
        |
        = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot determine resolution for the derive macro `Clap`
       --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:128:10
        |
    128 | #[derive(Clap)]
        |          ^^^^
        |
        = note: import resolution is stuck, try simplifying macro imports
    
    error: cannot find attribute `clap` in this scope
       --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:130:7
        |
    130 |     #[clap(short, long, about = "Remove comments from html output")]
        |       ^^^^
        |
        = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
       --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:132:7
        |
    132 |     #[clap(short, long, about = "Base url for social icons")]
        |       ^^^^
        |
        = note: `clap` is in scope, but it is a crate, not an attribute
    
    error[E0599]: no function or associated item named `parse` found for struct `Options` in the current scope
       --> /home/monkatraz/.cargo/registry/src/github.com-1ecc6299db9ec823/mrml-cli-1.3.2/src/main.rs:147:14
        |
    10  | struct Options {
        | -------------- function or associated item `parse` not found for this
    ...
    147 |     Options::parse().execute();
        |              ^^^^^ function or associated item not found in `Options`
        |
        = help: items from traits can only be used if the trait is implemented and in scope
        = note: the following traits define an item `parse`, perhaps you need to implement one of them:
                candidate #1: `StructOpt`
                candidate #2: `mrml::prelude::parse::Parser`
                candidate #3: `Parsable`
    
    Some errors have detailed explanations: E0432, E0599.
    For more information about an error, try `rustc --explain E0432`.
    error: failed to compile `mrml-cli v1.3.2`, intermediate artifacts can be found at `/tmp/cargo-installNJHxMH`
    
    Caused by:
      could not compile `mrml-cli` due to 16 previous errors
    

    Here are my cargo and rustc versions, if that is of any help:

    cargo 1.57.0 (b2e52d7ca 2021-10-21)
    rustc 1.57.0 (f1edd0429 2021-11-29)
    
    opened by Monkatraz 4
  • mj-wrapper rendering issues on Window Desktop Outlook Client

    mj-wrapper rendering issues on Window Desktop Outlook Client

    Hello! It's me again. We're noticing a layout issues specific only to Window Desktop Outlook client platform (macOs works fine). We're using <mj-wrapper> to wrap multiple sections, but on these platform, the sections appears to be stacking in the single row. Example:

    image

    After diving down deeper, I realized the diff between mrml generated html vs mjml generated html are the following (for each sections within a wrapper):

    MJML

    <!--[if mso | IE]></td></tr></table></td></tr><tr><td class="" width="600px" ><![endif]-->
    

    MRML

    <!--[if mso | IE]></td></tr></table><![endif]-->
    <!--[if mso | IE]></td><td width="600px"><![endif]-->
    

    Notice that there's a missing </tr><tr> in between </td><td width="600px"> in the MRML version. Once I replaced all of these differences, the layout works correctly for all platforms.

    Let me know what you think, if it's a simple fix I can help put a PR, but your guidance might be required cause I'm still new to Rust :D

    bug 
    opened by nguyenquannnn 3
  • build(deps): Bump @types/node from 14.14.28 to 17.0.7 in /examples/mrml-browser

    build(deps): Bump @types/node from 14.14.28 to 17.0.7 in /examples/mrml-browser

    Bumps @types/node from 14.14.28 to 17.0.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • build(deps): Bump @types/jest from 26.0.20 to 27.4.0 in /examples/mrml-browser

    build(deps): Bump @types/jest from 26.0.20 to 27.4.0 in /examples/mrml-browser

    Bumps @types/jest from 26.0.20 to 27.4.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • build(deps): Bump @types/node from 14.14.28 to 17.0.1 in /examples/mrml-browser

    build(deps): Bump @types/node from 14.14.28 to 17.0.1 in /examples/mrml-browser

    Bumps @types/node from 14.14.28 to 17.0.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • build(deps): Bump @types/react from 17.0.2 to 17.0.32 in /examples/mrml-browser

    build(deps): Bump @types/react from 17.0.2 to 17.0.32 in /examples/mrml-browser

    Bumps @types/react from 17.0.2 to 17.0.32.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • build(deps): Bump @types/node from 14.14.28 to 16.11.4 in /examples/mrml-browser

    build(deps): Bump @types/node from 14.14.28 to 16.11.4 in /examples/mrml-browser

    Bumps @types/node from 14.14.28 to 16.11.4.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • build(deps): Bump @types/react-dom from 17.0.5 to 17.0.10 in /examples/mrml-browser

    build(deps): Bump @types/react-dom from 17.0.5 to 17.0.10 in /examples/mrml-browser

    Bumps @types/react-dom from 17.0.5 to 17.0.10.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • build(deps): Bump @types/node from 14.14.28 to 16.11.1 in /examples/mrml-browser

    build(deps): Bump @types/node from 14.14.28 to 16.11.1 in /examples/mrml-browser

    Bumps @types/node from 14.14.28 to 16.11.1.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 3
  • [Snyk] Security upgrade react-scripts from 4.0.2 to 5.0.0

    [Snyk] Security upgrade react-scripts from 4.0.2 to 5.0.0

    This PR was automatically created by Snyk using the credentials of a real user.


    Snyk has created this PR to fix one or more vulnerable packages in the `npm` dependencies of this project.

    Changes included in this PR

    • Changes to the following files to upgrade the vulnerable dependencies to a fixed version:
      • examples/mrml-browser/package.json
      • examples/mrml-browser/package-lock.json

    Vulnerabilities that will be fixed

    With an upgrade:

    Severity | Priority Score (*) | Issue | Breaking Change | Exploit Maturity :-------------------------:|-------------------------|:-------------------------|:-------------------------|:------------------------- medium severity | 713/1000
    Why? Proof of Concept exploit, Recently disclosed, Has a fix available, CVSS 6.4 | Prototype Pollution
    SNYK-JS-JSON5-3182856 | Yes | Proof of Concept

    (*) Note that the real score may have changed since the PR was raised.

    Commit messages
    Package name: react-scripts The new version differs by 76 commits.
    • 221e511 Publish
    • 6a3315b Update CONTRIBUTING.md
    • 5614c87 Add support for Tailwind (#11717)
    • 657739f chore(test): make all tests install with `npm ci` (#11723)
    • 20edab4 fix(webpackDevServer): disable overlay for warnings (#11413)
    • 69321b0 Remove cached lockfile (#11706)
    • 3afbbc0 Update all dependencies (#11624)
    • f5467d5 feat(eslint-config-react-app): support ESLint 8.x (#11375)
    • e8319da [WIP] Fix integration test teardown / cleanup and missing yarn installation (#11686)
    • c7627ce Update webpack and dev server (#11646)
    • f85b064 The default port used by `serve` has changed (#11619)
    • 544befe Update package.json (#11597)
    • 9d0369b Fix ESLint Babel preset resolution (#11547)
    • d7b23c8 test(create-react-app): assert for exit code (#10973)
    • 1465357 Prepare 5.0.0 alpha release
    • 3880ba6 Remove dependency pinning (#11474)
    • 8b9fbee Update CODEOWNERS
    • cacf590 Bump template dependency version (#11415)
    • 5cedfe4 Bump browserslist from 4.14.2 to 4.16.5 (#11476)
    • 50ea5ad allow CORS on webpack-dev-server (#11325)
    • 63bba07 Upgrade jest and related packages from 26.6.0 to 27.1.0 (#11338)
    • 960b21e Bump immer from 8.0.4 to 9.0.6 (#11364)
    • 134cd3c Resolve dependency issues in v5 alpha (#11294)
    • b45ae3c Update CONTRIBUTING.md

    See the full diff

    Check the changes in this PR to ensure they won't cause issues with your project.


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.

    For more information: 🧐 View latest project report

    🛠 Adjust project settings

    📚 Read more about Snyk's upgrade and patch logic


    Learn how to fix vulnerabilities with free interactive lessons:

    🦉 Prototype Pollution

    opened by jdrouet 0
  • [Snyk] Security upgrade react-scripts from 4.0.2 to 5.0.0

    [Snyk] Security upgrade react-scripts from 4.0.2 to 5.0.0

    This PR was automatically created by Snyk using the credentials of a real user.


    Snyk has created this PR to fix one or more vulnerable packages in the `npm` dependencies of this project.

    Changes included in this PR

    • Changes to the following files to upgrade the vulnerable dependencies to a fixed version:
      • examples/mrml-browser/package.json
      • examples/mrml-browser/package-lock.json

    Vulnerabilities that will be fixed

    With an upgrade:

    Severity | Priority Score (*) | Issue | Breaking Change | Exploit Maturity :-------------------------:|-------------------------|:-------------------------|:-------------------------|:------------------------- medium severity | 551/1000
    Why? Recently disclosed, Has a fix available, CVSS 5.3 | Regular Expression Denial of Service (ReDoS)
    SNYK-JS-LOADERUTILS-3042992 | Yes | No Known Exploit

    (*) Note that the real score may have changed since the PR was raised.

    Commit messages
    Package name: react-scripts The new version differs by 76 commits.
    • 221e511 Publish
    • 6a3315b Update CONTRIBUTING.md
    • 5614c87 Add support for Tailwind (#11717)
    • 657739f chore(test): make all tests install with `npm ci` (#11723)
    • 20edab4 fix(webpackDevServer): disable overlay for warnings (#11413)
    • 69321b0 Remove cached lockfile (#11706)
    • 3afbbc0 Update all dependencies (#11624)
    • f5467d5 feat(eslint-config-react-app): support ESLint 8.x (#11375)
    • e8319da [WIP] Fix integration test teardown / cleanup and missing yarn installation (#11686)
    • c7627ce Update webpack and dev server (#11646)
    • f85b064 The default port used by `serve` has changed (#11619)
    • 544befe Update package.json (#11597)
    • 9d0369b Fix ESLint Babel preset resolution (#11547)
    • d7b23c8 test(create-react-app): assert for exit code (#10973)
    • 1465357 Prepare 5.0.0 alpha release
    • 3880ba6 Remove dependency pinning (#11474)
    • 8b9fbee Update CODEOWNERS
    • cacf590 Bump template dependency version (#11415)
    • 5cedfe4 Bump browserslist from 4.14.2 to 4.16.5 (#11476)
    • 50ea5ad allow CORS on webpack-dev-server (#11325)
    • 63bba07 Upgrade jest and related packages from 26.6.0 to 27.1.0 (#11338)
    • 960b21e Bump immer from 8.0.4 to 9.0.6 (#11364)
    • 134cd3c Resolve dependency issues in v5 alpha (#11294)
    • b45ae3c Update CONTRIBUTING.md

    See the full diff

    Check the changes in this PR to ensure they won't cause issues with your project.


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.

    For more information: 🧐 View latest project report

    🛠 Adjust project settings

    📚 Read more about Snyk's upgrade and patch logic


    Learn how to fix vulnerabilities with free interactive lessons:

    🦉 Regular Expression Denial of Service (ReDoS)

    opened by jdrouet 0
  • [Snyk] Security upgrade react-scripts from 4.0.2 to 5.0.0

    [Snyk] Security upgrade react-scripts from 4.0.2 to 5.0.0

    This PR was automatically created by Snyk using the credentials of a real user.


    Snyk has created this PR to fix one or more vulnerable packages in the `npm` dependencies of this project.

    Changes included in this PR

    • Changes to the following files to upgrade the vulnerable dependencies to a fixed version:
      • examples/mrml-browser/package.json
      • examples/mrml-browser/package-lock.json

    Vulnerabilities that will be fixed

    With an upgrade:

    Severity | Priority Score (*) | Issue | Breaking Change | Exploit Maturity :-------------------------:|-------------------------|:-------------------------|:-------------------------|:------------------------- medium severity | 551/1000
    Why? Recently disclosed, Has a fix available, CVSS 5.3 | Regular Expression Denial of Service (ReDoS)
    SNYK-JS-LOADERUTILS-3105943 | Yes | No Known Exploit

    (*) Note that the real score may have changed since the PR was raised.

    Commit messages
    Package name: react-scripts The new version differs by 76 commits.
    • 221e511 Publish
    • 6a3315b Update CONTRIBUTING.md
    • 5614c87 Add support for Tailwind (#11717)
    • 657739f chore(test): make all tests install with `npm ci` (#11723)
    • 20edab4 fix(webpackDevServer): disable overlay for warnings (#11413)
    • 69321b0 Remove cached lockfile (#11706)
    • 3afbbc0 Update all dependencies (#11624)
    • f5467d5 feat(eslint-config-react-app): support ESLint 8.x (#11375)
    • e8319da [WIP] Fix integration test teardown / cleanup and missing yarn installation (#11686)
    • c7627ce Update webpack and dev server (#11646)
    • f85b064 The default port used by `serve` has changed (#11619)
    • 544befe Update package.json (#11597)
    • 9d0369b Fix ESLint Babel preset resolution (#11547)
    • d7b23c8 test(create-react-app): assert for exit code (#10973)
    • 1465357 Prepare 5.0.0 alpha release
    • 3880ba6 Remove dependency pinning (#11474)
    • 8b9fbee Update CODEOWNERS
    • cacf590 Bump template dependency version (#11415)
    • 5cedfe4 Bump browserslist from 4.14.2 to 4.16.5 (#11476)
    • 50ea5ad allow CORS on webpack-dev-server (#11325)
    • 63bba07 Upgrade jest and related packages from 26.6.0 to 27.1.0 (#11338)
    • 960b21e Bump immer from 8.0.4 to 9.0.6 (#11364)
    • 134cd3c Resolve dependency issues in v5 alpha (#11294)
    • b45ae3c Update CONTRIBUTING.md

    See the full diff

    Check the changes in this PR to ensure they won't cause issues with your project.


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.

    For more information: 🧐 View latest project report

    🛠 Adjust project settings

    📚 Read more about Snyk's upgrade and patch logic


    Learn how to fix vulnerabilities with free interactive lessons:

    🦉 Regular Expression Denial of Service (ReDoS)

    opened by jdrouet 0
  • build(deps): Bump minimatch from 3.0.4 to 3.1.2 in /examples/mjml-bench

    build(deps): Bump minimatch from 3.0.4 to 3.1.2 in /examples/mjml-bench

    Bumps minimatch from 3.0.4 to 3.1.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies javascript 
    opened by dependabot[bot] 0
  • [Snyk] Security upgrade react-scripts from 4.0.2 to 5.0.0

    [Snyk] Security upgrade react-scripts from 4.0.2 to 5.0.0

    This PR was automatically created by Snyk using the credentials of a real user.


    Snyk has created this PR to fix one or more vulnerable packages in the `npm` dependencies of this project.

    Changes included in this PR

    • Changes to the following files to upgrade the vulnerable dependencies to a fixed version:
      • examples/mrml-browser/package.json
      • examples/mrml-browser/package-lock.json

    Vulnerabilities that will be fixed

    With an upgrade:

    Severity | Priority Score (*) | Issue | Breaking Change | Exploit Maturity :-------------------------:|-------------------------|:-------------------------|:-------------------------|:------------------------- high severity | 661/1000
    Why? Recently disclosed, Has a fix available, CVSS 7.5 | Prototype Pollution
    SNYK-JS-LOADERUTILS-3043105 | Yes | No Known Exploit

    (*) Note that the real score may have changed since the PR was raised.

    Commit messages
    Package name: react-scripts The new version differs by 76 commits.
    • 221e511 Publish
    • 6a3315b Update CONTRIBUTING.md
    • 5614c87 Add support for Tailwind (#11717)
    • 657739f chore(test): make all tests install with `npm ci` (#11723)
    • 20edab4 fix(webpackDevServer): disable overlay for warnings (#11413)
    • 69321b0 Remove cached lockfile (#11706)
    • 3afbbc0 Update all dependencies (#11624)
    • f5467d5 feat(eslint-config-react-app): support ESLint 8.x (#11375)
    • e8319da [WIP] Fix integration test teardown / cleanup and missing yarn installation (#11686)
    • c7627ce Update webpack and dev server (#11646)
    • f85b064 The default port used by `serve` has changed (#11619)
    • 544befe Update package.json (#11597)
    • 9d0369b Fix ESLint Babel preset resolution (#11547)
    • d7b23c8 test(create-react-app): assert for exit code (#10973)
    • 1465357 Prepare 5.0.0 alpha release
    • 3880ba6 Remove dependency pinning (#11474)
    • 8b9fbee Update CODEOWNERS
    • cacf590 Bump template dependency version (#11415)
    • 5cedfe4 Bump browserslist from 4.14.2 to 4.16.5 (#11476)
    • 50ea5ad allow CORS on webpack-dev-server (#11325)
    • 63bba07 Upgrade jest and related packages from 26.6.0 to 27.1.0 (#11338)
    • 960b21e Bump immer from 8.0.4 to 9.0.6 (#11364)
    • 134cd3c Resolve dependency issues in v5 alpha (#11294)
    • b45ae3c Update CONTRIBUTING.md

    See the full diff

    Check the changes in this PR to ensure they won't cause issues with your project.


    Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.

    For more information: 🧐 View latest project report

    🛠 Adjust project settings

    📚 Read more about Snyk's upgrade and patch logic


    Learn how to fix vulnerabilities with free interactive lessons:

    🦉 Prototype Pollution

    opened by jdrouet 0
Owner
Jérémie Drouet
Rust lover, React enthusiast, senior developper producing bugs for a living
Jérémie Drouet
Rust implementation of catapulte email sender

Catapulte What is catapulte? Catapulte is an open source mailer you can host yourself. You can use it to quickly catapult your transactionnal emails t

Jérémie Drouet 108 Dec 14, 2022
新しい IMAP client in Rust

新しい IMAP client 新しい (atarashii/new) IMAP client in Rust. It supports plain and secure connections. In progress It's under development... Usage Put thi

Alex Maslakov 39 Sep 13, 2020
Unofficial Rust library for the SendGrid API

sendgrid-rs Unofficial Rust library for the SendGrid API. This crate requires Rust 1.15 or higher as it uses a crate that has a custom derive implemen

Garrett Squire 88 Dec 27, 2022
a mailer library for Rust

lettre A mailer library for Rust NOTE: this readme refers to the 0.10 version of lettre, which is still being worked on. The master branch and the alp

lettre 1.3k Jan 4, 2023
Rust library to parse mail files

mailparse A simple parser for MIME email messages. API The primary entry point for this library is the following function: parse_mail(&[u8]) -> Re

Kartikaya Gupta (kats) 150 Dec 27, 2022
📫Himalaya: CLI email client written in Rust.

??Himalaya: CLI email client written in Rust.

Clément DOUIN 2.1k Jan 7, 2023
Check if an email address exists without sending any email, written in Rust.

Check if an email address exists without sending any email, written in Rust.

Reacher 3.5k Dec 31, 2022
Fast and robust e-mail parsing library for Rust

mail-parser mail-parser is an e-mail parsing library written in Rust that fully conforms to the Internet Message Format standard (RFC 5322), the Multi

Stalwart Labs 158 Jan 1, 2023
mail-builder is a flexible e-mail builder library written in Rust that generates RFC5322 compliant e-mail messages

mail-builder mail-builder is a flexible e-mail builder library written in Rust that generates RFC5322 compliant e-mail messages. The library has full

Stalwart Labs 37 Dec 19, 2022
A mail suite written in rust meant to be easy to use.

Erooster A mail suite written in rust meant to be easy to use. Getting started Currently the setup is quite rough. You need some certificates for your

Marcel 33 Dec 19, 2022
A rewrite of the server side parts of emersion/go-smtp package into rust.

rust-smtp-server A rust smtp server library. It's mainly a rewrite of the server side parts of the emersion/go-smtp library. Features Usage Add this t

Nick Westendorf 3 Apr 26, 2023
An ESMTP server library written in Rust.

rs-smtp An ESMTP server library written in Rust. Features ESMTP client & server implementing RFC 5321 Support for SMTP AUTH and PIPELINING UTF-8 suppo

DUNEF 3 Apr 15, 2023
E-mail delivery library for Rust with DKIM support

mail-send mail-send is a Rust library to build, sign and send e-mail messages via SMTP. It includes the following features: Generates e-mail messages

Stalwart Labs 165 Oct 23, 2023
Mjml - the only framework that makes responsive-email easy

MJML 4 If you're looking for MJML 3.3.X check this branch | Translated documentation | Introduction | Installation | Usage | Translated documentation

MJML 14.8k Jan 6, 2023
An implementation of regular expressions for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs.

regex A Rust library for parsing, compiling, and executing regular expressions. Its syntax is similar to Perl-style regular expressions, but lacks a f

The Rust Programming Language 2.6k Jan 8, 2023
rinflux is Rust based influx client implementation that have been inspired from influx other language implementation, developed with 💖

Unofficial InfluxDB Driver for Rust This library is a work in progress. This means a feature you might need is not implemented yet or could be handled

Workfoxes 1 Apr 7, 2022
A SIMD implementation of Keccak256 for aarch64, forked from Remco Bloeman's Goldilocks K12 implementation.

keccak256-aarch64 Warning This crate was forked from real cryptographers (Goldilocks by Remco Bloeman), by not a real cryptographer. Do not use this k

null 6 Oct 24, 2023
MessagePack implementation for Rust / msgpack.org[Rust]

RMP - Rust MessagePack RMP is a pure Rust MessagePack implementation. This repository consists of three separate crates: the RMP core and two implemen

Evgeny Safronov 840 Dec 30, 2022
Stretto is a Rust implementation for ristretto. A high performance memory-bound Rust cache.

Stretto is a Rust implementation for ristretto. A high performance memory-bound Rust cache.

Al Liu 310 Dec 29, 2022
Rust implementation of Andrej Karpathy's micrograd for purposes of learning both ML and Rust.

micrograd_rs Rust implementation of Andrej Karpathy's micrograd for purposes of learning both ML and Rust. Main takeaways Basically the same takeaways

null 3 Oct 28, 2022