diff --git a/.changeset/spotty-cougars-mate.md b/.changeset/spotty-cougars-mate.md new file mode 100644 index 0000000000..ceb65b657a --- /dev/null +++ b/.changeset/spotty-cougars-mate.md @@ -0,0 +1,8 @@ +--- +"@comet/admin": patch +--- + +Fix `EditDialog#onAfterSave` not called on form submission + +The `onAfterSave` callback was only called when submitting a form inside an `EditDialog` by clicking the save button, but not when submitting the form by hitting the enter key. +We fix this by adding the callback to the `EditDialogFormApi` and calling it after the form has been successfully submitted. diff --git a/packages/admin/admin/.eslintrc.json b/packages/admin/admin/.eslintrc.json index 0cf3c6408f..58a8b68b7b 100644 --- a/packages/admin/admin/.eslintrc.json +++ b/packages/admin/admin/.eslintrc.json @@ -5,5 +5,13 @@ "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-non-null-assertion": "off", "@comet/no-other-module-relative-import": "off" - } + }, + "overrides": [ + { + "files": ["*.test.ts", "*.test.tsx"], + "rules": { + "@calm/react-intl/missing-formatted-message": "off" + } + } + ] } diff --git a/packages/admin/admin/jest.config.ts b/packages/admin/admin/jest.config.ts index 65b2d877b3..11a9a2e5ba 100644 --- a/packages/admin/admin/jest.config.ts +++ b/packages/admin/admin/jest.config.ts @@ -1,6 +1,20 @@ -module.exports = { +import type { JestConfigWithTsJest } from "ts-jest"; + +const jestConfig: JestConfigWithTsJest = { preset: "ts-jest", testEnvironment: "jsdom", testPathIgnorePatterns: ["/node_modules/", "/lib/"], setupFilesAfterEnv: ["/setupTests.ts"], + transform: { + "^.+\\.tsx?$": [ + "ts-jest", + { + tsconfig: "tsconfig.test.json", + }, + ], + }, + // See https://testing-library.com/docs/react-testing-library/setup/#configuring-jest-with-test-utils + moduleDirectories: ["node_modules", "utils", __dirname], }; + +module.exports = jestConfig; diff --git a/packages/admin/admin/package.json b/packages/admin/admin/package.json index e9db20db1c..dbe8a5dcd4 100644 --- a/packages/admin/admin/package.json +++ b/packages/admin/admin/package.json @@ -54,9 +54,11 @@ "@mui/styles": "^5.0.0", "@mui/system": "^5.0.0", "@mui/x-data-grid": "^5.0.0", + "@testing-library/dom": "^9.3.3", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^12.1.5", "@testing-library/react-hooks": "^8.0.0", + "@testing-library/user-event": "^14.5.1", "@types/debounce": "^1.2.0", "@types/file-saver": "^2.0.1", "@types/final-form-set-field-data": "^1.0.0", diff --git a/packages/admin/admin/src/EditDialog.test.tsx b/packages/admin/admin/src/EditDialog.test.tsx new file mode 100644 index 0000000000..741d2b7e3e --- /dev/null +++ b/packages/admin/admin/src/EditDialog.test.tsx @@ -0,0 +1,89 @@ +import { Button } from "@mui/material"; +import userEvent from "@testing-library/user-event"; +import * as React from "react"; +import { render, screen, waitFor } from "test-utils"; + +import { useEditDialog } from "./EditDialog"; +import { FinalForm } from "./FinalForm"; +import { Field } from "./form/Field"; +import { FinalFormInput } from "./form/FinalFormInput"; + +describe("EditDialog", () => { + describe("onAfterSave", () => { + test("Should call onAfterSave when clicking save button", async () => { + const user = userEvent.setup(); + const onAfterSave = jest.fn(); + + function Story() { + const [EditDialog, , editDialogApi] = useEditDialog(); + + return ( + <> + + + { + // noop + }} + > + + + + + ); + } + + const rendered = render(); + + user.click(rendered.getByText("Open dialog")); + + // Edit dialog title -> dialog is open + await rendered.findByText("Add"); + + user.keyboard("Test"); + + user.click(screen.getByText("Save")); + + await waitFor(() => expect(onAfterSave).toHaveBeenCalledTimes(1)); + }); + + test("Should call onAfterSave when pressing Enter", async () => { + const user = userEvent.setup(); + const onAfterSave = jest.fn(); + + function Story() { + const [EditDialog, , editDialogApi] = useEditDialog(); + + return ( + <> + + + { + // noop + }} + > + + + + + ); + } + + const rendered = render(); + + user.click(rendered.getByText("Open dialog")); + + // Edit dialog title -> dialog is open + await rendered.findByText("Add"); + + user.keyboard("Test"); + + user.keyboard("{Enter}"); + + await waitFor(() => expect(onAfterSave).toHaveBeenCalledTimes(1)); + }); + }); +}); diff --git a/packages/admin/admin/src/EditDialog.tsx b/packages/admin/admin/src/EditDialog.tsx index 5a522e8aba..93a9d64532 100644 --- a/packages/admin/admin/src/EditDialog.tsx +++ b/packages/admin/admin/src/EditDialog.tsx @@ -85,7 +85,7 @@ export function useEditDialog(): [React.ComponentType, { id?: s return (props: EditDialogProps) => { return ( - + @@ -138,7 +138,6 @@ const EditDialogInner: React.FunctionComponent = ( if (!disableCloseAfterSave) { api.closeDialog({ delay: true }); } - onAfterSave?.(); }); } }; diff --git a/packages/admin/admin/src/EditDialogFormApiContext.tsx b/packages/admin/admin/src/EditDialogFormApiContext.tsx index 595f947199..2bfeae42fe 100644 --- a/packages/admin/admin/src/EditDialogFormApiContext.tsx +++ b/packages/admin/admin/src/EditDialogFormApiContext.tsx @@ -7,6 +7,7 @@ export interface EditDialogFormApi { hasErrors: boolean; onFormStatusChange: (status: FormStatus) => void; resetFormStatus: () => void; + onAfterSave?: () => void; } export const EditDialogFormApiContext = React.createContext(null); @@ -14,7 +15,11 @@ export function useEditDialogFormApi() { return React.useContext(EditDialogFormApiContext); } -export const EditDialogFormApiProvider: React.FunctionComponent = ({ children }) => { +type EditDialogFormApiProviderProps = { + onAfterSave?: () => void; +}; + +export const EditDialogFormApiProvider: React.FunctionComponent = ({ children, onAfterSave }) => { const [status, setStatus] = React.useState(null); const onFormStatusChange = React.useCallback((status: FormStatus) => { @@ -31,8 +36,9 @@ export const EditDialogFormApiProvider: React.FunctionComponent = ({ children }) hasErrors: status === "error", onFormStatusChange, resetFormStatus, + onAfterSave, }; - }, [onFormStatusChange, resetFormStatus, status]); + }, [onFormStatusChange, resetFormStatus, status, onAfterSave]); return {children}; }; diff --git a/packages/admin/admin/src/FinalForm.tsx b/packages/admin/admin/src/FinalForm.tsx index d849c62860..5e78f778c8 100644 --- a/packages/admin/admin/src/FinalForm.tsx +++ b/packages/admin/admin/src/FinalForm.tsx @@ -235,6 +235,7 @@ export function FinalForm(props: IProps) { } onAfterSubmit(values, form); + editDialogFormApi?.onAfterSave?.(); }); return data; }) diff --git a/packages/admin/admin/src/utils/test-utils.tsx b/packages/admin/admin/src/utils/test-utils.tsx new file mode 100644 index 0000000000..7926238ec3 --- /dev/null +++ b/packages/admin/admin/src/utils/test-utils.tsx @@ -0,0 +1,28 @@ +// Inspired by https://testing-library.com/docs/react-testing-library/setup/#custom-render +import { createTheme } from "@mui/material"; +import { render, RenderOptions, RenderResult } from "@testing-library/react"; +import React from "react"; +import { IntlProvider } from "react-intl"; + +import { MuiThemeProvider } from "../mui/ThemeProvider"; +import { RouterMemoryRouter } from "../router/MemoryRouter"; + +const messages = {}; +const theme = createTheme(); + +function DefaultWrapper({ children }: { children: React.ReactNode }) { + return ( + + + {children} + + + ); +} + +function customRender(ui: React.ReactElement, options?: Omit): RenderResult { + return render(ui, { wrapper: DefaultWrapper, ...options }); +} + +export * from "@testing-library/react"; +export { customRender as render }; diff --git a/packages/admin/admin/tsconfig.json b/packages/admin/admin/tsconfig.json index 8bf95b1765..24bea63186 100644 --- a/packages/admin/admin/tsconfig.json +++ b/packages/admin/admin/tsconfig.json @@ -2,7 +2,12 @@ "extends": "../tsconfig.base.json", "compilerOptions": { "outDir": "lib", - "rootDir": "src" + "rootDir": "src", + "baseUrl": "src", + "paths": { + // See https://testing-library.com/docs/react-testing-library/setup/#configuring-jest-with-test-utils + "test-utils": ["./utils/test-utils"] + } }, "include": ["./src"], "exclude": [] diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e1fe57712..25679f0302 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1039,6 +1039,9 @@ importers: '@mui/x-data-grid': specifier: ^5.0.0 version: 5.17.20(@mui/material@5.11.6)(@mui/system@5.11.5)(react-dom@17.0.2)(react@17.0.2) + '@testing-library/dom': + specifier: ^9.3.3 + version: 9.3.3 '@testing-library/jest-dom': specifier: ^5.16.5 version: 5.16.5 @@ -1048,6 +1051,9 @@ importers: '@testing-library/react-hooks': specifier: ^8.0.0 version: 8.0.1(@types/react@17.0.53)(react-dom@17.0.2)(react@17.0.2) + '@testing-library/user-event': + specifier: ^14.5.1 + version: 14.5.1(@testing-library/dom@9.3.3) '@types/debounce': specifier: ^1.2.0 version: 1.2.1 @@ -3206,7 +3212,7 @@ packages: '@babel/generator': 7.20.7 '@babel/parser': 7.20.13 '@babel/runtime': 7.20.13 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 babel-preset-fbjs: 3.4.0(@babel/core@7.22.11) chalk: 4.1.2 @@ -4256,10 +4262,10 @@ packages: '@babel/helpers': 7.20.13 '@babel/parser': 7.20.13 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 lodash: 4.17.21 @@ -4282,10 +4288,10 @@ packages: '@babel/helpers': 7.20.13 '@babel/parser': 7.20.13 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.0 @@ -4307,7 +4313,7 @@ packages: '@babel/traverse': 7.22.11 '@babel/types': 7.22.11 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4446,8 +4452,8 @@ packages: '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.11) '@babel/helper-module-imports': 7.18.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/traverse': 7.20.13 - debug: 4.3.4(supports-color@9.3.1) + '@babel/traverse': 7.20.13(supports-color@5.5.0) + debug: 4.3.4(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.0 @@ -4463,7 +4469,7 @@ packages: '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.0 @@ -4478,7 +4484,7 @@ packages: '@babel/core': 7.22.11 '@babel/helper-compilation-targets': 7.20.7(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) lodash.debounce: 4.0.8 resolve: 1.22.1 semver: 6.3.0 @@ -4554,7 +4560,7 @@ packages: '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -4627,7 +4633,7 @@ packages: '@babel/helper-member-expression-to-functions': 7.20.7 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -4692,7 +4698,7 @@ packages: dependencies: '@babel/helper-function-name': 7.19.0 '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -4702,7 +4708,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/template': 7.20.7 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color @@ -6735,23 +6741,6 @@ packages: '@babel/parser': 7.22.14 '@babel/types': 7.22.11 - /@babel/traverse@7.20.13: - resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.7 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 - '@babel/helper-hoist-variables': 7.18.6 - '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.13 - '@babel/types': 7.20.7 - debug: 4.3.4(supports-color@9.3.1) - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - /@babel/traverse@7.20.13(supports-color@5.5.0): resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} engines: {node: '>=6.9.0'} @@ -6781,7 +6770,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.14 '@babel/types': 7.22.11 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -7074,7 +7063,7 @@ packages: '@babel/preset-typescript': 7.18.6(@babel/core@7.22.11) '@babel/runtime': 7.20.13 '@babel/runtime-corejs3': 7.22.6 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@docusaurus/cssnano-preset': 2.4.1 '@docusaurus/logger': 2.4.1 '@docusaurus/mdx-loader': 2.4.1(@docusaurus/types@2.4.1)(react-dom@17.0.2)(react@17.0.2) @@ -7183,7 +7172,7 @@ packages: react-dom: ^16.8.4 || ^17.0.0 dependencies: '@babel/parser': 7.20.13 - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@docusaurus/logger': 2.4.1 '@docusaurus/utils': 2.4.1(@docusaurus/types@2.4.1) '@mdx-js/mdx': 1.6.22 @@ -8136,7 +8125,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) espree: 9.5.2 globals: 13.19.0 ignore: 5.2.4 @@ -8152,7 +8141,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) espree: 9.5.2 globals: 13.19.0 ignore: 5.2.4 @@ -8960,7 +8949,7 @@ packages: dependencies: '@babel/parser': 7.20.13 '@babel/plugin-syntax-import-assertions': 7.20.0(@babel/core@7.20.12) - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 '@graphql-tools/utils': 9.1.4(graphql@15.8.0) graphql: 15.8.0 @@ -9143,7 +9132,7 @@ packages: '@types/json-stable-stringify': 1.0.34 '@types/jsonwebtoken': 9.0.1 chalk: 4.1.2 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) dotenv: 16.0.3 graphql: 15.8.0 graphql-request: 5.1.0(graphql@15.8.0) @@ -9494,7 +9483,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -10152,7 +10141,7 @@ packages: dependencies: '@open-draft/until': 1.0.3 '@xmldom/xmldom': 0.7.10 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) headers-utils: 3.0.2 outvariant: 1.4.0 strict-event-emitter: 0.2.8 @@ -12731,7 +12720,7 @@ packages: '@babel/parser': 7.20.13 '@babel/plugin-transform-react-jsx': 7.20.13(@babel/core@7.22.11) '@babel/preset-env': 7.20.2(@babel/core@7.22.11) - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 '@storybook/csf': 0.0.2--canary.4566f4d.1 '@storybook/mdx1-csf': 0.0.1(@babel/core@7.22.11) @@ -12967,7 +12956,7 @@ packages: typescript: '>= 3.x' webpack: '>= 4' dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.0.4 @@ -13391,6 +13380,20 @@ packages: pretty-format: 27.5.1 dev: true + /@testing-library/dom@9.3.3: + resolution: {integrity: sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw==} + engines: {node: '>=14'} + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/runtime': 7.20.13 + '@types/aria-query': 5.0.1 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true + /@testing-library/jest-dom@5.16.5: resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==} engines: {node: '>=8', npm: '>=6', yarn: '>=1'} @@ -13443,6 +13446,15 @@ packages: react-dom: 17.0.2(react@17.0.2) dev: true + /@testing-library/user-event@14.5.1(@testing-library/dom@9.3.3): + resolution: {integrity: sha512-UCcUKrUYGj7ClomOo2SpNVvx4/fkd/2BbIHDCle8A0ax+P3bU7yJwDBDrS6ZwdTMARWTGODX1hEsCcO+7beJjg==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + dependencies: + '@testing-library/dom': 9.3.3 + dev: true + /@tokenizer/token@0.3.0: resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} dev: false @@ -14511,7 +14523,7 @@ packages: '@typescript-eslint/scope-manager': 5.49.0 '@typescript-eslint/type-utils': 5.49.0(eslint@8.32.0)(typescript@4.9.4) '@typescript-eslint/utils': 5.49.0(eslint@8.32.0)(typescript@4.9.4) - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.32.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 @@ -14536,7 +14548,7 @@ packages: '@typescript-eslint/scope-manager': 5.49.0 '@typescript-eslint/types': 5.49.0 '@typescript-eslint/typescript-estree': 5.49.0(typescript@4.9.4) - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.32.0 typescript: 4.9.4 transitivePeerDependencies: @@ -14563,7 +14575,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 5.49.0(typescript@4.9.4) '@typescript-eslint/utils': 5.49.0(eslint@8.32.0)(typescript@4.9.4) - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) eslint: 8.32.0 tsutils: 3.21.0(typescript@4.9.4) typescript: 4.9.4 @@ -14587,7 +14599,7 @@ packages: dependencies: '@typescript-eslint/types': 5.49.0 '@typescript-eslint/visitor-keys': 5.49.0 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 @@ -15222,7 +15234,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -15231,7 +15243,7 @@ packages: resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==} engines: {node: '>= 8.0.0'} dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) depd: 1.1.2 humanize-ms: 1.2.1 transitivePeerDependencies: @@ -18351,6 +18363,7 @@ packages: dependencies: ms: 2.1.2 supports-color: 9.3.1 + dev: true /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -18588,7 +18601,7 @@ packages: hasBin: true dependencies: address: 1.2.2 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: false @@ -19004,7 +19017,7 @@ packages: basic-auth: 2.0.1 cookie: 0.5.0 core-util-is: 1.0.3 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) elastic-apm-http-client: 11.2.0 end-of-stream: 1.4.4 error-callsites: 2.0.4 @@ -19358,7 +19371,7 @@ packages: eslint: '*' eslint-plugin-import: '*' dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) enhanced-resolve: 5.12.0 eslint: 8.32.0 eslint-plugin-import: 2.27.5(@typescript-eslint/parser@5.49.0)(eslint-import-resolver-typescript@3.5.3)(eslint@8.32.0) @@ -19645,7 +19658,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 @@ -19695,7 +19708,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 @@ -19785,7 +19798,7 @@ packages: resolution: {integrity: sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg==} engines: {node: '>=8.3.0'} dependencies: - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 c8: 7.12.0 transitivePeerDependencies: @@ -21277,7 +21290,7 @@ packages: peerDependencies: graphql: '>=0.9 <0.14 || ^14.0.2 || ^15.4.0 || ^16.3.0' dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) graphql: 15.8.0 tslib: 2.4.1 transitivePeerDependencies: @@ -21806,7 +21819,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -21867,7 +21880,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) transitivePeerDependencies: - supports-color dev: true @@ -22786,7 +22799,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: @@ -23232,7 +23245,7 @@ packages: '@babel/generator': 7.20.7 '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.22.11) '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.22.11) - '@babel/traverse': 7.20.13 + '@babel/traverse': 7.20.13(supports-color@5.5.0) '@babel/types': 7.20.7 '@jest/expect-utils': 29.5.0 '@jest/transform': 29.5.0 @@ -23674,7 +23687,7 @@ packages: dependencies: '@types/express': 4.17.16 '@types/jsonwebtoken': 9.0.1 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) jose: 4.11.2 limiter: 1.1.5 lru-memoizer: 2.1.4 @@ -23765,7 +23778,7 @@ packages: dependencies: colorette: 2.0.19 commander: 9.5.0 - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) escalade: 3.1.1 esm: 3.2.25 get-package-type: 0.1.0 @@ -28147,7 +28160,7 @@ packages: resolution: {integrity: sha512-efCx3b+0Z69/LGJmm9Yvi4cqEdxnoGnxYxGxBghkkTTFeXRtTCmmhO0AnAfHz59k957uTSuy8WaHqOs8wbYUWg==} engines: {node: '>=6'} dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) module-details-from-path: 1.0.3 resolve: 1.22.1 transitivePeerDependencies: @@ -28976,7 +28989,7 @@ packages: /spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -28989,7 +29002,7 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} dependencies: - debug: 4.3.4(supports-color@9.3.1) + debug: 4.3.4(supports-color@5.5.0) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -29581,6 +29594,7 @@ packages: /supports-color@9.3.1: resolution: {integrity: sha512-knBY82pjmnIzK3NifMo3RxEIRD9E0kIzV4BKcyTZ9+9kWgLMxd4PrsTSMoFQUabgRBbF8KOLRDCyKgNV+iK44Q==} engines: {node: '>=12'} + dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}