blazer 3.4.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +23 -27
  4. data/app/assets/javascripts/blazer/Sortable.js +826 -1162
  5. data/app/assets/javascripts/blazer/ace/ace.js +15775 -13360
  6. data/app/assets/javascripts/blazer/ace/ext-language_tools.js +1411 -668
  7. data/app/assets/javascripts/blazer/ace/mode-sql.js +12 -6
  8. data/app/assets/javascripts/blazer/ace/theme-twilight.js +3 -3
  9. data/app/assets/javascripts/blazer/application.js +94 -52
  10. data/app/assets/javascripts/blazer/chart.umd.js +6 -6
  11. data/app/assets/javascripts/blazer/daterangepicker.js +193 -199
  12. data/app/assets/javascripts/blazer/highlight.min.js +235 -373
  13. data/app/assets/javascripts/blazer/moment-timezone-with-data.js +116 -82
  14. data/app/assets/javascripts/blazer/moment.js +368 -365
  15. data/app/assets/javascripts/blazer/queries.js +68 -58
  16. data/app/assets/javascripts/blazer/routes.js +11 -11
  17. data/app/assets/javascripts/blazer/tablesort.js +42 -0
  18. data/app/assets/javascripts/blazer/tom-select.base.js +4175 -0
  19. data/app/assets/stylesheets/blazer/application.css +114 -5
  20. data/app/assets/stylesheets/blazer/tom-select.css +502 -0
  21. data/app/controllers/blazer/base_controller.rb +1 -1
  22. data/app/controllers/blazer/checks_controller.rb +5 -2
  23. data/app/controllers/blazer/queries_controller.rb +3 -1
  24. data/app/helpers/blazer/base_helper.rb +1 -1
  25. data/app/models/blazer/check.rb +35 -57
  26. data/app/views/blazer/_nav.html.erb +1 -1
  27. data/app/views/blazer/_variables.html.erb +57 -42
  28. data/app/views/blazer/checks/_form.html.erb +20 -16
  29. data/app/views/blazer/checks/index.html.erb +17 -20
  30. data/app/views/blazer/dashboards/_form.html.erb +63 -48
  31. data/app/views/blazer/dashboards/show.html.erb +23 -16
  32. data/app/views/blazer/queries/_caching.html.erb +1 -1
  33. data/app/views/blazer/queries/_chart.html.erb +8 -0
  34. data/app/views/blazer/queries/_form.html.erb +153 -180
  35. data/app/views/blazer/queries/_map.html.erb +8 -0
  36. data/app/views/blazer/queries/docs.html.erb +6 -6
  37. data/app/views/blazer/queries/edit.html.erb +1 -0
  38. data/app/views/blazer/queries/home.html.erb +101 -102
  39. data/app/views/blazer/queries/new.html.erb +1 -0
  40. data/app/views/blazer/queries/run.html.erb +23 -34
  41. data/app/views/blazer/queries/schema.html.erb +20 -20
  42. data/app/views/blazer/queries/show.html.erb +19 -12
  43. data/app/views/blazer/uploads/index.html.erb +10 -10
  44. data/app/views/layouts/blazer/application.html.erb +3 -3
  45. data/lib/blazer/adapters/athena_adapter.rb +12 -6
  46. data/lib/blazer/adapters/clickhouse_adapter.rb +136 -0
  47. data/lib/blazer/adapters/druid_adapter.rb +0 -2
  48. data/lib/blazer/adapters/snowflake2_adapter.rb +198 -0
  49. data/lib/blazer/adapters/soda_adapter.rb +0 -2
  50. data/lib/blazer/adapters/sql_adapter.rb +4 -0
  51. data/lib/blazer/adapters.rb +2 -0
  52. data/lib/blazer/check_types.rb +20 -0
  53. data/lib/blazer/email_notifier.rb +49 -0
  54. data/lib/blazer/result.rb +15 -0
  55. data/lib/blazer/slack_notifier.rb +39 -7
  56. data/lib/blazer/version.rb +1 -1
  57. data/lib/blazer.rb +32 -26
  58. data/lib/generators/blazer/templates/config.yml.tt +0 -2
  59. data/licenses/LICENSE-chart.js.txt +1 -1
  60. metadata +12 -31
  61. data/app/assets/javascripts/blazer/bootstrap.js +0 -2580
  62. data/app/assets/javascripts/blazer/jquery.js +0 -10872
  63. data/app/assets/javascripts/blazer/jquery.stickytableheaders.js +0 -325
  64. data/app/assets/javascripts/blazer/rails-ujs.js +0 -746
  65. data/app/assets/javascripts/blazer/selectize.js +0 -3891
  66. data/app/assets/javascripts/blazer/stupidtable-custom-settings.js +0 -13
  67. data/app/assets/javascripts/blazer/stupidtable.js +0 -281
  68. data/app/assets/javascripts/blazer/vue.global.prod.js +0 -1
  69. data/app/assets/stylesheets/blazer/selectize.css +0 -403
  70. data/licenses/LICENSE-jquery.txt +0 -20
  71. data/licenses/LICENSE-rails-ujs.txt +0 -20
  72. data/licenses/LICENSE-stickytableheaders.txt +0 -20
  73. data/licenses/LICENSE-stupidtable.txt +0 -19
  74. data/licenses/LICENSE-vue.txt +0 -21
  75. /data/licenses/{LICENSE-selectize.txt → LICENSE-tom-select.txt} +0 -0
@@ -1,5 +1,5 @@
1
1
  //! moment.js
2
- //! version : 2.29.4
2
+ //! version : 2.30.1
3
3
  //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
4
4
  //! license : MIT
5
5
  //! momentjs.com
@@ -155,24 +155,25 @@
155
155
  }
156
156
 
157
157
  function isValid(m) {
158
- if (m._isValid == null) {
159
- var flags = getParsingFlags(m),
160
- parsedParts = some.call(flags.parsedDateParts, function (i) {
161
- return i != null;
162
- }),
163
- isNowValid =
164
- !isNaN(m._d.getTime()) &&
165
- flags.overflow < 0 &&
166
- !flags.empty &&
167
- !flags.invalidEra &&
168
- !flags.invalidMonth &&
169
- !flags.invalidWeekday &&
170
- !flags.weekdayMismatch &&
171
- !flags.nullInput &&
172
- !flags.invalidFormat &&
173
- !flags.userInvalidated &&
174
- (!flags.meridiem || (flags.meridiem && parsedParts));
175
-
158
+ var flags = null,
159
+ parsedParts = false,
160
+ isNowValid = m._d && !isNaN(m._d.getTime());
161
+ if (isNowValid) {
162
+ flags = getParsingFlags(m);
163
+ parsedParts = some.call(flags.parsedDateParts, function (i) {
164
+ return i != null;
165
+ });
166
+ isNowValid =
167
+ flags.overflow < 0 &&
168
+ !flags.empty &&
169
+ !flags.invalidEra &&
170
+ !flags.invalidMonth &&
171
+ !flags.invalidWeekday &&
172
+ !flags.weekdayMismatch &&
173
+ !flags.nullInput &&
174
+ !flags.invalidFormat &&
175
+ !flags.userInvalidated &&
176
+ (!flags.meridiem || (flags.meridiem && parsedParts));
176
177
  if (m._strict) {
177
178
  isNowValid =
178
179
  isNowValid &&
@@ -180,12 +181,11 @@
180
181
  flags.unusedTokens.length === 0 &&
181
182
  flags.bigHour === undefined;
182
183
  }
183
-
184
- if (Object.isFrozen == null || !Object.isFrozen(m)) {
185
- m._isValid = isNowValid;
186
- } else {
187
- return isNowValid;
188
- }
184
+ }
185
+ if (Object.isFrozen == null || !Object.isFrozen(m)) {
186
+ m._isValid = isNowValid;
187
+ } else {
188
+ return isNowValid;
189
189
  }
190
190
  return m._isValid;
191
191
  }
@@ -630,12 +630,56 @@
630
630
  return isFunction(format) ? format(output) : format.replace(/%s/i, output);
631
631
  }
632
632
 
633
- var aliases = {};
634
-
635
- function addUnitAlias(unit, shorthand) {
636
- var lowerCase = unit.toLowerCase();
637
- aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
638
- }
633
+ var aliases = {
634
+ D: 'date',
635
+ dates: 'date',
636
+ date: 'date',
637
+ d: 'day',
638
+ days: 'day',
639
+ day: 'day',
640
+ e: 'weekday',
641
+ weekdays: 'weekday',
642
+ weekday: 'weekday',
643
+ E: 'isoWeekday',
644
+ isoweekdays: 'isoWeekday',
645
+ isoweekday: 'isoWeekday',
646
+ DDD: 'dayOfYear',
647
+ dayofyears: 'dayOfYear',
648
+ dayofyear: 'dayOfYear',
649
+ h: 'hour',
650
+ hours: 'hour',
651
+ hour: 'hour',
652
+ ms: 'millisecond',
653
+ milliseconds: 'millisecond',
654
+ millisecond: 'millisecond',
655
+ m: 'minute',
656
+ minutes: 'minute',
657
+ minute: 'minute',
658
+ M: 'month',
659
+ months: 'month',
660
+ month: 'month',
661
+ Q: 'quarter',
662
+ quarters: 'quarter',
663
+ quarter: 'quarter',
664
+ s: 'second',
665
+ seconds: 'second',
666
+ second: 'second',
667
+ gg: 'weekYear',
668
+ weekyears: 'weekYear',
669
+ weekyear: 'weekYear',
670
+ GG: 'isoWeekYear',
671
+ isoweekyears: 'isoWeekYear',
672
+ isoweekyear: 'isoWeekYear',
673
+ w: 'week',
674
+ weeks: 'week',
675
+ week: 'week',
676
+ W: 'isoWeek',
677
+ isoweeks: 'isoWeek',
678
+ isoweek: 'isoWeek',
679
+ y: 'year',
680
+ years: 'year',
681
+ year: 'year',
682
+ };
639
683
 
640
684
  function normalizeUnits(units) {
641
685
  return typeof units === 'string'
@@ -660,11 +704,24 @@
660
704
  return normalizedInput;
661
705
  }
662
706
 
663
- var priorities = {};
664
-
665
- function addUnitPriority(unit, priority) {
666
- priorities[unit] = priority;
667
- }
707
+ var priorities = {
708
+ date: 9,
709
+ day: 11,
710
+ weekday: 11,
711
+ isoWeekday: 11,
712
+ dayOfYear: 4,
713
+ hour: 13,
714
+ millisecond: 16,
715
+ minute: 14,
716
+ month: 8,
717
+ quarter: 7,
718
+ second: 15,
719
+ weekYear: 1,
720
+ isoWeekYear: 1,
721
+ week: 5,
722
+ isoWeek: 5,
723
+ year: 1,
724
+ };
668
725
 
669
726
  function getPrioritizedUnits(unitsObj) {
670
727
  var units = [],
@@ -680,96 +737,6 @@
680
737
  return units;
681
738
  }
682
739
 
683
- function isLeapYear(year) {
684
- return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
685
- }
686
-
687
- function absFloor(number) {
688
- if (number < 0) {
689
- // -0 -> 0
690
- return Math.ceil(number) || 0;
691
- } else {
692
- return Math.floor(number);
693
- }
694
- }
695
-
696
- function toInt(argumentForCoercion) {
697
- var coercedNumber = +argumentForCoercion,
698
- value = 0;
699
-
700
- if (coercedNumber !== 0 && isFinite(coercedNumber)) {
701
- value = absFloor(coercedNumber);
702
- }
703
-
704
- return value;
705
- }
706
-
707
- function makeGetSet(unit, keepTime) {
708
- return function (value) {
709
- if (value != null) {
710
- set$1(this, unit, value);
711
- hooks.updateOffset(this, keepTime);
712
- return this;
713
- } else {
714
- return get(this, unit);
715
- }
716
- };
717
- }
718
-
719
- function get(mom, unit) {
720
- return mom.isValid()
721
- ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
722
- : NaN;
723
- }
724
-
725
- function set$1(mom, unit, value) {
726
- if (mom.isValid() && !isNaN(value)) {
727
- if (
728
- unit === 'FullYear' &&
729
- isLeapYear(mom.year()) &&
730
- mom.month() === 1 &&
731
- mom.date() === 29
732
- ) {
733
- value = toInt(value);
734
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
735
- value,
736
- mom.month(),
737
- daysInMonth(value, mom.month())
738
- );
739
- } else {
740
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
741
- }
742
- }
743
- }
744
-
745
- // MOMENTS
746
-
747
- function stringGet(units) {
748
- units = normalizeUnits(units);
749
- if (isFunction(this[units])) {
750
- return this[units]();
751
- }
752
- return this;
753
- }
754
-
755
- function stringSet(units, value) {
756
- if (typeof units === 'object') {
757
- units = normalizeObjectUnits(units);
758
- var prioritized = getPrioritizedUnits(units),
759
- i,
760
- prioritizedLen = prioritized.length;
761
- for (i = 0; i < prioritizedLen; i++) {
762
- this[prioritized[i].unit](units[prioritized[i].unit]);
763
- }
764
- } else {
765
- units = normalizeUnits(units);
766
- if (isFunction(this[units])) {
767
- return this[units](value);
768
- }
769
- }
770
- return this;
771
- }
772
-
773
740
  var match1 = /\d/, // 0 - 9
774
741
  match2 = /\d\d/, // 00 - 99
775
742
  match3 = /\d{3}/, // 000 - 999
@@ -790,6 +757,8 @@
790
757
  // includes scottish gaelic two word and hyphenated months
791
758
  matchWord =
792
759
  /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
760
+ match1to2NoLeadingZero = /^[1-9]\d?/, // 1-99
761
+ match1to2HasZero = /^([1-9]\d|\d)/, // 0-99
793
762
  regexes;
794
763
 
795
764
  regexes = {};
@@ -828,6 +797,26 @@
828
797
  return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
829
798
  }
830
799
 
800
+ function absFloor(number) {
801
+ if (number < 0) {
802
+ // -0 -> 0
803
+ return Math.ceil(number) || 0;
804
+ } else {
805
+ return Math.floor(number);
806
+ }
807
+ }
808
+
809
+ function toInt(argumentForCoercion) {
810
+ var coercedNumber = +argumentForCoercion,
811
+ value = 0;
812
+
813
+ if (coercedNumber !== 0 && isFinite(coercedNumber)) {
814
+ value = absFloor(coercedNumber);
815
+ }
816
+
817
+ return value;
818
+ }
819
+
831
820
  var tokens = {};
832
821
 
833
822
  function addParseToken(token, callback) {
@@ -861,6 +850,10 @@
861
850
  }
862
851
  }
863
852
 
853
+ function isLeapYear(year) {
854
+ return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
855
+ }
856
+
864
857
  var YEAR = 0,
865
858
  MONTH = 1,
866
859
  DATE = 2,
@@ -871,6 +864,173 @@
871
864
  WEEK = 7,
872
865
  WEEKDAY = 8;
873
866
 
867
+ // FORMATTING
868
+
869
+ addFormatToken('Y', 0, 0, function () {
870
+ var y = this.year();
871
+ return y <= 9999 ? zeroFill(y, 4) : '+' + y;
872
+ });
873
+
874
+ addFormatToken(0, ['YY', 2], 0, function () {
875
+ return this.year() % 100;
876
+ });
877
+
878
+ addFormatToken(0, ['YYYY', 4], 0, 'year');
879
+ addFormatToken(0, ['YYYYY', 5], 0, 'year');
880
+ addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
881
+
882
+ // PARSING
883
+
884
+ addRegexToken('Y', matchSigned);
885
+ addRegexToken('YY', match1to2, match2);
886
+ addRegexToken('YYYY', match1to4, match4);
887
+ addRegexToken('YYYYY', match1to6, match6);
888
+ addRegexToken('YYYYYY', match1to6, match6);
889
+
890
+ addParseToken(['YYYYY', 'YYYYYY'], YEAR);
891
+ addParseToken('YYYY', function (input, array) {
892
+ array[YEAR] =
893
+ input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
894
+ });
895
+ addParseToken('YY', function (input, array) {
896
+ array[YEAR] = hooks.parseTwoDigitYear(input);
897
+ });
898
+ addParseToken('Y', function (input, array) {
899
+ array[YEAR] = parseInt(input, 10);
900
+ });
901
+
902
+ // HELPERS
903
+
904
+ function daysInYear(year) {
905
+ return isLeapYear(year) ? 366 : 365;
906
+ }
907
+
908
+ // HOOKS
909
+
910
+ hooks.parseTwoDigitYear = function (input) {
911
+ return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
912
+ };
913
+
914
+ // MOMENTS
915
+
916
+ var getSetYear = makeGetSet('FullYear', true);
917
+
918
+ function getIsLeapYear() {
919
+ return isLeapYear(this.year());
920
+ }
921
+
922
+ function makeGetSet(unit, keepTime) {
923
+ return function (value) {
924
+ if (value != null) {
925
+ set$1(this, unit, value);
926
+ hooks.updateOffset(this, keepTime);
927
+ return this;
928
+ } else {
929
+ return get(this, unit);
930
+ }
931
+ };
932
+ }
933
+
934
+ function get(mom, unit) {
935
+ if (!mom.isValid()) {
936
+ return NaN;
937
+ }
938
+
939
+ var d = mom._d,
940
+ isUTC = mom._isUTC;
941
+
942
+ switch (unit) {
943
+ case 'Milliseconds':
944
+ return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();
945
+ case 'Seconds':
946
+ return isUTC ? d.getUTCSeconds() : d.getSeconds();
947
+ case 'Minutes':
948
+ return isUTC ? d.getUTCMinutes() : d.getMinutes();
949
+ case 'Hours':
950
+ return isUTC ? d.getUTCHours() : d.getHours();
951
+ case 'Date':
952
+ return isUTC ? d.getUTCDate() : d.getDate();
953
+ case 'Day':
954
+ return isUTC ? d.getUTCDay() : d.getDay();
955
+ case 'Month':
956
+ return isUTC ? d.getUTCMonth() : d.getMonth();
957
+ case 'FullYear':
958
+ return isUTC ? d.getUTCFullYear() : d.getFullYear();
959
+ default:
960
+ return NaN; // Just in case
961
+ }
962
+ }
963
+
964
+ function set$1(mom, unit, value) {
965
+ var d, isUTC, year, month, date;
966
+
967
+ if (!mom.isValid() || isNaN(value)) {
968
+ return;
969
+ }
970
+
971
+ d = mom._d;
972
+ isUTC = mom._isUTC;
973
+
974
+ switch (unit) {
975
+ case 'Milliseconds':
976
+ return void (isUTC
977
+ ? d.setUTCMilliseconds(value)
978
+ : d.setMilliseconds(value));
979
+ case 'Seconds':
980
+ return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));
981
+ case 'Minutes':
982
+ return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));
983
+ case 'Hours':
984
+ return void (isUTC ? d.setUTCHours(value) : d.setHours(value));
985
+ case 'Date':
986
+ return void (isUTC ? d.setUTCDate(value) : d.setDate(value));
987
+ // case 'Day': // Not real
988
+ // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));
989
+ // case 'Month': // Not used because we need to pass two variables
990
+ // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));
991
+ case 'FullYear':
992
+ break; // See below ...
993
+ default:
994
+ return; // Just in case
995
+ }
996
+
997
+ year = value;
998
+ month = mom.month();
999
+ date = mom.date();
1000
+ date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;
1001
+ void (isUTC
1002
+ ? d.setUTCFullYear(year, month, date)
1003
+ : d.setFullYear(year, month, date));
1004
+ }
1005
+
1006
+ // MOMENTS
1007
+
1008
+ function stringGet(units) {
1009
+ units = normalizeUnits(units);
1010
+ if (isFunction(this[units])) {
1011
+ return this[units]();
1012
+ }
1013
+ return this;
1014
+ }
1015
+
1016
+ function stringSet(units, value) {
1017
+ if (typeof units === 'object') {
1018
+ units = normalizeObjectUnits(units);
1019
+ var prioritized = getPrioritizedUnits(units),
1020
+ i,
1021
+ prioritizedLen = prioritized.length;
1022
+ for (i = 0; i < prioritizedLen; i++) {
1023
+ this[prioritized[i].unit](units[prioritized[i].unit]);
1024
+ }
1025
+ } else {
1026
+ units = normalizeUnits(units);
1027
+ if (isFunction(this[units])) {
1028
+ return this[units](value);
1029
+ }
1030
+ }
1031
+ return this;
1032
+ }
1033
+
874
1034
  function mod(n, x) {
875
1035
  return ((n % x) + x) % x;
876
1036
  }
@@ -919,17 +1079,9 @@
919
1079
  return this.localeData().months(this, format);
920
1080
  });
921
1081
 
922
- // ALIASES
923
-
924
- addUnitAlias('month', 'M');
925
-
926
- // PRIORITY
927
-
928
- addUnitPriority('month', 8);
929
-
930
1082
  // PARSING
931
1083
 
932
- addRegexToken('M', match1to2);
1084
+ addRegexToken('M', match1to2, match1to2NoLeadingZero);
933
1085
  addRegexToken('MM', match1to2, match2);
934
1086
  addRegexToken('MMM', function (isStrict, locale) {
935
1087
  return locale.monthsShortRegex(isStrict);
@@ -1095,8 +1247,6 @@
1095
1247
  // MOMENTS
1096
1248
 
1097
1249
  function setMonth(mom, value) {
1098
- var dayOfMonth;
1099
-
1100
1250
  if (!mom.isValid()) {
1101
1251
  // No op
1102
1252
  return mom;
@@ -1114,8 +1264,13 @@
1114
1264
  }
1115
1265
  }
1116
1266
 
1117
- dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
1118
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
1267
+ var month = value,
1268
+ date = mom.date();
1269
+
1270
+ date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));
1271
+ void (mom._isUTC
1272
+ ? mom._d.setUTCMonth(month, date)
1273
+ : mom._d.setMonth(month, date));
1119
1274
  return mom;
1120
1275
  }
1121
1276
 
@@ -1182,27 +1337,24 @@
1182
1337
  longPieces = [],
1183
1338
  mixedPieces = [],
1184
1339
  i,
1185
- mom;
1340
+ mom,
1341
+ shortP,
1342
+ longP;
1186
1343
  for (i = 0; i < 12; i++) {
1187
1344
  // make the regex if we don't have it already
1188
1345
  mom = createUTC([2000, i]);
1189
- shortPieces.push(this.monthsShort(mom, ''));
1190
- longPieces.push(this.months(mom, ''));
1191
- mixedPieces.push(this.months(mom, ''));
1192
- mixedPieces.push(this.monthsShort(mom, ''));
1346
+ shortP = regexEscape(this.monthsShort(mom, ''));
1347
+ longP = regexEscape(this.months(mom, ''));
1348
+ shortPieces.push(shortP);
1349
+ longPieces.push(longP);
1350
+ mixedPieces.push(longP);
1351
+ mixedPieces.push(shortP);
1193
1352
  }
1194
1353
  // Sorting makes sure if one month (or abbr) is a prefix of another it
1195
1354
  // will match the longer piece.
1196
1355
  shortPieces.sort(cmpLenRev);
1197
1356
  longPieces.sort(cmpLenRev);
1198
1357
  mixedPieces.sort(cmpLenRev);
1199
- for (i = 0; i < 12; i++) {
1200
- shortPieces[i] = regexEscape(shortPieces[i]);
1201
- longPieces[i] = regexEscape(longPieces[i]);
1202
- }
1203
- for (i = 0; i < 24; i++) {
1204
- mixedPieces[i] = regexEscape(mixedPieces[i]);
1205
- }
1206
1358
 
1207
1359
  this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
1208
1360
  this._monthsShortRegex = this._monthsRegex;
@@ -1216,69 +1368,6 @@
1216
1368
  );
1217
1369
  }
1218
1370
 
1219
- // FORMATTING
1220
-
1221
- addFormatToken('Y', 0, 0, function () {
1222
- var y = this.year();
1223
- return y <= 9999 ? zeroFill(y, 4) : '+' + y;
1224
- });
1225
-
1226
- addFormatToken(0, ['YY', 2], 0, function () {
1227
- return this.year() % 100;
1228
- });
1229
-
1230
- addFormatToken(0, ['YYYY', 4], 0, 'year');
1231
- addFormatToken(0, ['YYYYY', 5], 0, 'year');
1232
- addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
1233
-
1234
- // ALIASES
1235
-
1236
- addUnitAlias('year', 'y');
1237
-
1238
- // PRIORITIES
1239
-
1240
- addUnitPriority('year', 1);
1241
-
1242
- // PARSING
1243
-
1244
- addRegexToken('Y', matchSigned);
1245
- addRegexToken('YY', match1to2, match2);
1246
- addRegexToken('YYYY', match1to4, match4);
1247
- addRegexToken('YYYYY', match1to6, match6);
1248
- addRegexToken('YYYYYY', match1to6, match6);
1249
-
1250
- addParseToken(['YYYYY', 'YYYYYY'], YEAR);
1251
- addParseToken('YYYY', function (input, array) {
1252
- array[YEAR] =
1253
- input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
1254
- });
1255
- addParseToken('YY', function (input, array) {
1256
- array[YEAR] = hooks.parseTwoDigitYear(input);
1257
- });
1258
- addParseToken('Y', function (input, array) {
1259
- array[YEAR] = parseInt(input, 10);
1260
- });
1261
-
1262
- // HELPERS
1263
-
1264
- function daysInYear(year) {
1265
- return isLeapYear(year) ? 366 : 365;
1266
- }
1267
-
1268
- // HOOKS
1269
-
1270
- hooks.parseTwoDigitYear = function (input) {
1271
- return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
1272
- };
1273
-
1274
- // MOMENTS
1275
-
1276
- var getSetYear = makeGetSet('FullYear', true);
1277
-
1278
- function getIsLeapYear() {
1279
- return isLeapYear(this.year());
1280
- }
1281
-
1282
1371
  function createDate(y, m, d, h, M, s, ms) {
1283
1372
  // can't just apply() to create a date:
1284
1373
  // https://stackoverflow.com/q/181348
@@ -1384,21 +1473,11 @@
1384
1473
  addFormatToken('w', ['ww', 2], 'wo', 'week');
1385
1474
  addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
1386
1475
 
1387
- // ALIASES
1388
-
1389
- addUnitAlias('week', 'w');
1390
- addUnitAlias('isoWeek', 'W');
1391
-
1392
- // PRIORITIES
1393
-
1394
- addUnitPriority('week', 5);
1395
- addUnitPriority('isoWeek', 5);
1396
-
1397
1476
  // PARSING
1398
1477
 
1399
- addRegexToken('w', match1to2);
1478
+ addRegexToken('w', match1to2, match1to2NoLeadingZero);
1400
1479
  addRegexToken('ww', match1to2, match2);
1401
- addRegexToken('W', match1to2);
1480
+ addRegexToken('W', match1to2, match1to2NoLeadingZero);
1402
1481
  addRegexToken('WW', match1to2, match2);
1403
1482
 
1404
1483
  addWeekParseToken(
@@ -1460,17 +1539,6 @@
1460
1539
  addFormatToken('e', 0, 0, 'weekday');
1461
1540
  addFormatToken('E', 0, 0, 'isoWeekday');
1462
1541
 
1463
- // ALIASES
1464
-
1465
- addUnitAlias('day', 'd');
1466
- addUnitAlias('weekday', 'e');
1467
- addUnitAlias('isoWeekday', 'E');
1468
-
1469
- // PRIORITY
1470
- addUnitPriority('day', 11);
1471
- addUnitPriority('weekday', 11);
1472
- addUnitPriority('isoWeekday', 11);
1473
-
1474
1542
  // PARSING
1475
1543
 
1476
1544
  addRegexToken('d', match1to2);
@@ -1550,24 +1618,24 @@
1550
1618
  return m === true
1551
1619
  ? shiftWeekdays(weekdays, this._week.dow)
1552
1620
  : m
1553
- ? weekdays[m.day()]
1554
- : weekdays;
1621
+ ? weekdays[m.day()]
1622
+ : weekdays;
1555
1623
  }
1556
1624
 
1557
1625
  function localeWeekdaysShort(m) {
1558
1626
  return m === true
1559
1627
  ? shiftWeekdays(this._weekdaysShort, this._week.dow)
1560
1628
  : m
1561
- ? this._weekdaysShort[m.day()]
1562
- : this._weekdaysShort;
1629
+ ? this._weekdaysShort[m.day()]
1630
+ : this._weekdaysShort;
1563
1631
  }
1564
1632
 
1565
1633
  function localeWeekdaysMin(m) {
1566
1634
  return m === true
1567
1635
  ? shiftWeekdays(this._weekdaysMin, this._week.dow)
1568
1636
  : m
1569
- ? this._weekdaysMin[m.day()]
1570
- : this._weekdaysMin;
1637
+ ? this._weekdaysMin[m.day()]
1638
+ : this._weekdaysMin;
1571
1639
  }
1572
1640
 
1573
1641
  function handleStrictParse$1(weekdayName, format, strict) {
@@ -1716,7 +1784,8 @@
1716
1784
  if (!this.isValid()) {
1717
1785
  return input != null ? this : NaN;
1718
1786
  }
1719
- var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
1787
+
1788
+ var day = get(this, 'Day');
1720
1789
  if (input != null) {
1721
1790
  input = parseWeekday(input, this.localeData());
1722
1791
  return this.add(input - day, 'd');
@@ -1915,13 +1984,6 @@
1915
1984
  meridiem('a', true);
1916
1985
  meridiem('A', false);
1917
1986
 
1918
- // ALIASES
1919
-
1920
- addUnitAlias('hour', 'h');
1921
-
1922
- // PRIORITY
1923
- addUnitPriority('hour', 13);
1924
-
1925
1987
  // PARSING
1926
1988
 
1927
1989
  function matchMeridiem(isStrict, locale) {
@@ -1930,9 +1992,9 @@
1930
1992
 
1931
1993
  addRegexToken('a', matchMeridiem);
1932
1994
  addRegexToken('A', matchMeridiem);
1933
- addRegexToken('H', match1to2);
1934
- addRegexToken('h', match1to2);
1935
- addRegexToken('k', match1to2);
1995
+ addRegexToken('H', match1to2, match1to2HasZero);
1996
+ addRegexToken('h', match1to2, match1to2NoLeadingZero);
1997
+ addRegexToken('k', match1to2, match1to2NoLeadingZero);
1936
1998
  addRegexToken('HH', match1to2, match2);
1937
1999
  addRegexToken('hh', match1to2, match2);
1938
2000
  addRegexToken('kk', match1to2, match2);
@@ -2082,7 +2144,8 @@
2082
2144
 
2083
2145
  function isLocaleNameSane(name) {
2084
2146
  // Prevent names that look like filesystem paths, i.e contain '/' or '\'
2085
- return name.match('^[^/\\\\]*$') != null;
2147
+ // Ensure name is available and function returns boolean
2148
+ return !!(name && name.match('^[^/\\\\]*$'));
2086
2149
  }
2087
2150
 
2088
2151
  function loadLocale(name) {
@@ -2274,21 +2337,21 @@
2274
2337
  a[MONTH] < 0 || a[MONTH] > 11
2275
2338
  ? MONTH
2276
2339
  : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
2277
- ? DATE
2278
- : a[HOUR] < 0 ||
2279
- a[HOUR] > 24 ||
2280
- (a[HOUR] === 24 &&
2281
- (a[MINUTE] !== 0 ||
2282
- a[SECOND] !== 0 ||
2283
- a[MILLISECOND] !== 0))
2284
- ? HOUR
2285
- : a[MINUTE] < 0 || a[MINUTE] > 59
2286
- ? MINUTE
2287
- : a[SECOND] < 0 || a[SECOND] > 59
2288
- ? SECOND
2289
- : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
2290
- ? MILLISECOND
2291
- : -1;
2340
+ ? DATE
2341
+ : a[HOUR] < 0 ||
2342
+ a[HOUR] > 24 ||
2343
+ (a[HOUR] === 24 &&
2344
+ (a[MINUTE] !== 0 ||
2345
+ a[SECOND] !== 0 ||
2346
+ a[MILLISECOND] !== 0))
2347
+ ? HOUR
2348
+ : a[MINUTE] < 0 || a[MINUTE] > 59
2349
+ ? MINUTE
2350
+ : a[SECOND] < 0 || a[SECOND] > 59
2351
+ ? SECOND
2352
+ : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
2353
+ ? MILLISECOND
2354
+ : -1;
2292
2355
 
2293
2356
  if (
2294
2357
  getParsingFlags(m)._overflowDayOfYear &&
@@ -3729,16 +3792,16 @@
3729
3792
  return diff < -6
3730
3793
  ? 'sameElse'
3731
3794
  : diff < -1
3732
- ? 'lastWeek'
3733
- : diff < 0
3734
- ? 'lastDay'
3735
- : diff < 1
3736
- ? 'sameDay'
3737
- : diff < 2
3738
- ? 'nextDay'
3739
- : diff < 7
3740
- ? 'nextWeek'
3741
- : 'sameElse';
3795
+ ? 'lastWeek'
3796
+ : diff < 0
3797
+ ? 'lastDay'
3798
+ : diff < 1
3799
+ ? 'sameDay'
3800
+ : diff < 2
3801
+ ? 'nextDay'
3802
+ : diff < 7
3803
+ ? 'nextWeek'
3804
+ : 'sameElse';
3742
3805
  }
3743
3806
 
3744
3807
  function calendar$1(time, formats) {
@@ -4546,16 +4609,22 @@
4546
4609
  mixedPieces = [],
4547
4610
  i,
4548
4611
  l,
4612
+ erasName,
4613
+ erasAbbr,
4614
+ erasNarrow,
4549
4615
  eras = this.eras();
4550
4616
 
4551
4617
  for (i = 0, l = eras.length; i < l; ++i) {
4552
- namePieces.push(regexEscape(eras[i].name));
4553
- abbrPieces.push(regexEscape(eras[i].abbr));
4554
- narrowPieces.push(regexEscape(eras[i].narrow));
4618
+ erasName = regexEscape(eras[i].name);
4619
+ erasAbbr = regexEscape(eras[i].abbr);
4620
+ erasNarrow = regexEscape(eras[i].narrow);
4555
4621
 
4556
- mixedPieces.push(regexEscape(eras[i].name));
4557
- mixedPieces.push(regexEscape(eras[i].abbr));
4558
- mixedPieces.push(regexEscape(eras[i].narrow));
4622
+ namePieces.push(erasName);
4623
+ abbrPieces.push(erasAbbr);
4624
+ narrowPieces.push(erasNarrow);
4625
+ mixedPieces.push(erasName);
4626
+ mixedPieces.push(erasAbbr);
4627
+ mixedPieces.push(erasNarrow);
4559
4628
  }
4560
4629
 
4561
4630
  this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
@@ -4588,14 +4657,6 @@
4588
4657
 
4589
4658
  // ALIASES
4590
4659
 
4591
- addUnitAlias('weekYear', 'gg');
4592
- addUnitAlias('isoWeekYear', 'GG');
4593
-
4594
- // PRIORITY
4595
-
4596
- addUnitPriority('weekYear', 1);
4597
- addUnitPriority('isoWeekYear', 1);
4598
-
4599
4660
  // PARSING
4600
4661
 
4601
4662
  addRegexToken('G', matchSigned);
@@ -4625,7 +4686,7 @@
4625
4686
  this,
4626
4687
  input,
4627
4688
  this.week(),
4628
- this.weekday(),
4689
+ this.weekday() + this.localeData()._week.dow,
4629
4690
  this.localeData()._week.dow,
4630
4691
  this.localeData()._week.doy
4631
4692
  );
@@ -4687,14 +4748,6 @@
4687
4748
 
4688
4749
  addFormatToken('Q', 0, 'Qo', 'quarter');
4689
4750
 
4690
- // ALIASES
4691
-
4692
- addUnitAlias('quarter', 'Q');
4693
-
4694
- // PRIORITY
4695
-
4696
- addUnitPriority('quarter', 7);
4697
-
4698
4751
  // PARSING
4699
4752
 
4700
4753
  addRegexToken('Q', match1);
@@ -4714,16 +4767,9 @@
4714
4767
 
4715
4768
  addFormatToken('D', ['DD', 2], 'Do', 'date');
4716
4769
 
4717
- // ALIASES
4718
-
4719
- addUnitAlias('date', 'D');
4720
-
4721
- // PRIORITY
4722
- addUnitPriority('date', 9);
4723
-
4724
4770
  // PARSING
4725
4771
 
4726
- addRegexToken('D', match1to2);
4772
+ addRegexToken('D', match1to2, match1to2NoLeadingZero);
4727
4773
  addRegexToken('DD', match1to2, match2);
4728
4774
  addRegexToken('Do', function (isStrict, locale) {
4729
4775
  // TODO: Remove "ordinalParse" fallback in next major release.
@@ -4745,13 +4791,6 @@
4745
4791
 
4746
4792
  addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
4747
4793
 
4748
- // ALIASES
4749
-
4750
- addUnitAlias('dayOfYear', 'DDD');
4751
-
4752
- // PRIORITY
4753
- addUnitPriority('dayOfYear', 4);
4754
-
4755
4794
  // PARSING
4756
4795
 
4757
4796
  addRegexToken('DDD', match1to3);
@@ -4776,17 +4815,9 @@
4776
4815
 
4777
4816
  addFormatToken('m', ['mm', 2], 0, 'minute');
4778
4817
 
4779
- // ALIASES
4780
-
4781
- addUnitAlias('minute', 'm');
4782
-
4783
- // PRIORITY
4784
-
4785
- addUnitPriority('minute', 14);
4786
-
4787
4818
  // PARSING
4788
4819
 
4789
- addRegexToken('m', match1to2);
4820
+ addRegexToken('m', match1to2, match1to2HasZero);
4790
4821
  addRegexToken('mm', match1to2, match2);
4791
4822
  addParseToken(['m', 'mm'], MINUTE);
4792
4823
 
@@ -4798,17 +4829,9 @@
4798
4829
 
4799
4830
  addFormatToken('s', ['ss', 2], 0, 'second');
4800
4831
 
4801
- // ALIASES
4802
-
4803
- addUnitAlias('second', 's');
4804
-
4805
- // PRIORITY
4806
-
4807
- addUnitPriority('second', 15);
4808
-
4809
4832
  // PARSING
4810
4833
 
4811
- addRegexToken('s', match1to2);
4834
+ addRegexToken('s', match1to2, match1to2HasZero);
4812
4835
  addRegexToken('ss', match1to2, match2);
4813
4836
  addParseToken(['s', 'ss'], SECOND);
4814
4837
 
@@ -4846,14 +4869,6 @@
4846
4869
  return this.millisecond() * 1000000;
4847
4870
  });
4848
4871
 
4849
- // ALIASES
4850
-
4851
- addUnitAlias('millisecond', 'ms');
4852
-
4853
- // PRIORITY
4854
-
4855
- addUnitPriority('millisecond', 16);
4856
-
4857
4872
  // PARSING
4858
4873
 
4859
4874
  addRegexToken('S', match1to3, match1);
@@ -5161,12 +5176,12 @@
5161
5176
  toInt((number % 100) / 10) === 1
5162
5177
  ? 'th'
5163
5178
  : b === 1
5164
- ? 'st'
5165
- : b === 2
5166
- ? 'nd'
5167
- : b === 3
5168
- ? 'rd'
5169
- : 'th';
5179
+ ? 'st'
5180
+ : b === 2
5181
+ ? 'nd'
5182
+ : b === 3
5183
+ ? 'rd'
5184
+ : 'th';
5170
5185
  return number + output;
5171
5186
  },
5172
5187
  });
@@ -5339,19 +5354,6 @@
5339
5354
  }
5340
5355
  }
5341
5356
 
5342
- // TODO: Use this.as('ms')?
5343
- function valueOf$1() {
5344
- if (!this.isValid()) {
5345
- return NaN;
5346
- }
5347
- return (
5348
- this._milliseconds +
5349
- this._days * 864e5 +
5350
- (this._months % 12) * 2592e6 +
5351
- toInt(this._months / 12) * 31536e6
5352
- );
5353
- }
5354
-
5355
5357
  function makeAs(alias) {
5356
5358
  return function () {
5357
5359
  return this.as(alias);
@@ -5366,7 +5368,8 @@
5366
5368
  asWeeks = makeAs('w'),
5367
5369
  asMonths = makeAs('M'),
5368
5370
  asQuarters = makeAs('Q'),
5369
- asYears = makeAs('y');
5371
+ asYears = makeAs('y'),
5372
+ valueOf$1 = asMilliseconds;
5370
5373
 
5371
5374
  function clone$1() {
5372
5375
  return createDuration(this);
@@ -5635,7 +5638,7 @@
5635
5638
 
5636
5639
  //! moment.js
5637
5640
 
5638
- hooks.version = '2.29.4';
5641
+ hooks.version = '2.30.1';
5639
5642
 
5640
5643
  setHookCallback(createLocal);
5641
5644