datum-focus
Version:
Data shape, model, metadata, JSON, JSON Schema, GraphQL, MongoDB query and aggregations, iterator generators
185 lines (137 loc) • 7.81 kB
text/typescript
/** Date Expression Operators
*
* The following operators returns date objects or components of a date object:
*/
/** Constructs a BSON Date object given the date's constituent parts. */
export const $dateFromParts = "$dateFromParts";
/** Converts a date/time string to a date object. */
export const $dateFromString = "$dateFromString";
/** Returns a document containing the constituent parts of a date. */
export const $dateToParts = "$dateToParts";
/** Returns the date as a formatted string. */
export const $dateToString = "$dateToString";
/** Returns the day of the month for a date as a number between 1 and 31. */
export const $dayOfMonth = "$dayOfMonth";
/** Returns the day of the week for a date as a number between 1 (Sunday) and 7 (Saturday). */
export const $dayOfWeek = "$dayOfWeek";
/** Returns the day of the year for a date as a number between 1 and 366 (leap year). */
export const $dayOfYear = "$dayOfYear";
/** Returns the hour for a date as a number between 0 and 23. */
export const $hour = "$hour";
/** Returns the weekday number in ISO 8601 format, ranging from 1 (for Monday) to 7 (for Sunday). */
export const $isoDayOfWeek = "$isoDayOfWeek";
/** Returns the week number in ISO 8601 format, ranging from 1 to 53. Week numbers start at 1 with the week (Monday through Sunday) that contains the year's first Thursday. */
export const $isoWeek = "$isoWeek";
/** Returns the year number in ISO 8601 format. The year starts with the Monday of week 1 (ISO 8601) and ends with the Sunday of the last week (ISO 8601). */
export const $isoWeekYear = "$isoWeekYear";
/** Returns the milliseconds of a date as a number between 0 and 999. */
export const $millisecond = "$millisecond";
/** Returns the minute for a date as a number between 0 and 59. */
export const $minute = "$minute";
/** Returns the month for a date as a number between 1 (January) and 12 (December). */
export const $month = "$month";
/** Returns the seconds for a date as a number between 0 and 60 (leap seconds). */
export const $second = "$second";
/** Converts value to a Date. */
export const $toDate = "$toDate";
/** Returns the week number for a date as a number between 0 (the partial week that precedes the first Sunday of the year) and 53 (leap year). */
export const $week = "$week";
/** Returns the year for a date as a number (e.g. 2014). */
export const $year = "$year";
/** The following arithmetic operators can take date operands: */
/** Adds numbers and a date to return a new date. If adding numbers and a date, treats the numbers as milliseconds. Accepts any number of argument expressions, but at most, one expression can resolve to a date. */
export const $add = "$add";
/** Returns the result of subtracting the second value from the first. If the two values are dates, return the difference in milliseconds. If the two values are a date and a number in milliseconds, return the resulting date. Accepts two argument expressions. If the two values are a date and a number, specify the date argument first as it is not meaningful to subtract a date from a number. */
export const $subtract = "$subtract";
const DATE_OPERATORS = [
$dateFromParts,
$dateFromString,
$dateToParts,
$dateToString,
$dayOfMonth,
$dayOfWeek,
$dayOfYear,
$hour,
$isoDayOfWeek,
$isoWeek,
$isoWeekYear,
$millisecond,
$minute,
$month,
$second,
$toDate,
$week,
$year,
$add,
$subtract
] as const;
export type DateExpressionOperator = typeof DATE_OPERATORS[number];
export const isDateExpressionOperator = (
val: any
): val is DateExpressionOperator => val in DATE_OPERATORS;
type DateExpressionArgument = Date | string | number;
type UnaryDate<A = DateExpressionArgument> = A;
type BinaryDate<A = DateExpressionArgument> = [A, A];
type RangeDate<A = DateExpressionArgument> = Array<A>;
/** Constructs a BSON Date object given the date's constituent parts. */
export type $dateFromPartsExpression = { [$dateFromParts]: UnaryDate };
/** Converts a date/time string to a date object. */
export type $dateFromStringExpression = { [$dateFromString]: UnaryDate };
/** Returns a document containing the constituent parts of a date. */
export type $dateToPartsExpression = { [$dateToParts]: UnaryDate };
/** Returns the date as a formatted string. */
export type $dateToStringExpression = { [$dateToString]: UnaryDate };
/** Returns the day of the month for a date as a number between 1 and 31. */
export type $dayOfMonthExpression = { [$dayOfMonth]: UnaryDate };
/** Returns the day of the week for a date as a number between 1 (Sunday) and 7 (Saturday). */
export type $dayOfWeekExpression = { [$dayOfWeek]: UnaryDate };
/** Returns the day of the year for a date as a number between 1 and 366 (leap year). */
export type $dayOfYearExpression = { [$dayOfYear]: UnaryDate };
/** Returns the hour for a date as a number between 0 and 23. */
export type $hourExpression = { [$hour]: UnaryDate };
/** Returns the weekday number in ISO 8601 format, ranging from 1 (for Monday) to 7 (for Sunday). */
export type $isoDayOfWeekExpression = { [$isoDayOfWeek]: UnaryDate };
/** Returns the week number in ISO 8601 format, ranging from 1 to 53. Week numbers start at 1 with the week (Monday through Sunday) that contains the year's first Thursday. */
export type $isoWeekExpression = { [$isoWeek]: UnaryDate };
/** Returns the year number in ISO 8601 format. The year starts with the Monday of week 1 (ISO 8601) and ends with the Sunday of the last week (ISO 8601). */
export type $isoWeekYearExpression = { [$isoWeekYear]: UnaryDate };
/** Returns the milliseconds of a date as a number between 0 and 999. */
export type $millisecondExpression = { [$millisecond]: UnaryDate };
/** Returns the minute for a date as a number between 0 and 59. */
export type $minuteExpression = { [$minute]: UnaryDate };
/** Returns the month for a date as a number between 1 (January) and 12 (December). */
export type $monthExpression = { [$month]: UnaryDate };
/** Returns the seconds for a date as a number between 0 and 60 (leap seconds). */
export type $secondExpression = { [$second]: UnaryDate };
/** Converts value to a Date. */
export type $toDateExpression = { [$toDate]: UnaryDate };
/** Returns the week number for a date as a number between 0 (the partial week that precedes the first Sunday of the year) and 53 (leap year). */
export type $weekExpression = { [$week]: UnaryDate };
/** Returns the year for a date as a number (e.g. 2014). */
export type $yearExpression = { [$year]: UnaryDate };
/** The following arithmetic operators can take date operands: */
/** Adds numbers and a date to return a new date. If adding numbers and a date, treats the numbers as milliseconds. Accepts any number of argument expressions, but at most, one expression can resolve to a date. */
export type $addExpression = { [$add]: UnaryDate };
/** Returns the result of subtracting the second value from the first. If the two values are dates, return the difference in milliseconds. If the two values are a date and a number in milliseconds, return the resulting date. Accepts two argument expressions. If the two values are a date and a number, specify the date argument first as it is not meaningful to subtract a date from a number. */
export type $subtractExpression = { [$subtract]: UnaryDate };
export type DateExpression =
| $dateFromPartsExpression
| $dateFromStringExpression
| $dateToPartsExpression
| $dateToStringExpression
| $dayOfMonthExpression
| $dayOfWeekExpression
| $dayOfYearExpression
| $hourExpression
| $isoDayOfWeekExpression
| $isoWeekExpression
| $isoWeekYearExpression
| $millisecondExpression
| $minuteExpression
| $monthExpression
| $secondExpression
| $toDateExpression
| $weekExpression
| $yearExpression
| $addExpression
| $subtractExpression;