@nocobase/plugin-workflow 1.2.13-alpha → 1.3.0-alpha.20240710084543

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 (247) hide show
  1. package/package.json +3 -3
  2. package/dist/client/AddButton.d.ts +0 -16
  3. package/dist/client/Branch.d.ts +0 -17
  4. package/dist/client/CanvasContent.d.ts +0 -12
  5. package/dist/client/ExecutionCanvas.d.ts +0 -10
  6. package/dist/client/ExecutionContextProvider.d.ts +0 -15
  7. package/dist/client/ExecutionLink.d.ts +0 -10
  8. package/dist/client/ExecutionPage.d.ts +0 -10
  9. package/dist/client/ExecutionResourceProvider.d.ts +0 -14
  10. package/dist/client/FlowContext.d.ts +0 -11
  11. package/dist/client/WorkflowCanvas.d.ts +0 -10
  12. package/dist/client/WorkflowLink.d.ts +0 -10
  13. package/dist/client/WorkflowPage.d.ts +0 -10
  14. package/dist/client/WorkflowPane.d.ts +0 -10
  15. package/dist/client/components/AssignedFieldsFormSchemaConfig.d.ts +0 -10
  16. package/dist/client/components/CheckboxGroupWithTooltip.d.ts +0 -15
  17. package/dist/client/components/CollectionBlockInitializer.d.ts +0 -10
  18. package/dist/client/components/CollectionFieldset.d.ts +0 -14
  19. package/dist/client/components/DetailsBlockProvider.d.ts +0 -14
  20. package/dist/client/components/DrawerDescription.d.ts +0 -10
  21. package/dist/client/components/DrawerForm.d.ts +0 -13
  22. package/dist/client/components/ExecutionStatus.d.ts +0 -13
  23. package/dist/client/components/FieldsSelect.d.ts +0 -10
  24. package/dist/client/components/FilterDynamicComponent.d.ts +0 -14
  25. package/dist/client/components/OpenDrawer.d.ts +0 -14
  26. package/dist/client/components/RadioWithTooltip.d.ts +0 -15
  27. package/dist/client/components/SimpleDesigner.d.ts +0 -10
  28. package/dist/client/components/StatusButton.d.ts +0 -10
  29. package/dist/client/components/TriggerOptionRender.d.ts +0 -12
  30. package/dist/client/components/ValueBlock.d.ts +0 -14
  31. package/dist/client/components/index.d.ts +0 -16
  32. package/dist/client/components/renderEngineReference.d.ts +0 -10
  33. package/dist/client/constants.d.ts +0 -45
  34. package/dist/client/hooks/index.d.ts +0 -11
  35. package/dist/client/hooks/useGetAriaLabelOfAddButton.d.ts +0 -14
  36. package/dist/client/hooks/useRefreshActionProps.d.ts +0 -11
  37. package/dist/client/hooks/useTriggerWorkflowActionProps.d.ts +0 -20
  38. package/dist/client/hooks/useWorkflowExecuted.d.ts +0 -10
  39. package/dist/client/index.d.ts +0 -43
  40. package/dist/client/index.js +0 -569
  41. package/dist/client/locale/index.d.ts +0 -11
  42. package/dist/client/nodes/calculation.d.ts +0 -80
  43. package/dist/client/nodes/condition.d.ts +0 -108
  44. package/dist/client/nodes/create.d.ts +0 -110
  45. package/dist/client/nodes/destroy.d.ts +0 -54
  46. package/dist/client/nodes/end.d.ts +0 -30
  47. package/dist/client/nodes/index.d.ts +0 -76
  48. package/dist/client/nodes/query.d.ts +0 -236
  49. package/dist/client/nodes/update.d.ts +0 -114
  50. package/dist/client/schemas/collection.d.ts +0 -170
  51. package/dist/client/schemas/executions.d.ts +0 -282
  52. package/dist/client/schemas/workflows.d.ts +0 -10
  53. package/dist/client/settings/customizeSubmitToWorkflowActionSettings.d.ts +0 -10
  54. package/dist/client/style.d.ts +0 -30
  55. package/dist/client/triggers/collection.d.ts +0 -124
  56. package/dist/client/triggers/index.d.ts +0 -36
  57. package/dist/client/triggers/schedule/EndsByField.d.ts +0 -13
  58. package/dist/client/triggers/schedule/OnField.d.ts +0 -13
  59. package/dist/client/triggers/schedule/RepeatField.d.ts +0 -13
  60. package/dist/client/triggers/schedule/ScheduleConfig.d.ts +0 -10
  61. package/dist/client/triggers/schedule/constants.d.ts +0 -12
  62. package/dist/client/triggers/schedule/index.d.ts +0 -33
  63. package/dist/client/triggers/schedule/locale/Cron.zh-CN.d.ts +0 -42
  64. package/dist/client/utils.d.ts +0 -12
  65. package/dist/client/variable.d.ts +0 -93
  66. package/dist/externalVersion.js +0 -34
  67. package/dist/index.d.ts +0 -10
  68. package/dist/index.js +0 -48
  69. package/dist/locale/en-US.json +0 -98
  70. package/dist/locale/es-ES.json +0 -98
  71. package/dist/locale/fr-FR.json +0 -98
  72. package/dist/locale/ja-JP.json +0 -82
  73. package/dist/locale/ko_KR.json +0 -168
  74. package/dist/locale/pt-BR.json +0 -98
  75. package/dist/locale/ru-RU.json +0 -82
  76. package/dist/locale/tr-TR.json +0 -82
  77. package/dist/locale/zh-CN.json +0 -205
  78. package/dist/node_modules/cron-parser/.eslintrc.json +0 -15
  79. package/dist/node_modules/cron-parser/.travis.yml +0 -7
  80. package/dist/node_modules/cron-parser/LICENSE +0 -21
  81. package/dist/node_modules/cron-parser/component.json +0 -11
  82. package/dist/node_modules/cron-parser/index.d.ts +0 -1
  83. package/dist/node_modules/cron-parser/lib/date.js +0 -252
  84. package/dist/node_modules/cron-parser/lib/expression.js +0 -983
  85. package/dist/node_modules/cron-parser/lib/field_compactor.js +0 -70
  86. package/dist/node_modules/cron-parser/lib/field_stringify.js +0 -38
  87. package/dist/node_modules/cron-parser/lib/parser.js +0 -1
  88. package/dist/node_modules/cron-parser/node_modules/luxon/build/amd/luxon.js +0 -8489
  89. package/dist/node_modules/cron-parser/node_modules/luxon/build/cjs-browser/luxon.js +0 -8487
  90. package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.js +0 -8490
  91. package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.min.js +0 -1
  92. package/dist/node_modules/cron-parser/node_modules/luxon/build/node/luxon.js +0 -7522
  93. package/dist/node_modules/cron-parser/node_modules/luxon/package.json +0 -96
  94. package/dist/node_modules/cron-parser/node_modules/luxon/src/datetime.js +0 -2169
  95. package/dist/node_modules/cron-parser/node_modules/luxon/src/duration.js +0 -880
  96. package/dist/node_modules/cron-parser/node_modules/luxon/src/errors.js +0 -61
  97. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/conversions.js +0 -157
  98. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/diff.js +0 -80
  99. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/digits.js +0 -76
  100. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/english.js +0 -233
  101. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formats.js +0 -191
  102. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formatter.js +0 -386
  103. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/invalid.js +0 -14
  104. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/locale.js +0 -482
  105. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/regexParser.js +0 -335
  106. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/tokenParser.js +0 -424
  107. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/util.js +0 -292
  108. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/zoneUtil.js +0 -36
  109. package/dist/node_modules/cron-parser/node_modules/luxon/src/info.js +0 -193
  110. package/dist/node_modules/cron-parser/node_modules/luxon/src/interval.js +0 -602
  111. package/dist/node_modules/cron-parser/node_modules/luxon/src/luxon.js +0 -26
  112. package/dist/node_modules/cron-parser/node_modules/luxon/src/luxonFilled.js +0 -13
  113. package/dist/node_modules/cron-parser/node_modules/luxon/src/settings.js +0 -137
  114. package/dist/node_modules/cron-parser/node_modules/luxon/src/zone.js +0 -88
  115. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/IANAZone.js +0 -191
  116. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/fixedOffsetZone.js +0 -94
  117. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/invalidZone.js +0 -53
  118. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/localZone.js +0 -63
  119. package/dist/node_modules/cron-parser/package.json +0 -1
  120. package/dist/node_modules/cron-parser/test/31_of_month.js +0 -17
  121. package/dist/node_modules/cron-parser/test/bug.js +0 -29
  122. package/dist/node_modules/cron-parser/test/crondate.js +0 -16
  123. package/dist/node_modules/cron-parser/test/crontab.example +0 -7
  124. package/dist/node_modules/cron-parser/test/empty_around_comma.js +0 -22
  125. package/dist/node_modules/cron-parser/test/expression.js +0 -1489
  126. package/dist/node_modules/cron-parser/test/field_compactor.js +0 -250
  127. package/dist/node_modules/cron-parser/test/field_stringify.js +0 -84
  128. package/dist/node_modules/cron-parser/test/fields.js +0 -32
  129. package/dist/node_modules/cron-parser/test/increment_on_first_iteration.js +0 -22
  130. package/dist/node_modules/cron-parser/test/index-ts3.test-d.ts +0 -133
  131. package/dist/node_modules/cron-parser/test/index.test-d.ts +0 -138
  132. package/dist/node_modules/cron-parser/test/leap_year.js +0 -17
  133. package/dist/node_modules/cron-parser/test/parser.js +0 -46
  134. package/dist/node_modules/cron-parser/test/parser_crondate_formats.js +0 -145
  135. package/dist/node_modules/cron-parser/test/parser_day_of_month.js +0 -169
  136. package/dist/node_modules/cron-parser/test/prev_date.js +0 -32
  137. package/dist/node_modules/cron-parser/test/stringify.js +0 -402
  138. package/dist/node_modules/cron-parser/test/timezone.js +0 -422
  139. package/dist/node_modules/cron-parser/types/common.d.ts +0 -131
  140. package/dist/node_modules/cron-parser/types/index.d.ts +0 -45
  141. package/dist/node_modules/cron-parser/types/ts3/index.d.ts +0 -28
  142. package/dist/node_modules/lru-cache/LICENSE +0 -15
  143. package/dist/node_modules/lru-cache/dist/cjs/index-cjs.d.ts +0 -7
  144. package/dist/node_modules/lru-cache/dist/cjs/index-cjs.js +0 -1
  145. package/dist/node_modules/lru-cache/dist/cjs/index.d.ts +0 -807
  146. package/dist/node_modules/lru-cache/dist/cjs/index.js +0 -1334
  147. package/dist/node_modules/lru-cache/dist/cjs/index.min.js +0 -2
  148. package/dist/node_modules/lru-cache/dist/cjs/package.json +0 -3
  149. package/dist/node_modules/lru-cache/dist/mjs/index.d.ts +0 -807
  150. package/dist/node_modules/lru-cache/dist/mjs/index.js +0 -1330
  151. package/dist/node_modules/lru-cache/dist/mjs/index.min.js +0 -2
  152. package/dist/node_modules/lru-cache/dist/mjs/package.json +0 -3
  153. package/dist/node_modules/lru-cache/package.json +0 -1
  154. package/dist/server/Plugin.d.ts +0 -84
  155. package/dist/server/Plugin.js +0 -503
  156. package/dist/server/Processor.d.ts +0 -115
  157. package/dist/server/Processor.js +0 -363
  158. package/dist/server/actions/executions.d.ts +0 -11
  159. package/dist/server/actions/executions.js +0 -96
  160. package/dist/server/actions/index.d.ts +0 -11
  161. package/dist/server/actions/index.js +0 -66
  162. package/dist/server/actions/nodes.d.ts +0 -12
  163. package/dist/server/actions/nodes.js +0 -217
  164. package/dist/server/actions/workflows.d.ts +0 -14
  165. package/dist/server/actions/workflows.js +0 -184
  166. package/dist/server/collections/executions.d.ts +0 -11
  167. package/dist/server/collections/executions.js +0 -66
  168. package/dist/server/collections/flow_nodes.d.ts +0 -11
  169. package/dist/server/collections/flow_nodes.js +0 -87
  170. package/dist/server/collections/jobs.d.ts +0 -11
  171. package/dist/server/collections/jobs.js +0 -66
  172. package/dist/server/collections/workflows.d.ts +0 -10
  173. package/dist/server/collections/workflows.js +0 -126
  174. package/dist/server/constants.d.ts +0 -29
  175. package/dist/server/constants.js +0 -58
  176. package/dist/server/functions/index.d.ts +0 -17
  177. package/dist/server/functions/index.js +0 -40
  178. package/dist/server/index.d.ts +0 -15
  179. package/dist/server/index.js +0 -60
  180. package/dist/server/instructions/CalculationInstruction.d.ts +0 -25
  181. package/dist/server/instructions/CalculationInstruction.js +0 -59
  182. package/dist/server/instructions/ConditionInstruction.d.ts +0 -36
  183. package/dist/server/instructions/ConditionInstruction.js +0 -167
  184. package/dist/server/instructions/CreateInstruction.d.ts +0 -18
  185. package/dist/server/instructions/CreateInstruction.js +0 -75
  186. package/dist/server/instructions/DestroyInstruction.d.ts +0 -18
  187. package/dist/server/instructions/DestroyInstruction.js +0 -59
  188. package/dist/server/instructions/EndInstruction.d.ts +0 -14
  189. package/dist/server/instructions/EndInstruction.js +0 -55
  190. package/dist/server/instructions/QueryInstruction.d.ts +0 -21
  191. package/dist/server/instructions/QueryInstruction.js +0 -82
  192. package/dist/server/instructions/UpdateInstruction.d.ts +0 -18
  193. package/dist/server/instructions/UpdateInstruction.js +0 -59
  194. package/dist/server/instructions/index.d.ts +0 -31
  195. package/dist/server/instructions/index.js +0 -42
  196. package/dist/server/migrations/20221129153547-calculation-variables.d.ts +0 -14
  197. package/dist/server/migrations/20221129153547-calculation-variables.js +0 -92
  198. package/dist/server/migrations/20230221032941-change-request-body-type.d.ts +0 -14
  199. package/dist/server/migrations/20230221032941-change-request-body-type.js +0 -102
  200. package/dist/server/migrations/20230221071831-calculation-expression.d.ts +0 -13
  201. package/dist/server/migrations/20230221071831-calculation-expression.js +0 -121
  202. package/dist/server/migrations/20230221121203-condition-calculation.d.ts +0 -13
  203. package/dist/server/migrations/20230221121203-condition-calculation.js +0 -106
  204. package/dist/server/migrations/20230221162902-jsonb-to-json.d.ts +0 -13
  205. package/dist/server/migrations/20230221162902-jsonb-to-json.js +0 -63
  206. package/dist/server/migrations/20230411034722-manual-multi-form.d.ts +0 -13
  207. package/dist/server/migrations/20230411034722-manual-multi-form.js +0 -283
  208. package/dist/server/migrations/20230612021134-manual-collection-block.d.ts +0 -13
  209. package/dist/server/migrations/20230612021134-manual-collection-block.js +0 -152
  210. package/dist/server/migrations/20230710115902-manual-action-values.d.ts +0 -13
  211. package/dist/server/migrations/20230710115902-manual-action-values.js +0 -101
  212. package/dist/server/migrations/20230809113132-workflow-options.d.ts +0 -13
  213. package/dist/server/migrations/20230809113132-workflow-options.js +0 -64
  214. package/dist/server/migrations/20231024172342-add-node-key.d.ts +0 -13
  215. package/dist/server/migrations/20231024172342-add-node-key.js +0 -90
  216. package/dist/server/migrations/20231122143143-split-to-plugins.d.ts +0 -13
  217. package/dist/server/migrations/20231122143143-split-to-plugins.js +0 -67
  218. package/dist/server/migrations/20240115220721-add-node-key-to-job.d.ts +0 -14
  219. package/dist/server/migrations/20240115220721-add-node-key-to-job.js +0 -63
  220. package/dist/server/migrations/20240613222612-fix-assign-field-config.d.ts +0 -13
  221. package/dist/server/migrations/20240613222612-fix-assign-field-config.js +0 -62
  222. package/dist/server/triggers/CollectionTrigger.d.ts +0 -22
  223. package/dist/server/triggers/CollectionTrigger.js +0 -184
  224. package/dist/server/triggers/ScheduleTrigger/DateFieldScheduleTrigger.d.ts +0 -39
  225. package/dist/server/triggers/ScheduleTrigger/DateFieldScheduleTrigger.js +0 -356
  226. package/dist/server/triggers/ScheduleTrigger/StaticScheduleTrigger.d.ts +0 -21
  227. package/dist/server/triggers/ScheduleTrigger/StaticScheduleTrigger.js +0 -152
  228. package/dist/server/triggers/ScheduleTrigger/index.d.ts +0 -18
  229. package/dist/server/triggers/ScheduleTrigger/index.js +0 -84
  230. package/dist/server/triggers/ScheduleTrigger/utils.d.ts +0 -13
  231. package/dist/server/triggers/ScheduleTrigger/utils.js +0 -44
  232. package/dist/server/triggers/index.d.ts +0 -21
  233. package/dist/server/triggers/index.js +0 -46
  234. package/dist/server/types/Execution.d.ts +0 -25
  235. package/dist/server/types/Execution.js +0 -34
  236. package/dist/server/types/FlowNode.d.ts +0 -24
  237. package/dist/server/types/FlowNode.js +0 -34
  238. package/dist/server/types/Job.d.ts +0 -22
  239. package/dist/server/types/Job.js +0 -34
  240. package/dist/server/types/Workflow.d.ts +0 -35
  241. package/dist/server/types/Workflow.js +0 -34
  242. package/dist/server/types/index.d.ts +0 -12
  243. package/dist/server/types/index.js +0 -24
  244. package/dist/server/utils.d.ts +0 -9
  245. package/dist/server/utils.js +0 -51
  246. package/dist/swagger/index.d.ts +0 -762
  247. package/dist/swagger/index.js +0 -807
@@ -1,880 +0,0 @@
1
- import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from "./errors.js";
2
- import Formatter from "./impl/formatter.js";
3
- import Invalid from "./impl/invalid.js";
4
- import Locale from "./impl/locale.js";
5
- import { parseISODuration, parseISOTimeOnly } from "./impl/regexParser.js";
6
- import {
7
- asNumber,
8
- hasOwnProperty,
9
- isNumber,
10
- isUndefined,
11
- normalizeObject,
12
- roundTo
13
- } from "./impl/util.js";
14
- import Settings from "./settings.js";
15
-
16
- const INVALID = "Invalid Duration";
17
-
18
- // unit conversion constants
19
- const lowOrderMatrix = {
20
- weeks: {
21
- days: 7,
22
- hours: 7 * 24,
23
- minutes: 7 * 24 * 60,
24
- seconds: 7 * 24 * 60 * 60,
25
- milliseconds: 7 * 24 * 60 * 60 * 1000
26
- },
27
- days: {
28
- hours: 24,
29
- minutes: 24 * 60,
30
- seconds: 24 * 60 * 60,
31
- milliseconds: 24 * 60 * 60 * 1000
32
- },
33
- hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },
34
- minutes: { seconds: 60, milliseconds: 60 * 1000 },
35
- seconds: { milliseconds: 1000 }
36
- },
37
- casualMatrix = Object.assign(
38
- {
39
- years: {
40
- quarters: 4,
41
- months: 12,
42
- weeks: 52,
43
- days: 365,
44
- hours: 365 * 24,
45
- minutes: 365 * 24 * 60,
46
- seconds: 365 * 24 * 60 * 60,
47
- milliseconds: 365 * 24 * 60 * 60 * 1000
48
- },
49
- quarters: {
50
- months: 3,
51
- weeks: 13,
52
- days: 91,
53
- hours: 91 * 24,
54
- minutes: 91 * 24 * 60,
55
- seconds: 91 * 24 * 60 * 60,
56
- milliseconds: 91 * 24 * 60 * 60 * 1000
57
- },
58
- months: {
59
- weeks: 4,
60
- days: 30,
61
- hours: 30 * 24,
62
- minutes: 30 * 24 * 60,
63
- seconds: 30 * 24 * 60 * 60,
64
- milliseconds: 30 * 24 * 60 * 60 * 1000
65
- }
66
- },
67
- lowOrderMatrix
68
- ),
69
- daysInYearAccurate = 146097.0 / 400,
70
- daysInMonthAccurate = 146097.0 / 4800,
71
- accurateMatrix = Object.assign(
72
- {
73
- years: {
74
- quarters: 4,
75
- months: 12,
76
- weeks: daysInYearAccurate / 7,
77
- days: daysInYearAccurate,
78
- hours: daysInYearAccurate * 24,
79
- minutes: daysInYearAccurate * 24 * 60,
80
- seconds: daysInYearAccurate * 24 * 60 * 60,
81
- milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000
82
- },
83
- quarters: {
84
- months: 3,
85
- weeks: daysInYearAccurate / 28,
86
- days: daysInYearAccurate / 4,
87
- hours: (daysInYearAccurate * 24) / 4,
88
- minutes: (daysInYearAccurate * 24 * 60) / 4,
89
- seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,
90
- milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4
91
- },
92
- months: {
93
- weeks: daysInMonthAccurate / 7,
94
- days: daysInMonthAccurate,
95
- hours: daysInMonthAccurate * 24,
96
- minutes: daysInMonthAccurate * 24 * 60,
97
- seconds: daysInMonthAccurate * 24 * 60 * 60,
98
- milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000
99
- }
100
- },
101
- lowOrderMatrix
102
- );
103
-
104
- // units ordered by size
105
- const orderedUnits = [
106
- "years",
107
- "quarters",
108
- "months",
109
- "weeks",
110
- "days",
111
- "hours",
112
- "minutes",
113
- "seconds",
114
- "milliseconds"
115
- ];
116
-
117
- const reverseUnits = orderedUnits.slice(0).reverse();
118
-
119
- // clone really means "create another instance just like this one, but with these changes"
120
- function clone(dur, alts, clear = false) {
121
- // deep merge for vals
122
- const conf = {
123
- values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),
124
- loc: dur.loc.clone(alts.loc),
125
- conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy
126
- };
127
- return new Duration(conf);
128
- }
129
-
130
- function antiTrunc(n) {
131
- return n < 0 ? Math.floor(n) : Math.ceil(n);
132
- }
133
-
134
- // NB: mutates parameters
135
- function convert(matrix, fromMap, fromUnit, toMap, toUnit) {
136
- const conv = matrix[toUnit][fromUnit],
137
- raw = fromMap[fromUnit] / conv,
138
- sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),
139
- // ok, so this is wild, but see the matrix in the tests
140
- added =
141
- !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);
142
- toMap[toUnit] += added;
143
- fromMap[fromUnit] -= added * conv;
144
- }
145
-
146
- // NB: mutates parameters
147
- function normalizeValues(matrix, vals) {
148
- reverseUnits.reduce((previous, current) => {
149
- if (!isUndefined(vals[current])) {
150
- if (previous) {
151
- convert(matrix, vals, previous, vals, current);
152
- }
153
- return current;
154
- } else {
155
- return previous;
156
- }
157
- }, null);
158
- }
159
-
160
- /**
161
- * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.
162
- *
163
- * Here is a brief overview of commonly used methods and getters in Duration:
164
- *
165
- * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.
166
- * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.
167
- * * **Configuration** See {@link Duration.locale} and {@link Duration.numberingSystem} accessors.
168
- * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.
169
- * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}
170
- *
171
- * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.
172
- */
173
- export default class Duration {
174
- /**
175
- * @private
176
- */
177
- constructor(config) {
178
- const accurate = config.conversionAccuracy === "longterm" || false;
179
- /**
180
- * @access private
181
- */
182
- this.values = config.values;
183
- /**
184
- * @access private
185
- */
186
- this.loc = config.loc || Locale.create();
187
- /**
188
- * @access private
189
- */
190
- this.conversionAccuracy = accurate ? "longterm" : "casual";
191
- /**
192
- * @access private
193
- */
194
- this.invalid = config.invalid || null;
195
- /**
196
- * @access private
197
- */
198
- this.matrix = accurate ? accurateMatrix : casualMatrix;
199
- /**
200
- * @access private
201
- */
202
- this.isLuxonDuration = true;
203
- }
204
-
205
- /**
206
- * Create Duration from a number of milliseconds.
207
- * @param {number} count of milliseconds
208
- * @param {Object} opts - options for parsing
209
- * @param {string} [opts.locale='en-US'] - the locale to use
210
- * @param {string} opts.numberingSystem - the numbering system to use
211
- * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
212
- * @return {Duration}
213
- */
214
- static fromMillis(count, opts) {
215
- return Duration.fromObject(Object.assign({ milliseconds: count }, opts));
216
- }
217
-
218
- /**
219
- * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.
220
- * If this object is empty then a zero milliseconds duration is returned.
221
- * @param {Object} obj - the object to create the DateTime from
222
- * @param {number} obj.years
223
- * @param {number} obj.quarters
224
- * @param {number} obj.months
225
- * @param {number} obj.weeks
226
- * @param {number} obj.days
227
- * @param {number} obj.hours
228
- * @param {number} obj.minutes
229
- * @param {number} obj.seconds
230
- * @param {number} obj.milliseconds
231
- * @param {string} [obj.locale='en-US'] - the locale to use
232
- * @param {string} obj.numberingSystem - the numbering system to use
233
- * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use
234
- * @return {Duration}
235
- */
236
- static fromObject(obj) {
237
- if (obj == null || typeof obj !== "object") {
238
- throw new InvalidArgumentError(
239
- `Duration.fromObject: argument expected to be an object, got ${
240
- obj === null ? "null" : typeof obj
241
- }`
242
- );
243
- }
244
- return new Duration({
245
- values: normalizeObject(obj, Duration.normalizeUnit, [
246
- "locale",
247
- "numberingSystem",
248
- "conversionAccuracy",
249
- "zone" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this
250
- ]),
251
- loc: Locale.fromObject(obj),
252
- conversionAccuracy: obj.conversionAccuracy
253
- });
254
- }
255
-
256
- /**
257
- * Create a Duration from an ISO 8601 duration string.
258
- * @param {string} text - text to parse
259
- * @param {Object} opts - options for parsing
260
- * @param {string} [opts.locale='en-US'] - the locale to use
261
- * @param {string} opts.numberingSystem - the numbering system to use
262
- * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
263
- * @see https://en.wikipedia.org/wiki/ISO_8601#Durations
264
- * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }
265
- * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }
266
- * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }
267
- * @return {Duration}
268
- */
269
- static fromISO(text, opts) {
270
- const [parsed] = parseISODuration(text);
271
- if (parsed) {
272
- const obj = Object.assign(parsed, opts);
273
- return Duration.fromObject(obj);
274
- } else {
275
- return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`);
276
- }
277
- }
278
-
279
- /**
280
- * Create a Duration from an ISO 8601 time string.
281
- * @param {string} text - text to parse
282
- * @param {Object} opts - options for parsing
283
- * @param {string} [opts.locale='en-US'] - the locale to use
284
- * @param {string} opts.numberingSystem - the numbering system to use
285
- * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use
286
- * @see https://en.wikipedia.org/wiki/ISO_8601#Times
287
- * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }
288
- * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
289
- * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
290
- * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
291
- * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }
292
- * @return {Duration}
293
- */
294
- static fromISOTime(text, opts) {
295
- const [parsed] = parseISOTimeOnly(text);
296
- if (parsed) {
297
- const obj = Object.assign(parsed, opts);
298
- return Duration.fromObject(obj);
299
- } else {
300
- return Duration.invalid("unparsable", `the input "${text}" can't be parsed as ISO 8601`);
301
- }
302
- }
303
-
304
- /**
305
- * Create an invalid Duration.
306
- * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent
307
- * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information
308
- * @return {Duration}
309
- */
310
- static invalid(reason, explanation = null) {
311
- if (!reason) {
312
- throw new InvalidArgumentError("need to specify a reason the Duration is invalid");
313
- }
314
-
315
- const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);
316
-
317
- if (Settings.throwOnInvalid) {
318
- throw new InvalidDurationError(invalid);
319
- } else {
320
- return new Duration({ invalid });
321
- }
322
- }
323
-
324
- /**
325
- * @private
326
- */
327
- static normalizeUnit(unit) {
328
- const normalized = {
329
- year: "years",
330
- years: "years",
331
- quarter: "quarters",
332
- quarters: "quarters",
333
- month: "months",
334
- months: "months",
335
- week: "weeks",
336
- weeks: "weeks",
337
- day: "days",
338
- days: "days",
339
- hour: "hours",
340
- hours: "hours",
341
- minute: "minutes",
342
- minutes: "minutes",
343
- second: "seconds",
344
- seconds: "seconds",
345
- millisecond: "milliseconds",
346
- milliseconds: "milliseconds"
347
- }[unit ? unit.toLowerCase() : unit];
348
-
349
- if (!normalized) throw new InvalidUnitError(unit);
350
-
351
- return normalized;
352
- }
353
-
354
- /**
355
- * Check if an object is a Duration. Works across context boundaries
356
- * @param {object} o
357
- * @return {boolean}
358
- */
359
- static isDuration(o) {
360
- return (o && o.isLuxonDuration) || false;
361
- }
362
-
363
- /**
364
- * Get the locale of a Duration, such 'en-GB'
365
- * @type {string}
366
- */
367
- get locale() {
368
- return this.isValid ? this.loc.locale : null;
369
- }
370
-
371
- /**
372
- * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration
373
- *
374
- * @type {string}
375
- */
376
- get numberingSystem() {
377
- return this.isValid ? this.loc.numberingSystem : null;
378
- }
379
-
380
- /**
381
- * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:
382
- * * `S` for milliseconds
383
- * * `s` for seconds
384
- * * `m` for minutes
385
- * * `h` for hours
386
- * * `d` for days
387
- * * `M` for months
388
- * * `y` for years
389
- * Notes:
390
- * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits
391
- * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.
392
- * @param {string} fmt - the format string
393
- * @param {Object} opts - options
394
- * @param {boolean} [opts.floor=true] - floor numerical values
395
- * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2"
396
- * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002"
397
- * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000"
398
- * @return {string}
399
- */
400
- toFormat(fmt, opts = {}) {
401
- // reverse-compat since 1.2; we always round down now, never up, and we do it by default
402
- const fmtOpts = Object.assign({}, opts, {
403
- floor: opts.round !== false && opts.floor !== false
404
- });
405
- return this.isValid
406
- ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)
407
- : INVALID;
408
- }
409
-
410
- /**
411
- * Returns a JavaScript object with this Duration's values.
412
- * @param opts - options for generating the object
413
- * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output
414
- * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }
415
- * @return {Object}
416
- */
417
- toObject(opts = {}) {
418
- if (!this.isValid) return {};
419
-
420
- const base = Object.assign({}, this.values);
421
-
422
- if (opts.includeConfig) {
423
- base.conversionAccuracy = this.conversionAccuracy;
424
- base.numberingSystem = this.loc.numberingSystem;
425
- base.locale = this.loc.locale;
426
- }
427
- return base;
428
- }
429
-
430
- /**
431
- * Returns an ISO 8601-compliant string representation of this Duration.
432
- * @see https://en.wikipedia.org/wiki/ISO_8601#Durations
433
- * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'
434
- * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'
435
- * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'
436
- * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'
437
- * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'
438
- * @return {string}
439
- */
440
- toISO() {
441
- // we could use the formatter, but this is an easier way to get the minimum string
442
- if (!this.isValid) return null;
443
-
444
- let s = "P";
445
- if (this.years !== 0) s += this.years + "Y";
446
- if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M";
447
- if (this.weeks !== 0) s += this.weeks + "W";
448
- if (this.days !== 0) s += this.days + "D";
449
- if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)
450
- s += "T";
451
- if (this.hours !== 0) s += this.hours + "H";
452
- if (this.minutes !== 0) s += this.minutes + "M";
453
- if (this.seconds !== 0 || this.milliseconds !== 0)
454
- // this will handle "floating point madness" by removing extra decimal places
455
- // https://stackoverflow.com/questions/588004/is-floating-point-math-broken
456
- s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S";
457
- if (s === "P") s += "T0S";
458
- return s;
459
- }
460
-
461
- /**
462
- * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.
463
- * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.
464
- * @see https://en.wikipedia.org/wiki/ISO_8601#Times
465
- * @param {Object} opts - options
466
- * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0
467
- * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0
468
- * @param {boolean} [opts.includePrefix=false] - include the `T` prefix
469
- * @param {string} [opts.format='extended'] - choose between the basic and extended format
470
- * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'
471
- * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'
472
- * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'
473
- * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'
474
- * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'
475
- * @return {string}
476
- */
477
- toISOTime(opts = {}) {
478
- if (!this.isValid) return null;
479
-
480
- const millis = this.toMillis();
481
- if (millis < 0 || millis >= 86400000) return null;
482
-
483
- opts = Object.assign(
484
- {
485
- suppressMilliseconds: false,
486
- suppressSeconds: false,
487
- includePrefix: false,
488
- format: "extended"
489
- },
490
- opts
491
- );
492
-
493
- const value = this.shiftTo("hours", "minutes", "seconds", "milliseconds");
494
-
495
- let fmt = opts.format === "basic" ? "hhmm" : "hh:mm";
496
-
497
- if (!opts.suppressSeconds || value.seconds !== 0 || value.milliseconds !== 0) {
498
- fmt += opts.format === "basic" ? "ss" : ":ss";
499
- if (!opts.suppressMilliseconds || value.milliseconds !== 0) {
500
- fmt += ".SSS";
501
- }
502
- }
503
-
504
- let str = value.toFormat(fmt);
505
-
506
- if (opts.includePrefix) {
507
- str = "T" + str;
508
- }
509
-
510
- return str;
511
- }
512
-
513
- /**
514
- * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.
515
- * @return {string}
516
- */
517
- toJSON() {
518
- return this.toISO();
519
- }
520
-
521
- /**
522
- * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.
523
- * @return {string}
524
- */
525
- toString() {
526
- return this.toISO();
527
- }
528
-
529
- /**
530
- * Returns an milliseconds value of this Duration.
531
- * @return {number}
532
- */
533
- toMillis() {
534
- return this.as("milliseconds");
535
- }
536
-
537
- /**
538
- * Returns an milliseconds value of this Duration. Alias of {@link toMillis}
539
- * @return {number}
540
- */
541
- valueOf() {
542
- return this.toMillis();
543
- }
544
-
545
- /**
546
- * Make this Duration longer by the specified amount. Return a newly-constructed Duration.
547
- * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()
548
- * @return {Duration}
549
- */
550
- plus(duration) {
551
- if (!this.isValid) return this;
552
-
553
- const dur = friendlyDuration(duration),
554
- result = {};
555
-
556
- for (const k of orderedUnits) {
557
- if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {
558
- result[k] = dur.get(k) + this.get(k);
559
- }
560
- }
561
-
562
- return clone(this, { values: result }, true);
563
- }
564
-
565
- /**
566
- * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.
567
- * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()
568
- * @return {Duration}
569
- */
570
- minus(duration) {
571
- if (!this.isValid) return this;
572
-
573
- const dur = friendlyDuration(duration);
574
- return this.plus(dur.negate());
575
- }
576
-
577
- /**
578
- * Scale this Duration by the specified amount. Return a newly-constructed Duration.
579
- * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.
580
- * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }
581
- * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === "hour" ? x * 2 : x) //=> { hours: 2, minutes: 30 }
582
- * @return {Duration}
583
- */
584
- mapUnits(fn) {
585
- if (!this.isValid) return this;
586
- const result = {};
587
- for (const k of Object.keys(this.values)) {
588
- result[k] = asNumber(fn(this.values[k], k));
589
- }
590
- return clone(this, { values: result }, true);
591
- }
592
-
593
- /**
594
- * Get the value of unit.
595
- * @param {string} unit - a unit such as 'minute' or 'day'
596
- * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2
597
- * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0
598
- * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3
599
- * @return {number}
600
- */
601
- get(unit) {
602
- return this[Duration.normalizeUnit(unit)];
603
- }
604
-
605
- /**
606
- * "Set" the values of specified units. Return a newly-constructed Duration.
607
- * @param {Object} values - a mapping of units to numbers
608
- * @example dur.set({ years: 2017 })
609
- * @example dur.set({ hours: 8, minutes: 30 })
610
- * @return {Duration}
611
- */
612
- set(values) {
613
- if (!this.isValid) return this;
614
-
615
- const mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));
616
- return clone(this, { values: mixed });
617
- }
618
-
619
- /**
620
- * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration.
621
- * @example dur.reconfigure({ locale: 'en-GB' })
622
- * @return {Duration}
623
- */
624
- reconfigure({ locale, numberingSystem, conversionAccuracy } = {}) {
625
- const loc = this.loc.clone({ locale, numberingSystem }),
626
- opts = { loc };
627
-
628
- if (conversionAccuracy) {
629
- opts.conversionAccuracy = conversionAccuracy;
630
- }
631
-
632
- return clone(this, opts);
633
- }
634
-
635
- /**
636
- * Return the length of the duration in the specified unit.
637
- * @param {string} unit - a unit such as 'minutes' or 'days'
638
- * @example Duration.fromObject({years: 1}).as('days') //=> 365
639
- * @example Duration.fromObject({years: 1}).as('months') //=> 12
640
- * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5
641
- * @return {number}
642
- */
643
- as(unit) {
644
- return this.isValid ? this.shiftTo(unit).get(unit) : NaN;
645
- }
646
-
647
- /**
648
- * Reduce this Duration to its canonical representation in its current units.
649
- * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }
650
- * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }
651
- * @return {Duration}
652
- */
653
- normalize() {
654
- if (!this.isValid) return this;
655
- const vals = this.toObject();
656
- normalizeValues(this.matrix, vals);
657
- return clone(this, { values: vals }, true);
658
- }
659
-
660
- /**
661
- * Convert this Duration into its representation in a different set of units.
662
- * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }
663
- * @return {Duration}
664
- */
665
- shiftTo(...units) {
666
- if (!this.isValid) return this;
667
-
668
- if (units.length === 0) {
669
- return this;
670
- }
671
-
672
- units = units.map(u => Duration.normalizeUnit(u));
673
-
674
- const built = {},
675
- accumulated = {},
676
- vals = this.toObject();
677
- let lastUnit;
678
-
679
- for (const k of orderedUnits) {
680
- if (units.indexOf(k) >= 0) {
681
- lastUnit = k;
682
-
683
- let own = 0;
684
-
685
- // anything we haven't boiled down yet should get boiled to this unit
686
- for (const ak in accumulated) {
687
- own += this.matrix[ak][k] * accumulated[ak];
688
- accumulated[ak] = 0;
689
- }
690
-
691
- // plus anything that's already in this unit
692
- if (isNumber(vals[k])) {
693
- own += vals[k];
694
- }
695
-
696
- const i = Math.trunc(own);
697
- built[k] = i;
698
- accumulated[k] = own - i; // we'd like to absorb these fractions in another unit
699
-
700
- // plus anything further down the chain that should be rolled up in to this
701
- for (const down in vals) {
702
- if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {
703
- convert(this.matrix, vals, down, built, k);
704
- }
705
- }
706
- // otherwise, keep it in the wings to boil it later
707
- } else if (isNumber(vals[k])) {
708
- accumulated[k] = vals[k];
709
- }
710
- }
711
-
712
- // anything leftover becomes the decimal for the last unit
713
- // lastUnit must be defined since units is not empty
714
- for (const key in accumulated) {
715
- if (accumulated[key] !== 0) {
716
- built[lastUnit] +=
717
- key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];
718
- }
719
- }
720
-
721
- return clone(this, { values: built }, true).normalize();
722
- }
723
-
724
- /**
725
- * Return the negative of this Duration.
726
- * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }
727
- * @return {Duration}
728
- */
729
- negate() {
730
- if (!this.isValid) return this;
731
- const negated = {};
732
- for (const k of Object.keys(this.values)) {
733
- negated[k] = -this.values[k];
734
- }
735
- return clone(this, { values: negated }, true);
736
- }
737
-
738
- /**
739
- * Get the years.
740
- * @type {number}
741
- */
742
- get years() {
743
- return this.isValid ? this.values.years || 0 : NaN;
744
- }
745
-
746
- /**
747
- * Get the quarters.
748
- * @type {number}
749
- */
750
- get quarters() {
751
- return this.isValid ? this.values.quarters || 0 : NaN;
752
- }
753
-
754
- /**
755
- * Get the months.
756
- * @type {number}
757
- */
758
- get months() {
759
- return this.isValid ? this.values.months || 0 : NaN;
760
- }
761
-
762
- /**
763
- * Get the weeks
764
- * @type {number}
765
- */
766
- get weeks() {
767
- return this.isValid ? this.values.weeks || 0 : NaN;
768
- }
769
-
770
- /**
771
- * Get the days.
772
- * @type {number}
773
- */
774
- get days() {
775
- return this.isValid ? this.values.days || 0 : NaN;
776
- }
777
-
778
- /**
779
- * Get the hours.
780
- * @type {number}
781
- */
782
- get hours() {
783
- return this.isValid ? this.values.hours || 0 : NaN;
784
- }
785
-
786
- /**
787
- * Get the minutes.
788
- * @type {number}
789
- */
790
- get minutes() {
791
- return this.isValid ? this.values.minutes || 0 : NaN;
792
- }
793
-
794
- /**
795
- * Get the seconds.
796
- * @return {number}
797
- */
798
- get seconds() {
799
- return this.isValid ? this.values.seconds || 0 : NaN;
800
- }
801
-
802
- /**
803
- * Get the milliseconds.
804
- * @return {number}
805
- */
806
- get milliseconds() {
807
- return this.isValid ? this.values.milliseconds || 0 : NaN;
808
- }
809
-
810
- /**
811
- * Returns whether the Duration is invalid. Invalid durations are returned by diff operations
812
- * on invalid DateTimes or Intervals.
813
- * @return {boolean}
814
- */
815
- get isValid() {
816
- return this.invalid === null;
817
- }
818
-
819
- /**
820
- * Returns an error code if this Duration became invalid, or null if the Duration is valid
821
- * @return {string}
822
- */
823
- get invalidReason() {
824
- return this.invalid ? this.invalid.reason : null;
825
- }
826
-
827
- /**
828
- * Returns an explanation of why this Duration became invalid, or null if the Duration is valid
829
- * @type {string}
830
- */
831
- get invalidExplanation() {
832
- return this.invalid ? this.invalid.explanation : null;
833
- }
834
-
835
- /**
836
- * Equality check
837
- * Two Durations are equal iff they have the same units and the same values for each unit.
838
- * @param {Duration} other
839
- * @return {boolean}
840
- */
841
- equals(other) {
842
- if (!this.isValid || !other.isValid) {
843
- return false;
844
- }
845
-
846
- if (!this.loc.equals(other.loc)) {
847
- return false;
848
- }
849
-
850
- function eq(v1, v2) {
851
- // Consider 0 and undefined as equal
852
- if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;
853
- return v1 === v2;
854
- }
855
-
856
- for (const u of orderedUnits) {
857
- if (!eq(this.values[u], other.values[u])) {
858
- return false;
859
- }
860
- }
861
- return true;
862
- }
863
- }
864
-
865
- /**
866
- * @private
867
- */
868
- export function friendlyDuration(durationish) {
869
- if (isNumber(durationish)) {
870
- return Duration.fromMillis(durationish);
871
- } else if (Duration.isDuration(durationish)) {
872
- return durationish;
873
- } else if (typeof durationish === "object") {
874
- return Duration.fromObject(durationish);
875
- } else {
876
- throw new InvalidArgumentError(
877
- `Unknown duration argument ${durationish} of type ${typeof durationish}`
878
- );
879
- }
880
- }