@nocobase/plugin-workflow 0.11.1-alpha.5 → 0.12.0-alpha.2

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 (537) hide show
  1. package/client.d.ts +2 -3
  2. package/client.js +1 -1
  3. package/dist/client/index.js +7802 -0
  4. package/{lib → dist}/client/nodes/aggregate.d.ts +1 -5
  5. package/{lib → dist}/client/nodes/create.d.ts +1 -2
  6. package/{lib → dist}/client/nodes/destroy.d.ts +1 -1
  7. package/{lib → dist}/client/nodes/query.d.ts +1 -2
  8. package/{lib → dist}/client/nodes/request.d.ts +1 -2
  9. package/{lib → dist}/client/nodes/update.d.ts +1 -1
  10. package/{lib → dist}/client/schemas/collection.d.ts +1 -2
  11. package/{lib → dist}/client/triggers/collection.d.ts +6 -7
  12. package/{lib → dist}/index.d.ts +1 -0
  13. package/dist/index.js +18 -0
  14. package/dist/locale/en-US.js +133 -0
  15. package/{lib → dist}/locale/es-ES.js +51 -54
  16. package/dist/locale/fr-FR.js +133 -0
  17. package/dist/locale/ja-JP.js +91 -0
  18. package/dist/locale/pt-BR.js +133 -0
  19. package/dist/locale/ru-RU.js +91 -0
  20. package/dist/locale/tr-TR.js +91 -0
  21. package/dist/locale/zh-CN.js +216 -0
  22. package/dist/node_modules/cron-parser/.eslintrc.json +15 -0
  23. package/dist/node_modules/cron-parser/.travis.yml +7 -0
  24. package/dist/node_modules/cron-parser/LICENSE +21 -0
  25. package/dist/node_modules/cron-parser/component.json +11 -0
  26. package/dist/node_modules/cron-parser/index.d.ts +1 -0
  27. package/dist/node_modules/cron-parser/lib/date.js +252 -0
  28. package/dist/node_modules/cron-parser/lib/expression.js +983 -0
  29. package/dist/node_modules/cron-parser/lib/field_compactor.js +70 -0
  30. package/dist/node_modules/cron-parser/lib/field_stringify.js +38 -0
  31. package/dist/node_modules/cron-parser/lib/parser.js +1 -0
  32. package/dist/node_modules/cron-parser/node_modules/luxon/build/amd/luxon.js +8489 -0
  33. package/dist/node_modules/cron-parser/node_modules/luxon/build/cjs-browser/luxon.js +8487 -0
  34. package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.js +8490 -0
  35. package/dist/node_modules/cron-parser/node_modules/luxon/build/global/luxon.min.js +1 -0
  36. package/dist/node_modules/cron-parser/node_modules/luxon/build/node/luxon.js +7522 -0
  37. package/dist/node_modules/cron-parser/node_modules/luxon/package.json +96 -0
  38. package/dist/node_modules/cron-parser/node_modules/luxon/src/datetime.js +2169 -0
  39. package/dist/node_modules/cron-parser/node_modules/luxon/src/duration.js +880 -0
  40. package/dist/node_modules/cron-parser/node_modules/luxon/src/errors.js +61 -0
  41. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/conversions.js +157 -0
  42. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/diff.js +80 -0
  43. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/digits.js +76 -0
  44. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/english.js +233 -0
  45. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formats.js +191 -0
  46. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/formatter.js +386 -0
  47. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/invalid.js +14 -0
  48. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/locale.js +482 -0
  49. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/regexParser.js +335 -0
  50. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/tokenParser.js +424 -0
  51. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/util.js +292 -0
  52. package/dist/node_modules/cron-parser/node_modules/luxon/src/impl/zoneUtil.js +36 -0
  53. package/dist/node_modules/cron-parser/node_modules/luxon/src/info.js +193 -0
  54. package/dist/node_modules/cron-parser/node_modules/luxon/src/interval.js +602 -0
  55. package/dist/node_modules/cron-parser/node_modules/luxon/src/luxon.js +26 -0
  56. package/dist/node_modules/cron-parser/node_modules/luxon/src/luxonFilled.js +13 -0
  57. package/dist/node_modules/cron-parser/node_modules/luxon/src/settings.js +137 -0
  58. package/dist/node_modules/cron-parser/node_modules/luxon/src/zone.js +88 -0
  59. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/IANAZone.js +191 -0
  60. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/fixedOffsetZone.js +94 -0
  61. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/invalidZone.js +53 -0
  62. package/dist/node_modules/cron-parser/node_modules/luxon/src/zones/localZone.js +63 -0
  63. package/dist/node_modules/cron-parser/package.json +1 -0
  64. package/dist/node_modules/cron-parser/test/31_of_month.js +17 -0
  65. package/dist/node_modules/cron-parser/test/bug.js +29 -0
  66. package/dist/node_modules/cron-parser/test/crondate.js +16 -0
  67. package/dist/node_modules/cron-parser/test/crontab.example +7 -0
  68. package/dist/node_modules/cron-parser/test/empty_around_comma.js +22 -0
  69. package/dist/node_modules/cron-parser/test/expression.js +1489 -0
  70. package/dist/node_modules/cron-parser/test/field_compactor.js +250 -0
  71. package/dist/node_modules/cron-parser/test/field_stringify.js +84 -0
  72. package/dist/node_modules/cron-parser/test/fields.js +32 -0
  73. package/dist/node_modules/cron-parser/test/increment_on_first_iteration.js +22 -0
  74. package/dist/node_modules/cron-parser/test/index-ts3.test-d.ts +133 -0
  75. package/dist/node_modules/cron-parser/test/index.test-d.ts +138 -0
  76. package/dist/node_modules/cron-parser/test/leap_year.js +17 -0
  77. package/dist/node_modules/cron-parser/test/parser.js +46 -0
  78. package/dist/node_modules/cron-parser/test/parser_crondate_formats.js +145 -0
  79. package/dist/node_modules/cron-parser/test/parser_day_of_month.js +169 -0
  80. package/dist/node_modules/cron-parser/test/prev_date.js +32 -0
  81. package/dist/node_modules/cron-parser/test/stringify.js +402 -0
  82. package/dist/node_modules/cron-parser/test/timezone.js +422 -0
  83. package/dist/node_modules/cron-parser/types/common.d.ts +131 -0
  84. package/dist/node_modules/cron-parser/types/index.d.ts +45 -0
  85. package/dist/node_modules/cron-parser/types/ts3/index.d.ts +28 -0
  86. package/dist/node_modules/lru-cache/index-cjs.d.ts +7 -0
  87. package/dist/node_modules/lru-cache/index-cjs.js +1 -0
  88. package/dist/node_modules/lru-cache/index.d.ts +807 -0
  89. package/dist/node_modules/lru-cache/index.js +1334 -0
  90. package/dist/node_modules/lru-cache/index.min.js +2 -0
  91. package/dist/node_modules/lru-cache/package.json +1 -0
  92. package/dist/server/Plugin.js +297 -0
  93. package/{src/server/Processor.ts → dist/server/Processor.js} +80 -147
  94. package/dist/server/actions/index.js +49 -0
  95. package/{src/server/actions/nodes.ts → dist/server/actions/nodes.js} +55 -81
  96. package/{src/server/actions/workflows.ts → dist/server/actions/workflows.js} +60 -72
  97. package/dist/server/collections/executions.js +37 -0
  98. package/dist/server/collections/flow_nodes.js +56 -0
  99. package/dist/server/collections/jobs.js +33 -0
  100. package/dist/server/collections/workflows.js +90 -0
  101. package/{lib → dist}/server/constants.js +5 -8
  102. package/dist/server/fields/expression-field.js +11 -0
  103. package/dist/server/fields/index.js +11 -0
  104. package/dist/server/functions/index.js +13 -0
  105. package/dist/server/index.js +41 -0
  106. package/dist/server/instructions/aggregate.js +37 -0
  107. package/dist/server/instructions/calculation.js +34 -0
  108. package/dist/server/instructions/condition.js +123 -0
  109. package/{src/server/instructions/create.ts → dist/server/instructions/create.js} +17 -17
  110. package/dist/server/instructions/delay.js +87 -0
  111. package/dist/server/instructions/destroy.js +24 -0
  112. package/dist/server/instructions/index.js +40 -0
  113. package/{src/server/instructions/loop.ts → dist/server/instructions/loop.js} +21 -43
  114. package/{src/server/instructions/manual/actions.ts → dist/server/instructions/manual/actions.js} +18 -44
  115. package/dist/server/instructions/manual/collecions/jobs.js +21 -0
  116. package/dist/server/instructions/manual/collecions/users.js +19 -0
  117. package/dist/server/instructions/manual/collecions/users_jobs.js +52 -0
  118. package/{src/server/instructions/manual/forms/create.ts → dist/server/instructions/manual/forms/create.js} +8 -8
  119. package/dist/server/instructions/manual/forms/index.js +16 -0
  120. package/{src/server/instructions/manual/forms/update.ts → dist/server/instructions/manual/forms/update.js} +8 -8
  121. package/dist/server/instructions/manual/index.js +160 -0
  122. package/dist/server/instructions/parallel.js +105 -0
  123. package/dist/server/instructions/query.js +36 -0
  124. package/dist/server/instructions/request.js +69 -0
  125. package/dist/server/instructions/sql.js +26 -0
  126. package/dist/server/instructions/update.js +24 -0
  127. package/{src/server/migrations/20221129153547-calculation-variables.ts → dist/server/migrations/20221129153547-calculation-variables.js} +20 -19
  128. package/dist/server/migrations/20230221032941-change-request-body-type.js +71 -0
  129. package/dist/server/migrations/20230221071831-calculation-expression.js +94 -0
  130. package/dist/server/migrations/20230221121203-condition-calculation.js +41 -0
  131. package/dist/server/migrations/20230221162902-jsonb-to-json.js +52 -0
  132. package/dist/server/migrations/20230411034722-manual-multi-form.js +252 -0
  133. package/dist/server/migrations/20230612021134-manual-collection-block.js +126 -0
  134. package/dist/server/migrations/20230710115902-manual-action-values.js +74 -0
  135. package/{src/server/triggers/collection.ts → dist/server/triggers/collection.js} +34 -64
  136. package/dist/server/triggers/index.js +27 -0
  137. package/{src/server/triggers/schedule.ts → dist/server/triggers/schedule.js} +108 -220
  138. package/dist/server/types/Execution.js +8 -0
  139. package/dist/server/types/FlowNode.js +8 -0
  140. package/dist/server/types/Job.js +8 -0
  141. package/dist/server/types/Workflow.js +8 -0
  142. package/dist/server/types/index.js +2 -0
  143. package/{lib → dist}/server/utils.js +6 -8
  144. package/package.json +26 -37
  145. package/server.d.ts +2 -3
  146. package/server.js +1 -1
  147. package/lib/client/AddButton.js +0 -161
  148. package/lib/client/Branch.js +0 -50
  149. package/lib/client/CanvasContent.js +0 -51
  150. package/lib/client/ExecutionCanvas.js +0 -218
  151. package/lib/client/ExecutionLink.js +0 -48
  152. package/lib/client/ExecutionPage.js +0 -68
  153. package/lib/client/ExecutionResourceProvider.js +0 -48
  154. package/lib/client/FlowContext.js +0 -21
  155. package/lib/client/WorkflowCanvas.js +0 -300
  156. package/lib/client/WorkflowLink.js +0 -48
  157. package/lib/client/WorkflowPage.js +0 -70
  158. package/lib/client/WorkflowProvider.js +0 -100
  159. package/lib/client/components/CollectionBlockInitializer.js +0 -103
  160. package/lib/client/components/CollectionFieldset.js +0 -198
  161. package/lib/client/components/Duration.js +0 -72
  162. package/lib/client/components/DynamicExpression.js +0 -117
  163. package/lib/client/components/FieldsSelect.js +0 -72
  164. package/lib/client/components/FilterDynamicComponent.js +0 -34
  165. package/lib/client/components/NodeDescription.js +0 -73
  166. package/lib/client/components/NullRender.js +0 -9
  167. package/lib/client/components/OpenDrawer.js +0 -68
  168. package/lib/client/components/RadioWithTooltip.js +0 -65
  169. package/lib/client/components/ValueBlock.js +0 -103
  170. package/lib/client/components/renderEngineReference.js +0 -49
  171. package/lib/client/constants.js +0 -126
  172. package/lib/client/index.js +0 -121
  173. package/lib/client/interfaces/expression.js +0 -38
  174. package/lib/client/locale/index.js +0 -42
  175. package/lib/client/nodes/aggregate.js +0 -353
  176. package/lib/client/nodes/calculation.js +0 -292
  177. package/lib/client/nodes/condition.js +0 -531
  178. package/lib/client/nodes/create.js +0 -110
  179. package/lib/client/nodes/delay.js +0 -47
  180. package/lib/client/nodes/destroy.js +0 -49
  181. package/lib/client/nodes/index.js +0 -550
  182. package/lib/client/nodes/loop.js +0 -171
  183. package/lib/client/nodes/manual/AssigneesSelect.js +0 -56
  184. package/lib/client/nodes/manual/DetailsBlockProvider.js +0 -106
  185. package/lib/client/nodes/manual/FormBlockInitializer.js +0 -107
  186. package/lib/client/nodes/manual/FormBlockProvider.js +0 -113
  187. package/lib/client/nodes/manual/ModeConfig.js +0 -126
  188. package/lib/client/nodes/manual/SchemaConfig.js +0 -468
  189. package/lib/client/nodes/manual/WorkflowTodo.js +0 -642
  190. package/lib/client/nodes/manual/WorkflowTodoBlockInitializer.js +0 -60
  191. package/lib/client/nodes/manual/forms/create.js +0 -111
  192. package/lib/client/nodes/manual/forms/custom.js +0 -428
  193. package/lib/client/nodes/manual/forms/update.js +0 -168
  194. package/lib/client/nodes/manual/index.js +0 -168
  195. package/lib/client/nodes/manual/utils.js +0 -31
  196. package/lib/client/nodes/parallel.js +0 -162
  197. package/lib/client/nodes/query.js +0 -112
  198. package/lib/client/nodes/request.js +0 -225
  199. package/lib/client/nodes/sql.js +0 -61
  200. package/lib/client/nodes/update.js +0 -127
  201. package/lib/client/schemas/collection.js +0 -93
  202. package/lib/client/schemas/executions.js +0 -190
  203. package/lib/client/schemas/workflows.js +0 -397
  204. package/lib/client/style.js +0 -350
  205. package/lib/client/triggers/collection.js +0 -188
  206. package/lib/client/triggers/index.js +0 -356
  207. package/lib/client/triggers/schedule/EndsByField.js +0 -71
  208. package/lib/client/triggers/schedule/OnField.js +0 -117
  209. package/lib/client/triggers/schedule/RepeatField.js +0 -155
  210. package/lib/client/triggers/schedule/ScheduleConfig.js +0 -251
  211. package/lib/client/triggers/schedule/constants.js +0 -11
  212. package/lib/client/triggers/schedule/index.js +0 -101
  213. package/lib/client/triggers/schedule/locale/Cron.zh-CN.js +0 -48
  214. package/lib/client/utils.js +0 -59
  215. package/lib/client/variable.js +0 -319
  216. package/lib/index.js +0 -13
  217. package/lib/locale/en-US.js +0 -136
  218. package/lib/locale/fr-FR.js +0 -136
  219. package/lib/locale/ja-JP.js +0 -94
  220. package/lib/locale/pt-BR.js +0 -136
  221. package/lib/locale/ru-RU.js +0 -94
  222. package/lib/locale/tr-TR.js +0 -94
  223. package/lib/locale/zh-CN.js +0 -219
  224. package/lib/server/Plugin.js +0 -382
  225. package/lib/server/Processor.js +0 -394
  226. package/lib/server/actions/index.js +0 -30
  227. package/lib/server/actions/nodes.js +0 -269
  228. package/lib/server/actions/workflows.js +0 -273
  229. package/lib/server/collections/executions.js +0 -33
  230. package/lib/server/collections/flow_nodes.js +0 -53
  231. package/lib/server/collections/jobs.js +0 -30
  232. package/lib/server/collections/workflows.js +0 -76
  233. package/lib/server/fields/expression-field.js +0 -19
  234. package/lib/server/fields/index.js +0 -12
  235. package/lib/server/functions/index.js +0 -26
  236. package/lib/server/index.js +0 -55
  237. package/lib/server/instructions/aggregate.js +0 -57
  238. package/lib/server/instructions/calculation.js +0 -59
  239. package/lib/server/instructions/condition.js +0 -150
  240. package/lib/server/instructions/create.js +0 -60
  241. package/lib/server/instructions/delay.js +0 -118
  242. package/lib/server/instructions/destroy.js +0 -37
  243. package/lib/server/instructions/index.js +0 -44
  244. package/lib/server/instructions/loop.js +0 -107
  245. package/lib/server/instructions/manual/actions.js +0 -99
  246. package/lib/server/instructions/manual/collecions/jobs.js +0 -21
  247. package/lib/server/instructions/manual/collecions/users.js +0 -19
  248. package/lib/server/instructions/manual/collecions/users_jobs.js +0 -46
  249. package/lib/server/instructions/manual/forms/create.js +0 -52
  250. package/lib/server/instructions/manual/forms/index.js +0 -15
  251. package/lib/server/instructions/manual/forms/update.js +0 -53
  252. package/lib/server/instructions/manual/index.js +0 -174
  253. package/lib/server/instructions/parallel.js +0 -128
  254. package/lib/server/instructions/query.js +0 -53
  255. package/lib/server/instructions/request.js +0 -99
  256. package/lib/server/instructions/sql.js +0 -34
  257. package/lib/server/instructions/update.js +0 -38
  258. package/lib/server/migrations/20221129153547-calculation-variables.js +0 -92
  259. package/lib/server/migrations/20230221032941-change-request-body-type.js +0 -90
  260. package/lib/server/migrations/20230221071831-calculation-expression.js +0 -111
  261. package/lib/server/migrations/20230221121203-condition-calculation.js +0 -103
  262. package/lib/server/migrations/20230221162902-jsonb-to-json.js +0 -64
  263. package/lib/server/migrations/20230411034722-manual-multi-form.js +0 -297
  264. package/lib/server/migrations/20230612021134-manual-collection-block.js +0 -155
  265. package/lib/server/migrations/20230710115902-manual-action-values.js +0 -97
  266. package/lib/server/triggers/collection.js +0 -175
  267. package/lib/server/triggers/index.js +0 -46
  268. package/lib/server/triggers/schedule.js +0 -582
  269. package/lib/server/types/Execution.js +0 -15
  270. package/lib/server/types/FlowNode.js +0 -15
  271. package/lib/server/types/Job.js +0 -15
  272. package/lib/server/types/Workflow.js +0 -15
  273. package/lib/server/types/index.js +0 -5
  274. package/src/client/AddButton.tsx +0 -111
  275. package/src/client/Branch.tsx +0 -37
  276. package/src/client/CanvasContent.tsx +0 -25
  277. package/src/client/ExecutionCanvas.tsx +0 -166
  278. package/src/client/ExecutionLink.tsx +0 -16
  279. package/src/client/ExecutionPage.tsx +0 -45
  280. package/src/client/ExecutionResourceProvider.tsx +0 -21
  281. package/src/client/FlowContext.ts +0 -7
  282. package/src/client/WorkflowCanvas.tsx +0 -221
  283. package/src/client/WorkflowLink.tsx +0 -16
  284. package/src/client/WorkflowPage.tsx +0 -52
  285. package/src/client/WorkflowProvider.tsx +0 -84
  286. package/src/client/components/CollectionBlockInitializer.tsx +0 -71
  287. package/src/client/components/CollectionFieldset.tsx +0 -152
  288. package/src/client/components/Duration.tsx +0 -45
  289. package/src/client/components/DynamicExpression.tsx +0 -57
  290. package/src/client/components/FieldsSelect.tsx +0 -32
  291. package/src/client/components/FilterDynamicComponent.tsx +0 -15
  292. package/src/client/components/NodeDescription.tsx +0 -51
  293. package/src/client/components/NullRender.tsx +0 -3
  294. package/src/client/components/OpenDrawer.tsx +0 -24
  295. package/src/client/components/RadioWithTooltip.tsx +0 -38
  296. package/src/client/components/ValueBlock.tsx +0 -67
  297. package/src/client/components/renderEngineReference.tsx +0 -30
  298. package/src/client/constants.tsx +0 -91
  299. package/src/client/index.tsx +0 -51
  300. package/src/client/interfaces/expression.tsx +0 -25
  301. package/src/client/locale/index.ts +0 -18
  302. package/src/client/nodes/aggregate.tsx +0 -327
  303. package/src/client/nodes/calculation.tsx +0 -216
  304. package/src/client/nodes/condition.tsx +0 -463
  305. package/src/client/nodes/create.tsx +0 -85
  306. package/src/client/nodes/delay.tsx +0 -37
  307. package/src/client/nodes/destroy.tsx +0 -34
  308. package/src/client/nodes/index.tsx +0 -500
  309. package/src/client/nodes/loop.tsx +0 -144
  310. package/src/client/nodes/manual/AssigneesSelect.tsx +0 -33
  311. package/src/client/nodes/manual/DetailsBlockProvider.tsx +0 -80
  312. package/src/client/nodes/manual/FormBlockInitializer.tsx +0 -69
  313. package/src/client/nodes/manual/FormBlockProvider.tsx +0 -75
  314. package/src/client/nodes/manual/ModeConfig.tsx +0 -84
  315. package/src/client/nodes/manual/SchemaConfig.tsx +0 -509
  316. package/src/client/nodes/manual/WorkflowTodo.tsx +0 -607
  317. package/src/client/nodes/manual/WorkflowTodoBlockInitializer.tsx +0 -28
  318. package/src/client/nodes/manual/forms/create.tsx +0 -92
  319. package/src/client/nodes/manual/forms/custom.tsx +0 -392
  320. package/src/client/nodes/manual/forms/update.tsx +0 -134
  321. package/src/client/nodes/manual/index.tsx +0 -162
  322. package/src/client/nodes/manual/utils.ts +0 -28
  323. package/src/client/nodes/parallel.tsx +0 -138
  324. package/src/client/nodes/query.tsx +0 -88
  325. package/src/client/nodes/request.tsx +0 -185
  326. package/src/client/nodes/sql.tsx +0 -37
  327. package/src/client/nodes/update.tsx +0 -100
  328. package/src/client/schemas/collection.ts +0 -75
  329. package/src/client/schemas/executions.tsx +0 -169
  330. package/src/client/schemas/workflows.ts +0 -364
  331. package/src/client/style.tsx +0 -350
  332. package/src/client/triggers/collection.tsx +0 -190
  333. package/src/client/triggers/index.tsx +0 -311
  334. package/src/client/triggers/schedule/EndsByField.tsx +0 -40
  335. package/src/client/triggers/schedule/OnField.tsx +0 -64
  336. package/src/client/triggers/schedule/RepeatField.tsx +0 -116
  337. package/src/client/triggers/schedule/ScheduleConfig.tsx +0 -227
  338. package/src/client/triggers/schedule/constants.ts +0 -4
  339. package/src/client/triggers/schedule/index.tsx +0 -78
  340. package/src/client/triggers/schedule/locale/Cron.zh-CN.ts +0 -79
  341. package/src/client/utils.ts +0 -36
  342. package/src/client/variable.tsx +0 -318
  343. package/src/index.ts +0 -1
  344. package/src/locale/en-US.ts +0 -136
  345. package/src/locale/es-ES.ts +0 -129
  346. package/src/locale/fr-FR.ts +0 -137
  347. package/src/locale/ja-JP.ts +0 -90
  348. package/src/locale/pt-BR.ts +0 -136
  349. package/src/locale/ru-RU.ts +0 -90
  350. package/src/locale/tr-TR.ts +0 -90
  351. package/src/locale/zh-CN.ts +0 -248
  352. package/src/server/Plugin.ts +0 -355
  353. package/src/server/__tests__/Plugin.test.ts +0 -398
  354. package/src/server/__tests__/Processor.test.ts +0 -474
  355. package/src/server/__tests__/actions/workflows.test.ts +0 -419
  356. package/src/server/__tests__/collections/categories.ts +0 -27
  357. package/src/server/__tests__/collections/comments.ts +0 -24
  358. package/src/server/__tests__/collections/posts.ts +0 -42
  359. package/src/server/__tests__/collections/replies.ts +0 -9
  360. package/src/server/__tests__/collections/tags.ts +0 -15
  361. package/src/server/__tests__/index.ts +0 -89
  362. package/src/server/__tests__/instructions/aggregate.test.ts +0 -294
  363. package/src/server/__tests__/instructions/calculation.test.ts +0 -265
  364. package/src/server/__tests__/instructions/condition.test.ts +0 -434
  365. package/src/server/__tests__/instructions/create.test.ts +0 -129
  366. package/src/server/__tests__/instructions/delay.test.ts +0 -182
  367. package/src/server/__tests__/instructions/destroy.test.ts +0 -58
  368. package/src/server/__tests__/instructions/loop.test.ts +0 -331
  369. package/src/server/__tests__/instructions/manual.test.ts +0 -1173
  370. package/src/server/__tests__/instructions/parallel.test.ts +0 -445
  371. package/src/server/__tests__/instructions/query.test.ts +0 -359
  372. package/src/server/__tests__/instructions/request.test.ts +0 -247
  373. package/src/server/__tests__/instructions/sql.test.ts +0 -162
  374. package/src/server/__tests__/instructions/update.test.ts +0 -189
  375. package/src/server/__tests__/triggers/collection.test.ts +0 -333
  376. package/src/server/__tests__/triggers/schedule.test.ts +0 -369
  377. package/src/server/actions/index.ts +0 -25
  378. package/src/server/collections/executions.ts +0 -35
  379. package/src/server/collections/flow_nodes.ts +0 -54
  380. package/src/server/collections/jobs.ts +0 -31
  381. package/src/server/collections/workflows.ts +0 -88
  382. package/src/server/constants.ts +0 -26
  383. package/src/server/fields/expression-field.ts +0 -11
  384. package/src/server/fields/index.ts +0 -7
  385. package/src/server/functions/index.ts +0 -16
  386. package/src/server/index.ts +0 -6
  387. package/src/server/instructions/aggregate.ts +0 -42
  388. package/src/server/instructions/calculation.ts +0 -41
  389. package/src/server/instructions/condition.ts +0 -172
  390. package/src/server/instructions/delay.ts +0 -105
  391. package/src/server/instructions/destroy.ts +0 -23
  392. package/src/server/instructions/index.ts +0 -64
  393. package/src/server/instructions/manual/collecions/jobs.ts +0 -17
  394. package/src/server/instructions/manual/collecions/users.ts +0 -15
  395. package/src/server/instructions/manual/collecions/users_jobs.ts +0 -50
  396. package/src/server/instructions/manual/forms/index.ts +0 -12
  397. package/src/server/instructions/manual/index.ts +0 -184
  398. package/src/server/instructions/parallel.ts +0 -121
  399. package/src/server/instructions/query.ts +0 -42
  400. package/src/server/instructions/request.ts +0 -88
  401. package/src/server/instructions/sql.ts +0 -25
  402. package/src/server/instructions/update.ts +0 -24
  403. package/src/server/migrations/20230221032941-change-request-body-type.ts +0 -76
  404. package/src/server/migrations/20230221071831-calculation-expression.ts +0 -102
  405. package/src/server/migrations/20230221121203-condition-calculation.ts +0 -82
  406. package/src/server/migrations/20230221162902-jsonb-to-json.ts +0 -51
  407. package/src/server/migrations/20230411034722-manual-multi-form.ts +0 -282
  408. package/src/server/migrations/20230612021134-manual-collection-block.ts +0 -138
  409. package/src/server/migrations/20230710115902-manual-action-values.ts +0 -78
  410. package/src/server/triggers/index.ts +0 -22
  411. package/src/server/types/Execution.ts +0 -26
  412. package/src/server/types/FlowNode.ts +0 -21
  413. package/src/server/types/Job.ts +0 -18
  414. package/src/server/types/Workflow.ts +0 -36
  415. package/src/server/types/index.ts +0 -4
  416. package/src/server/utils.ts +0 -17
  417. /package/{lib → dist}/client/AddButton.d.ts +0 -0
  418. /package/{lib → dist}/client/Branch.d.ts +0 -0
  419. /package/{lib → dist}/client/CanvasContent.d.ts +0 -0
  420. /package/{lib → dist}/client/ExecutionCanvas.d.ts +0 -0
  421. /package/{lib → dist}/client/ExecutionLink.d.ts +0 -0
  422. /package/{lib → dist}/client/ExecutionPage.d.ts +0 -0
  423. /package/{lib → dist}/client/ExecutionResourceProvider.d.ts +0 -0
  424. /package/{lib → dist}/client/FlowContext.d.ts +0 -0
  425. /package/{lib → dist}/client/WorkflowCanvas.d.ts +0 -0
  426. /package/{lib → dist}/client/WorkflowLink.d.ts +0 -0
  427. /package/{lib → dist}/client/WorkflowPage.d.ts +0 -0
  428. /package/{lib → dist}/client/WorkflowProvider.d.ts +0 -0
  429. /package/{lib → dist}/client/components/CollectionBlockInitializer.d.ts +0 -0
  430. /package/{lib → dist}/client/components/CollectionFieldset.d.ts +0 -0
  431. /package/{lib → dist}/client/components/Duration.d.ts +0 -0
  432. /package/{lib → dist}/client/components/DynamicExpression.d.ts +0 -0
  433. /package/{lib → dist}/client/components/FieldsSelect.d.ts +0 -0
  434. /package/{lib → dist}/client/components/FilterDynamicComponent.d.ts +0 -0
  435. /package/{lib → dist}/client/components/NodeDescription.d.ts +0 -0
  436. /package/{lib → dist}/client/components/NullRender.d.ts +0 -0
  437. /package/{lib → dist}/client/components/OpenDrawer.d.ts +0 -0
  438. /package/{lib → dist}/client/components/RadioWithTooltip.d.ts +0 -0
  439. /package/{lib → dist}/client/components/ValueBlock.d.ts +0 -0
  440. /package/{lib → dist}/client/components/renderEngineReference.d.ts +0 -0
  441. /package/{lib → dist}/client/constants.d.ts +0 -0
  442. /package/{lib → dist}/client/index.d.ts +0 -0
  443. /package/{lib → dist}/client/interfaces/expression.d.ts +0 -0
  444. /package/{lib → dist}/client/locale/index.d.ts +0 -0
  445. /package/{lib → dist}/client/nodes/calculation.d.ts +0 -0
  446. /package/{lib → dist}/client/nodes/condition.d.ts +0 -0
  447. /package/{lib → dist}/client/nodes/delay.d.ts +0 -0
  448. /package/{lib → dist}/client/nodes/index.d.ts +0 -0
  449. /package/{lib → dist}/client/nodes/loop.d.ts +0 -0
  450. /package/{lib → dist}/client/nodes/manual/AssigneesSelect.d.ts +0 -0
  451. /package/{lib → dist}/client/nodes/manual/DetailsBlockProvider.d.ts +0 -0
  452. /package/{lib → dist}/client/nodes/manual/FormBlockInitializer.d.ts +0 -0
  453. /package/{lib → dist}/client/nodes/manual/FormBlockProvider.d.ts +0 -0
  454. /package/{lib → dist}/client/nodes/manual/ModeConfig.d.ts +0 -0
  455. /package/{lib → dist}/client/nodes/manual/SchemaConfig.d.ts +0 -0
  456. /package/{lib → dist}/client/nodes/manual/WorkflowTodo.d.ts +0 -0
  457. /package/{lib → dist}/client/nodes/manual/WorkflowTodoBlockInitializer.d.ts +0 -0
  458. /package/{lib → dist}/client/nodes/manual/forms/create.d.ts +0 -0
  459. /package/{lib → dist}/client/nodes/manual/forms/custom.d.ts +0 -0
  460. /package/{lib → dist}/client/nodes/manual/forms/update.d.ts +0 -0
  461. /package/{lib → dist}/client/nodes/manual/index.d.ts +0 -0
  462. /package/{lib → dist}/client/nodes/manual/utils.d.ts +0 -0
  463. /package/{lib → dist}/client/nodes/parallel.d.ts +0 -0
  464. /package/{lib → dist}/client/nodes/sql.d.ts +0 -0
  465. /package/{lib → dist}/client/schemas/executions.d.ts +0 -0
  466. /package/{lib → dist}/client/schemas/workflows.d.ts +0 -0
  467. /package/{lib → dist}/client/style.d.ts +0 -0
  468. /package/{lib → dist}/client/triggers/index.d.ts +0 -0
  469. /package/{lib → dist}/client/triggers/schedule/EndsByField.d.ts +0 -0
  470. /package/{lib → dist}/client/triggers/schedule/OnField.d.ts +0 -0
  471. /package/{lib → dist}/client/triggers/schedule/RepeatField.d.ts +0 -0
  472. /package/{lib → dist}/client/triggers/schedule/ScheduleConfig.d.ts +0 -0
  473. /package/{lib → dist}/client/triggers/schedule/constants.d.ts +0 -0
  474. /package/{lib → dist}/client/triggers/schedule/index.d.ts +0 -0
  475. /package/{lib → dist}/client/triggers/schedule/locale/Cron.zh-CN.d.ts +0 -0
  476. /package/{lib → dist}/client/utils.d.ts +0 -0
  477. /package/{lib → dist}/client/variable.d.ts +0 -0
  478. /package/{lib → dist}/locale/en-US.d.ts +0 -0
  479. /package/{lib → dist}/locale/es-ES.d.ts +0 -0
  480. /package/{lib → dist}/locale/fr-FR.d.ts +0 -0
  481. /package/{lib → dist}/locale/ja-JP.d.ts +0 -0
  482. /package/{lib → dist}/locale/pt-BR.d.ts +0 -0
  483. /package/{lib → dist}/locale/ru-RU.d.ts +0 -0
  484. /package/{lib → dist}/locale/tr-TR.d.ts +0 -0
  485. /package/{lib → dist}/locale/zh-CN.d.ts +0 -0
  486. /package/{lib → dist}/server/Plugin.d.ts +0 -0
  487. /package/{lib → dist}/server/Processor.d.ts +0 -0
  488. /package/{lib → dist}/server/actions/index.d.ts +0 -0
  489. /package/{lib → dist}/server/actions/nodes.d.ts +0 -0
  490. /package/{lib → dist}/server/actions/workflows.d.ts +0 -0
  491. /package/{lib → dist}/server/collections/executions.d.ts +0 -0
  492. /package/{lib → dist}/server/collections/flow_nodes.d.ts +0 -0
  493. /package/{lib → dist}/server/collections/jobs.d.ts +0 -0
  494. /package/{lib → dist}/server/collections/workflows.d.ts +0 -0
  495. /package/{lib → dist}/server/constants.d.ts +0 -0
  496. /package/{lib → dist}/server/fields/expression-field.d.ts +0 -0
  497. /package/{lib → dist}/server/fields/index.d.ts +0 -0
  498. /package/{lib → dist}/server/functions/index.d.ts +0 -0
  499. /package/{lib → dist}/server/index.d.ts +0 -0
  500. /package/{lib → dist}/server/instructions/aggregate.d.ts +0 -0
  501. /package/{lib → dist}/server/instructions/calculation.d.ts +0 -0
  502. /package/{lib → dist}/server/instructions/condition.d.ts +0 -0
  503. /package/{lib → dist}/server/instructions/create.d.ts +0 -0
  504. /package/{lib → dist}/server/instructions/delay.d.ts +0 -0
  505. /package/{lib → dist}/server/instructions/destroy.d.ts +0 -0
  506. /package/{lib → dist}/server/instructions/index.d.ts +0 -0
  507. /package/{lib → dist}/server/instructions/loop.d.ts +0 -0
  508. /package/{lib → dist}/server/instructions/manual/actions.d.ts +0 -0
  509. /package/{lib → dist}/server/instructions/manual/collecions/jobs.d.ts +0 -0
  510. /package/{lib → dist}/server/instructions/manual/collecions/users.d.ts +0 -0
  511. /package/{lib → dist}/server/instructions/manual/collecions/users_jobs.d.ts +0 -0
  512. /package/{lib → dist}/server/instructions/manual/forms/create.d.ts +0 -0
  513. /package/{lib → dist}/server/instructions/manual/forms/index.d.ts +0 -0
  514. /package/{lib → dist}/server/instructions/manual/forms/update.d.ts +0 -0
  515. /package/{lib → dist}/server/instructions/manual/index.d.ts +0 -0
  516. /package/{lib → dist}/server/instructions/parallel.d.ts +0 -0
  517. /package/{lib → dist}/server/instructions/query.d.ts +0 -0
  518. /package/{lib → dist}/server/instructions/request.d.ts +0 -0
  519. /package/{lib → dist}/server/instructions/sql.d.ts +0 -0
  520. /package/{lib → dist}/server/instructions/update.d.ts +0 -0
  521. /package/{lib → dist}/server/migrations/20221129153547-calculation-variables.d.ts +0 -0
  522. /package/{lib → dist}/server/migrations/20230221032941-change-request-body-type.d.ts +0 -0
  523. /package/{lib → dist}/server/migrations/20230221071831-calculation-expression.d.ts +0 -0
  524. /package/{lib → dist}/server/migrations/20230221121203-condition-calculation.d.ts +0 -0
  525. /package/{lib → dist}/server/migrations/20230221162902-jsonb-to-json.d.ts +0 -0
  526. /package/{lib → dist}/server/migrations/20230411034722-manual-multi-form.d.ts +0 -0
  527. /package/{lib → dist}/server/migrations/20230612021134-manual-collection-block.d.ts +0 -0
  528. /package/{lib → dist}/server/migrations/20230710115902-manual-action-values.d.ts +0 -0
  529. /package/{lib → dist}/server/triggers/collection.d.ts +0 -0
  530. /package/{lib → dist}/server/triggers/index.d.ts +0 -0
  531. /package/{lib → dist}/server/triggers/schedule.d.ts +0 -0
  532. /package/{lib → dist}/server/types/Execution.d.ts +0 -0
  533. /package/{lib → dist}/server/types/FlowNode.d.ts +0 -0
  534. /package/{lib → dist}/server/types/Job.d.ts +0 -0
  535. /package/{lib → dist}/server/types/Workflow.d.ts +0 -0
  536. /package/{lib → dist}/server/types/index.d.ts +0 -0
  537. /package/{lib → dist}/server/utils.d.ts +0 -0
@@ -0,0 +1,880 @@
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
+ }