[JS] apache-arrow doesn't work on platform restricting eval/new Function
- Dominant language
- TypeScript
- Stars
- 112
- Forks
- 23
- Avg merge
- 21h 18m
- Merged PRs (30d)
- 8
Description
### Describe the bug, including details regarding any error messages, version, and platform.
Some platforms don't allow eval or `new Function`. CloudFlare workers is one such platform.
`createIsValidFunction` templates out a validation function using switch, since it's very fast. However, this doesn't work on CloudFlare workers (or generally workerd).
The function in question:
`builder/valid.ts`
```
export function createIsValidFunction(nullValues?: ReadonlyArray) {
if (!nullValues || nullValues.length <= 0) {
// @ts-ignore
return function isValid(value: any) { return true; };
}
let fnBody = '';
const noNaNs = nullValues.filter((x) => x === x);
if (noNaNs.length > 0) {
fnBody = `
switch (x) {${noNaNs.map((x) => `
case ${valueToCase(x)}:`).join('')}
return false;
}`;
}
// NaN doesn't equal anything including itself, so it doesn't work as a
// switch case. Instead we must explicitly check for NaN before the switch.
if (nullValues.length !== noNaNs.length) {
fnBody = `if (x !== x) return false;\n${fnBody}`;
}
return new Function(`x`, `${fnBody}\nreturn true;`) as (value: T['TValue'] | TNull) => boolean;
}
```
This is the only place in apache-arrow that uses new Function.
I have been able to patch it locally and moved forward doing that. I'd like to know if there's any interest in having the library function out-of-the-box on CloudFlare. If so, we would be willing to refine our patch and submit for review.
Thank you.
### Component(s)
JavaScript
Contributor guide
Assessment
This issue has not been assessed yet.