From 4fefe87415b1b7eb7abff618945aae0bd3d703b7 Mon Sep 17 00:00:00 2001 From: Lesha Koss Date: Wed, 13 Sep 2017 21:45:49 +0600 Subject: [PATCH 1/5] Modify scripts/build/typings.js to build global flow typings --- scripts/_lib/listFPFns.js | 2 +- scripts/_lib/listFns.js | 2 +- scripts/_lib/listLocales.js | 2 +- scripts/build/typings.js | 66 +++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 3 deletions(-) diff --git a/scripts/_lib/listFPFns.js b/scripts/_lib/listFPFns.js index af3e067e94..7c5821716c 100644 --- a/scripts/_lib/listFPFns.js +++ b/scripts/_lib/listFPFns.js @@ -3,7 +3,7 @@ const fs = require('fs') module.exports = listFPFns -const ignoredFiles = ['index.js', 'test.js'] +const ignoredFiles = ['index.js', 'test.js', 'index.js.flow'] function listFPFns () { const files = fs.readdirSync(path.join(process.cwd(), 'src', 'fp')) diff --git a/scripts/_lib/listFns.js b/scripts/_lib/listFns.js index 333f3803e5..b00e2e8cc7 100644 --- a/scripts/_lib/listFns.js +++ b/scripts/_lib/listFns.js @@ -3,7 +3,7 @@ const fs = require('fs') module.exports = listFns -const ignoredFiles = ['locale', 'esm', 'fp', 'index.js', 'test.js'] +const ignoredFiles = ['locale', 'esm', 'fp', 'index.js', 'test.js', 'index.js.flow'] function listFns () { const files = fs.readdirSync(path.join(process.cwd(), 'src')) diff --git a/scripts/_lib/listLocales.js b/scripts/_lib/listLocales.js index 8fac556977..2fb90afe3d 100644 --- a/scripts/_lib/listLocales.js +++ b/scripts/_lib/listLocales.js @@ -1,7 +1,7 @@ const path = require('path') const fs = require('fs') -const ignoredFiles = ['index.js', 'test.js'] +const ignoredFiles = ['index.js', 'test.js', 'index.js.flow'] module.exports = listLocales diff --git a/scripts/build/typings.js b/scripts/build/typings.js index 1f13fcadc6..89442818c4 100755 --- a/scripts/build/typings.js +++ b/scripts/build/typings.js @@ -381,6 +381,28 @@ function generateFlowFnTyping (fn, aliasDeclarations) { fs.writeFileSync(filename, typingString) } +function generateFlowFnIndexTyping (fns, aliasDeclarations) { + const filename = `./src/index.js.flow` + + const fnsDeclarations = fns.map(({title, args, content}) => { + const params = getParams(args, {indent: 1, leftBorder: '(', rightBorder: ')'}) + const returns = getType(content.returns[0].type.names) + return ` ${title}: ${params} => ${returns}` + }) + + const typingString = ['// @flow'] + .concat(generatedAutomaticallyMessage) + .concat('') + .concat(aliasDeclarations.join('\n\n')) + .concat('') + .concat(`declare module.exports: {`) + .concat(fnsDeclarations.join(',\n\n')) + .concat(`}\n`) + .join('\n') + + fs.writeFileSync(filename, typingString) +} + function generateFlowFPFnTyping (fn, aliasDeclarations) { const {title, args, content} = fn const filename = `./src/fp/${title}/index.js.flow` @@ -400,6 +422,30 @@ function generateFlowFPFnTyping (fn, aliasDeclarations) { fs.writeFileSync(filename, typingString) } +function generateFlowFPFnIndexTyping (fns, aliasDeclarations) { + const filename = `./src/fp/index.js.flow` + + const fnsDeclarations = fns.map(({title, args, content}) => { + const params = getParams(args, {indent: 1, leftBorder: '(', rightBorder: ')'}) + const returns = getType(content.returns[0].type.names) + return ` ${title}: ${getFPFnType(args, content.returns[0].type.names)}` + }) + + const typingString = ['// @flow'] + .concat(generatedAutomaticallyMessage) + .concat('') + .concat(aliasDeclarations.join('\n\n')) + .concat('') + .concat(flowFPAliases) + .concat('') + .concat(`declare module.exports: {`) + .concat(fnsDeclarations.join(',\n')) + .concat(`}\n`) + .join('\n') + + fs.writeFileSync(filename, typingString) +} + function generateFlowLocaleTyping (locale, localeAliasDeclaration) { const {fullPath} = locale const filename = `${fullPath}.flow` @@ -415,6 +461,22 @@ function generateFlowLocaleTyping (locale, localeAliasDeclaration) { fs.writeFileSync(filename, typingString) } +function generateFlowLocaleIndexTyping (locales, localeAliasDeclaration) { + const filename = './src/locale/index.js.flow' + + const typingString = ['// @flow'] + .concat(generatedAutomaticallyMessage) + .concat('') + .concat(localeAliasDeclaration) + .concat('') + .concat(`declare module.exports: {`) + .concat(locales.map(({name}) => ` ${name}: Locale`).join(',\n')) + .concat(`}\n`) + .join('\n') + + fs.writeFileSync(filename, typingString) +} + function generateFlowTypings (fns, aliases, locales) { const aliasDeclarations = aliases.map(getFlowTypeAlias) const localeAliasDeclaration = getFlowTypeAlias(aliases.find((alias) => alias.title === 'Locale')) @@ -430,4 +492,8 @@ function generateFlowTypings (fns, aliases, locales) { locales.forEach((locale) => { generateFlowLocaleTyping(locale, localeAliasDeclaration) }) + + generateFlowFnIndexTyping(fns.filter(({isFPFn}) => !isFPFn), aliasDeclarations) + generateFlowFPFnIndexTyping(fns.filter(({isFPFn}) => isFPFn), aliasDeclarations) + generateFlowLocaleIndexTyping(locales, localeAliasDeclaration) } From 9122acfdee325c56363486bd1fe3e900520ce0f0 Mon Sep 17 00:00:00 2001 From: Lesha Koss Date: Wed, 13 Sep 2017 21:46:11 +0600 Subject: [PATCH 2/5] Build global flow typings --- src/fp/index.js.flow | 335 ++++++++++++++++ src/index.js.flow | 798 +++++++++++++++++++++++++++++++++++++++ src/locale/index.js.flow | 72 ++++ 3 files changed, 1205 insertions(+) create mode 100644 src/fp/index.js.flow create mode 100644 src/index.js.flow create mode 100644 src/locale/index.js.flow diff --git a/src/fp/index.js.flow b/src/fp/index.js.flow new file mode 100644 index 0000000000..0018e8d89e --- /dev/null +++ b/src/fp/index.js.flow @@ -0,0 +1,335 @@ +// @flow +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +type Interval = { + start: Date | string | number, + end: Date | string | number +} + +type Options = { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6, + additionalDigits?: 0 | 1 | 2, + locale?: Locale, + includeSeconds?: boolean, + addSuffix?: boolean, + unit?: 's' | 'm' | 'h' | 'd' | 'M' | 'Y', + roundingMethod?: 'floor' | 'ceil' | 'round' +} + +type Locale = { + formatDistance: Function, + formatLong: Function, + formatRelative: Function, + localize: { + ordinalNumber: Function, + weekday: Function, + weekdays: Function, + month: Function, + months: Function, + timeOfDay: Function, + timesOfDay: Function + }, + match: { + ordinalNumbers: Function, + ordinalNumber: Function, + weekdays: Function, + weekday: Function, + months: Function, + month: Function, + timesOfDay: Function, + timeOfDay: Function + }, + formatters?: Object, + formattingTokensRegExp?: RegExp, + units?: Object, + parsers?: Object, + parsingTokensRegExp?: RegExp, + options?: { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 + } +} + +type CurriedFn1 = (a: A) => R + +type CurriedFn2 = (a: A) => CurriedFn1 + | (a: A, b: B) => R + +type CurriedFn3 = (a: A) => CurriedFn2 + | (a: A, b: B) => CurriedFn1 + | (a: A, b: B, c: C) => R + +type CurriedFn4 = (a: A) => CurriedFn3 + | (a: A, b: B) => CurriedFn2 + | (a: A, b: B, c: C) => CurriedFn1 + | (a: A, b: B, c: C, d: D) => R + +declare module.exports: { + addDays: CurriedFn2, + addDaysWithOptions: CurriedFn3, + addHours: CurriedFn2, + addHoursWithOptions: CurriedFn3, + addISOYears: CurriedFn2, + addISOYearsWithOptions: CurriedFn3, + addMilliseconds: CurriedFn2, + addMillisecondsWithOptions: CurriedFn3, + addMinutes: CurriedFn2, + addMinutesWithOptions: CurriedFn3, + addMonths: CurriedFn2, + addMonthsWithOptions: CurriedFn3, + addQuarters: CurriedFn2, + addQuartersWithOptions: CurriedFn3, + addSeconds: CurriedFn2, + addSecondsWithOptions: CurriedFn3, + addWeeks: CurriedFn2, + addWeeksWithOptions: CurriedFn3, + addYears: CurriedFn2, + addYearsWithOptions: CurriedFn3, + areIntervalsOverlapping: CurriedFn2, + areIntervalsOverlappingWithOptions: CurriedFn3, + closestIndexTo: CurriedFn2<(Date | string | number)[], Date | string | number, number>, + closestIndexToWithOptions: CurriedFn3, + closestTo: CurriedFn2<(Date | string | number)[], Date | string | number, Date>, + closestToWithOptions: CurriedFn3, + compareAsc: CurriedFn2, + compareAscWithOptions: CurriedFn3, + compareDesc: CurriedFn2, + compareDescWithOptions: CurriedFn3, + differenceInCalendarDays: CurriedFn2, + differenceInCalendarDaysWithOptions: CurriedFn3, + differenceInCalendarISOWeeks: CurriedFn2, + differenceInCalendarISOWeeksWithOptions: CurriedFn3, + differenceInCalendarISOYears: CurriedFn2, + differenceInCalendarISOYearsWithOptions: CurriedFn3, + differenceInCalendarMonths: CurriedFn2, + differenceInCalendarMonthsWithOptions: CurriedFn3, + differenceInCalendarQuarters: CurriedFn2, + differenceInCalendarQuartersWithOptions: CurriedFn3, + differenceInCalendarWeeks: CurriedFn2, + differenceInCalendarWeeksWithOptions: CurriedFn3, + differenceInCalendarYears: CurriedFn2, + differenceInCalendarYearsWithOptions: CurriedFn3, + differenceInDays: CurriedFn2, + differenceInDaysWithOptions: CurriedFn3, + differenceInHours: CurriedFn2, + differenceInHoursWithOptions: CurriedFn3, + differenceInISOYears: CurriedFn2, + differenceInISOYearsWithOptions: CurriedFn3, + differenceInMilliseconds: CurriedFn2, + differenceInMillisecondsWithOptions: CurriedFn3, + differenceInMinutes: CurriedFn2, + differenceInMinutesWithOptions: CurriedFn3, + differenceInMonths: CurriedFn2, + differenceInMonthsWithOptions: CurriedFn3, + differenceInQuarters: CurriedFn2, + differenceInQuartersWithOptions: CurriedFn3, + differenceInSeconds: CurriedFn2, + differenceInSecondsWithOptions: CurriedFn3, + differenceInWeeks: CurriedFn2, + differenceInWeeksWithOptions: CurriedFn3, + differenceInYears: CurriedFn2, + differenceInYearsWithOptions: CurriedFn3, + eachDayOfInterval: CurriedFn1, + eachDayOfIntervalWithOptions: CurriedFn2, + endOfDay: CurriedFn1, + endOfDayWithOptions: CurriedFn2, + endOfHour: CurriedFn1, + endOfHourWithOptions: CurriedFn2, + endOfISOWeek: CurriedFn1, + endOfISOWeekWithOptions: CurriedFn2, + endOfISOYear: CurriedFn1, + endOfISOYearWithOptions: CurriedFn2, + endOfMinute: CurriedFn1, + endOfMinuteWithOptions: CurriedFn2, + endOfMonth: CurriedFn1, + endOfMonthWithOptions: CurriedFn2, + endOfQuarter: CurriedFn1, + endOfQuarterWithOptions: CurriedFn2, + endOfSecond: CurriedFn1, + endOfSecondWithOptions: CurriedFn2, + endOfWeek: CurriedFn1, + endOfWeekWithOptions: CurriedFn2, + endOfYear: CurriedFn1, + endOfYearWithOptions: CurriedFn2, + format: CurriedFn2, + formatDistance: CurriedFn2, + formatDistanceStrict: CurriedFn2, + formatDistanceStrictWithOptions: CurriedFn3, + formatDistanceWithOptions: CurriedFn3, + formatRelative: CurriedFn2, + formatRelativeWithOptions: CurriedFn3, + formatWithOptions: CurriedFn3, + getDate: CurriedFn1, + getDateWithOptions: CurriedFn2, + getDay: CurriedFn1, + getDayOfYear: CurriedFn1, + getDayOfYearWithOptions: CurriedFn2, + getDaysInMonth: CurriedFn1, + getDaysInMonthWithOptions: CurriedFn2, + getDaysInYear: CurriedFn1, + getDaysInYearWithOptions: CurriedFn2, + getDayWithOptions: CurriedFn2, + getHours: CurriedFn1, + getHoursWithOptions: CurriedFn2, + getISODay: CurriedFn1, + getISODayWithOptions: CurriedFn2, + getISOWeek: CurriedFn1, + getISOWeeksInYear: CurriedFn1, + getISOWeeksInYearWithOptions: CurriedFn2, + getISOWeekWithOptions: CurriedFn2, + getISOYear: CurriedFn1, + getISOYearWithOptions: CurriedFn2, + getMilliseconds: CurriedFn1, + getMillisecondsWithOptions: CurriedFn2, + getMinutes: CurriedFn1, + getMinutesWithOptions: CurriedFn2, + getMonth: CurriedFn1, + getMonthWithOptions: CurriedFn2, + getOverlappingDaysInIntervals: CurriedFn2, + getOverlappingDaysInIntervalsWithOptions: CurriedFn3, + getQuarter: CurriedFn1, + getQuarterWithOptions: CurriedFn2, + getSeconds: CurriedFn1, + getSecondsWithOptions: CurriedFn2, + getTime: CurriedFn1, + getTimeWithOptions: CurriedFn2, + getYear: CurriedFn1, + getYearWithOptions: CurriedFn2, + isAfter: CurriedFn2, + isAfterWithOptions: CurriedFn3, + isBefore: CurriedFn2, + isBeforeWithOptions: CurriedFn3, + isEqual: CurriedFn2, + isEqualWithOptions: CurriedFn3, + isFirstDayOfMonth: CurriedFn1, + isFirstDayOfMonthWithOptions: CurriedFn2, + isFriday: CurriedFn1, + isFridayWithOptions: CurriedFn2, + isLastDayOfMonth: CurriedFn1, + isLastDayOfMonthWithOptions: CurriedFn2, + isLeapYear: CurriedFn1, + isLeapYearWithOptions: CurriedFn2, + isMonday: CurriedFn1, + isMondayWithOptions: CurriedFn2, + isSameDay: CurriedFn2, + isSameDayWithOptions: CurriedFn3, + isSameHour: CurriedFn2, + isSameHourWithOptions: CurriedFn3, + isSameISOWeek: CurriedFn2, + isSameISOWeekWithOptions: CurriedFn3, + isSameISOYear: CurriedFn2, + isSameISOYearWithOptions: CurriedFn3, + isSameMinute: CurriedFn2, + isSameMinuteWithOptions: CurriedFn3, + isSameMonth: CurriedFn2, + isSameMonthWithOptions: CurriedFn3, + isSameQuarter: CurriedFn2, + isSameQuarterWithOptions: CurriedFn3, + isSameSecond: CurriedFn2, + isSameSecondWithOptions: CurriedFn3, + isSameWeek: CurriedFn2, + isSameWeekWithOptions: CurriedFn3, + isSameYear: CurriedFn2, + isSameYearWithOptions: CurriedFn3, + isSaturday: CurriedFn1, + isSaturdayWithOptions: CurriedFn2, + isSunday: CurriedFn1, + isSundayWithOptions: CurriedFn2, + isThursday: CurriedFn1, + isThursdayWithOptions: CurriedFn2, + isTuesday: CurriedFn1, + isTuesdayWithOptions: CurriedFn2, + isValid: CurriedFn1, + isValidWithOptions: CurriedFn2, + isWednesday: CurriedFn1, + isWednesdayWithOptions: CurriedFn2, + isWeekend: CurriedFn1, + isWeekendWithOptions: CurriedFn2, + isWithinInterval: CurriedFn2, + isWithinIntervalWithOptions: CurriedFn3, + lastDayOfISOWeek: CurriedFn1, + lastDayOfISOWeekWithOptions: CurriedFn2, + lastDayOfISOYear: CurriedFn1, + lastDayOfISOYearWithOptions: CurriedFn2, + lastDayOfMonth: CurriedFn1, + lastDayOfMonthWithOptions: CurriedFn2, + lastDayOfQuarter: CurriedFn1, + lastDayOfQuarterWithOptions: CurriedFn2, + lastDayOfWeek: CurriedFn1, + lastDayOfWeekWithOptions: CurriedFn2, + lastDayOfYear: CurriedFn1, + lastDayOfYearWithOptions: CurriedFn2, + max: CurriedFn1<(Date | string | number)[], Date>, + maxWithOptions: CurriedFn2, + min: CurriedFn1<(Date | string | number)[], Date>, + minWithOptions: CurriedFn2, + parse: CurriedFn3, + parseWithOptions: CurriedFn4, + setDate: CurriedFn2, + setDateWithOptions: CurriedFn3, + setDay: CurriedFn2, + setDayOfYear: CurriedFn2, + setDayOfYearWithOptions: CurriedFn3, + setDayWithOptions: CurriedFn3, + setHours: CurriedFn2, + setHoursWithOptions: CurriedFn3, + setISODay: CurriedFn2, + setISODayWithOptions: CurriedFn3, + setISOWeek: CurriedFn2, + setISOWeekWithOptions: CurriedFn3, + setISOYear: CurriedFn2, + setISOYearWithOptions: CurriedFn3, + setMilliseconds: CurriedFn2, + setMillisecondsWithOptions: CurriedFn3, + setMinutes: CurriedFn2, + setMinutesWithOptions: CurriedFn3, + setMonth: CurriedFn2, + setMonthWithOptions: CurriedFn3, + setQuarter: CurriedFn2, + setQuarterWithOptions: CurriedFn3, + setSeconds: CurriedFn2, + setSecondsWithOptions: CurriedFn3, + setYear: CurriedFn2, + setYearWithOptions: CurriedFn3, + startOfDay: CurriedFn1, + startOfDayWithOptions: CurriedFn2, + startOfHour: CurriedFn1, + startOfHourWithOptions: CurriedFn2, + startOfISOWeek: CurriedFn1, + startOfISOWeekWithOptions: CurriedFn2, + startOfISOYear: CurriedFn1, + startOfISOYearWithOptions: CurriedFn2, + startOfMinute: CurriedFn1, + startOfMinuteWithOptions: CurriedFn2, + startOfMonth: CurriedFn1, + startOfMonthWithOptions: CurriedFn2, + startOfQuarter: CurriedFn1, + startOfQuarterWithOptions: CurriedFn2, + startOfSecond: CurriedFn1, + startOfSecondWithOptions: CurriedFn2, + startOfWeek: CurriedFn1, + startOfWeekWithOptions: CurriedFn2, + startOfYear: CurriedFn1, + startOfYearWithOptions: CurriedFn2, + subDays: CurriedFn2, + subDaysWithOptions: CurriedFn3, + subHours: CurriedFn2, + subHoursWithOptions: CurriedFn3, + subISOYears: CurriedFn2, + subISOYearsWithOptions: CurriedFn3, + subMilliseconds: CurriedFn2, + subMillisecondsWithOptions: CurriedFn3, + subMinutes: CurriedFn2, + subMinutesWithOptions: CurriedFn3, + subMonths: CurriedFn2, + subMonthsWithOptions: CurriedFn3, + subQuarters: CurriedFn2, + subQuartersWithOptions: CurriedFn3, + subSeconds: CurriedFn2, + subSecondsWithOptions: CurriedFn3, + subWeeks: CurriedFn2, + subWeeksWithOptions: CurriedFn3, + subYears: CurriedFn2, + subYearsWithOptions: CurriedFn3, + toDate: CurriedFn1, + toDateWithOptions: CurriedFn2 +} diff --git a/src/index.js.flow b/src/index.js.flow new file mode 100644 index 0000000000..3d30a05f7c --- /dev/null +++ b/src/index.js.flow @@ -0,0 +1,798 @@ +// @flow +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +type Interval = { + start: Date | string | number, + end: Date | string | number +} + +type Options = { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6, + additionalDigits?: 0 | 1 | 2, + locale?: Locale, + includeSeconds?: boolean, + addSuffix?: boolean, + unit?: 's' | 'm' | 'h' | 'd' | 'M' | 'Y', + roundingMethod?: 'floor' | 'ceil' | 'round' +} + +type Locale = { + formatDistance: Function, + formatLong: Function, + formatRelative: Function, + localize: { + ordinalNumber: Function, + weekday: Function, + weekdays: Function, + month: Function, + months: Function, + timeOfDay: Function, + timesOfDay: Function + }, + match: { + ordinalNumbers: Function, + ordinalNumber: Function, + weekdays: Function, + weekday: Function, + months: Function, + month: Function, + timesOfDay: Function, + timeOfDay: Function + }, + formatters?: Object, + formattingTokensRegExp?: RegExp, + units?: Object, + parsers?: Object, + parsingTokensRegExp?: RegExp, + options?: { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 + } +} + +declare module.exports: { + addDays: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addHours: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addISOYears: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addMilliseconds: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addMinutes: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addMonths: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addQuarters: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addSeconds: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addWeeks: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + addYears: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + areIntervalsOverlapping: ( + intervalLeft: Interval, + intervalRight: Interval, + options?: Options + ) => boolean, + + closestIndexTo: ( + dateToCompare: Date | string | number, + datesArray: (Date | string | number)[], + options?: Options + ) => number, + + closestTo: ( + dateToCompare: Date | string | number, + datesArray: (Date | string | number)[], + options?: Options + ) => Date, + + compareAsc: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + compareDesc: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInCalendarDays: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInCalendarISOWeeks: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInCalendarISOYears: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInCalendarMonths: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInCalendarQuarters: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInCalendarWeeks: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInCalendarYears: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInDays: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInHours: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInISOYears: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInMilliseconds: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInMinutes: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInMonths: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInQuarters: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInSeconds: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInWeeks: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + differenceInYears: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => number, + + eachDayOfInterval: ( + interval: Interval, + options?: Options + ) => Date[], + + endOfDay: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfHour: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfISOWeek: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfISOYear: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfMinute: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfMonth: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfQuarter: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfSecond: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfWeek: ( + date: Date | string | number, + options?: Options + ) => Date, + + endOfYear: ( + date: Date | string | number, + options?: Options + ) => Date, + + format: ( + date: Date | string | number, + format: string, + options?: Options + ) => string, + + formatDistance: ( + date: Date | string | number, + baseDate: Date | string | number, + options?: Options + ) => string, + + formatDistanceStrict: ( + date: Date | string | number, + baseDate: Date | string | number, + options?: Options + ) => string, + + formatRelative: ( + date: Date | string | number, + baseDate: Date | string | number, + options?: Options + ) => string, + + getDate: ( + date: Date | string | number, + options?: Options + ) => number, + + getDay: ( + date: Date | string | number, + options?: Options + ) => number, + + getDayOfYear: ( + date: Date | string | number, + options?: Options + ) => number, + + getDaysInMonth: ( + date: Date | string | number, + options?: Options + ) => number, + + getDaysInYear: ( + date: Date | string | number, + options?: Options + ) => number, + + getHours: ( + date: Date | string | number, + options?: Options + ) => number, + + getISODay: ( + date: Date | string | number, + options?: Options + ) => number, + + getISOWeek: ( + date: Date | string | number, + options?: Options + ) => number, + + getISOWeeksInYear: ( + date: Date | string | number, + options?: Options + ) => number, + + getISOYear: ( + date: Date | string | number, + options?: Options + ) => number, + + getMilliseconds: ( + date: Date | string | number, + options?: Options + ) => number, + + getMinutes: ( + date: Date | string | number, + options?: Options + ) => number, + + getMonth: ( + date: Date | string | number, + options?: Options + ) => number, + + getOverlappingDaysInIntervals: ( + intervalLeft: Interval, + intervalRight: Interval, + options?: Options + ) => number, + + getQuarter: ( + date: Date | string | number, + options?: Options + ) => number, + + getSeconds: ( + date: Date | string | number, + options?: Options + ) => number, + + getTime: ( + date: Date | string | number, + options?: Options + ) => number, + + getYear: ( + date: Date | string | number, + options?: Options + ) => number, + + isAfter: ( + date: Date | string | number, + dateToCompare: Date | string | number, + options?: Options + ) => boolean, + + isBefore: ( + date: Date | string | number, + dateToCompare: Date | string | number, + options?: Options + ) => boolean, + + isEqual: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isFirstDayOfMonth: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isFriday: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isLastDayOfMonth: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isLeapYear: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isMonday: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isSameDay: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameHour: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameISOWeek: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameISOYear: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameMinute: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameMonth: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameQuarter: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameSecond: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameWeek: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSameYear: ( + dateLeft: Date | string | number, + dateRight: Date | string | number, + options?: Options + ) => boolean, + + isSaturday: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isSunday: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isThursday: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isTuesday: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isValid: ( + date: any, + options?: Options + ) => boolean, + + isWednesday: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isWeekend: ( + date: Date | string | number, + options?: Options + ) => boolean, + + isWithinInterval: ( + date: Date | string | number, + interval: Interval, + options?: Options + ) => boolean, + + lastDayOfISOWeek: ( + date: Date | string | number, + options?: Options + ) => Date, + + lastDayOfISOYear: ( + date: Date | string | number, + options?: Options + ) => Date, + + lastDayOfMonth: ( + date: Date | string | number, + options?: Options + ) => Date, + + lastDayOfQuarter: ( + date: Date | string | number, + options?: Options + ) => Date, + + lastDayOfWeek: ( + date: Date | string | number, + options?: Options + ) => Date, + + lastDayOfYear: ( + date: Date | string | number, + options?: Options + ) => Date, + + max: ( + datesArray: (Date | string | number)[], + options?: Options + ) => Date, + + min: ( + datesArray: (Date | string | number)[], + options?: Options + ) => Date, + + parse: ( + dateString: string, + formatString: string, + baseDate: Date | string | number, + options?: Options + ) => Date, + + setDate: ( + date: Date | string | number, + dayOfMonth: number, + options?: Options + ) => Date, + + setDay: ( + date: Date | string | number, + day: number, + options?: Options + ) => Date, + + setDayOfYear: ( + date: Date | string | number, + dayOfYear: number, + options?: Options + ) => Date, + + setHours: ( + date: Date | string | number, + hours: number, + options?: Options + ) => Date, + + setISODay: ( + date: Date | string | number, + day: number, + options?: Options + ) => Date, + + setISOWeek: ( + date: Date | string | number, + isoWeek: number, + options?: Options + ) => Date, + + setISOYear: ( + date: Date | string | number, + isoYear: number, + options?: Options + ) => Date, + + setMilliseconds: ( + date: Date | string | number, + milliseconds: number, + options?: Options + ) => Date, + + setMinutes: ( + date: Date | string | number, + minutes: number, + options?: Options + ) => Date, + + setMonth: ( + date: Date | string | number, + month: number, + options?: Options + ) => Date, + + setQuarter: ( + date: Date | string | number, + quarter: number, + options?: Options + ) => Date, + + setSeconds: ( + date: Date | string | number, + seconds: number, + options?: Options + ) => Date, + + setYear: ( + date: Date | string | number, + year: number, + options?: Options + ) => Date, + + startOfDay: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfHour: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfISOWeek: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfISOYear: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfMinute: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfMonth: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfQuarter: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfSecond: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfWeek: ( + date: Date | string | number, + options?: Options + ) => Date, + + startOfYear: ( + date: Date | string | number, + options?: Options + ) => Date, + + subDays: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subHours: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subISOYears: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subMilliseconds: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subMinutes: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subMonths: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subQuarters: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subSeconds: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subWeeks: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + subYears: ( + date: Date | string | number, + amount: number, + options?: Options + ) => Date, + + toDate: ( + argument: any, + options?: Options + ) => Date +} diff --git a/src/locale/index.js.flow b/src/locale/index.js.flow new file mode 100644 index 0000000000..7e4a8c4fc1 --- /dev/null +++ b/src/locale/index.js.flow @@ -0,0 +1,72 @@ +// @flow +// This file is generated automatically by `scripts/build/typings.js`. Please, don't change it. + +type Locale = { + formatDistance: Function, + formatLong: Function, + formatRelative: Function, + localize: { + ordinalNumber: Function, + weekday: Function, + weekdays: Function, + month: Function, + months: Function, + timeOfDay: Function, + timesOfDay: Function + }, + match: { + ordinalNumbers: Function, + ordinalNumber: Function, + weekdays: Function, + weekday: Function, + months: Function, + month: Function, + timesOfDay: Function, + timeOfDay: Function + }, + formatters?: Object, + formattingTokensRegExp?: RegExp, + units?: Object, + parsers?: Object, + parsingTokensRegExp?: RegExp, + options?: { + weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 + } +} + +declare module.exports: { + ar: Locale, + bg: Locale, + ca: Locale, + cs: Locale, + da: Locale, + de: Locale, + el: Locale, + enUS: Locale, + eo: Locale, + es: Locale, + fi: Locale, + fil: Locale, + fr: Locale, + hr: Locale, + id: Locale, + is: Locale, + it: Locale, + ja: Locale, + ko: Locale, + mk: Locale, + nb: Locale, + nl: Locale, + pl: Locale, + pt: Locale, + ro: Locale, + ru: Locale, + sk: Locale, + sv: Locale, + th: Locale, + tr: Locale, + ua: Locale, + vi: Locale, + zhCN: Locale, + zhTW: Locale +} From fd9ec8237bae310b91da40c5f6c9763bd1e75844 Mon Sep 17 00:00:00 2001 From: Lesha Koss Date: Wed, 13 Sep 2017 22:44:54 +0600 Subject: [PATCH 3/5] Fix code style --- scripts/build/typings.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/scripts/build/typings.js b/scripts/build/typings.js index 89442818c4..0eab8f0cfc 100755 --- a/scripts/build/typings.js +++ b/scripts/build/typings.js @@ -425,11 +425,9 @@ function generateFlowFPFnTyping (fn, aliasDeclarations) { function generateFlowFPFnIndexTyping (fns, aliasDeclarations) { const filename = `./src/fp/index.js.flow` - const fnsDeclarations = fns.map(({title, args, content}) => { - const params = getParams(args, {indent: 1, leftBorder: '(', rightBorder: ')'}) - const returns = getType(content.returns[0].type.names) - return ` ${title}: ${getFPFnType(args, content.returns[0].type.names)}` - }) + const fnsDeclarations = fns.map(({title, args, content}) => + ` ${title}: ${getFPFnType(args, content.returns[0].type.names)}` + ) const typingString = ['// @flow'] .concat(generatedAutomaticallyMessage) From 01757528f71ab6d42be4c6e70a607b92159e7ac9 Mon Sep 17 00:00:00 2001 From: Lesha Koss Date: Fri, 15 Sep 2017 10:14:04 +0600 Subject: [PATCH 4/5] Fix scripts/build/package.sh --- scripts/build/package.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/build/package.sh b/scripts/build/package.sh index ded4d7db7e..39f50ad4c3 100755 --- a/scripts/build/package.sh +++ b/scripts/build/package.sh @@ -38,6 +38,9 @@ do cp -r "./src/$fnDir" "$dir/esm/" done +# Copy global flow typing +cp ./src/index.js.flow "$dir/esm/index.js.flow" + # Copy esm indices cp ./src/esm/index.js "$dir/esm/index.js" cp ./src/esm/fp/index.js "$dir/esm/fp/index.js" From 3bbf0a4fad58fa7a383b9f0eff6d85edd32a3d6f Mon Sep 17 00:00:00 2001 From: Lesha Koss Date: Fri, 15 Sep 2017 10:16:29 +0600 Subject: [PATCH 5/5] Add CHANGELOG.md entry for global flow typings --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aeded1fd21..7cba555ea9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -81,6 +81,9 @@ for the list of changes made since `v2.0.0-alpha.1`. - [Vietnamese locale (vi)](https://github.com/date-fns/date-fns/pull/546) (kudos to [@trongthanh](https://github.com/trongthanh)) +- Flow typings for `index.js`, `fp/index.js`, `locale/index.js`, and their ESM equivalents. + See PR [#558](https://github.com/date-fns/date-fns/pull/558) + ### Changed - **BREAKING**: function submodules now use camelCase naming schema: