From f11f07b6dfc1c1b6abddde649aa4c7d6861ce1e7 Mon Sep 17 00:00:00 2001 From: Brian Donovan <1938+eventualbuddha@users.noreply.github.com> Date: Tue, 21 Mar 2023 11:53:59 -0700 Subject: [PATCH] chore: upgrade luxon (#3152) * chore: upgrade luxon Mitigation for CVE-2023-22467 (see https://github.com/moment/moment/pull/6015#issuecomment-1152961973) * chore: update `@types/luxon` and fix usage --- apps/central-scan/backend/package.json | 4 +- apps/mark/frontend/package.json | 4 +- apps/scan/backend/package.json | 4 +- libs/ballot-interpreter-nh/package.json | 4 +- libs/test-utils/package.json | 4 +- libs/test-utils/src/arbitraries.ts | 2 +- libs/types/package.json | 4 +- libs/ui/package.json | 4 +- libs/ui/src/set_clock.test.tsx | 40 +++++---- libs/ui/src/set_clock.tsx | 59 ++++++++----- libs/utils/package.json | 4 +- pnpm-lock.yaml | 113 +++++++++--------------- 12 files changed, 118 insertions(+), 128 deletions(-) diff --git a/apps/central-scan/backend/package.json b/apps/central-scan/backend/package.json index 4e8fbba5d5..298e9fb3f9 100644 --- a/apps/central-scan/backend/package.json +++ b/apps/central-scan/backend/package.json @@ -65,7 +65,7 @@ "jest-diff": "^26.6.2", "js-sha256": "^0.9.0", "jszip": "^3.9.1", - "luxon": "^1.27.0", + "luxon": "^3.0.0", "memory-streams": "^0.1.3", "multer": "^1.4.2", "ora": "^5.2.0", @@ -82,7 +82,7 @@ "@types/express": "^4.17.14", "@types/fs-extra": "^9.0.6", "@types/jest": "^26.0.6", - "@types/luxon": "^1.26.5", + "@types/luxon": "^3.0.0", "@types/multer": "^1.4.7", "@types/node": "16.11.29", "@types/supertest": "^2.0.10", diff --git a/apps/mark/frontend/package.json b/apps/mark/frontend/package.json index 82981b7fab..1d4bb76941 100644 --- a/apps/mark/frontend/package.json +++ b/apps/mark/frontend/package.json @@ -93,7 +93,7 @@ "history": "^4.10.1", "http-proxy-middleware": "1.0.6", "lodash.camelcase": "^4.3.0", - "luxon": "^1.26.0", + "luxon": "^3.0.0", "mini-css-extract-plugin": "0.11.3", "mockdate": "^3.0.2", "normalize.css": "^8.0.1", @@ -132,7 +132,7 @@ "@types/debug": "^4.1.6", "@types/history": "^4.7.8", "@types/kiosk-browser": "workspace:*", - "@types/luxon": "^1.26.2", + "@types/luxon": "^3.0.0", "@types/react-gamepad": "^1.0.0", "@types/setimmediate": "^1.0.2", "@types/testing-library__jest-dom": "^5.14.3", diff --git a/apps/scan/backend/package.json b/apps/scan/backend/package.json index 2ac98efdd7..5db1e5733f 100644 --- a/apps/scan/backend/package.json +++ b/apps/scan/backend/package.json @@ -63,7 +63,7 @@ "got": "^11.8.2", "js-sha256": "^0.9.0", "jszip": "^3.9.1", - "luxon": "^1.27.0", + "luxon": "^3.0.0", "memory-streams": "^0.1.3", "rxjs": "^7.5.5", "tmp": "^0.2.1", @@ -79,7 +79,7 @@ "@types/express": "^4.17.13", "@types/fs-extra": "^9.0.6", "@types/jest": "^26.0.6", - "@types/luxon": "^1.26.5", + "@types/luxon": "^3.0.0", "@types/multer": "^1.4.7", "@types/node": "16.11.29", "@types/supertest": "^2.0.10", diff --git a/libs/ballot-interpreter-nh/package.json b/libs/ballot-interpreter-nh/package.json index e274be0afe..3849f790c4 100644 --- a/libs/ballot-interpreter-nh/package.json +++ b/libs/ballot-interpreter-nh/package.json @@ -33,7 +33,7 @@ "he": "^1.2.0", "js-sha256": "^0.9.0", "jsdom": "^20.0.1", - "luxon": "^2.3.0", + "luxon": "^3.0.0", "tmp": "^0.2.1", "zod": "3.14.4" }, @@ -43,7 +43,7 @@ "@types/he": "^1.1.2", "@types/jest": "^27.4.0", "@types/jsdom": "^20.0.0", - "@types/luxon": "^2.0.9", + "@types/luxon": "^3.0.0", "@types/tmp": "^0.2.3", "@typescript-eslint/eslint-plugin": "^5.37.0", "@typescript-eslint/parser": "^5.37.0", diff --git a/libs/test-utils/package.json b/libs/test-utils/package.json index 0ea8529b93..13c9fa6d46 100644 --- a/libs/test-utils/package.json +++ b/libs/test-utils/package.json @@ -43,13 +43,13 @@ "fast-check": "^2.18.0", "jest-diff": "^27.3.1", "js-sha256": "^0.9.0", - "luxon": "1.26.0", + "luxon": "^3.0.0", "zip-stream": "^4.1.0" }, "devDependencies": { "@types/jest": "^27.0.3", "@types/kiosk-browser": "workspace:*", - "@types/luxon": "^1.26.5", + "@types/luxon": "^3.0.0", "@types/react": "17.0.39", "@types/zip-stream": "workspace:*", "@typescript-eslint/eslint-plugin": "^5.37.0", diff --git a/libs/test-utils/src/arbitraries.ts b/libs/test-utils/src/arbitraries.ts index 752779ec87..d0e36cea4b 100644 --- a/libs/test-utils/src/arbitraries.ts +++ b/libs/test-utils/src/arbitraries.ts @@ -178,7 +178,7 @@ export function arbitraryDateTime({ }) .map((parts) => { try { - const result = DateTime.fromObject({ ...parts, zone: zoneName }); + const result = DateTime.fromObject(parts, { zone: zoneName }); if ( result.year === parts.year && result.month === parts.month && diff --git a/libs/types/package.json b/libs/types/package.json index fb5d71c6c5..251dbdd8c9 100644 --- a/libs/types/package.json +++ b/libs/types/package.json @@ -40,14 +40,14 @@ "@antongolub/iso8601": "^1.2.1", "@votingworks/basics": "workspace:*", "js-sha256": "^0.9.0", - "luxon": "^2.4.0", + "luxon": "^3.0.0", "util": "^0.12.4", "zod": "3.14.4" }, "devDependencies": { "@types/jest": "^27.0.3", "@types/kiosk-browser": "workspace:*", - "@types/luxon": "^2.3.2", + "@types/luxon": "^3.0.0", "@types/node": "16.11.29", "@types/react": "17.0.39", "@typescript-eslint/eslint-plugin": "^5.37.0", diff --git a/libs/ui/package.json b/libs/ui/package.json index a44da7838f..03b3030b1b 100644 --- a/libs/ui/package.json +++ b/libs/ui/package.json @@ -54,7 +54,7 @@ "debug": "^4.3.2", "deep-eql": "^4.0.0", "dompurify": "^2.0.12", - "luxon": "1.26.0", + "luxon": "^3.0.0", "normalize.css": "^8.0.1", "pluralize": "^8.0.0", "polished": "^4.2.2", @@ -80,7 +80,7 @@ "@types/history": "4", "@types/jest": "^27.0.3", "@types/kiosk-browser": "workspace:*", - "@types/luxon": "^1.26.5", + "@types/luxon": "^3.0.0", "@types/node": "16.11.29", "@types/pluralize": "^0.0.29", "@types/react": "17.0.39", diff --git a/libs/ui/src/set_clock.test.tsx b/libs/ui/src/set_clock.test.tsx index 70b8bb68ff..76b4994ef8 100644 --- a/libs/ui/src/set_clock.test.tsx +++ b/libs/ui/src/set_clock.test.tsx @@ -23,15 +23,17 @@ function getSelect(testId: string): HTMLSelectElement { return screen.getByTestId(testId); } -const aDate = DateTime.fromObject({ - year: 2021, - month: 3, - day: 31, - hour: 19, - minute: 34, - second: 56, - zone: 'America/Los_Angeles', -}); +const aDate = DateTime.fromObject( + { + year: 2021, + month: 3, + day: 31, + hour: 19, + minute: 34, + second: 56, + }, + { zone: 'America/Los_Angeles' } +); describe('PickDateTimeModal', () => { test('shows pickers for the datetime parts of the given time', () => { @@ -141,15 +143,17 @@ describe('PickDateTimeModal', () => { // Expect a changed timezone expect(onSave).toHaveBeenNthCalledWith( 3, - DateTime.fromObject({ - year: aDate.year, - month: aDate.month, - day: changedDay, - hour: aDate.hour, - minute: aDate.minute, - second: 0, - zone: 'America/Chicago', - }) + DateTime.fromObject( + { + year: aDate.year, + month: aDate.month, + day: changedDay, + hour: aDate.hour, + minute: aDate.minute, + second: 0, + }, + { zone: 'America/Chicago' } + ) ); }); diff --git a/libs/ui/src/set_clock.tsx b/libs/ui/src/set_clock.tsx index 90e44003a7..ad0d83d400 100644 --- a/libs/ui/src/set_clock.tsx +++ b/libs/ui/src/set_clock.tsx @@ -1,4 +1,4 @@ -import { DateTime } from 'luxon'; +import { DateTime, HourNumbers } from 'luxon'; import React, { useCallback, useState } from 'react'; import { @@ -28,6 +28,15 @@ export interface PickDateAndTimeProps { value: DateTime; } +function asHour(hour: number): HourNumbers { + /* istanbul ignore next */ + if (hour < 0 || hour > 23) { + throw new Error(`Invalid hour: ${hour}`); + } + + return hour as HourNumbers; +} + export function PickDateTimeModal({ disabled = false, onCancel, @@ -42,20 +51,20 @@ export function PickDateTimeModal({ const { name, value: stringValue } = event.currentTarget; // eslint-disable-next-line vx/gts-safe-number-parse const partValue = parseInt(stringValue, 10); - let { hour } = newValue; + let hour = asHour(newValue.hour); if (name === 'hour') { if (systemMeridian === 'AM') { - hour = partValue % 12; + hour = asHour(partValue % 12); } else { - hour = (partValue % 12) + 12; + hour = asHour((partValue % 12) + 12); } } if (name === 'meridian') { if (stringValue === 'AM' && newValue.hour >= 12) { - hour = newValue.hour - 12; + hour = asHour(newValue.hour - 12); } if (stringValue === 'PM' && newValue.hour < 12) { - hour = newValue.hour + 12; + hour = asHour(newValue.hour + 12); } } const year = name === 'year' ? partValue : newValue.year; @@ -64,28 +73,32 @@ export function PickDateTimeModal({ const lastDayOfMonth = daysInMonth[daysInMonth.length - 1].day; const day = name === 'day' ? partValue : newValue.day; setNewValue( - DateTime.fromObject({ - year, - month, - day: lastDayOfMonth && day > lastDayOfMonth ? lastDayOfMonth : day, - hour, - minute: name === 'minute' ? partValue : newValue.minute, - zone: newValue.zone, - }) + DateTime.fromObject( + { + year, + month, + day: lastDayOfMonth && day > lastDayOfMonth ? lastDayOfMonth : day, + hour, + minute: name === 'minute' ? partValue : newValue.minute, + }, + { zone: newValue.zone } + ) ); }; const updateTimeZone: SelectChangeEventFunction = useCallback( (event) => { setNewValue( - DateTime.fromObject({ - year: newValue.year, - month: newValue.month, - day: newValue.day, - hour: newValue.hour, - minute: newValue.minute, - second: newValue.second, - zone: event.currentTarget.value, - }) + DateTime.fromObject( + { + year: newValue.year, + month: newValue.month, + day: newValue.day, + hour: newValue.hour, + minute: newValue.minute, + second: newValue.second, + }, + { zone: event.currentTarget.value } + ) ); }, [newValue, setNewValue] diff --git a/libs/utils/package.json b/libs/utils/package.json index cc2161309d..eb44bb34c1 100644 --- a/libs/utils/package.json +++ b/libs/utils/package.json @@ -44,7 +44,7 @@ "fetch-mock": "^9.11.0", "jest-fetch-mock": "^3.0.3", "jszip": "^3.9.1", - "luxon": "^1.27.0", + "luxon": "^3.0.0", "moment": "^2.29.1", "randombytes": "^2.1.0", "readline": "^1.3.0", @@ -56,7 +56,7 @@ "@types/fast-text-encoding": "^1.0.1", "@types/jest": "^27.0.3", "@types/kiosk-browser": "workspace:*", - "@types/luxon": "^1.26.5", + "@types/luxon": "^3.0.0", "@types/randombytes": "^2.0.0", "@types/yargs": "^17.0.12", "@typescript-eslint/eslint-plugin": "^5.37.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d521de224e..82f6522522 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -616,7 +616,7 @@ importers: '@types/express': ^4.17.14 '@types/fs-extra': ^9.0.6 '@types/jest': ^26.0.6 - '@types/luxon': ^1.26.5 + '@types/luxon': ^3.0.0 '@types/multer': ^1.4.7 '@types/node': 16.11.29 '@types/supertest': ^2.0.10 @@ -670,7 +670,7 @@ importers: js-sha256: ^0.9.0 jszip: ^3.9.1 lint-staged: ^10.5.3 - luxon: ^1.27.0 + luxon: ^3.0.0 memory-streams: ^0.1.3 multer: ^1.4.2 nodemon: ^2.0.20 @@ -713,7 +713,7 @@ importers: jest-diff: 26.6.2 js-sha256: 0.9.0 jszip: 3.9.1 - luxon: 1.27.0 + luxon: 3.3.0 memory-streams: 0.1.3 multer: 1.4.2 ora: 5.2.0 @@ -729,7 +729,7 @@ importers: '@types/express': 4.17.14 '@types/fs-extra': 9.0.13 '@types/jest': 26.0.23 - '@types/luxon': 1.27.1 + '@types/luxon': 3.2.0 '@types/multer': 1.4.7 '@types/node': 16.11.29 '@types/supertest': 2.0.10 @@ -1123,7 +1123,7 @@ importers: '@types/jest': 25.2.2 '@types/kiosk-browser': workspace:* '@types/lodash.camelcase': ^4.3.6 - '@types/luxon': ^1.26.2 + '@types/luxon': ^3.0.0 '@types/pluralize': ^0.0.29 '@types/react': 17.0.39 '@types/react-dom': ^17.0.0 @@ -1188,7 +1188,7 @@ importers: jest-watch-typeahead: 0.6.1 lint-staged: ^10.2.4 lodash.camelcase: ^4.3.0 - luxon: ^1.26.0 + luxon: ^3.0.0 mini-css-extract-plugin: 0.11.3 mockdate: ^3.0.2 node-fetch: ^2.6.0 @@ -1261,7 +1261,7 @@ importers: history: 4.10.1 http-proxy-middleware: 1.0.6_debug@4.3.4 lodash.camelcase: 4.3.0 - luxon: 1.27.0 + luxon: 3.3.0 mini-css-extract-plugin: 0.11.3_webpack@4.44.2 mockdate: 3.0.5 normalize.css: 8.0.1 @@ -1299,7 +1299,7 @@ importers: '@types/debug': 4.1.7 '@types/history': 4.7.11 '@types/kiosk-browser': link:../../../libs/@types/kiosk-browser - '@types/luxon': 1.27.1 + '@types/luxon': 3.2.0 '@types/react-gamepad': 1.0.0 '@types/setimmediate': 1.0.2 '@types/testing-library__jest-dom': 5.14.3 @@ -1425,7 +1425,7 @@ importers: '@types/express': ^4.17.13 '@types/fs-extra': ^9.0.6 '@types/jest': ^26.0.6 - '@types/luxon': ^1.26.5 + '@types/luxon': ^3.0.0 '@types/multer': ^1.4.7 '@types/node': 16.11.29 '@types/supertest': ^2.0.10 @@ -1474,7 +1474,7 @@ importers: js-sha256: ^0.9.0 jszip: ^3.9.1 lint-staged: ^10.5.3 - luxon: ^1.27.0 + luxon: ^3.0.0 memory-streams: ^0.1.3 nock: ^13.1.0 nodemon: ^2.0.20 @@ -1517,7 +1517,7 @@ importers: got: 11.8.2 js-sha256: 0.9.0 jszip: 3.9.1 - luxon: 1.27.0 + luxon: 3.3.0 memory-streams: 0.1.3 rxjs: 7.5.7 tmp: 0.2.1 @@ -1532,7 +1532,7 @@ importers: '@types/express': 4.17.14 '@types/fs-extra': 9.0.13 '@types/jest': 26.0.23 - '@types/luxon': 1.27.1 + '@types/luxon': 3.2.0 '@types/multer': 1.4.7 '@types/node': 16.11.29 '@types/supertest': 2.0.10 @@ -2114,7 +2114,7 @@ importers: '@types/he': ^1.1.2 '@types/jest': ^27.4.0 '@types/jsdom': ^20.0.0 - '@types/luxon': ^2.0.9 + '@types/luxon': ^3.0.0 '@types/tmp': ^0.2.3 '@typescript-eslint/eslint-plugin': ^5.37.0 '@typescript-eslint/parser': ^5.37.0 @@ -2147,7 +2147,7 @@ importers: jest-watch-typeahead: ^0.6.4 js-sha256: ^0.9.0 jsdom: ^20.0.1 - luxon: ^2.3.0 + luxon: ^3.0.0 tmp: ^0.2.1 ts-jest: ^29.0.5 typescript: 4.6.3 @@ -2165,7 +2165,7 @@ importers: he: 1.2.0 js-sha256: 0.9.0 jsdom: 20.0.1_canvas@2.9.1 - luxon: 2.3.1 + luxon: 3.3.0 tmp: 0.2.1 zod: 3.14.4 devDependencies: @@ -2174,7 +2174,7 @@ importers: '@types/he': 1.1.2 '@types/jest': 27.4.1 '@types/jsdom': 20.0.0 - '@types/luxon': 2.3.0 + '@types/luxon': 3.2.0 '@types/tmp': 0.2.3 '@typescript-eslint/eslint-plugin': 5.37.0_clqnhij63k7sxivgn64qsibvv4 '@typescript-eslint/parser': 5.37.0_2owex2qphpdtje5ztrbqluisqa @@ -3175,7 +3175,7 @@ importers: '@types/deep-eql': ^4.0.0 '@types/jest': ^27.0.3 '@types/kiosk-browser': workspace:* - '@types/luxon': ^1.26.5 + '@types/luxon': ^3.0.0 '@types/node': 16.11.29 '@types/react': 17.0.39 '@types/zip-stream': workspace:* @@ -3200,7 +3200,7 @@ importers: jest-watch-typeahead: ^0.6.4 js-sha256: ^0.9.0 lint-staged: ^11.0.0 - luxon: 1.26.0 + luxon: ^3.0.0 prettier: ^2.6.2 react: ^17.0.1 react-dom: ^17.0.1 @@ -3219,12 +3219,12 @@ importers: fast-check: 2.18.0 jest-diff: 27.5.1 js-sha256: 0.9.0 - luxon: 1.26.0 + luxon: 3.3.0 zip-stream: 4.1.0 devDependencies: '@types/jest': 27.0.3 '@types/kiosk-browser': link:../@types/kiosk-browser - '@types/luxon': 1.27.1 + '@types/luxon': 3.2.0 '@types/react': 17.0.39 '@types/zip-stream': link:../@types/zip-stream '@typescript-eslint/eslint-plugin': 5.37.0_clqnhij63k7sxivgn64qsibvv4 @@ -3253,7 +3253,7 @@ importers: '@antongolub/iso8601': ^1.2.1 '@types/jest': ^27.0.3 '@types/kiosk-browser': workspace:* - '@types/luxon': ^2.3.2 + '@types/luxon': ^3.0.0 '@types/node': 16.11.29 '@types/react': 17.0.39 '@typescript-eslint/eslint-plugin': ^5.37.0 @@ -3278,7 +3278,7 @@ importers: jest-watch-typeahead: ^2.2.2 js-sha256: ^0.9.0 lint-staged: ^11.0.0 - luxon: ^2.4.0 + luxon: ^3.0.0 prettier: ^2.6.2 sort-package-json: ^1.50.0 ts-jest: ^29.0.5 @@ -3289,13 +3289,13 @@ importers: '@antongolub/iso8601': 1.2.1 '@votingworks/basics': link:../basics js-sha256: 0.9.0 - luxon: 2.4.0 + luxon: 3.3.0 util: 0.12.4 zod: 3.14.4 devDependencies: '@types/jest': 27.0.3 '@types/kiosk-browser': link:../@types/kiosk-browser - '@types/luxon': 2.3.2 + '@types/luxon': 3.2.0 '@types/node': 16.11.29 '@types/react': 17.0.39 '@typescript-eslint/eslint-plugin': 5.37.0_clqnhij63k7sxivgn64qsibvv4 @@ -3344,7 +3344,7 @@ importers: '@types/jest': ^27.0.3 '@types/kiosk-browser': workspace:* '@types/lodash.clonedeep': ^4.5.7 - '@types/luxon': ^1.26.5 + '@types/luxon': ^3.0.0 '@types/node': 16.11.29 '@types/pluralize': ^0.0.29 '@types/react': 17.0.39 @@ -3392,7 +3392,7 @@ importers: lint-staged: ^11.0.0 lodash.clonedeep: ^4.5.0 lorem-ipsum: ^2.0.8 - luxon: 1.26.0 + luxon: ^3.0.0 mockdate: ^3.0.5 normalize.css: ^8.0.1 parse-css-color: ^0.2.1 @@ -3435,7 +3435,7 @@ importers: debug: 4.3.2 deep-eql: 4.0.0 dompurify: 2.3.8 - luxon: 1.26.0 + luxon: 3.3.0 normalize.css: 8.0.1 pluralize: 8.0.0 polished: 4.2.2 @@ -3460,7 +3460,7 @@ importers: '@types/history': 4.7.11 '@types/jest': 27.0.3 '@types/kiosk-browser': link:../@types/kiosk-browser - '@types/luxon': 1.27.1 + '@types/luxon': 3.2.0 '@types/node': 16.11.29 '@types/pluralize': 0.0.29 '@types/react': 17.0.39 @@ -3518,7 +3518,7 @@ importers: '@types/fast-text-encoding': ^1.0.1 '@types/jest': ^27.0.3 '@types/kiosk-browser': workspace:* - '@types/luxon': ^1.26.5 + '@types/luxon': ^3.0.0 '@types/node': 16.11.29 '@types/randombytes': ^2.0.0 '@types/yargs': ^17.0.12 @@ -3549,7 +3549,7 @@ importers: jest-watch-typeahead: ^2.2.2 jszip: ^3.9.1 lint-staged: ^11.0.0 - luxon: ^1.27.0 + luxon: ^3.0.0 mockdate: ^3.0.5 moment: ^2.29.1 prettier: ^2.6.2 @@ -3571,7 +3571,7 @@ importers: fetch-mock: 9.11.0 jest-fetch-mock: 3.0.3 jszip: 3.9.1 - luxon: 1.27.0 + luxon: 3.3.0 moment: 2.29.1 randombytes: 2.1.0 readline: 1.3.0 @@ -3582,7 +3582,7 @@ importers: '@types/fast-text-encoding': 1.0.1 '@types/jest': 27.0.3 '@types/kiosk-browser': link:../@types/kiosk-browser - '@types/luxon': 1.26.5 + '@types/luxon': 3.2.0 '@types/randombytes': 2.0.0 '@types/yargs': 17.0.12 '@typescript-eslint/eslint-plugin': 5.37.0_clqnhij63k7sxivgn64qsibvv4 @@ -10218,20 +10218,8 @@ packages: /@types/lodash/4.14.191: resolution: {integrity: sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==} - /@types/luxon/1.26.5: - resolution: {integrity: sha512-XeQxxRMyJi1znfzHw4CGDLyup/raj84SnjjkI2fDootZPGlB0yqtvlvEIAmzHDa5wiEI5JJevZOWxpcofsaV+A==} - dev: true - - /@types/luxon/1.27.1: - resolution: {integrity: sha512-cPiXpOvPFDr2edMnOXlz3UBDApwUfR+cpizvxCy0n3vp9bz/qe8BWzHPIEFcy+ogUOyjKuCISgyq77ELZPmkkg==} - dev: true - - /@types/luxon/2.3.0: - resolution: {integrity: sha512-mWXdRlg+5dWvxU+uaijB2RY5NrJtMEXR6j+D6W66hPuezSVXrQqQvWa/JNHntgEYgjzeoVRrQVmMWAbKjUJiFQ==} - dev: true - - /@types/luxon/2.3.2: - resolution: {integrity: sha512-WOehptuhKIXukSUUkRgGbj2c997Uv/iUgYgII8U7XLJqq9W2oF0kQ6frEznRQbdurioz+L/cdaIm4GutTQfgmA==} + /@types/luxon/3.2.0: + resolution: {integrity: sha512-lGmaGFoaXHuOLXFvuju2bfvZRqxAqkHPx9Y9IQdQABrinJJshJwfNCKV+u7rR3kJbiqfTF/NhOkcxxAFrObyaA==} dev: true /@types/mdast/3.0.3: @@ -17526,7 +17514,7 @@ packages: '@typescript-eslint/eslint-plugin': 5.37.0_clqnhij63k7sxivgn64qsibvv4 '@typescript-eslint/utils': 5.22.0_2owex2qphpdtje5ztrbqluisqa eslint: 8.23.1 - jest: 27.3.1_canvas@2.9.1 + jest: 27.3.1 transitivePeerDependencies: - supports-color - typescript @@ -18966,7 +18954,7 @@ packages: inherits: 2.0.4 readable-stream: 2.3.7 - /follow-redirects/1.14.1_debug@4.3.2: + /follow-redirects/1.14.1: resolution: {integrity: sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==} engines: {node: '>=4.0'} peerDependencies: @@ -18974,11 +18962,9 @@ packages: peerDependenciesMeta: debug: optional: true - dependencies: - debug: 4.3.2 dev: false - /follow-redirects/1.14.1_debug@4.3.4: + /follow-redirects/1.14.1_debug@4.3.2: resolution: {integrity: sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==} engines: {node: '>=4.0'} peerDependencies: @@ -18987,7 +18973,7 @@ packages: debug: optional: true dependencies: - debug: 4.3.4 + debug: 4.3.2 dev: false /for-each/0.3.3: @@ -19945,7 +19931,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.14.1_debug@4.3.2 + follow-redirects: 1.14.1 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -19956,7 +19942,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.14.1_debug@4.3.4 + follow-redirects: 1.14.1_debug@4.3.2 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -25332,21 +25318,8 @@ packages: dependencies: yallist: 4.0.0 - /luxon/1.26.0: - resolution: {integrity: sha512-+V5QIQ5f6CDXQpWNICELwjwuHdqeJM1UenlZWx5ujcRMc9venvluCjFb4t5NYLhb6IhkbMVOxzVuOqkgMxee2A==} - dev: false - - /luxon/1.27.0: - resolution: {integrity: sha512-VKsFsPggTA0DvnxtJdiExAucKdAnwbCCNlMM5ENvHlxubqWd0xhZcdb4XgZ7QFNhaRhilXCFxHuoObP5BNA4PA==} - dev: false - - /luxon/2.3.1: - resolution: {integrity: sha512-I8vnjOmhXsMSlNMZlMkSOvgrxKJl0uOsEzdGgGNZuZPaS9KlefpE9KV95QFftlJSC+1UyCC9/I69R02cz/zcCA==} - engines: {node: '>=12'} - dev: false - - /luxon/2.4.0: - resolution: {integrity: sha512-w+NAwWOUL5hO0SgwOHsMBAmZ15SoknmQXhSO0hIbJCAmPKSsGeK8MlmhYh2w6Iib38IxN2M+/ooXWLbeis7GuA==} + /luxon/3.3.0: + resolution: {integrity: sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==} engines: {node: '>=12'} dev: false @@ -30837,7 +30810,7 @@ packages: '@types/jest': 27.0.3 bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 27.3.1_canvas@2.9.1 + jest: 27.3.1 jest-util: 27.3.1 json5: 2.2.0 lodash.memoize: 4.1.2