execjs
execjs copied to clipboard
JSON::GeneratorError after moving from 1.4.0 to 2.0.x
I'm just moving a previous issue from the old repo here. Is there a way of doing this using ExecJS > 1.4.0?
Using this in a js.coffee erb template
$("#stats").replaceWith("<%= escape_javascript(render @template) %>")
now causes this error
JSON::GeneratorError - only generation of JSON objects or arrays allowed:
/Users/Nick/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/json/common.rb:216:in `generate'
/Users/Nick/.rbenv/versions/1.9.3-p327/lib/ruby/1.9.1/json/common.rb:345:in `dump'
execjs (2.0.0) lib/execjs/external_runtime.rb:19:in `eval'
execjs (2.0.0) lib/execjs/external_runtime.rb:33:in `call'
coffee-script (2.2.0) lib/coffee_script.rb:57:in `compile'
app/views/admin/stats/stats.js.coffee:1:in `_app_views_admin_stats_stats_js_coffee___1014294459951170846_70216695895960'
This worked just fine with 1.4.0 Should a different approach now be used?
Is not it missing the erb
extension?
Actually. I know the problem, one of the JSON.generate call is missing quirks_mode: true
. (By default it only allows you to make {...} and [...], this flag allows bare strings, numbers, booleans and nulls as well.
We just have to verify it wasn't intentional and add the flag.
Specifically: https://github.com/rails/execjs/blob/1a92790be698d051a58760e2a90a0e31a9763b29/lib/execjs/external_runtime.rb#L46
The only thing that is giving me minor doubts is that the original commit that introduced it did it in one place but not the other, but I'm pretty sure it was just a mistake.
It has the erb
extension. It seems the issue was lingering in the old repo and no one noticed it.