harttle/liquidjs

`map` renders an error when it shouldn't.

ebobby opened this issue · 2 comments

ebobby commented

Calling map with an array of objects where one of the objects doesn't have the given key, when strictVariables: true ends up in a weird interaction because of the call to _getFromScope.

Ruby simply returns nothing for those cases, liquidjs is instead rendering the error instead of throwing it.

    it('should not throw or render an error', function () {
      const posts = [{ category: 'foo' }, { name: 'bar' }]
      return test('{{posts | map: "category"}}', { posts }, 'foo', { strictVariables: true })
    })

This test results in:

  ● filters/array › map › should not throw or render an error

    expect(received).toBe(expected) // Object.is equality

    Expected: "foo"
    Received: "InternalUndefinedVariableError: undefined variable: category"

Notice how the error is rendered into the output string, and not even thrown. Ruby doesn't throw though, with strict vars and strict filiters it simply doesn't return anything. Yo would get "foo" as output for the given test.

ebobby commented

I am not sure what features would break if I were to change that to be a regular object access and not use _getFromScope which seems to be causing the issue. Also I don't think I am smart enough to be able to follow all the generators chains. :(

🎉 This issue has been resolved in version 10.9.1 🎉

The release is available on:

Your semantic-release bot 📦🚀