Skip to content

isValueOfType and isArrayOfType in arrar/utils.ts cannot handle big int number, for instance time in milliseconds: 1753277400000 #155

@dcaoyuan

Description

@dcaoyuan

The following code use (value | 0) === value to test if value is int, but this method only work for 32-bit since the (value | 0) trick is hard-coded into the JavaScript engine to use 32-bit logic. It won't work for big int as 1753277400000

export function isArrayOfType(array: any[], type: PineArrayType) {
switch (type) {
case PineArrayType.int:
return array.every((value) => typeof value === 'number' && (value | 0) === value);
case PineArrayType.float:
return array.every((value) => typeof value === 'number' && !isNaN(value));
case PineArrayType.string:
return array.every((value) => typeof value === 'string');
case PineArrayType.bool:
return array.every((value) => typeof value === 'boolean');
}
return false;
}
export function isValueOfType(value: any, type: PineArrayType) {
// Untyped arrays (e.g. array.new<chart.point>()) accept any value
if (type === PineArrayType.any) return true;
switch (type) {
case PineArrayType.int:
return typeof value === 'number' && ((value | 0) === value || isNaN(value));
case PineArrayType.float:
return typeof value === 'number';
case PineArrayType.string:
return typeof value === 'string';
case PineArrayType.bool:
return typeof value === 'boolean';
// Drawing object types accept any object (or null for na)
case PineArrayType.box:
case PineArrayType.label:
case PineArrayType.line:
case PineArrayType.linefill:
case PineArrayType.table:
case PineArrayType.color:
return value === null || typeof value === 'object' || typeof value === 'string';
}
return false;
}

A solution may be using Number.isSafeInteger(value)

return typeof value === 'number' && (Number.isSafeInteger(value) || isNaN(value));

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions