/* * Copyright (c) 2021, Idan Horowitz * Copyright (c) 2021, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace JS::Temporal { enum class OptionType { Boolean, String, Number }; struct ISODateTime { i32 year; u8 month; u8 day; u8 hour; u8 minute; u8 second; u16 millisecond; u16 microsecond; u16 nanosecond; Optional calendar = {}; }; struct TemporalInstant { i32 year; u8 month; u8 day; u8 hour; u8 minute; u8 second; u16 millisecond; u16 microsecond; u16 nanosecond; Optional time_zone_offset; }; struct TemporalDate { i32 year; u8 month; u8 day; Optional calendar; }; struct TemporalTimeZone { bool z; Optional offset; Optional name; }; MarkedValueList iterable_to_list_of_type(GlobalObject&, Value items, Vector const& element_types); Object* get_options_object(GlobalObject&, Value options); Value get_option(GlobalObject&, Object& options, String const& property, Vector const& types, Vector const& values, Value fallback); Optional to_temporal_overflow(GlobalObject&, Object& normalized_options); Optional to_temporal_rounding_mode(GlobalObject&, Object& normalized_options, String const& fallback); u64 to_temporal_rounding_increment(GlobalObject&, Object& normalized_options, Optional dividend, bool inclusive); Optional to_smallest_temporal_unit(GlobalObject&, Object& normalized_options, Vector const& disallowed_units, Optional fallback); double constrain_to_range(double x, double minimum, double maximum); BigInt* round_number_to_increment(GlobalObject&, BigInt const&, u64 increment, String const& rounding_mode); Optional parse_iso_date_time(GlobalObject&, String const& iso_string); Optional parse_temporal_instant_string(GlobalObject&, String const& iso_string); Optional parse_temporal_calendar_string(GlobalObject&, String const& iso_string); Optional parse_temporal_date_string(GlobalObject&, String const& iso_string); Optional parse_temporal_duration_string(GlobalObject&, String const& iso_string); Optional parse_temporal_time_zone_string(GlobalObject&, String const& iso_string); double to_positive_integer_or_infinity(GlobalObject&, Value argument); Object* prepare_temporal_fields(GlobalObject&, Object& fields, Vector field_names, Vector required_fields); }