Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 6x 6x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 54x 1x 1x 1x 4320x 4320x 4320x 1x | /**
* Previously when we get a blank for a value, or a string where we expect a number, etc,
* we parse things as simply undefineds or nulls or NaN. Since authors are uploading data
* from our sources at runtime, and errors in source data are extremely common, it may be helpful
* to parse those invalid values into specific types, to provide better error message and perhaps
* in the future suggested autocorrections or workarounds.
*
* For a good read on the "Errors are values" pattern: https://blog.golang.org/errors-are-values
*/
export abstract class ErrorValue {
toString(): string {
return ""
}
toErrorString(): string {
return this.constructor.name
}
}
class NaNButShouldBeNumber extends ErrorValue {}
export class DroppedForTesting extends ErrorValue {}
class InvalidOnALogScale extends ErrorValue {}
class UndefinedButShouldBeNumber extends ErrorValue {}
class NullButShouldBeNumber extends ErrorValue {}
class BlankButShouldBeNumber extends ErrorValue {}
class UndefinedButShouldBeString extends ErrorValue {}
class NullButShouldBeString extends ErrorValue {}
class NotAParseableNumberButShouldBeNumber extends ErrorValue {}
export class DivideByZeroError extends ErrorValue {}
class NoValueWithinTolerance extends ErrorValue {}
class NoMatchingValueAfterJoin extends ErrorValue {}
export class ValueTooLow extends ErrorValue {}
class NoValueToCompareAgainst extends ErrorValue {}
class FilteredValue extends ErrorValue {}
class NoValueForInterpolation extends ErrorValue {}
class InvalidQuarterValue extends ErrorValue {}
// todo: if we don't export this, get an error in Transforms. should be fixable, see: https://github.com/microsoft/TypeScript/issues/5711
export class MissingValuePlaceholder extends ErrorValue {}
export const ErrorValueTypes = {
NaNButShouldBeNumber: new NaNButShouldBeNumber(),
DroppedForTesting: new DroppedForTesting(),
InvalidOnALogScale: new InvalidOnALogScale(),
UndefinedButShouldBeNumber: new UndefinedButShouldBeNumber(),
NullButShouldBeNumber: new NullButShouldBeNumber(),
BlankButShouldBeNumber: new BlankButShouldBeNumber(),
UndefinedButShouldBeString: new UndefinedButShouldBeString(),
NullButShouldBeString: new NullButShouldBeString(),
MissingValuePlaceholder: new MissingValuePlaceholder(),
NotAParseableNumberButShouldBeNumber:
new NotAParseableNumberButShouldBeNumber(),
DivideByZeroError: new DivideByZeroError(),
NoValueWithinTolerance: new NoValueWithinTolerance(),
NoMatchingValueAfterJoin: new NoMatchingValueAfterJoin(),
ValueTooLow: new ValueTooLow(),
NoValueToCompareAgainst: new NoValueToCompareAgainst(),
FilteredValue: new FilteredValue(),
NoValueForInterpolation: new NoValueForInterpolation(),
InvalidQuarterValue: new InvalidQuarterValue(),
}
// https://github.com/robertmassaioli/ts-is-present
// A predicate for filtering an array of valid and error values that returns the correct type
export const isNotErrorValue = <TYPE>(item: TYPE | ErrorValue): item is TYPE =>
!(item instanceof ErrorValue)
export const isNotErrorValueOrEmptyCell = <K>(
value: K
): value is Exclude<K, ErrorValue | undefined> =>
value !== undefined && isNotErrorValue(value)
export const defaultIfErrorValue = <TYPE>(
item: TYPE | ErrorValue,
defaultValue?: TYPE
): TYPE | undefined => (isNotErrorValue(item) ? item : defaultValue)
|