postlight / lux

Build scalable, Node.js-powered REST JSON APIs with almost no code.
https://lux.postlight.com
MIT License
571 stars 60 forks source link

(page) links not serialized properly when one of the params is a date #724

Open nickschot opened 6 years ago

nickschot commented 6 years ago

Requesting a resource with a link like /my-resource?forDate=2017-10-11T00:00:00.000Z&filter[id]=123,124 gives a Date object for the forDate param. Currently the create-query-string function has no knowledge of correctly serializing a date which results in a page link like: /my-resource?&filter[id]=123,124 which is invalid.

Can be solved by modifying create-page-links to:

if (value && typeof value === 'object') {
      if (Array.isArray(value)) {
        result += value.map(encodeURIComponent).join();
      } else if(value instanceof Date) {
        result += value.toISOString();
      } else {
        result = (
          result.substr(0, result.length - (key.length + 1))
          + createQueryString(value, key)
        );
      }
    } else if (!value && typeof value !== 'number') {
      result += 'null';
    } else {
      result += encodeURIComponent(value);
    }
}

This does expect the user to use ISO8601 dates.

nickschot commented 6 years ago

Any ideas are welcome @zacharygolba . I can make a PR if you approve of the solution. I'm still a bit in doubt whether or not to make the assumption of an ISO8601 date.

nickschot commented 6 years ago

Would need a "back" port to master as well, as I see the implementation has changed.