diff --git a/CHANGELOG.md b/CHANGELOG.md
index db8fbfc754..b6d0a5d791 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,12 +4,33 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+#### [v6.170.0](https://github.com/opengovsg/FormSG/compare/v6.169.1...v6.170.0)
+
+- fix(sgid): add guard clause to ensure field is present before formatting [`#7997`](https://github.com/opengovsg/FormSG/pull/7997)
+- fix(deps): bump aws-sdk from 2.1691.0 to 2.1692.0 [`#7951`](https://github.com/opengovsg/FormSG/pull/7951)
+- fix(deps): bump libphonenumber-js from 1.11.15 to 1.11.16 in /shared [`#7974`](https://github.com/opengovsg/FormSG/pull/7974)
+- chore(deps-dev): bump eslint-plugin-playwright from 1.6.1 to 2.1.0 [`#7953`](https://github.com/opengovsg/FormSG/pull/7953)
+- feat(i18n): extract general,notifs,webhooks settings [`#7955`](https://github.com/opengovsg/FormSG/pull/7955)
+- build: merge release 6.169.0 to develop [`#7987`](https://github.com/opengovsg/FormSG/pull/7987)
+- fix(i18n): replace title,desc missed earlier [`#7940`](https://github.com/opengovsg/FormSG/pull/7940)
+- feat(i18n): replace hardcoded text in FeedbackBlock for i18n [`#7941`](https://github.com/opengovsg/FormSG/pull/7941)
+
+#### [v6.169.1](https://github.com/opengovsg/FormSG/compare/v6.169.0...v6.169.1)
+
+> 13 December 2024
+
+- feat: add formurl to otp email [`#7993`](https://github.com/opengovsg/FormSG/pull/7993)
+- build: release v6.169.0 [`#7986`](https://github.com/opengovsg/FormSG/pull/7986)
+
#### [v6.169.0](https://github.com/opengovsg/FormSG/compare/v6.168.0...v6.169.0)
+> 11 December 2024
+
- feat: move to react email, update copy [`#7985`](https://github.com/opengovsg/FormSG/pull/7985)
- feat: add logs for uploads to s3 [`#7975`](https://github.com/opengovsg/FormSG/pull/7975)
- build: merge release v6.168.0 to develop [`#7973`](https://github.com/opengovsg/FormSG/pull/7973)
- build: release v6.168.0 [`#7971`](https://github.com/opengovsg/FormSG/pull/7971)
+- chore: bump version to v6.169.0 [`ae74833`](https://github.com/opengovsg/FormSG/commit/ae74833bf1ac3910cbc14ec9cdca5197d15e3ae7)
#### [v6.168.0](https://github.com/opengovsg/FormSG/compare/v6.167.0...v6.168.0)
@@ -31,16 +52,15 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
- feat: update form create modal response options [`#7957`](https://github.com/opengovsg/FormSG/pull/7957)
- chore: include latest features in whats new page [`#7956`](https://github.com/opengovsg/FormSG/pull/7956)
- build: release v6.166.1 [`#7950`](https://github.com/opengovsg/FormSG/pull/7950)
-- fix: trim previous text responses [`#7949`](https://github.com/opengovsg/FormSG/pull/7949)
- chore: bump version to v6.167.0 [`9f97c52`](https://github.com/opengovsg/FormSG/commit/9f97c52fa05aa990beb143139ef36b027e0b3874)
-- chore: bump version to v6.166.1 [`844ee29`](https://github.com/opengovsg/FormSG/commit/844ee2912b45fd0d7dc3fedaab7b53adfa1375d8)
#### [v6.166.1](https://github.com/opengovsg/FormSG/compare/v6.166.0...v6.166.1)
> 27 November 2024
+- fix: trim previous text responses [`#7949`](https://github.com/opengovsg/FormSG/pull/7949)
- build: release v6.166.0 [`#7945`](https://github.com/opengovsg/FormSG/pull/7945)
-- chore: bump version to v6.166.1 [`18d9c74`](https://github.com/opengovsg/FormSG/commit/18d9c74cde8739bc96a0833f3764cb518e4e34aa)
+- chore: bump version to v6.166.1 [`844ee29`](https://github.com/opengovsg/FormSG/commit/844ee2912b45fd0d7dc3fedaab7b53adfa1375d8)
#### [v6.166.0](https://github.com/opengovsg/FormSG/compare/v6.165.0...v6.166.0)
diff --git a/__tests__/e2e/helpers/createForm.ts b/__tests__/e2e/helpers/createForm.ts
index e0b8b4f7ee..7372e630ef 100644
--- a/__tests__/e2e/helpers/createForm.ts
+++ b/__tests__/e2e/helpers/createForm.ts
@@ -181,9 +181,7 @@ const addSettings = async (
await page.getByRole('tab', { name: 'General' }).dispatchEvent('click')
// Ensure that we are on the general settings page
- await expect(
- page.getByRole('heading', { name: 'General settings' }),
- ).toBeVisible()
+ await expect(page.getByRole('heading', { name: 'General' })).toBeVisible()
// Toggle form to be open
await page
@@ -226,9 +224,7 @@ const addGeneralSettings = async (
await page.getByRole('tab', { name: 'General' }).click()
// Ensure that we are on the general settings page
- await expect(
- page.getByRole('heading', { name: 'General settings' }),
- ).toBeVisible()
+ await expect(page.getByRole('heading', { name: 'General' })).toBeVisible()
await expectToast(page, /your form is closed to new responses/i)
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index a7bc748271..b7cfd8cfd6 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "form-frontend",
- "version": "6.169.0",
+ "version": "6.170.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "form-frontend",
- "version": "6.169.0",
+ "version": "6.170.0",
"hasInstallScript": true,
"dependencies": {
"@chakra-ui/react": "^2.8.2",
diff --git a/frontend/package.json b/frontend/package.json
index 2b8d79ac69..a021f4f9f1 100644
--- a/frontend/package.json
+++ b/frontend/package.json
@@ -1,6 +1,6 @@
{
"name": "form-frontend",
- "version": "6.169.0",
+ "version": "6.170.0",
"homepage": ".",
"type": "module",
"private": true,
diff --git a/frontend/src/components/Spinner/Spinner.tsx b/frontend/src/components/Spinner/Spinner.tsx
index 4995bbc0fa..f1cc44a1a3 100644
--- a/frontend/src/components/Spinner/Spinner.tsx
+++ b/frontend/src/components/Spinner/Spinner.tsx
@@ -1,4 +1,5 @@
import { useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
import { BiLoader } from 'react-icons/bi'
import {
Flex,
@@ -47,10 +48,11 @@ const spin = keyframes({
export const Spinner = ({
speed = '2.5s',
color = 'inherit',
- label = 'Loading...',
+ label: userSpecifiedLabel,
fontSize = '1rem',
...flexProps
}: SpinnerProps): JSX.Element => {
+ const { t } = useTranslation()
const prefersReducedMotion = usePrefersReducedMotion()
const animation = useMemo(
@@ -59,6 +61,8 @@ export const Spinner = ({
[prefersReducedMotion, speed],
)
+ const label = userSpecifiedLabel ?? t('features.common.loadingWithEllipsis')
+
return (
{label && {label}}
diff --git a/frontend/src/features/admin-form/common/components/AdminFormNavbar/AdminFormNavbarBreadcrumbs.tsx b/frontend/src/features/admin-form/common/components/AdminFormNavbar/AdminFormNavbarBreadcrumbs.tsx
index 9aa99cbb25..62a10ef9d0 100644
--- a/frontend/src/features/admin-form/common/components/AdminFormNavbar/AdminFormNavbarBreadcrumbs.tsx
+++ b/frontend/src/features/admin-form/common/components/AdminFormNavbar/AdminFormNavbarBreadcrumbs.tsx
@@ -1,3 +1,4 @@
+import { useTranslation } from 'react-i18next'
import { BiHomeAlt } from 'react-icons/bi'
import { Link as ReactLink } from 'react-router-dom'
import { Icon, Skeleton, Stack, Text } from '@chakra-ui/react'
@@ -13,6 +14,7 @@ type AdminFormNavbarDetailsProps = Pick
export const AdminFormNavbarBreadcrumbs = ({
formInfo,
}: AdminFormNavbarDetailsProps): JSX.Element => {
+ const { t } = useTranslation()
const isMobile = useIsMobile()
return (
@@ -44,7 +46,7 @@ export const AdminFormNavbarBreadcrumbs = ({
overflow="hidden"
color="secondary.500"
>
- {formInfo ? formInfo.title : 'Loading...'}
+ {formInfo ? formInfo.title : t('features.common.loadingWithEllipsis')}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditAttachment/EditAttachment.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditAttachment/EditAttachment.tsx
index cdedaa7311..ffeef00879 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditAttachment/EditAttachment.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditAttachment/EditAttachment.tsx
@@ -136,7 +136,7 @@ export const EditAttachment = ({ field }: EditAttachmentProps): JSX.Element => {
)
},
}),
- [maxTotalSizeMb, otherAttachmentsSize],
+ [maxTotalSizeMb, otherAttachmentsSize, t],
)
const validateAttachmentSize = useCallback(() => {
@@ -154,12 +154,18 @@ export const EditAttachment = ({ field }: EditAttachmentProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditCheckbox/EditCheckbox.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditCheckbox/EditCheckbox.tsx
index 36da3bc6cd..22ba191a9b 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditCheckbox/EditCheckbox.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditCheckbox/EditCheckbox.tsx
@@ -213,12 +213,18 @@ export const EditCheckbox = ({ field }: EditCheckboxProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditCountryRegion/EditCountryRegion.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditCountryRegion/EditCountryRegion.tsx
index 57e4a31f11..2c0da32e63 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditCountryRegion/EditCountryRegion.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditCountryRegion/EditCountryRegion.tsx
@@ -1,4 +1,5 @@
import { useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
import { FormControl } from '@chakra-ui/react'
import { extend, pick } from 'lodash'
@@ -61,6 +62,8 @@ export const EditCountryRegion = ({
},
})
+ const { t } = useTranslation()
+
const requiredValidationRule = useMemo(
() => createBaseValidationRules({ required: true }),
[],
@@ -69,12 +72,18 @@ export const EditCountryRegion = ({
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDate/EditDate.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDate/EditDate.tsx
index 920fa62f32..dc648d84bc 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDate/EditDate.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDate/EditDate.tsx
@@ -253,7 +253,7 @@ export const EditDate = ({ field }: EditDateProps): JSX.Element => {
},
deps: 'invalidDays',
}),
- [getValues],
+ [getValues, t],
)
const { drawerWidth } = useCreatePageSidebarLayout()
@@ -261,12 +261,18 @@ export const EditDate = ({ field }: EditDateProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDecimal/EditDecimal.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDecimal/EditDecimal.tsx
index 2e1921e354..55a631c951 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDecimal/EditDecimal.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDecimal/EditDecimal.tsx
@@ -93,12 +93,14 @@ export const EditDecimal = ({ field }: EditDecimalProps): JSX.Element => {
)
},
}
- }, [getValues])
+ }, [getValues, t])
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
@@ -107,7 +109,11 @@ export const EditDecimal = ({ field }: EditDecimalProps): JSX.Element => {
isReadOnly={isLoading}
isInvalid={!!errors.description}
>
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDropdown/EditDropdown.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDropdown/EditDropdown.tsx
index 6767c16486..146a4cde06 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDropdown/EditDropdown.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditDropdown/EditDropdown.tsx
@@ -87,12 +87,18 @@ export const EditDropdown = ({ field }: EditDropdownProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditEmail/EditEmail.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditEmail/EditEmail.tsx
index 047a0896ad..6e9573f9fb 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditEmail/EditEmail.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditEmail/EditEmail.tsx
@@ -155,7 +155,9 @@ export const EditEmail = ({ field }: EditEmailProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
@@ -164,7 +166,11 @@ export const EditEmail = ({ field }: EditEmailProps): JSX.Element => {
isReadOnly={isLoading}
isInvalid={!!errors.description}
>
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditHeader.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditHeader.tsx
index fa2c4fd7ed..c02bb273a3 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditHeader.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditHeader.tsx
@@ -54,7 +54,11 @@ export const EditHeader = ({ field }: EditHeaderProps): JSX.Element => {
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditHomeno/EditHomeno.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditHomeno/EditHomeno.tsx
index 06732ac4a2..fc06663b85 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditHomeno/EditHomeno.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditHomeno/EditHomeno.tsx
@@ -54,7 +54,9 @@ export const EditHomeno = ({ field }: EditHomenoProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
@@ -63,7 +65,11 @@ export const EditHomeno = ({ field }: EditHomenoProps): JSX.Element => {
isReadOnly={isLoading}
isInvalid={!!errors.description}
>
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditImage/EditImage.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditImage/EditImage.tsx
index 6c7b735383..9fc6ccaaf7 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditImage/EditImage.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditImage/EditImage.tsx
@@ -193,7 +193,11 @@ export const EditImage = ({ field }: EditImageProps): JSX.Element => {
isReadOnly={isLoading || isSubmitting}
isInvalid={!!errors.description}
>
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditLongText/EditLongText.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditLongText/EditLongText.tsx
index 9da359808a..b32e42a309 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditLongText/EditLongText.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditLongText/EditLongText.tsx
@@ -1,5 +1,6 @@
import { useMemo } from 'react'
import { Controller, RegisterOptions } from 'react-hook-form'
+import { useTranslation } from 'react-i18next'
import { FormControl, SimpleGrid } from '@chakra-ui/react'
import { extend, isEmpty, pick } from 'lodash'
@@ -87,6 +88,8 @@ export const EditLongText = ({ field }: EditLongTextProps): JSX.Element => {
},
})
+ const { t } = useTranslation()
+
const requiredValidationRule = useMemo(
() => createBaseValidationRules({ required: true }),
[],
@@ -130,7 +133,9 @@ export const EditLongText = ({ field }: EditLongTextProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
@@ -139,7 +144,11 @@ export const EditLongText = ({ field }: EditLongTextProps): JSX.Element => {
isReadOnly={isLoading}
isInvalid={!!errors.description}
>
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditMobile/EditMobile.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditMobile/EditMobile.tsx
index 386bd4df43..c039d8ed8b 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditMobile/EditMobile.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditMobile/EditMobile.tsx
@@ -60,7 +60,9 @@ export const EditMobile = ({ field }: EditMobileProps): JSX.Element => {
isReadOnly={isLoading}
isInvalid={!!errors.title}
>
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditNric.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditNric.tsx
index d117e03b33..886907398d 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditNric.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditNric.tsx
@@ -1,4 +1,5 @@
import { useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
import { FormControl } from '@chakra-ui/react'
import { extend, pick } from 'lodash'
@@ -39,6 +40,8 @@ export const EditNric = ({ field }: EditNricProps): JSX.Element => {
},
})
+ const { t } = useTranslation()
+
const requiredValidationRule = useMemo(
() => createBaseValidationRules({ required: true }),
[],
@@ -47,12 +50,18 @@ export const EditNric = ({ field }: EditNricProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditRating/EditRating.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditRating/EditRating.tsx
index ad23ba2448..03b9b0aa12 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditRating/EditRating.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditRating/EditRating.tsx
@@ -65,12 +65,18 @@ export const EditRating = ({ field }: EditRatingProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditShortText/EditShortText.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditShortText/EditShortText.tsx
index 2da802921b..3fa2eb80b8 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditShortText/EditShortText.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditShortText/EditShortText.tsx
@@ -1,5 +1,6 @@
import { useEffect, useMemo, useRef } from 'react'
import { Controller, RegisterOptions } from 'react-hook-form'
+import { useTranslation } from 'react-i18next'
import {
FormControl,
InputGroup,
@@ -102,6 +103,7 @@ export const EditShortText = ({ field }: EditShortTextProps): JSX.Element => {
output: transformShortTextEditFormToField,
},
})
+ const { t } = useTranslation()
const requiredValidationRule = useMemo(
() => createBaseValidationRules({ required: true }),
@@ -175,7 +177,9 @@ export const EditShortText = ({ field }: EditShortTextProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
@@ -184,7 +188,11 @@ export const EditShortText = ({ field }: EditShortTextProps): JSX.Element => {
isReadOnly={isLoading}
isInvalid={!!errors.description}
>
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditUen.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditUen.tsx
index b580ebac15..05c34b7b0c 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditUen.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditUen.tsx
@@ -1,4 +1,5 @@
import { useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
import { FormControl } from '@chakra-ui/react'
import { extend, pick } from 'lodash'
@@ -39,6 +40,8 @@ export const EditUen = ({ field }: EditUenProps): JSX.Element => {
},
})
+ const { t } = useTranslation()
+
const requiredValidationRule = useMemo(
() => createBaseValidationRules({ required: true }),
[],
@@ -47,12 +50,18 @@ export const EditUen = ({ field }: EditUenProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditYesNo.tsx b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditYesNo.tsx
index be83ad820f..f1983de973 100644
--- a/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditYesNo.tsx
+++ b/frontend/src/features/admin-form/create/builder-and-design/BuilderAndDesignDrawer/EditFieldDrawer/edit-fieldtype/EditYesNo.tsx
@@ -1,4 +1,5 @@
import { useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
import { FormControl } from '@chakra-ui/react'
import { extend, pick } from 'lodash'
@@ -42,6 +43,8 @@ export const EditYesNo = ({ field }: EditYesNoProps): JSX.Element => {
},
})
+ const { t } = useTranslation()
+
const requiredValidationRule = useMemo(
() => createBaseValidationRules({ required: true }),
[],
@@ -50,12 +53,18 @@ export const EditYesNo = ({ field }: EditYesNoProps): JSX.Element => {
return (
- Field Name
+
+ {t('features.adminForm.sidebar.fields.commonFieldComponents.title')}
+
{errors?.title?.message}
- Description
+
+ {t(
+ 'features.adminForm.sidebar.fields.commonFieldComponents.description',
+ )}
+
{errors?.description?.message}
diff --git a/frontend/src/features/admin-form/responses/IndividualResponsePage/IndividualResponsePage.tsx b/frontend/src/features/admin-form/responses/IndividualResponsePage/IndividualResponsePage.tsx
index f9dc8cbc57..54719d1b86 100644
--- a/frontend/src/features/admin-form/responses/IndividualResponsePage/IndividualResponsePage.tsx
+++ b/frontend/src/features/admin-form/responses/IndividualResponsePage/IndividualResponsePage.tsx
@@ -1,4 +1,5 @@
import { memo, useCallback, useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
import { BiDownload } from 'react-icons/bi'
import { useParams } from 'react-router-dom'
import {
@@ -76,6 +77,7 @@ const StackRow = ({
}
export const IndividualResponsePage = (): JSX.Element => {
+ const { t } = useTranslation()
const { submissionId, formId } = useParams()
if (!submissionId) throw new Error('Missing submissionId')
if (!formId) throw new Error('Missing formId')
@@ -156,7 +158,9 @@ export const IndividualResponsePage = (): JSX.Element => {
/>
diff --git a/frontend/src/features/admin-form/settings/SettingsEmailsPage.tsx b/frontend/src/features/admin-form/settings/SettingsEmailsPage.tsx
index 0580aea6f8..18207f2bbe 100644
--- a/frontend/src/features/admin-form/settings/SettingsEmailsPage.tsx
+++ b/frontend/src/features/admin-form/settings/SettingsEmailsPage.tsx
@@ -1,3 +1,4 @@
+import { useTranslation } from 'react-i18next'
import { Skeleton } from '@chakra-ui/react'
import { FormResponseMode, FormSettings, FormStatus } from '~shared/types/form'
@@ -37,6 +38,7 @@ const FormEmailSectionContainer = ({
}
export const SettingsEmailsPage = (): JSX.Element => {
+ const { t } = useTranslation()
const { data: settings } = useAdminFormSettings()
const isFormPublic = settings?.status === FormStatus.Public
@@ -54,7 +56,9 @@ export const SettingsEmailsPage = (): JSX.Element => {
return (
<>
- Email notifications
+
+ {t('features.adminForm.settings.emailNotifications.title')}
+
{settings ? (
<>
{
const { formId, settingsTab } = useParams()
+ const { t } = useTranslation()
if (!formId) throw new Error('No formId provided')
@@ -49,32 +51,32 @@ export const SettingsPage = (): JSX.Element => {
const tabConfig: TabEntry[] = [
{
- label: 'General',
+ label: t('features.adminForm.settings.general.title'),
icon: BiCog,
component: SettingsGeneralPage,
path: 'general',
},
{
- label: 'Singpass',
+ label: t('features.adminForm.settings.singpass.title'),
icon: BiKey,
component: SettingsAuthPage,
path: 'singpass',
},
{
- label: 'Email notifications',
+ label: t('features.adminForm.settings.emailNotifications.title'),
icon: BiMailSend,
component: SettingsEmailsPage,
path: 'email-notifications',
showRedDot: true,
},
{
- label: 'Webhooks',
+ label: t('features.adminForm.settings.webhooks.title'),
icon: BiCodeBlock,
component: SettingsWebhooksPage,
path: 'webhooks',
},
{
- label: 'Payments',
+ label: t('features.adminForm.settings.payments.title'),
icon: BiDollar,
component: SettingsPaymentsPage,
path: 'payments',
diff --git a/frontend/src/features/admin-form/settings/components/EmailNotificationsHeader.tsx b/frontend/src/features/admin-form/settings/components/EmailNotificationsHeader.tsx
index 25ac202893..138576e395 100644
--- a/frontend/src/features/admin-form/settings/components/EmailNotificationsHeader.tsx
+++ b/frontend/src/features/admin-form/settings/components/EmailNotificationsHeader.tsx
@@ -1,3 +1,4 @@
+import { useTranslation } from 'react-i18next'
import { BiBulb } from 'react-icons/bi'
import { Flex, Icon } from '@chakra-ui/react'
@@ -30,10 +31,13 @@ export const EmailNotificationsHeader = ({
isPaymentsEnabled,
isFormResponseModeEmail,
}: EmailNotificationsHeaderProps) => {
+ const { t } = useTranslation()
if (isFormPublic) {
return (
- To change email recipients, close your form to new responses.
+ {t(
+ 'features.adminForm.settings.emailNotifications.header.closeFormFirst',
+ )}
)
}
@@ -41,7 +45,10 @@ export const EmailNotificationsHeader = ({
if (isPaymentsEnabled) {
return (
- {`Email notifications for payment forms are not available in FormSG. You can configure them using [Plumber](${OGP_PLUMBER}).`}
+ {t(
+ 'features.adminForm.settings.emailNotifications.header.noEmailsForPaymentForms',
+ { url: OGP_PLUMBER },
+ )}
)
}
diff --git a/frontend/src/features/admin-form/settings/components/FormCaptchaToggle.tsx b/frontend/src/features/admin-form/settings/components/FormCaptchaToggle.tsx
index df87c9ef90..64ea0748e6 100644
--- a/frontend/src/features/admin-form/settings/components/FormCaptchaToggle.tsx
+++ b/frontend/src/features/admin-form/settings/components/FormCaptchaToggle.tsx
@@ -1,4 +1,5 @@
import { useCallback, useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
import { Skeleton } from '@chakra-ui/react'
import Toggle from '~components/Toggle'
@@ -7,6 +8,7 @@ import { useMutateFormSettings } from '../mutations'
import { useAdminFormSettings } from '../queries'
export const FormCaptchaToggle = (): JSX.Element => {
+ const { t } = useTranslation()
const { data: settings, isLoading: isLoadingSettings } =
useAdminFormSettings()
@@ -25,8 +27,9 @@ export const FormCaptchaToggle = (): JSX.Element => {
handleToggleCaptcha()}
/>
diff --git a/frontend/src/features/admin-form/settings/components/FormEmailSection.tsx b/frontend/src/features/admin-form/settings/components/FormEmailSection.tsx
index 91c9c3eab4..ddf9d31b9a 100644
--- a/frontend/src/features/admin-form/settings/components/FormEmailSection.tsx
+++ b/frontend/src/features/admin-form/settings/components/FormEmailSection.tsx
@@ -5,6 +5,7 @@ import {
useForm,
useFormContext,
} from 'react-hook-form'
+import { useTranslation } from 'react-i18next'
import { FormControl } from '@chakra-ui/react'
import { get, isEmpty, isEqual } from 'lodash'
import isEmail from 'validator/lib/isEmail'
@@ -85,6 +86,7 @@ export const FormEmailSection = ({
isDisabled,
settings,
}: EmailFormSectionProps): JSX.Element => {
+ const { t } = useTranslation()
const initialEmailSet = useMemo(
() => new Set(settings.emails),
[settings.emails],
@@ -124,7 +126,9 @@ export const FormEmailSection = ({
useMarkdownForDescription
description={DESCRIPTION_TEXT}
>
- Notifications for new responses
+ {t(
+ 'features.adminForm.settings.emailNotifications.section.regular.label',
+ )}
{get(errors, 'emails.message')}
@@ -134,7 +138,9 @@ export const FormEmailSection = ({
mt="0.5rem"
opacity={isDisabled ? '0.3' : '1'}
>
- Separate multiple email addresses with a comma
+ {t(
+ 'features.adminForm.settings.emailNotifications.section.regular.description',
+ )}
) : null}
diff --git a/frontend/src/features/admin-form/settings/components/FormIssueNotificationToggle.tsx b/frontend/src/features/admin-form/settings/components/FormIssueNotificationToggle.tsx
index 08c96687f9..8f96067a80 100644
--- a/frontend/src/features/admin-form/settings/components/FormIssueNotificationToggle.tsx
+++ b/frontend/src/features/admin-form/settings/components/FormIssueNotificationToggle.tsx
@@ -1,4 +1,5 @@
-import { useCallback, useMemo } from 'react'
+import { useCallback } from 'react'
+import { useTranslation } from 'react-i18next'
import { Skeleton } from '@chakra-ui/react'
import Toggle from '~components/Toggle'
@@ -7,6 +8,7 @@ import { useMutateFormSettings } from '../mutations'
import { useAdminFormSettings } from '../queries'
export const FormIssueNotificationToggle = (): JSX.Element => {
+ const { t } = useTranslation()
const { data: settings, isLoading: isLoadingSettings } =
useAdminFormSettings()
@@ -26,8 +28,9 @@ export const FormIssueNotificationToggle = (): JSX.Element => {
handleToggleIssueNotification()}
/>
diff --git a/frontend/src/features/admin-form/settings/components/FormLimitToggle.tsx b/frontend/src/features/admin-form/settings/components/FormLimitToggle.tsx
index 539e035ca4..1fee2fc24f 100644
--- a/frontend/src/features/admin-form/settings/components/FormLimitToggle.tsx
+++ b/frontend/src/features/admin-form/settings/components/FormLimitToggle.tsx
@@ -5,6 +5,7 @@ import {
useRef,
useState,
} from 'react'
+import { useTranslation } from 'react-i18next'
import { FormControl, Skeleton } from '@chakra-ui/react'
import { FormResponseMode } from '~shared/types'
@@ -30,6 +31,7 @@ const FormLimitBlock = ({
initialLimit,
currentResponseCount,
}: FormLimitBlockProps): JSX.Element => {
+ const { t } = useTranslation()
const [value, setValue] = useState(initialLimit)
const [error, setError] = useState()
@@ -43,13 +45,15 @@ const FormLimitBlock = ({
setValue(nextVal)
if (parseInt(nextVal, 10) <= currentResponseCount) {
setError(
- `Submission limit must be greater than current submission count (${currentResponseCount})`,
+ t('features.adminForm.settings.general.limit.limitLessThanCurrent', {
+ currentResponseCount,
+ }),
)
} else if (error) {
setError(undefined)
}
},
- [currentResponseCount, error],
+ [currentResponseCount, error, t],
)
const handleBlur = useCallback(() => {
@@ -83,10 +87,11 @@ const FormLimitBlock = ({
- Maximum number of responses allowed
+ {t('features.adminForm.settings.general.limit.input.label')}
{
+ const { t } = useTranslation()
const { data: settings, isLoading: isLoadingSettings } =
useAdminFormSettings()
@@ -157,12 +163,12 @@ export const FormLimitToggle = (): JSX.Element => {
isDisabled={isMrf}
isLoading={mutateFormLimit.isLoading}
isChecked={isLimit}
- label="Set a response limit"
+ label={t('features.adminForm.settings.general.limit.label')}
onChange={() => handleToggleLimit()}
/>
{isMrf ? (
- Response limits cannot be applied for multi-respondent forms.
+ {t('features.adminForm.settings.general.limit.notForMRF')}
) : null}
{settings && settings?.submissionLimit !== null && (
diff --git a/frontend/src/features/admin-form/settings/components/FormStatusToggle.tsx b/frontend/src/features/admin-form/settings/components/FormStatusToggle.tsx
index 2323884d78..983fad1402 100644
--- a/frontend/src/features/admin-form/settings/components/FormStatusToggle.tsx
+++ b/frontend/src/features/admin-form/settings/components/FormStatusToggle.tsx
@@ -1,4 +1,5 @@
import { useCallback, useMemo } from 'react'
+import { useTranslation } from 'react-i18next'
import { Flex, Skeleton, Stack, Text, useDisclosure } from '@chakra-ui/react'
import { BasicField } from '~shared/types'
@@ -19,6 +20,7 @@ import { useAdminFormSettings } from '../queries'
import { SecretKeyActivationModal } from './SecretKeyActivationModal'
export const FormStatusToggle = (): JSX.Element => {
+ const { t } = useTranslation()
const { data: { form_fields } = {} } = useAdminForm()
const { data: formSettings, isLoading: isLoadingSettings } =
useAdminFormSettings()
@@ -41,7 +43,9 @@ export const FormStatusToggle = (): JSX.Element => {
) &&
!esrvcId
) {
- return 'This form cannot be activated until a valid e-service ID is entered in the Singpass section.'
+ return t(
+ 'features.adminForm.settings.general.status.supplySingpassEServiceId',
+ )
}
// For MRF, prevent form activation if form has an email confirmation field.
@@ -52,9 +56,9 @@ export const FormStatusToggle = (): JSX.Element => {
ff.fieldType === BasicField.Email && ff.autoReplyOptions.hasAutoReply,
)
) {
- return 'Email confirmation is not supported in multi-respondent forms. Please remove email confirmations from email fields before activating your form.'
+ return t('features.adminForm.settings.general.status.noEmailsInMRF')
}
- }, [authType, esrvcId, formSettings?.responseMode, form_fields, status])
+ }, [authType, esrvcId, formSettings?.responseMode, form_fields, status, t])
const { mutateFormStatus } = useMutateFormSettings()
@@ -81,6 +85,10 @@ export const FormStatusToggle = (): JSX.Element => {
status,
])
+ const statusText = t(
+ `features.adminForm.settings.general.status.description.${isFormPublic ? 'open' : 'closed'}`,
+ )
+
return (
@@ -98,12 +106,15 @@ export const FormStatusToggle = (): JSX.Element => {
justify="space-between"
>
- Your form is {isFormPublic ? 'OPEN' : 'CLOSED'} to new
- responses
+ {t('features.adminForm.settings.general.status.description.prefix')}
+ {statusText}
+ {t('features.adminForm.settings.general.status.description.suffix')}
{
useAdminFormSettings()
const readableFormResponseMode = !settings
- ? 'Loading...'
+ ? t('features.common.loadingWithEllipsis')
: t(`features.adminForm.meta.responseModeText.${settings.responseMode}`)
return (
@@ -23,7 +23,9 @@ export const GeneralTabHeader = (): JSX.Element => {
justify="space-between"
mb="2.5rem"
>
- General settings
+
+ {t('features.adminForm.settings.general.title')}
+
{readableFormResponseMode}
diff --git a/frontend/src/features/admin-form/settings/components/MrfFormEmailSection.tsx b/frontend/src/features/admin-form/settings/components/MrfFormEmailSection.tsx
index 08ee76cf05..601d015a83 100644
--- a/frontend/src/features/admin-form/settings/components/MrfFormEmailSection.tsx
+++ b/frontend/src/features/admin-form/settings/components/MrfFormEmailSection.tsx
@@ -1,5 +1,6 @@
import { useCallback } from 'react'
import { Controller, useForm } from 'react-hook-form'
+import { useTranslation } from 'react-i18next'
import {
Box,
FormControl,
@@ -42,6 +43,7 @@ const MrfEmailNotificationsForm = ({
settings,
isDisabled,
}: MrfEmailNotificationsFormProps) => {
+ const { t } = useTranslation()
const {
isLoading,
formWorkflow,
@@ -144,11 +146,15 @@ const MrfEmailNotificationsForm = ({
diff --git a/frontend/src/features/public-form/components/FormFields/PublicFormSubmitButton.tsx b/frontend/src/features/public-form/components/FormFields/PublicFormSubmitButton.tsx
index aa58bd8ce8..874c87d6e1 100644
--- a/frontend/src/features/public-form/components/FormFields/PublicFormSubmitButton.tsx
+++ b/frontend/src/features/public-form/components/FormFields/PublicFormSubmitButton.tsx
@@ -129,26 +129,18 @@ export const PublicFormSubmitButton = ({
isLoading={isSubmitting}
isDisabled={!!preventSubmissionLogic || !onSubmit}
loadingText={t(
- 'features.publicForm.components.PublicFormSubmitButton.loadingText',
+ 'features.publicForm.components.submitButton.loadingText',
)}
onClick={isPaymentEnabled && !isPreview ? checkBeforeOpen : onSubmit}
>
- {t(
- 'features.publicForm.components.PublicFormSubmitButton.visuallyHidden',
- )}
+ {t('features.publicForm.components.submitButton.visuallyHidden')}
{preventSubmissionLogic
- ? t(
- 'features.publicForm.components.PublicFormSubmitButton.preventSubmission',
- )
+ ? t('features.publicForm.components.submitButton.preventSubmission')
: isPaymentEnabled
- ? t(
- 'features.publicForm.components.PublicFormSubmitButton.proceedToPay',
- )
- : t(
- 'features.publicForm.components.PublicFormSubmitButton.submitNow',
- )}
+ ? t('features.publicForm.components.submitButton.proceedToPay')
+ : t('features.publicForm.components.submitButton.submitNow')}
{preventSubmissionLogic ? (
diff --git a/frontend/src/i18n/locales/features/admin-form/en-sg.ts b/frontend/src/i18n/locales/features/admin-form/en-sg.ts
index b194d9d51e..ceefac190a 100644
--- a/frontend/src/i18n/locales/features/admin-form/en-sg.ts
+++ b/frontend/src/i18n/locales/features/admin-form/en-sg.ts
@@ -1,6 +1,7 @@
import { enSG as meta } from './meta'
import { enSG as modals } from './modals'
import { enSG as navbar } from './navbar'
+import { enSG as settings } from './settings'
import { enSG as sidebar } from './sidebar'
import { enSG as toasts } from './toasts'
@@ -10,4 +11,5 @@ export const enSG = {
meta,
modals,
toasts,
+ settings,
}
diff --git a/frontend/src/i18n/locales/features/admin-form/index.ts b/frontend/src/i18n/locales/features/admin-form/index.ts
index 34644c6f72..836c06eec6 100644
--- a/frontend/src/i18n/locales/features/admin-form/index.ts
+++ b/frontend/src/i18n/locales/features/admin-form/index.ts
@@ -2,8 +2,11 @@ export * from './en-sg'
export { type Meta } from './meta'
export { type Modals } from './modals'
export { type Navbar } from './navbar'
-export { type Fields } from './sidebar'
-export { type HeaderAndInstructions } from './sidebar'
-export { type Logic } from './sidebar'
-export { type ThankYou } from './sidebar'
+export { type Settings } from './settings'
+export {
+ type Fields,
+ type HeaderAndInstructions,
+ type Logic,
+ type ThankYou,
+} from './sidebar'
export { type Toasts } from './toasts'
diff --git a/frontend/src/i18n/locales/features/admin-form/settings/email-notifications/en-sg.ts b/frontend/src/i18n/locales/features/admin-form/settings/email-notifications/en-sg.ts
new file mode 100644
index 0000000000..f058c36770
--- /dev/null
+++ b/frontend/src/i18n/locales/features/admin-form/settings/email-notifications/en-sg.ts
@@ -0,0 +1,37 @@
+export const enSG = {
+ title: 'Email notifications',
+ header: {
+ closeFormFirst:
+ 'To change email recipients, close your form to new responses.',
+ noEmailsForPaymentForms: `Email notifications for payment forms are not available in FormSG. You can configure them using [Plumber]({url}).`,
+ },
+ section: {
+ mrf: {
+ selectRecipient:
+ 'Select who to notify when the form and/or workflow is complete:',
+ respondents: {
+ step1: {
+ label: 'Respondent in Step 1',
+ placeholder: 'Select an email field from your form',
+ },
+ stepN: {
+ label: {
+ overall: 'Other respondents in your workflow',
+ each: 'Respondent(s) in Step {stepNumber}',
+ },
+ placeholder: 'Select respondents from your form',
+ },
+ others: {
+ label: 'Others',
+ tooltipText:
+ "Include the admin's email to inform them whenever a workflow is completed",
+ description: 'Separate multiple email addresses with a comma',
+ },
+ },
+ },
+ regular: {
+ label: 'Notifications for new responses',
+ description: 'Separate multiple email addresses with a comma',
+ },
+ },
+}
diff --git a/frontend/src/i18n/locales/features/admin-form/settings/email-notifications/index.ts b/frontend/src/i18n/locales/features/admin-form/settings/email-notifications/index.ts
new file mode 100644
index 0000000000..cf7f443c4a
--- /dev/null
+++ b/frontend/src/i18n/locales/features/admin-form/settings/email-notifications/index.ts
@@ -0,0 +1,37 @@
+import { type HasTitle } from '..'
+
+export * from './en-sg'
+
+export interface EmailNotifications extends HasTitle {
+ header: {
+ closeFormFirst: string
+ noEmailsForPaymentForms: string
+ }
+ section: {
+ mrf: {
+ selectRecipient: string
+ respondents: {
+ step1: {
+ label: string
+ placeholder: string
+ }
+ stepN: {
+ label: {
+ overall: string
+ each: string
+ }
+ placeholder: string
+ }
+ others: {
+ label: string
+ description: string
+ tooltipText: string
+ }
+ }
+ }
+ regular: {
+ label: string
+ description: string
+ }
+ }
+}
diff --git a/frontend/src/i18n/locales/features/admin-form/settings/en-sg.ts b/frontend/src/i18n/locales/features/admin-form/settings/en-sg.ts
new file mode 100644
index 0000000000..3e25bf6c5a
--- /dev/null
+++ b/frontend/src/i18n/locales/features/admin-form/settings/en-sg.ts
@@ -0,0 +1,15 @@
+import { enSG as emailNotifications } from './email-notifications'
+import { enSG as general } from './general'
+import { enSG as webhooks } from './webhooks'
+
+export const enSG = {
+ general,
+ singpass: {
+ title: 'Singpass',
+ },
+ emailNotifications,
+ webhooks,
+ payments: {
+ title: 'Payments',
+ },
+}
diff --git a/frontend/src/i18n/locales/features/admin-form/settings/general/en-sg.ts b/frontend/src/i18n/locales/features/admin-form/settings/general/en-sg.ts
new file mode 100644
index 0000000000..1bf2aecd43
--- /dev/null
+++ b/frontend/src/i18n/locales/features/admin-form/settings/general/en-sg.ts
@@ -0,0 +1,40 @@
+export const enSG = {
+ title: 'General',
+ status: {
+ supplySingpassEServiceId:
+ 'This form cannot be activated until a valid e-service ID is entered in the Singpass section.',
+ noEmailsInMRF:
+ 'Email confirmation is not supported in multi-respondent forms. Please remove email confirmations from email fields before activating your form.',
+ description: {
+ prefix: 'Your form is ',
+ suffix: ' to new responses',
+ open: 'OPEN',
+ closed: 'CLOSED',
+ },
+ ariaLabel: 'Toggle form status',
+ },
+ limit: {
+ label: 'Set a response limit',
+ notForMRF: 'Response limits cannot be applied for multi-respondent forms.',
+ input: {
+ label: 'Maximum number of responses allowed',
+ description:
+ 'Your form will automatically close once it reaches the set limit. Enable reCAPTCHA to prevent spam submissions from triggering this limit.',
+ },
+ limitLessThanCurrent:
+ 'Submission limit must be greater than current submission count ({currentResponseCount})',
+ },
+ customisation: {
+ label: 'Set message for closed form',
+ },
+ captcha: {
+ label: 'Enable reCAPTCHA',
+ description:
+ 'If you expect non-English-speaking respondents, they may have difficulty understanding the reCAPTCHA selection instructions.',
+ },
+ issueNotifications: {
+ label: 'Receive email notifications for issues reported by respondents',
+ description:
+ 'You will receive a maximum of one email per form, per day if there are any issues reported.',
+ },
+}
diff --git a/frontend/src/i18n/locales/features/admin-form/settings/general/index.ts b/frontend/src/i18n/locales/features/admin-form/settings/general/index.ts
new file mode 100644
index 0000000000..f00b3f9fa6
--- /dev/null
+++ b/frontend/src/i18n/locales/features/admin-form/settings/general/index.ts
@@ -0,0 +1,37 @@
+import { type HasTitle } from '..'
+
+export * from './en-sg'
+
+export interface General extends HasTitle {
+ status: {
+ supplySingpassEServiceId: string
+ noEmailsInMRF: string
+ description: {
+ prefix: string
+ suffix: string
+ open: string
+ closed: string
+ }
+ ariaLabel: string
+ }
+ limit: {
+ label: string
+ notForMRF: string
+ input: {
+ label: string
+ description: string
+ }
+ limitLessThanCurrent: string
+ }
+ customisation: {
+ label: string
+ }
+ captcha: {
+ label: string
+ description: string
+ }
+ issueNotifications: {
+ label: string
+ description: string
+ }
+}
diff --git a/frontend/src/i18n/locales/features/admin-form/settings/index.ts b/frontend/src/i18n/locales/features/admin-form/settings/index.ts
new file mode 100644
index 0000000000..51dfe46608
--- /dev/null
+++ b/frontend/src/i18n/locales/features/admin-form/settings/index.ts
@@ -0,0 +1,17 @@
+import { EmailNotifications } from './email-notifications'
+import { General } from './general'
+import { Webhooks } from './webhooks'
+
+export * from './en-sg'
+
+export type HasTitle = {
+ title: string
+}
+
+export interface Settings {
+ general: General
+ singpass: HasTitle
+ emailNotifications: EmailNotifications
+ webhooks: Webhooks
+ payments: HasTitle
+}
diff --git a/frontend/src/i18n/locales/features/admin-form/settings/webhooks/en-sg.ts b/frontend/src/i18n/locales/features/admin-form/settings/webhooks/en-sg.ts
new file mode 100644
index 0000000000..548f72ad2c
--- /dev/null
+++ b/frontend/src/i18n/locales/features/admin-form/settings/webhooks/en-sg.ts
@@ -0,0 +1,12 @@
+export const enSG = {
+ title: 'Webhooks',
+ input: {
+ label: 'Endpoint URL',
+ description:
+ 'For developers and IT officers usage. We will POST encrypted form responses in real-time to the HTTPS endpoint specified here.',
+ },
+ retry: {
+ label: 'Enable retries',
+ description: `Your system must meet certain requirements before retries can be safely enabled. [Learn more]({url})`,
+ },
+}
diff --git a/frontend/src/i18n/locales/features/admin-form/settings/webhooks/index.ts b/frontend/src/i18n/locales/features/admin-form/settings/webhooks/index.ts
new file mode 100644
index 0000000000..67d797b927
--- /dev/null
+++ b/frontend/src/i18n/locales/features/admin-form/settings/webhooks/index.ts
@@ -0,0 +1,14 @@
+import { type HasTitle } from '..'
+
+export * from './en-sg'
+
+export interface Webhooks extends HasTitle {
+ input: {
+ label: string
+ description: string
+ }
+ retry: {
+ label: string
+ description: string
+ }
+}
diff --git a/frontend/src/i18n/locales/features/common/en-sg.ts b/frontend/src/i18n/locales/features/common/en-sg.ts
index 910803c2dd..c27ff181bf 100644
--- a/frontend/src/i18n/locales/features/common/en-sg.ts
+++ b/frontend/src/i18n/locales/features/common/en-sg.ts
@@ -30,6 +30,7 @@ export const enSG: Common = {
back: 'Back',
edit: 'Edit',
loading: 'Loading',
+ loadingWithEllipsis: 'Loading...',
saving: 'Saving',
responses: 'Responses',
feedback: 'Feedback',
diff --git a/frontend/src/i18n/locales/features/common/index.ts b/frontend/src/i18n/locales/features/common/index.ts
index 304c1d78c2..8d948abddd 100644
--- a/frontend/src/i18n/locales/features/common/index.ts
+++ b/frontend/src/i18n/locales/features/common/index.ts
@@ -30,6 +30,7 @@ export interface Common {
back: string
edit: string
loading: string
+ loadingWithEllipsis: string
saving: string
responses: string
feedback: string
diff --git a/frontend/src/i18n/locales/features/index.ts b/frontend/src/i18n/locales/features/index.ts
index b612fc14f5..35ce5f66ff 100644
--- a/frontend/src/i18n/locales/features/index.ts
+++ b/frontend/src/i18n/locales/features/index.ts
@@ -5,6 +5,7 @@ export {
type Meta,
type Modals,
type Navbar,
+ type Settings,
type ThankYou,
type Toasts,
} from './admin-form'
diff --git a/frontend/src/i18n/locales/features/public-form/en-sg.ts b/frontend/src/i18n/locales/features/public-form/en-sg.ts
index 868588f010..f6fa06dc1f 100644
--- a/frontend/src/i18n/locales/features/public-form/en-sg.ts
+++ b/frontend/src/i18n/locales/features/public-form/en-sg.ts
@@ -24,7 +24,7 @@ export const enSG: PublicForm = {
'Your verified fields have expired. Please verify those fields again.',
},
components: {
- PublicFormSubmitButton: {
+ submitButton: {
loadingText: 'Submitting',
visuallyHidden: 'End of form.',
preventSubmission: 'Submission disabled',
@@ -32,5 +32,17 @@ export const enSG: PublicForm = {
submitNow: 'Submit now',
},
table,
+ feedbackBlock: {
+ title: {
+ payment: 'How was your experience making payment on this form?',
+ general: 'How was your form filling experience today?',
+ },
+ rating: {
+ label: 'Form feedback rating',
+ error: 'Please select a rating',
+ },
+ commentPlaceholder: 'Tell us more about your experience',
+ submitButton: 'Submit feedback',
+ },
},
}
diff --git a/frontend/src/i18n/locales/features/public-form/index.ts b/frontend/src/i18n/locales/features/public-form/index.ts
index f76a555bab..d91bdb53a0 100644
--- a/frontend/src/i18n/locales/features/public-form/index.ts
+++ b/frontend/src/i18n/locales/features/public-form/index.ts
@@ -19,7 +19,7 @@ export interface PublicForm {
verifiedFieldExpired: string
}
components: {
- PublicFormSubmitButton: {
+ submitButton: {
loadingText: string
visuallyHidden: string
preventSubmission: string
@@ -27,5 +27,17 @@ export interface PublicForm {
submitNow: string
}
table: Table
+ feedbackBlock: {
+ title: {
+ payment: string
+ general: string
+ }
+ rating: {
+ label: string
+ error: string
+ }
+ commentPlaceholder: string
+ submitButton: string
+ }
}
}
diff --git a/frontend/src/i18n/locales/types.ts b/frontend/src/i18n/locales/types.ts
index 9bcc910574..b103118ef7 100644
--- a/frontend/src/i18n/locales/types.ts
+++ b/frontend/src/i18n/locales/types.ts
@@ -10,6 +10,7 @@ import {
Modals,
Navbar,
PublicForm,
+ Settings,
ThankYou,
Toasts,
} from './features'
@@ -28,6 +29,7 @@ interface Translation {
meta?: Meta
modals?: Modals
toasts?: Toasts
+ settings?: Settings
}
common?: Common
publicForm?: PublicForm
diff --git a/package-lock.json b/package-lock.json
index d817ae9c95..dc4a8d5d93 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "FormSG",
- "version": "6.169.0",
+ "version": "6.170.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "FormSG",
- "version": "6.169.0",
+ "version": "6.170.0",
"hasInstallScript": true,
"dependencies": {
"@aws-sdk/client-cloudwatch-logs": "^3.536.0",
@@ -22,7 +22,7 @@
"@react-email/render": "^1.0.2",
"@stablelib/base64": "^1.0.1",
"aws-info": "^1.2.0",
- "aws-sdk": "^2.1691.0",
+ "aws-sdk": "^2.1692.0",
"axios": "^1.7.7",
"bcrypt": "^5.1.1",
"bluebird": "^3.5.2",
@@ -161,7 +161,7 @@
"eslint-config-prettier": "^8.10.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest": "^28.6.0",
- "eslint-plugin-playwright": "^1.6.0",
+ "eslint-plugin-playwright": "^2.1.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-typesafe": "^0.5.2",
@@ -6301,12 +6301,6 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@jsdevtools/ono": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
- "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
- "dev": true
- },
"node_modules/@mapbox/node-pre-gyp": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
@@ -7772,655 +7766,87 @@
"integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
"node_modules/@smithy/util-uri-escape": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz",
- "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@smithy/util-uri-escape/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@smithy/util-utf8": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
- "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "dependencies": {
- "@smithy/util-buffer-from": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@smithy/util-utf8/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@smithy/util-waiter": {
- "version": "3.1.9",
- "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.9.tgz",
- "integrity": "sha512-/aMXPANhMOlMPjfPtSrDfPeVP8l56SJlz93xeiLmhLe5xvlXA5T3abZ2ilEsDEPeY9T/wnN/vNGn9wa1SbufWA==",
- "dependencies": {
- "@smithy/abort-controller": "^3.1.8",
- "@smithy/types": "^3.7.1",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-waiter/node_modules/@smithy/abort-controller": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.8.tgz",
- "integrity": "sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==",
- "dependencies": {
- "@smithy/types": "^3.7.1",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-waiter/node_modules/@smithy/types": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz",
- "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@smithy/util-waiter/node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
- },
- "node_modules/@socket.io/component-emitter": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
- "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
- },
- "node_modules/@stablelib/base64": {
- "version": "1.0.1",
- "license": "MIT"
- },
- "node_modules/@stoplight/http-spec": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/@stoplight/http-spec/-/http-spec-7.1.0.tgz",
- "integrity": "sha512-Z2XqKX2SV8a1rrgSzFqccX2TolfcblT+l4pNvUU+THaLl50tKDoeidwWWZTzYUzqU0+UV97ponvqEbWWN3PaXg==",
- "dev": true,
- "dependencies": {
- "@stoplight/json": "^3.18.1",
- "@stoplight/json-schema-generator": "1.0.2",
- "@stoplight/types": "14.1.0",
- "@types/json-schema": "7.0.11",
- "@types/swagger-schema-official": "~2.0.22",
- "@types/type-is": "^1.6.3",
- "fnv-plus": "^1.3.1",
- "lodash": "^4.17.21",
- "openapi3-ts": "^2.0.2",
- "postman-collection": "^4.1.3",
- "tslib": "^2.6.2",
- "type-is": "^1.6.18"
- },
- "engines": {
- "node": ">=14.13"
- }
- },
- "node_modules/@stoplight/http-spec/node_modules/@stoplight/types": {
- "version": "14.1.0",
- "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.1.0.tgz",
- "integrity": "sha512-fL8Nzw03+diALw91xHEHA5Q0WCGeW9WpPgZQjodNUWogAgJ56aJs03P9YzsQ1J6fT7/XjDqHMgn7/RlsBzB/SQ==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.4",
- "utility-types": "^3.10.0"
- },
- "engines": {
- "node": "^12.20 || >=14.13"
- }
- },
- "node_modules/@stoplight/http-spec/node_modules/tslib": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
- "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
- "dev": true
- },
- "node_modules/@stoplight/json": {
- "version": "3.21.7",
- "resolved": "https://registry.npmjs.org/@stoplight/json/-/json-3.21.7.tgz",
- "integrity": "sha512-xcJXgKFqv/uCEgtGlPxy3tPA+4I+ZI4vAuMJ885+ThkTHFVkC+0Fm58lA9NlsyjnkpxFh4YiQWpH+KefHdbA0A==",
- "dev": true,
- "dependencies": {
- "@stoplight/ordered-object-literal": "^1.0.3",
- "@stoplight/path": "^1.3.2",
- "@stoplight/types": "^13.6.0",
- "jsonc-parser": "~2.2.1",
- "lodash": "^4.17.21",
- "safe-stable-stringify": "^1.1"
- },
- "engines": {
- "node": ">=8.3.0"
- }
- },
- "node_modules/@stoplight/json-schema-generator": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@stoplight/json-schema-generator/-/json-schema-generator-1.0.2.tgz",
- "integrity": "sha512-FzSLFoIZc6Lmw3oRE7kU6YUrl5gBmUs//rY59jdFipBoSyTPv5NyqeyTg5mvT6rY1F3qTLU3xgzRi/9Pb9eZpA==",
- "dev": true,
- "dependencies": {
- "cross-fetch": "^3.1.5",
- "json-promise": "1.1.x",
- "minimist": "1.2.6",
- "mkdirp": "0.5.x",
- "pretty-data": "0.40.x"
- },
- "bin": {
- "json-schema-generator": "bin/cli.js"
- }
- },
- "node_modules/@stoplight/json-schema-merge-allof": {
- "version": "0.7.8",
- "resolved": "https://registry.npmjs.org/@stoplight/json-schema-merge-allof/-/json-schema-merge-allof-0.7.8.tgz",
- "integrity": "sha512-JTDt6GYpCWQSb7+UW1P91IAp/pcLWis0mmEzWVFcLsrNgtUYK7JLtYYz0ZPSR4QVL0fJ0YQejM+MPq5iNDFO4g==",
- "dev": true,
- "dependencies": {
- "compute-lcm": "^1.1.0",
- "json-schema-compare": "^0.2.2",
- "lodash": "^4.17.4"
- }
- },
- "node_modules/@stoplight/json-schema-ref-parser": {
- "version": "9.2.7",
- "resolved": "https://registry.npmjs.org/@stoplight/json-schema-ref-parser/-/json-schema-ref-parser-9.2.7.tgz",
- "integrity": "sha512-1vNzJ7iSrFTAFNbZHPyhI6GiJJw74+WaV61bARUQEDR4Jm80f9s0Tq9uCvGoMYwIFmWDJAoTiyegnUs6SvVxDw==",
- "dev": true,
- "dependencies": {
- "@jsdevtools/ono": "^7.1.3",
- "@stoplight/path": "^1.3.2",
- "@stoplight/yaml": "^4.0.2",
- "call-me-maybe": "^1.0.1",
- "fastestsmallesttextencoderdecoder": "^1.0.22",
- "isomorphic-fetch": "^3.0.0",
- "node-abort-controller": "^3.0.1"
- }
- },
- "node_modules/@stoplight/json-schema-sampler": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@stoplight/json-schema-sampler/-/json-schema-sampler-0.3.0.tgz",
- "integrity": "sha512-G7QImi2xr9+8iPEg0D9YUi1BWhIiiEm19aMb91oWBSdxuhezOAqqRP3XNY6wczHV9jLWW18f+KkghTy9AG0BQA==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.7",
- "json-pointer": "^0.6.1"
- }
- },
- "node_modules/@stoplight/json/node_modules/@stoplight/types": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz",
- "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==",
- "dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.4",
- "utility-types": "^3.10.0"
- },
- "engines": {
- "node": "^12.20 || >=14.13"
- }
- },
- "node_modules/@stoplight/json/node_modules/safe-stable-stringify": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz",
- "integrity": "sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==",
- "dev": true
- },
- "node_modules/@stoplight/ordered-object-literal": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.5.tgz",
- "integrity": "sha512-COTiuCU5bgMUtbIFBuyyh2/yVVzlr5Om0v5utQDgBCuQUOPgU1DwoffkTfg4UBQOvByi5foF4w4T+H9CoRe5wg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@stoplight/path": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@stoplight/path/-/path-1.3.2.tgz",
- "integrity": "sha512-lyIc6JUlUA8Ve5ELywPC8I2Sdnh1zc1zmbYgVarhXIp9YeAB0ReeqmGEOWNtlHkbP2DAA1AL65Wfn2ncjK/jtQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@stoplight/prism-cli": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@stoplight/prism-cli/-/prism-cli-5.10.0.tgz",
- "integrity": "sha512-U7XMCAlXZFh2GPvzpZeMJ4u5V47ncYxgIxbLy4Y8rjsBCKWKQqqUCFoENXDub2O6ibZKSQctIvO0HiMZlIWERw==",
- "dev": true,
- "dependencies": {
- "@stoplight/json": "3.21.7",
- "@stoplight/json-schema-ref-parser": "9.2.7",
- "@stoplight/prism-core": "^5.8.0",
- "@stoplight/prism-http": "5.10.0",
- "@stoplight/prism-http-server": "^5.10.0",
- "@stoplight/types": "^14.1.0",
- "chalk": "^4.1.2",
- "chokidar": "^3.5.2",
- "fp-ts": "^2.11.5",
- "json-schema-faker": "0.5.6",
- "lodash": "^4.17.21",
- "node-fetch": "^2.6.5",
- "pino": "^6.13.3",
- "signale": "^1.4.0",
- "split2": "^3.2.2",
- "tslib": "^2.3.1",
- "uri-template-lite": "^22.9.0",
- "urijs": "^1.19.11",
- "yargs": "^16.2.0"
- },
- "bin": {
- "prism": "dist/index.js"
- },
- "engines": {
- "node": ">=18.20.1"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@stoplight/prism-cli/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/tslib": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz",
- "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==",
- "dev": true
- },
- "node_modules/@stoplight/prism-cli/node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@stoplight/prism-cli/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@stoplight/prism-core": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@stoplight/prism-core/-/prism-core-5.8.0.tgz",
- "integrity": "sha512-fmH7n6e0thzOGcD5uZBu/Xx1iFNfpc9ACTxPie+lFD54SJ214M2FIFXD7kV+NCFlC+w5OFw+lJRaYM859uMnAg==",
- "dev": true,
- "dependencies": {
- "fp-ts": "^2.11.5",
- "lodash": "^4.17.21",
- "pino": "^6.13.3",
- "tslib": "^2.3.1"
- },
- "engines": {
- "node": ">=18.20.1"
- }
- },
- "node_modules/@stoplight/prism-core/node_modules/tslib": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
- "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
- "dev": true
- },
- "node_modules/@stoplight/prism-http": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@stoplight/prism-http/-/prism-http-5.10.0.tgz",
- "integrity": "sha512-OlWSv9XobxkNu4D1xfDfwjMSETrw4wNFkWcbKzQmepNERqJ6uuWDDjkIR2f1F7SYU61ElwhaXf1bA9dlze6U6g==",
- "dev": true,
- "dependencies": {
- "@faker-js/faker": "^6.0.0",
- "@stoplight/http-spec": "^7.0.3",
- "@stoplight/json": "3.21.7",
- "@stoplight/json-schema-merge-allof": "0.7.8",
- "@stoplight/json-schema-ref-parser": "9.2.7",
- "@stoplight/json-schema-sampler": "0.3.0",
- "@stoplight/prism-core": "^5.8.0",
- "@stoplight/types": "^14.1.0",
- "@stoplight/yaml": "^4.2.3",
- "abstract-logging": "^2.0.1",
- "accepts": "^1.3.7",
- "ajv": "^8.4.0",
- "ajv-formats": "^2.1.1",
- "caseless": "^0.12.0",
- "chalk": "^4.1.2",
- "content-type": "^1.0.4",
- "fp-ts": "^2.11.5",
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "json-schema-faker": "0.5.6",
- "lodash": "^4.17.21",
- "node-fetch": "^2.6.5",
- "parse-multipart-data": "^1.5.0",
- "pino": "^6.13.3",
- "tslib": "^2.3.1",
- "type-is": "^1.6.18",
- "uri-template-lite": "^22.9.0",
- "whatwg-mimetype": "^3.0.0"
- },
- "engines": {
- "node": ">=18.20.1"
- }
- },
- "node_modules/@stoplight/prism-http-server": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/@stoplight/prism-http-server/-/prism-http-server-5.10.0.tgz",
- "integrity": "sha512-7sdMNzBY4+/96fLQn7/LR6ItDfNwcvCY9XCWrpruWeq5fHJHrb5OynpHvZs9vHcTpZNITBs/sgmukXn35wB5Sw==",
- "dev": true,
- "dependencies": {
- "@stoplight/prism-core": "^5.8.0",
- "@stoplight/prism-http": "^5.10.0",
- "@stoplight/types": "^14.1.0",
- "fast-xml-parser": "^4.2.0",
- "fp-ts": "^2.11.5",
- "io-ts": "^2.2.16",
- "lodash": "^4.17.21",
- "micri": "^4.3.0",
- "node-fetch": "^2.6.5",
- "parse-prefer-header": "1.0.0",
- "tslib": "^2.3.1",
- "type-is": "^1.6.18"
- },
- "engines": {
- "node": ">=18.20.1"
- }
- },
- "node_modules/@stoplight/prism-http-server/node_modules/tslib": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
- "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
- "dev": true
- },
- "node_modules/@stoplight/prism-http/node_modules/@faker-js/faker": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-6.3.1.tgz",
- "integrity": "sha512-8YXBE2ZcU/pImVOHX7MWrSR/X5up7t6rPWZlk34RwZEcdr3ua6X+32pSd6XuOQRN+vbuvYNfA6iey8NbrjuMFQ==",
- "dev": true,
- "engines": {
- "node": ">=14.0.0",
- "npm": ">=6.0.0"
- }
- },
- "node_modules/@stoplight/prism-http/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@stoplight/prism-http/node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@stoplight/prism-http/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@stoplight/prism-http/node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@stoplight/prism-http/node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/@stoplight/prism-http/node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@stoplight/prism-http/node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
- "dev": true,
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz",
+ "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==",
"dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">= 6"
+ "node": ">=14.0.0"
}
},
- "node_modules/@stoplight/prism-http/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
+ "node_modules/@smithy/util-uri-escape/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
- "node_modules/@stoplight/prism-http/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
+ "node_modules/@smithy/util-utf8": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
+ "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
"dependencies": {
- "has-flag": "^4.0.0"
+ "@smithy/util-buffer-from": "^2.2.0",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=8"
+ "node": ">=14.0.0"
}
},
- "node_modules/@stoplight/prism-http/node_modules/tslib": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
- "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
- "dev": true
+ "node_modules/@smithy/util-utf8/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
- "node_modules/@stoplight/types": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-14.1.1.tgz",
- "integrity": "sha512-/kjtr+0t0tjKr+heVfviO9FrU/uGLc+QNX3fHJc19xsCNYqU7lVhaXxDmEID9BZTjG+/r9pK9xP/xU02XGg65g==",
- "dev": true,
+ "node_modules/@smithy/util-waiter": {
+ "version": "3.1.9",
+ "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.9.tgz",
+ "integrity": "sha512-/aMXPANhMOlMPjfPtSrDfPeVP8l56SJlz93xeiLmhLe5xvlXA5T3abZ2ilEsDEPeY9T/wnN/vNGn9wa1SbufWA==",
"dependencies": {
- "@types/json-schema": "^7.0.4",
- "utility-types": "^3.10.0"
+ "@smithy/abort-controller": "^3.1.8",
+ "@smithy/types": "^3.7.1",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": "^12.20 || >=14.13"
+ "node": ">=16.0.0"
}
},
- "node_modules/@stoplight/yaml": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/@stoplight/yaml/-/yaml-4.2.3.tgz",
- "integrity": "sha512-Mx01wjRAR9C7yLMUyYFTfbUf5DimEpHMkRDQ1PKLe9dfNILbgdxyrncsOXM3vCpsQ1Hfj4bPiGl+u4u6e9Akqw==",
- "dev": true,
+ "node_modules/@smithy/util-waiter/node_modules/@smithy/abort-controller": {
+ "version": "3.1.8",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.8.tgz",
+ "integrity": "sha512-+3DOBcUn5/rVjlxGvUPKc416SExarAQ+Qe0bqk30YSUjbepwpS7QN0cyKUSifvLJhdMZ0WPzPP5ymut0oonrpQ==",
"dependencies": {
- "@stoplight/ordered-object-literal": "^1.0.1",
- "@stoplight/types": "^13.0.0",
- "@stoplight/yaml-ast-parser": "0.0.48",
- "tslib": "^2.2.0"
+ "@smithy/types": "^3.7.1",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=10.8"
+ "node": ">=16.0.0"
}
},
- "node_modules/@stoplight/yaml-ast-parser": {
- "version": "0.0.48",
- "resolved": "https://registry.npmjs.org/@stoplight/yaml-ast-parser/-/yaml-ast-parser-0.0.48.tgz",
- "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==",
- "dev": true
- },
- "node_modules/@stoplight/yaml/node_modules/@stoplight/types": {
- "version": "13.20.0",
- "resolved": "https://registry.npmjs.org/@stoplight/types/-/types-13.20.0.tgz",
- "integrity": "sha512-2FNTv05If7ib79VPDA/r9eUet76jewXFH2y2K5vuge6SXbRHtWBhcaRmu+6QpF4/WRNoJj5XYRSwLGXDxysBGA==",
- "dev": true,
+ "node_modules/@smithy/util-waiter/node_modules/@smithy/types": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.7.1.tgz",
+ "integrity": "sha512-XKLcLXZY7sUQgvvWyeaL/qwNPp6V3dWcUjqrQKjSb+tzYiCy340R/c64LV5j+Tnb2GhmunEX0eou+L+m2hJNYA==",
"dependencies": {
- "@types/json-schema": "^7.0.4",
- "utility-types": "^3.10.0"
+ "tslib": "^2.6.2"
},
"engines": {
- "node": "^12.20 || >=14.13"
+ "node": ">=16.0.0"
}
},
- "node_modules/@stoplight/yaml/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
- "dev": true
+ "node_modules/@smithy/util-waiter/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="
+ },
+ "node_modules/@socket.io/component-emitter": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz",
+ "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
+ },
+ "node_modules/@stablelib/base64": {
+ "version": "1.0.1",
+ "license": "MIT"
},
"node_modules/@swc/counter": {
"version": "0.1.3",
@@ -8754,12 +8180,6 @@
"parse5": "^7.0.0"
}
},
- "node_modules/@types/json-schema": {
- "version": "7.0.11",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
- "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
- "dev": true
- },
"node_modules/@types/json-stringify-safe": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/@types/json-stringify-safe/-/json-stringify-safe-5.0.3.tgz",
@@ -8980,12 +8400,6 @@
"@types/superagent": "*"
}
},
- "node_modules/@types/swagger-schema-official": {
- "version": "2.0.25",
- "resolved": "https://registry.npmjs.org/@types/swagger-schema-official/-/swagger-schema-official-2.0.25.tgz",
- "integrity": "sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==",
- "dev": true
- },
"node_modules/@types/tough-cookie": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
@@ -8996,15 +8410,6 @@
"version": "1.3.2",
"license": "MIT"
},
- "node_modules/@types/type-is": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/@types/type-is/-/type-is-1.6.6.tgz",
- "integrity": "sha512-fs1KHv/f9OvmTMsu4sBNaUu32oyda9Y9uK25naJG8gayxNrfqGIjPQsbLIYyfe7xFkppnPlJB+BuTldOaX9bXw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/uid-generator": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/uid-generator/-/uid-generator-2.0.6.tgz",
@@ -9722,12 +9127,6 @@
"node": ">=6.5"
}
},
- "node_modules/abstract-logging": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz",
- "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==",
- "dev": true
- },
"node_modules/accepts": {
"version": "1.3.7",
"license": "MIT",
@@ -9825,45 +9224,6 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ajv-formats": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
- "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
- "dev": true,
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true
- },
"node_modules/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -10162,15 +9522,6 @@
"version": "0.4.0",
"license": "MIT"
},
- "node_modules/atomic-sleep": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
- "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
- "dev": true,
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/auto-changelog": {
"version": "2.4.0",
"dev": true,
@@ -10231,9 +9582,9 @@
"license": "MIT"
},
"node_modules/aws-sdk": {
- "version": "2.1691.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1691.0.tgz",
- "integrity": "sha512-/F2YC+DlsY3UBM2Bdnh5RLHOPNibS/+IcjUuhP8XuctyrN+MlL+fWDAiela32LTDk7hMy4rx8MTgvbJ+0blO5g==",
+ "version": "2.1692.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz",
+ "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==",
"hasInstallScript": true,
"dependencies": {
"buffer": "4.9.2",
@@ -10906,12 +10257,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/call-me-maybe": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
- "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==",
- "dev": true
- },
"node_modules/callsites": {
"version": "3.1.0",
"dev": true,
@@ -10947,12 +10292,6 @@
}
]
},
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
- "dev": true
- },
"node_modules/celebrate": {
"version": "15.0.3",
"resolved": "https://registry.npmjs.org/celebrate/-/celebrate-15.0.3.tgz",
@@ -10984,15 +10323,6 @@
"node": ">=10"
}
},
- "node_modules/charset": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz",
- "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==",
- "dev": true,
- "engines": {
- "node": ">=4.0.0"
- }
- },
"node_modules/chokidar": {
"version": "3.5.3",
"dev": true,
@@ -11339,29 +10669,6 @@
"version": "5.1.2",
"license": "MIT"
},
- "node_modules/compute-gcd": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz",
- "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==",
- "dev": true,
- "dependencies": {
- "validate.io-array": "^1.0.3",
- "validate.io-function": "^1.0.2",
- "validate.io-integer-array": "^1.0.0"
- }
- },
- "node_modules/compute-lcm": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz",
- "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==",
- "dev": true,
- "dependencies": {
- "compute-gcd": "^1.2.1",
- "validate.io-array": "^1.0.3",
- "validate.io-function": "^1.0.2",
- "validate.io-integer-array": "^1.0.0"
- }
- },
"node_modules/concat-map": {
"version": "0.0.1",
"license": "MIT"
@@ -11743,15 +11050,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/cross-fetch": {
- "version": "3.1.8",
- "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz",
- "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==",
- "dev": true,
- "dependencies": {
- "node-fetch": "^2.6.12"
- }
- },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -13062,13 +12360,10 @@
}
},
"node_modules/eslint-plugin-playwright": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-1.6.1.tgz",
- "integrity": "sha512-pfcaeAENH0jZEuUxynfVgMlLY9CSp68D9Ja2z32Xq5zhWCN1HoixSHOzhYVuh/N6fYwtBp4kLu/+IIUTXBTGZg==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-playwright/-/eslint-plugin-playwright-2.1.0.tgz",
+ "integrity": "sha512-wMbHOehofSB1cBdzz2CLaCYaKNLeTQ0YnOW+7AHa281TJqlpEJUBgTHbRUYOUxiXphfWwOyTPvgr6vvEmArbSA==",
"dev": true,
- "workspaces": [
- "examples"
- ],
"dependencies": {
"globals": "^13.23.0"
},
@@ -13076,13 +12371,7 @@
"node": ">=16.6.0"
},
"peerDependencies": {
- "eslint": ">=8.40.0",
- "eslint-plugin-jest": ">=25"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-jest": {
- "optional": true
- }
+ "eslint": ">=8.40.0"
}
},
"node_modules/eslint-plugin-playwright/node_modules/globals": {
@@ -14168,25 +13457,10 @@
"dev": true,
"license": "MIT"
},
- "node_modules/fast-redact": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
- "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/fast-safe-stringify": {
"version": "2.1.1",
"license": "MIT"
},
- "node_modules/fast-uri": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
- "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
- "dev": true
- },
"node_modules/fast-xml-parser": {
"version": "4.2.5",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
@@ -14208,12 +13482,6 @@
"fxparser": "src/cli/cli.js"
}
},
- "node_modules/fastestsmallesttextencoderdecoder": {
- "version": "1.0.22",
- "resolved": "https://registry.npmjs.org/fastestsmallesttextencoderdecoder/-/fastestsmallesttextencoderdecoder-1.0.22.tgz",
- "integrity": "sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==",
- "dev": true
- },
"node_modules/fastq": {
"version": "1.8.0",
"dev": true,
@@ -14243,18 +13511,6 @@
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz",
"integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw=="
},
- "node_modules/figures": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
- "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
- "dev": true,
- "dependencies": {
- "escape-string-regexp": "^1.0.5"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/file-entry-cache": {
"version": "6.0.1",
"dev": true,
@@ -14270,15 +13526,6 @@
"version": "2.0.5",
"license": "MIT"
},
- "node_modules/file-type": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz",
- "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/file-uri-to-path": {
"version": "1.0.0",
"license": "MIT",
@@ -14414,12 +13661,6 @@
"url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/flatstr": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
- "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==",
- "dev": true
- },
"node_modules/flatted": {
"version": "3.1.1",
"dev": true,
@@ -14429,12 +13670,6 @@
"version": "1.1.0",
"license": "MIT"
},
- "node_modules/fnv-plus": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz",
- "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==",
- "dev": true
- },
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
@@ -14461,12 +13696,6 @@
"is-callable": "^1.1.3"
}
},
- "node_modules/foreach": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz",
- "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==",
- "dev": true
- },
"node_modules/foreground-child": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
@@ -14510,12 +13739,6 @@
"resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
"integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="
},
- "node_modules/format-util": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz",
- "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg==",
- "dev": true
- },
"node_modules/formdata-node": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
@@ -14910,12 +14133,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/handler-agent": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/handler-agent/-/handler-agent-0.2.0.tgz",
- "integrity": "sha512-cUduQxa5p3TFtGmb55mrRbkk/3EJCsLSeFrCIuTakQHQlYVWXeW2L9IUQUHyoHLI4UgpBNaN2JrZ0He1jPu+vg==",
- "dev": true
- },
"node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -15257,12 +14474,6 @@
"node": ">= 14"
}
},
- "node_modules/http-reasons": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz",
- "integrity": "sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==",
- "dev": true
- },
"node_modules/http-status-codes": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz",
@@ -15456,15 +14667,6 @@
"jquery": ">=1.7"
}
},
- "node_modules/io-ts": {
- "version": "2.2.21",
- "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-2.2.21.tgz",
- "integrity": "sha512-zz2Z69v9ZIC3mMLYWIeoUcwWD6f+O7yP92FMVVaXEOSZH1jnVBmET/urd/uoarD1WGBY4rCj8TAyMPzsGNzMFQ==",
- "dev": true,
- "peerDependencies": {
- "fp-ts": "^2.5.0"
- }
- },
"node_modules/ip": {
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz",
@@ -15824,16 +15026,6 @@
"version": "2.0.0",
"license": "ISC"
},
- "node_modules/isomorphic-fetch": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz",
- "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==",
- "dev": true,
- "dependencies": {
- "node-fetch": "^2.6.1",
- "whatwg-fetch": "^3.4.1"
- }
- },
"node_modules/istanbul-lib-coverage": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
@@ -18365,69 +17557,12 @@
"node": ">=4"
}
},
- "node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT"
- },
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true
},
- "node_modules/json-pointer": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz",
- "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==",
- "dev": true,
- "dependencies": {
- "foreach": "^2.0.4"
- }
- },
- "node_modules/json-promise": {
- "version": "1.1.8",
- "resolved": "https://registry.npmjs.org/json-promise/-/json-promise-1.1.8.tgz",
- "integrity": "sha512-rz31P/7VfYnjQFrF60zpPTT0egMPlc8ZvIQHWs4ZtNZNnAXRmXo6oS+6eyWr5sEMG03OVhklNrTXxiIRYzoUgQ==",
- "dev": true,
- "dependencies": {
- "bluebird": "*"
- }
- },
- "node_modules/json-schema-compare": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz",
- "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.4"
- }
- },
- "node_modules/json-schema-faker": {
- "version": "0.5.6",
- "resolved": "https://registry.npmjs.org/json-schema-faker/-/json-schema-faker-0.5.6.tgz",
- "integrity": "sha512-u/cFC26/GDxh2vPiAC8B8xVvpXAW+QYtG2mijEbKrimCk8IHtiwQBjCE8TwvowdhALWq9IcdIWZ+/8ocXvdL3Q==",
- "dev": true,
- "dependencies": {
- "json-schema-ref-parser": "^6.1.0",
- "jsonpath-plus": "^7.2.0"
- },
- "bin": {
- "jsf": "bin/gen.cjs"
- }
- },
- "node_modules/json-schema-ref-parser": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-6.1.0.tgz",
- "integrity": "sha512-pXe9H1m6IgIpXmE5JSb8epilNTGsmTb2iPohAXpOdhqGFbQjNeHHsZxU+C8w6T81GZxSPFLeUoqDJmzxx5IGuw==",
- "deprecated": "Please switch to @apidevtools/json-schema-ref-parser",
- "dev": true,
- "dependencies": {
- "call-me-maybe": "^1.0.1",
- "js-yaml": "^3.12.1",
- "ono": "^4.0.11"
- }
- },
"node_modules/json-schema-traverse": {
"version": "0.4.1",
"dev": true,
@@ -18454,12 +17589,6 @@
"json5": "lib/cli.js"
}
},
- "node_modules/jsonc-parser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz",
- "integrity": "sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==",
- "dev": true
- },
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -18486,15 +17615,6 @@
],
"license": "MIT"
},
- "node_modules/jsonpath-plus": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.2.0.tgz",
- "integrity": "sha512-zBfiUPM5nD0YZSBT/o/fbCUlCcepMIdP0CJZxM1+KgA4f2T206f6VAg9e7mX35+KlMaIc5qXW34f3BnwJ3w+RA==",
- "dev": true,
- "engines": {
- "node": ">=12.0.0"
- }
- },
"node_modules/JSONStream": {
"version": "1.3.5",
"license": "(MIT OR Apache-2.0)",
@@ -18885,18 +18005,9 @@
"dev": true,
"bin": {
"yaml": "bin.mjs"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/liquid-json": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz",
- "integrity": "sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==",
- "dev": true,
+ },
"engines": {
- "node": ">=4"
+ "node": ">= 14"
}
},
"node_modules/listr2": {
@@ -18995,30 +18106,6 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/load-json-file/node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/loader-utils": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
@@ -19051,12 +18138,6 @@
"version": "4.2.0",
"license": "MIT"
},
- "node_modules/lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
- "dev": true
- },
"node_modules/lodash.clonedeep": {
"version": "4.5.0",
"license": "MIT"
@@ -19824,18 +18905,6 @@
"node": ">= 0.6"
}
},
- "node_modules/micri": {
- "version": "4.5.1",
- "resolved": "https://registry.npmjs.org/micri/-/micri-4.5.1.tgz",
- "integrity": "sha512-AtvnSBGFglNr+iqs5gufpHT9xRXUabgu9vYEnQYPXSBs+nLSBvmUS5Mzg+3LJ9eQBrNA1o5M49WeqiX1f+d2sg==",
- "dev": true,
- "dependencies": {
- "handler-agent": "0.2.0"
- },
- "engines": {
- "node": ">= 12.0.0"
- }
- },
"node_modules/micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
@@ -19868,15 +18937,6 @@
"node": ">= 0.6"
}
},
- "node_modules/mime-format": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.1.tgz",
- "integrity": "sha512-XxU3ngPbEnrYnNbIX+lYSaYg0M01v6p2ntd2YaFksTu0vayaw5OJvbdRyWs07EYRlLED5qadUZ+xo+XhOvFhwg==",
- "dev": true,
- "dependencies": {
- "charset": "^1.0.0"
- }
- },
"node_modules/mime-types": {
"version": "2.1.35",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
@@ -20482,12 +19542,6 @@
}
}
},
- "node_modules/node-abort-controller": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
- "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
- "dev": true
- },
"node_modules/node-addon-api": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
@@ -20904,15 +19958,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/ono": {
- "version": "4.0.11",
- "resolved": "https://registry.npmjs.org/ono/-/ono-4.0.11.tgz",
- "integrity": "sha512-jQ31cORBFE6td25deYeD80wxKBMj+zBmHTrVxnc6CKhx8gho6ipmWM5zj/oeoqioZ99yqBls9Z/9Nss7J26G2g==",
- "dev": true,
- "dependencies": {
- "format-util": "^1.0.3"
- }
- },
"node_modules/openai": {
"version": "4.70.3",
"resolved": "https://registry.npmjs.org/openai/-/openai-4.70.3.tgz",
@@ -20946,15 +19991,6 @@
"undici-types": "~5.26.4"
}
},
- "node_modules/openapi3-ts": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/openapi3-ts/-/openapi3-ts-2.0.2.tgz",
- "integrity": "sha512-TxhYBMoqx9frXyOgnRHufjQfPXomTIHYKhSKJ6jHfj13kS8OEIhvmE8CTuQyKtjjWttAjX5DPxM1vmalEpo8Qw==",
- "dev": true,
- "dependencies": {
- "yaml": "^1.10.2"
- }
- },
"node_modules/openid-client": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.0.tgz",
@@ -21217,33 +20253,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/parse-json": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/parse-multipart-data": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/parse-multipart-data/-/parse-multipart-data-1.5.0.tgz",
- "integrity": "sha512-ck5zaMF0ydjGfejNMnlo5YU2oJ+pT+80Jb1y4ybanT27j+zbVP/jkYmCrUGsEln0Ox/hZmuvgy8Ra7AxbXP2Mw==",
- "dev": true
- },
- "node_modules/parse-prefer-header": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-prefer-header/-/parse-prefer-header-1.0.0.tgz",
- "integrity": "sha512-+WJ3ncCrKOExuxF06XyKWS8bLkLttnlm6YPMZIFIUXNd09Xy0N2JISudxCaY+luDm43yTnHMHVU3zte4G2gN4g==",
- "dev": true,
- "dependencies": {
- "lodash.camelcase": "^4.3.0"
- }
- },
"node_modules/parse5": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
@@ -21274,14 +20283,6 @@
"node": ">= 0.8"
}
},
- "node_modules/path-exists": {
- "version": "3.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/path-is-absolute": {
"version": "1.0.1",
"license": "MIT",
@@ -21380,30 +20381,6 @@
"node": ">=0.10"
}
},
- "node_modules/pino": {
- "version": "6.14.0",
- "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz",
- "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==",
- "dev": true,
- "dependencies": {
- "fast-redact": "^3.0.0",
- "fast-safe-stringify": "^2.0.8",
- "flatstr": "^1.0.12",
- "pino-std-serializers": "^3.1.0",
- "process-warning": "^1.0.0",
- "quick-format-unescaped": "^4.0.3",
- "sonic-boom": "^1.0.2"
- },
- "bin": {
- "pino": "bin.js"
- }
- },
- "node_modules/pino-std-serializers": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz",
- "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==",
- "dev": true
- },
"node_modules/pirates": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
@@ -21413,77 +20390,6 @@
"node": ">= 6"
}
},
- "node_modules/pkg-conf": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz",
- "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==",
- "dev": true,
- "dependencies": {
- "find-up": "^2.0.0",
- "load-json-file": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
- "dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
- "dev": true,
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
- "dev": true,
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/pkg-conf/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/playwright": {
"version": "1.49.0",
"resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.0.tgz",
@@ -21549,79 +20455,6 @@
"node": "^10 || ^12 || >=14"
}
},
- "node_modules/postman-collection": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-4.5.0.tgz",
- "integrity": "sha512-152JSW9pdbaoJihwjc7Q8lc3nPg/PC9lPTHdMk7SHnHhu/GBJB7b2yb9zG7Qua578+3PxkQ/HYBuXpDSvsf7GQ==",
- "dev": true,
- "dependencies": {
- "@faker-js/faker": "5.5.3",
- "file-type": "3.9.0",
- "http-reasons": "0.1.0",
- "iconv-lite": "0.6.3",
- "liquid-json": "0.3.1",
- "lodash": "4.17.21",
- "mime-format": "2.0.1",
- "mime-types": "2.1.35",
- "postman-url-encoder": "3.0.5",
- "semver": "7.6.3",
- "uuid": "8.3.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/postman-collection/node_modules/@faker-js/faker": {
- "version": "5.5.3",
- "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz",
- "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==",
- "dev": true
- },
- "node_modules/postman-collection/node_modules/iconv-lite": {
- "version": "0.6.3",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
- "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
- "dev": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postman-collection/node_modules/semver": {
- "version": "7.6.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz",
- "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/postman-collection/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/postman-url-encoder": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.5.tgz",
- "integrity": "sha512-jOrdVvzUXBC7C+9gkIkpDJ3HIxOHTIqjpQ4C1EMt1ZGeMvSEpbFCKq23DEfgsj46vMnDgyQf+1ZLp2Wm+bKSsA==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/pprof-format": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.1.0.tgz",
@@ -21662,15 +20495,6 @@
"node": ">=6.0.0"
}
},
- "node_modules/pretty-data": {
- "version": "0.40.0",
- "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz",
- "integrity": "sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==",
- "dev": true,
- "engines": {
- "node": "*"
- }
- },
"node_modules/pretty-format": {
"version": "29.5.0",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
@@ -21716,12 +20540,6 @@
"version": "2.0.1",
"license": "MIT"
},
- "node_modules/process-warning": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz",
- "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==",
- "dev": true
- },
"node_modules/progress": {
"version": "2.0.3",
"license": "MIT",
@@ -21956,12 +20774,6 @@
"resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz",
"integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag=="
},
- "node_modules/quick-format-unescaped": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
- "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
- "dev": true
- },
"node_modules/random-bytes": {
"version": "1.0.0",
"license": "MIT",
@@ -22878,20 +21690,6 @@
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
},
- "node_modules/signale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz",
- "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.3.2",
- "figures": "^2.0.0",
- "pkg-conf": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/simple-swizzle": {
"version": "0.2.2",
"license": "MIT",
@@ -23079,16 +21877,6 @@
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz",
"integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ=="
},
- "node_modules/sonic-boom": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz",
- "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==",
- "dev": true,
- "dependencies": {
- "atomic-sleep": "^1.0.0",
- "flatstr": "^1.0.12"
- }
- },
"node_modules/source-map-js": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
@@ -23132,29 +21920,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/split2": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz",
- "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==",
- "dev": true,
- "dependencies": {
- "readable-stream": "^3.0.0"
- }
- },
- "node_modules/split2/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/sprintf-js": {
"version": "1.0.3",
"dev": true,
@@ -24501,18 +23266,6 @@
"punycode": "^2.1.0"
}
},
- "node_modules/uri-template-lite": {
- "version": "22.9.0",
- "resolved": "https://registry.npmjs.org/uri-template-lite/-/uri-template-lite-22.9.0.tgz",
- "integrity": "sha512-cmGZaykSWEQ5UXKaGKnUS8zFvfp8j1Jvn7dlq3P7tGd5XeybXcfo0xnVBRWiNEp80nO1GYgCLwoaRJ8WMmmk3Q==",
- "dev": true
- },
- "node_modules/urijs": {
- "version": "1.19.11",
- "resolved": "https://registry.npmjs.org/urijs/-/urijs-1.19.11.tgz",
- "integrity": "sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==",
- "dev": true
- },
"node_modules/url": {
"version": "0.10.3",
"license": "MIT",
@@ -24554,15 +23307,6 @@
"version": "1.0.2",
"license": "MIT"
},
- "node_modules/utility-types": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz",
- "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
"node_modules/utils-merge": {
"version": "1.0.1",
"license": "MIT",
@@ -24624,43 +23368,6 @@
"node": ">=10.12.0"
}
},
- "node_modules/validate.io-array": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz",
- "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==",
- "dev": true
- },
- "node_modules/validate.io-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz",
- "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==",
- "dev": true
- },
- "node_modules/validate.io-integer": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz",
- "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==",
- "dev": true,
- "dependencies": {
- "validate.io-number": "^1.0.3"
- }
- },
- "node_modules/validate.io-integer-array": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz",
- "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==",
- "dev": true,
- "dependencies": {
- "validate.io-array": "^1.0.3",
- "validate.io-integer": "^1.0.4"
- }
- },
- "node_modules/validate.io-number": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz",
- "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==",
- "dev": true
- },
"node_modules/validator": {
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz",
@@ -24750,11 +23457,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/whatwg-fetch": {
- "version": "3.6.2",
- "dev": true,
- "license": "MIT"
- },
"node_modules/whatwg-mimetype": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz",
@@ -25167,15 +23869,6 @@
"version": "3.1.1",
"license": "ISC"
},
- "node_modules/yaml": {
- "version": "1.10.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
- "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
diff --git a/package.json b/package.json
index 8fc558df82..8bb3d9452b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "FormSG",
"description": "Form Manager for Government",
- "version": "6.169.0",
+ "version": "6.170.0",
"homepage": "https://form.gov.sg",
"authors": [
"FormSG "
@@ -68,7 +68,7 @@
"@react-email/render": "^1.0.2",
"@stablelib/base64": "^1.0.1",
"aws-info": "^1.2.0",
- "aws-sdk": "^2.1691.0",
+ "aws-sdk": "^2.1692.0",
"axios": "^1.7.7",
"bcrypt": "^5.1.1",
"bluebird": "^3.5.2",
@@ -207,7 +207,7 @@
"eslint-config-prettier": "^8.10.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest": "^28.6.0",
- "eslint-plugin-playwright": "^1.6.0",
+ "eslint-plugin-playwright": "^2.1.0",
"eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-typesafe": "^0.5.2",
diff --git a/shared/package-lock.json b/shared/package-lock.json
index 7b0b65aaa4..b561c4f635 100644
--- a/shared/package-lock.json
+++ b/shared/package-lock.json
@@ -554,9 +554,9 @@
}
},
"node_modules/libphonenumber-js": {
- "version": "1.11.15",
- "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.15.tgz",
- "integrity": "sha512-M7+rtYi9l5RvMmHyjyoF3BHHUpXTYdJ0PezZGHNs0GyW1lO+K7jxlXpbdIb7a56h0nqLYdjIw+E+z0ciGaJP7g=="
+ "version": "1.11.16",
+ "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.16.tgz",
+ "integrity": "sha512-Noyazmt0yOvnG0OeRY45Cd1ur8G7Z0HWVkuCuKe+yysGNxPQwBAODBQQ40j0AIagi9ZWurfmmZWNlpg4h4W+XQ=="
},
"node_modules/lie": {
"version": "3.3.0",
diff --git a/src/app/modules/sgid/sgid.adapter.ts b/src/app/modules/sgid/sgid.adapter.ts
index 332d6fae7f..fddcaaa475 100644
--- a/src/app/modules/sgid/sgid.adapter.ts
+++ b/src/app/modules/sgid/sgid.adapter.ts
@@ -161,6 +161,12 @@ export class SGIDMyInfoData
*/
_formatFieldValue(attr: ExternalAttr): string | undefined {
const fieldValue = this.#payload[attr]
+ // returned payload might be empty if the form fields were edited after the initial scope sent to sgid
+ // sgid would then respond only the data initially requested
+ // but the form now expects more fields
+ if (!fieldValue) {
+ return ''
+ }
switch (attr) {
case ExternalAttr.RegisteredAddress:
return formatAddress(fieldValue)