North Pittsburgh Meatpackers

    TypeScript icon, indicating that this package has built-in type declarations

    6.2.4 • Public • Published


    Convert format-message-parse ast to a function

    npm Version JS Standard Style MIT License

    Turns a compact format-message ast:

    [ "You have ", [ "numBananas", "plural", 0, {
         "=0": [ "no bananas" ],
        "one": [ "a banana" ],
      "other": [ [ '#' ], " bananas" ]
    } ], " for sale." ]

    into a function:

    format({ numBananas:0 })
    //-> "You have no bananas for sale."

    Quick Examples

    npm install format-message-interpret --save

    import parse from 'format-message-parse'
    import interpret from 'format-message-interpret'
    interpret('en', parse('Hello, {name}!'))({ name: 'Jane' })


    interpret(locales: string | string[], ast: AST, types?: Types)

    Generate a function from an ast, using the formatting rules of the locales that accepts an arguments object, and returns a string. You can optionally pass custom types. Any non-standard type found in ast without a corresponding formatter in types will be treated as a simple string type.

    type Types = {
      [type: string]: (placeholder: string[], locales: string | string[]) =>
        (value: any, args: Object) => string

    types is an object with each key being the name of the type as it appears in the message pattern. Each value is a function that takes the locales, and the node from the ast (like [ 'a', 'mytype', 'style' ]), and it returns a function that will be called with the specific value, and the complete arguments object. If the custom type was defined with sub-messages, those will already be converted to functions meant to be called with args.

    interpret.toParts(locales: string | string[], ast: AST, types?: Types)

    Like, interpret, interpretToParts will generate a function accepting the message arguments. However, it will return an array of message parts, instead of a string. This is intended to help generate rich messages.

    interpret.toParts('en', parse('a {b} c'))({ b: 1 }) // [ 'a ', 1, ' c' ]
    interpret.toParts('en', parse('Click {a, element, children {here}}'), {
      element: (locales, [ id, type, props ]) =>
        (fn, args) => fn(props.children(args))
    })({ a: children => <a>{children}</a> })
    // [ 'Click ', <a>here</a> ]


    This software is free to use under the MIT license. See the LICENSE-MIT file for license text and copyright information.


    npm i format-message-interpret

    DownloadsWeekly Downloads






    Unpacked Size

    30.3 kB

    Total Files


    Last publish


    • thetalecrafter
    • bjohn465
    • aaronshaf
    • brentburgoyne