My mission with this refactoring was to make it more readable and procedural. Not only it reduces 32 function calls, It's all in one place. All aliases in aliases.js file and all priorities in priorities.js file
1. All the functions which were responsible for creating aliases from following files(comments are file names) have been moved to src/lib/units/aliases.js
// src/lib/units/day-of-month.js
addUnitAlias('date', 'D');
// src/lib/units/day-of-week.js
addUnitAlias('day', 'd');
addUnitAlias('weekday', 'e');
addUnitAlias('isoWeekday', 'E');
// src/lib/units/day-of-year.js
addUnitAlias('dayOfYear', 'DDD');
// src/lib/units/hour.js
addUnitAlias('hour', 'h');
// src/lib/units/millisecond.js
addUnitAlias('millisecond', 'ms');
// src/lib/units/minute.js
addUnitAlias('minute', 'm');
// src/lib/units/month.js
addUnitAlias('month', 'M');
// src/lib/units/quarter.js
addUnitAlias('quarter', 'Q');
// src/lib/units/second.js
addUnitAlias('second', 's');
// src/lib/units/week-year.js
addUnitAlias('weekYear', 'gg');
addUnitAlias('isoWeekYear', 'GG');
// src/lib/units/week.js
addUnitAlias('week', 'w');
addUnitAlias('isoWeek', 'W');
// src/lib/units/year.js
addUnitAlias('year', 'y');
2. Ran all the functions and final result has been saved as "aliases" object in src/lib/units/aliases.js.
3. Commented out all the aliases creation functions in src/lib/units/aliases.js as we have final and known Object as a variable.
4. All the functions which were responsible for creating priorities from following files(comments are file names) have been moved to src/lib/units/priorities.js
// src/lib/units/day-of-month.js
addUnitPriority('date', 9);
// src/lib/units/day-of-week.js
addUnitPriority('day', 11);
addUnitPriority('weekday', 11);
addUnitPriority('isoWeekday', 11);
// src/lib/units/day-of-year.js
addUnitPriority('dayOfYear', 4);
// src/lib/units/hour.js
addUnitPriority('hour', 13);
// src/lib/units/millisecond.js
addUnitPriority('millisecond', 16);
// src/lib/units/minute.js
addUnitPriority('minute', 14);
// src/lib/units/month.js
addUnitPriority('month', 8);
// src/lib/units/quarter.js
addUnitPriority('quarter', 7);
// src/lib/units/second.js
addUnitPriority('second', 15);
// src/lib/units/week-year.js
addUnitPriority('weekYear', 1);
addUnitPriority('isoWeekYear', 1);
// src/lib/units/week.js
addUnitPriority('week', 5);
addUnitPriority('isoWeek', 5);
// src/lib/units/year.js
addUnitPriority('year', 1);
5. Ran all the functions and final result has been saved as "priorities" object in src/lib/units/priorities.js.
6. Commented out all the priorities creation functions in src/lib/units/aliases.js as we have final and known Object as a variable.
import hasOwnProp from '../utils/has-own-prop';
+var aliases =
+{
+ D: 'date',
+ dates: 'date',
+ date: 'date',
+ d: 'day',
+ days: 'day',
+ day: 'day',
+ e: 'weekday',
+ weekdays: 'weekday',
+ weekday: 'weekday',
+ E: 'isoWeekday',
+ isoweekdays: 'isoWeekday',
+ isoweekday: 'isoWeekday',
+ DDD: 'dayOfYear',
+ dayofyears: 'dayOfYear',
+ dayofyear: 'dayOfYear',
+ h: 'hour',
+ hours: 'hour',
+ hour: 'hour',
+ ms: 'millisecond',
+ milliseconds: 'millisecond',
+ millisecond: 'millisecond',
+ m: 'minute',
+ minutes: 'minute',
+ minute: 'minute',
+ M: 'month',
+ months: 'month',
+ month: 'month',
+ Q: 'quarter',
+ quarters: 'quarter',
+ quarter: 'quarter',
+ s: 'second',
+ seconds: 'second',
+ second: 'second',
+ gg: 'weekYear',
+ weekyears: 'weekYear',
+ weekyear: 'weekYear',
+ GG: 'isoWeekYear',
+ isoweekyears: 'isoWeekYear',
+ isoweekyear: 'isoWeekYear',
+ w: 'week',
+ weeks: 'week',
+ week: 'week',
+ W: 'isoWeek',
+ isoweeks: 'isoWeek',
+ isoweek: 'isoWeek',
+ y: 'year',
+ years: 'year',
+ year: 'year'
+ }
+
+/*
+
var aliases = {};
export function addUnitAlias(unit, shorthand) {
aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
}
+//day-of-month.js
+addUnitAlias('date', 'D');
+//day-of-week.js
+addUnitAlias('day', 'd');
+addUnitAlias('weekday', 'e');
+addUnitAlias('isoWeekday', 'E');
+//day-of-year.js
+addUnitAlias('dayOfYear', 'DDD');
+//hour.js
+addUnitAlias('hour', 'h');
+//millisecond.js
+addUnitAlias('millisecond', 'ms');
+//minute.js
+addUnitAlias('minute', 'm');
+//month.js
+addUnitAlias('month', 'M');
+//quarter.js
+addUnitAlias('quarter', 'Q');
+//second.js
+addUnitAlias('second', 's');
+//week-year.js
+addUnitAlias('weekYear', 'gg');
+addUnitAlias('isoWeekYear', 'GG');
+//week.js
+addUnitAlias('week', 'w');
+addUnitAlias('isoWeek', 'W');
+//year.js
+addUnitAlias('year', 'y');
+
+*/
export function normalizeUnits(units) {
return typeof units === 'string'
? aliases[units] || aliases[units.toLowerCase()]
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import { addRegexToken, match1to2, match2 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { DATE } from './constants';
addFormatToken('D', ['DD', 2], 'Do', 'date');
-// ALIASES
-
-addUnitAlias('date', 'D');
-
-// PRIORITY
-addUnitPriority('date', 9);
-
// PARSING
addRegexToken('D', match1to2);
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import {
addRegexToken,
match1to2,
addFormatToken('e', 0, 0, 'weekday');
addFormatToken('E', 0, 0, 'isoWeekday');
-// ALIASES
-
-addUnitAlias('day', 'd');
-addUnitAlias('weekday', 'e');
-addUnitAlias('isoWeekday', 'E');
-
-// PRIORITY
-addUnitPriority('day', 11);
-addUnitPriority('weekday', 11);
-addUnitPriority('isoWeekday', 11);
-
// PARSING
addRegexToken('d', match1to2);
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import { addRegexToken, match3, match1to3 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import toInt from '../utils/to-int';
addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
-// ALIASES
-
-addUnitAlias('dayOfYear', 'DDD');
-
-// PRIORITY
-addUnitPriority('dayOfYear', 4);
// PARSING
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import {
addRegexToken,
match1to2,
meridiem('a', true);
meridiem('A', false);
-// ALIASES
-
-addUnitAlias('hour', 'h');
-
-// PRIORITY
-addUnitPriority('hour', 13);
-
// PARSING
function matchMeridiem(isStrict, locale) {
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import {
addRegexToken,
match1,
return this.millisecond() * 1000000;
});
-// ALIASES
-
-addUnitAlias('millisecond', 'ms');
-
-// PRIORITY
-
-addUnitPriority('millisecond', 16);
// PARSING
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import { addRegexToken, match1to2, match2 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { MINUTE } from './constants';
addFormatToken('m', ['mm', 2], 0, 'minute');
-// ALIASES
-
-addUnitAlias('minute', 'm');
-
-// PRIORITY
-
-addUnitPriority('minute', 14);
// PARSING
import { get } from '../moment/get-set';
import hasOwnProp from '../utils/has-own-prop';
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import {
addRegexToken,
match1to2,
return this.localeData().months(this, format);
});
-// ALIASES
-
-addUnitAlias('month', 'M');
-
-// PRIORITY
-
-addUnitPriority('month', 8);
// PARSING
import hasOwnProp from '../utils/has-own-prop';
+var priorities = {
+ date: 9,
+ day: 11,
+ weekday: 11,
+ isoWeekday: 11,
+ dayOfYear: 4,
+ hour: 13,
+ millisecond: 16,
+ minute: 14,
+ month: 8,
+ quarter: 7,
+ second: 15,
+ weekYear: 1,
+ isoWeekYear: 1,
+ week: 5,
+ isoWeek: 5,
+ year: 1
+}
+
+/*
var priorities = {};
export function addUnitPriority(unit, priority) {
priorities[unit] = priority;
}
+
+//day-of-month.js
+addUnitPriority('date', 9);
+//day-of-week.js
+addUnitPriority('day', 11);
+addUnitPriority('weekday', 11);
+addUnitPriority('isoWeekday', 11);
+//day-of-year.js
+addUnitPriority('dayOfYear', 4);
+//hour.js
+addUnitPriority('hour', 13);
+//millisecond.js
+addUnitPriority('millisecond', 16);
+//minute.js
+addUnitPriority('minute', 14);
+//month.js
+addUnitPriority('month', 8);
+//quarter.js
+addUnitPriority('quarter', 7);
+//second.js
+addUnitPriority('second', 15);
+//week-year.js
+addUnitPriority('weekYear', 1);
+addUnitPriority('isoWeekYear', 1);
+//week.js
+addUnitPriority('week', 5);
+addUnitPriority('isoWeek', 5);
+//year.js
+addUnitPriority('year', 1);
+
+
+*/
+
export function getPrioritizedUnits(unitsObj) {
var units = [],
u;
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import { addRegexToken, match1 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { MONTH } from './constants';
addFormatToken('Q', 0, 'Qo', 'quarter');
-// ALIASES
-
-addUnitAlias('quarter', 'Q');
-
-// PRIORITY
-
-addUnitPriority('quarter', 7);
-
// PARSING
addRegexToken('Q', match1);
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import { addRegexToken, match1to2, match2 } from '../parse/regex';
import { addParseToken } from '../parse/token';
import { SECOND } from './constants';
addFormatToken('s', ['ss', 2], 0, 'second');
-// ALIASES
-
-addUnitAlias('second', 's');
-
-// PRIORITY
-
-addUnitPriority('second', 15);
// PARSING
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import {
addRegexToken,
match1to2,
// ALIASES
-addUnitAlias('weekYear', 'gg');
-addUnitAlias('isoWeekYear', 'GG');
-
-// PRIORITY
-
-addUnitPriority('weekYear', 1);
-addUnitPriority('isoWeekYear', 1);
// PARSING
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import { addRegexToken, match1to2, match2 } from '../parse/regex';
import { addWeekParseToken } from '../parse/token';
import toInt from '../utils/to-int';
addFormatToken('w', ['ww', 2], 'wo', 'week');
addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
-// ALIASES
-
-addUnitAlias('week', 'w');
-addUnitAlias('isoWeek', 'W');
-
-// PRIORITIES
-
-addUnitPriority('week', 5);
-addUnitPriority('isoWeek', 5);
// PARSING
import { makeGetSet } from '../moment/get-set';
import { addFormatToken } from '../format/format';
-import { addUnitAlias } from './aliases';
-import { addUnitPriority } from './priorities';
import {
addRegexToken,
match1to2,
addFormatToken(0, ['YYYYY', 5], 0, 'year');
addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
-// ALIASES
-
-addUnitAlias('year', 'y');
-
-// PRIORITIES
-
-addUnitPriority('year', 1);
-
// PARSING
addRegexToken('Y', matchSigned);