From dba3677633a3a2fa7e47a827110fb932ab6f6693 Mon Sep 17 00:00:00 2001 From: Shubham Palriwala Date: Thu, 3 Aug 2023 17:18:31 +0530 Subject: [PATCH 1/4] fix: documentation on create webhook had invalid body key and headers were not being showed as required (#643) --- apps/formbricks-com/components/shared/APILayout.tsx | 9 ++++++++- .../pages/docs/webhook-api/create-webhook/index.mdx | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/formbricks-com/components/shared/APILayout.tsx b/apps/formbricks-com/components/shared/APILayout.tsx index b6581a731d..d910c67f88 100644 --- a/apps/formbricks-com/components/shared/APILayout.tsx +++ b/apps/formbricks-com/components/shared/APILayout.tsx @@ -10,6 +10,7 @@ interface APICallProps { label: string; type: string; description: string; + required?: boolean; }[]; bodies: { label: string; @@ -69,7 +70,13 @@ export function APILayout({ method, url, description, headers, bodies, responses

Headers

{headers.map((q) => ( - + ))}
diff --git a/apps/formbricks-com/pages/docs/webhook-api/create-webhook/index.mdx b/apps/formbricks-com/pages/docs/webhook-api/create-webhook/index.mdx index 6c54d52cad..bffe0508a8 100644 --- a/apps/formbricks-com/pages/docs/webhook-api/create-webhook/index.mdx +++ b/apps/formbricks-com/pages/docs/webhook-api/create-webhook/index.mdx @@ -41,7 +41,7 @@ export const meta = { ]} example={`{ "url": "https://mysystem.com/myendpoint", - "trigger": "responseFinished" + "triggers": ["responseFinished"] }`} responses={[ { From e5f371476c417276bdcb91b735b6398b7e836304 Mon Sep 17 00:00:00 2001 From: Matti Nannt Date: Thu, 3 Aug 2023 17:03:53 +0200 Subject: [PATCH 2/4] Fix formatting of preview components (#646) * Fix formatting of preview components * update npm packages --- .../pages/api/oss-friends/index.ts | 2 +- .../[environmentId]/surveys/PreviewSurvey.tsx | 4 +- .../preview/MultipleChoiceMultiQuestion.tsx | 4 +- .../preview/MultipleChoiceSingleQuestion.tsx | 4 +- apps/web/components/preview/NPSQuestion.tsx | 4 +- .../web/components/preview/RatingQuestion.tsx | 4 +- apps/web/lib/linkSurvey/linkSurvey.ts | 5 +- apps/web/package.json | 4 +- packages/api/package.json | 2 +- packages/errors/package.json | 2 +- .../eslint-config-formbricks/package.json | 2 +- packages/js/package.json | 4 +- .../MultipleChoiceMultiQuestion.tsx | 4 +- .../MultipleChoiceSingleQuestion.tsx | 4 +- packages/js/src/components/SurveyView.tsx | 4 +- packages/tsconfig/package.json | 4 +- pnpm-lock.yaml | 322 +++++++++--------- 17 files changed, 201 insertions(+), 178 deletions(-) diff --git a/apps/formbricks-com/pages/api/oss-friends/index.ts b/apps/formbricks-com/pages/api/oss-friends/index.ts index 5ea74d85c0..1f31e4b3dd 100644 --- a/apps/formbricks-com/pages/api/oss-friends/index.ts +++ b/apps/formbricks-com/pages/api/oss-friends/index.ts @@ -110,7 +110,7 @@ export default async function handle(req: NextApiRequest, res: NextApiResponse) "Typebot gives you powerful blocks to create unique chat experiences. Embed them anywhere on your apps and start collecting results like magic.", href: "https://typebot.io", }, - { + { name: "Twenty", description: "A modern CRM offering the flexibility of open-source, advanced features and sleek design.", diff --git a/apps/web/app/(app)/environments/[environmentId]/surveys/PreviewSurvey.tsx b/apps/web/app/(app)/environments/[environmentId]/surveys/PreviewSurvey.tsx index 0fb77a681e..6240ec96c0 100644 --- a/apps/web/app/(app)/environments/[environmentId]/surveys/PreviewSurvey.tsx +++ b/apps/web/app/(app)/environments/[environmentId]/surveys/PreviewSurvey.tsx @@ -138,7 +138,9 @@ export default function PreviewSurvey({ switch (logic.condition) { case "equals": return ( - (Array.isArray(responseValue) && responseValue.length === 1 && responseValue.includes(logic.value)) || + (Array.isArray(responseValue) && + responseValue.length === 1 && + responseValue.includes(logic.value)) || responseValue.toString() === logic.value ); case "notEquals": diff --git a/apps/web/components/preview/MultipleChoiceMultiQuestion.tsx b/apps/web/components/preview/MultipleChoiceMultiQuestion.tsx index 894a8b5e14..6a69819dc4 100644 --- a/apps/web/components/preview/MultipleChoiceMultiQuestion.tsx +++ b/apps/web/components/preview/MultipleChoiceMultiQuestion.tsx @@ -39,7 +39,9 @@ export default function MultipleChoiceMultiQuestion({ .map((choice) => choice.label); useEffect(() => { - const nonOtherSavedChoices = storedResponseValue?.filter((answer) => nonOtherChoiceLabels.includes(answer)); + const nonOtherSavedChoices = storedResponseValue?.filter((answer) => + nonOtherChoiceLabels.includes(answer) + ); const savedOtherSpecified = storedResponseValue?.find((answer) => !nonOtherChoiceLabels.includes(answer)); setSelectedChoices(nonOtherSavedChoices ?? []); diff --git a/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx b/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx index db91f5e292..7ca404823d 100644 --- a/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx +++ b/apps/web/components/preview/MultipleChoiceSingleQuestion.tsx @@ -29,7 +29,9 @@ export default function MultipleChoiceSingleQuestion({ goToNextQuestion, goToPreviousQuestion, }: MultipleChoiceSingleProps) { - const storedResponseValueValue = question.choices.find((choice) => choice.label === storedResponseValue)?.id; + const storedResponseValueValue = question.choices.find( + (choice) => choice.label === storedResponseValue + )?.id; const [selectedChoice, setSelectedChoice] = useState(null); const [savedOtherAnswer, setSavedOtherAnswer] = useState(null); const [questionChoices, setQuestionChoices] = useState( diff --git a/apps/web/components/preview/NPSQuestion.tsx b/apps/web/components/preview/NPSQuestion.tsx index 242563eaa3..f33af22337 100644 --- a/apps/web/components/preview/NPSQuestion.tsx +++ b/apps/web/components/preview/NPSQuestion.tsx @@ -105,7 +105,9 @@ export default function NPSQuestion({ /> )}
- {(!question.required || storedResponseValue) && } + {(!question.required || storedResponseValue) && ( + + )} ); diff --git a/apps/web/components/preview/RatingQuestion.tsx b/apps/web/components/preview/RatingQuestion.tsx index c4d98eca43..7c96c129de 100644 --- a/apps/web/components/preview/RatingQuestion.tsx +++ b/apps/web/components/preview/RatingQuestion.tsx @@ -154,7 +154,9 @@ export default function RatingQuestion({ /> )}
- {(!question.required || storedResponseValue) && } + {(!question.required || storedResponseValue) && ( + + )} ); diff --git a/apps/web/lib/linkSurvey/linkSurvey.ts b/apps/web/lib/linkSurvey/linkSurvey.ts index c952cb44fd..a7f30f3dd7 100644 --- a/apps/web/lib/linkSurvey/linkSurvey.ts +++ b/apps/web/lib/linkSurvey/linkSurvey.ts @@ -275,7 +275,10 @@ const storeResponse = (surveyId: string, answer: Response["data"]) => { const storedResponses = localStorage.getItem(`formbricks-${surveyId}-responses`); if (storedResponses) { const parsedResponses = JSON.parse(storedResponses); - localStorage.setItem(`formbricks-${surveyId}-responses`, JSON.stringify({ ...parsedResponses, ...answer })); + localStorage.setItem( + `formbricks-${surveyId}-responses`, + JSON.stringify({ ...parsedResponses, ...answer }) + ); } else { localStorage.setItem(`formbricks-${surveyId}-responses`, JSON.stringify(answer)); } diff --git a/apps/web/package.json b/apps/web/package.json index f918bfd655..6c4e5fba2b 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -25,7 +25,7 @@ "@paralleldrive/cuid2": "^2.2.1", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-dropdown-menu": "^2.0.5", - "@sentry/nextjs": "^7.60.1", + "@sentry/nextjs": "^7.61.0", "@t3-oss/env-nextjs": "^0.6.0", "bcryptjs": "^2.4.3", "eslint-config-next": "^13.4.12", @@ -35,7 +35,7 @@ "next": "13.4.10", "next-auth": "^4.22.3", "nodemailer": "^6.9.4", - "posthog-js": "^1.75.2", + "posthog-js": "^1.75.3", "prismjs": "^1.29.0", "react": "18.2.0", "react-beautiful-dnd": "^13.1.1", diff --git a/packages/api/package.json b/packages/api/package.json index b2e587d6d4..b322932bd3 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -24,6 +24,6 @@ "@formbricks/types": "workspace:*", "@formbricks/tsconfig": "workspace:*", "eslint-config-formbricks": "workspace:*", - "tsup": "^7.1.0" + "tsup": "^7.2.0" } } diff --git a/packages/errors/package.json b/packages/errors/package.json index e9b1a3e175..94663b9c4d 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -20,6 +20,6 @@ "devDependencies": { "@formbricks/tsconfig": "workspace:*", "eslint-config-formbricks": "workspace:*", - "tsup": "^7.1.0" + "tsup": "^7.2.0" } } diff --git a/packages/eslint-config-formbricks/package.json b/packages/eslint-config-formbricks/package.json index b0bb7987ab..d35b480d23 100644 --- a/packages/eslint-config-formbricks/package.json +++ b/packages/eslint-config-formbricks/package.json @@ -10,7 +10,7 @@ "devDependencies": { "eslint": "^8.46.0", "eslint-config-next": "^13.4.12", - "eslint-config-prettier": "^8.9.0", + "eslint-config-prettier": "^8.10.0", "eslint-plugin-react": "7.33.1", "eslint-config-turbo": "latest" } diff --git a/packages/js/package.json b/packages/js/package.json index 5aaf4cd4d6..1ca1c7aeb8 100644 --- a/packages/js/package.json +++ b/packages/js/package.json @@ -50,8 +50,8 @@ "@formbricks/api": "workspace:*", "@formbricks/types": "workspace:*", "@types/jest": "^29.5.3", - "@typescript-eslint/eslint-plugin": "^6.2.0", - "@typescript-eslint/parser": "^6.2.0", + "@typescript-eslint/eslint-plugin": "^6.2.1", + "@typescript-eslint/parser": "^6.2.1", "autoprefixer": "^10.4.14", "babel-jest": "^29.6.2", "cross-env": "^7.0.3", diff --git a/packages/js/src/components/MultipleChoiceMultiQuestion.tsx b/packages/js/src/components/MultipleChoiceMultiQuestion.tsx index ce9fceca0d..6a7d6f7964 100644 --- a/packages/js/src/components/MultipleChoiceMultiQuestion.tsx +++ b/packages/js/src/components/MultipleChoiceMultiQuestion.tsx @@ -49,7 +49,9 @@ export default function MultipleChoiceMultiQuestion({ .map((choice) => choice.label); useEffect(() => { - const nonOtherSavedChoices = storedResponseValue?.filter((answer) => nonOtherChoiceLabels.includes(answer)); + const nonOtherSavedChoices = storedResponseValue?.filter((answer) => + nonOtherChoiceLabels.includes(answer) + ); const savedOtherSpecified = storedResponseValue?.find((answer) => !nonOtherChoiceLabels.includes(answer)); setSelectedChoices(nonOtherSavedChoices ?? []); diff --git a/packages/js/src/components/MultipleChoiceSingleQuestion.tsx b/packages/js/src/components/MultipleChoiceSingleQuestion.tsx index 449fe5eed0..e86b652d25 100644 --- a/packages/js/src/components/MultipleChoiceSingleQuestion.tsx +++ b/packages/js/src/components/MultipleChoiceSingleQuestion.tsx @@ -27,7 +27,9 @@ export default function MultipleChoiceSingleQuestion({ goToNextQuestion, goToPreviousQuestion, }: MultipleChoiceSingleProps) { - const storedResponseValueValue = question.choices.find((choice) => choice.label === storedResponseValue)?.id; + const storedResponseValueValue = question.choices.find( + (choice) => choice.label === storedResponseValue + )?.id; const [selectedChoice, setSelectedChoice] = useState(null); const [savedOtherAnswer, setSavedOtherAnswer] = useState(null); const [questionChoices, setQuestionChoices] = useState( diff --git a/packages/js/src/components/SurveyView.tsx b/packages/js/src/components/SurveyView.tsx index 2a1ec7d498..d0bb02ce61 100644 --- a/packages/js/src/components/SurveyView.tsx +++ b/packages/js/src/components/SurveyView.tsx @@ -110,7 +110,9 @@ export default function SurveyView({ config, survey, close, errorHandler }: Surv switch (logic.condition) { case "equals": return ( - (Array.isArray(responseValue) && responseValue.length === 1 && responseValue.includes(logic.value)) || + (Array.isArray(responseValue) && + responseValue.length === 1 && + responseValue.includes(logic.value)) || responseValue.toString() === logic.value ); case "notEquals": diff --git a/packages/tsconfig/package.json b/packages/tsconfig/package.json index fde84b6bdb..acb4a9520e 100644 --- a/packages/tsconfig/package.json +++ b/packages/tsconfig/package.json @@ -6,8 +6,8 @@ "clean": "rimraf node_modules" }, "devDependencies": { - "@types/node": "20.4.5", - "@types/react": "18.2.17", + "@types/node": "20.4.6", + "@types/react": "18.2.18", "@types/react-dom": "18.2.7", "typescript": "5.1.6" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index afe058769e..14f0c73e7d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -176,8 +176,8 @@ importers: specifier: ^2.0.5 version: 2.0.5(react-dom@18.2.0)(react@18.2.0) '@sentry/nextjs': - specifier: ^7.60.1 - version: 7.60.1(next@13.4.10)(react@18.2.0) + specifier: ^7.61.0 + version: 7.61.0(next@13.4.10)(react@18.2.0) '@t3-oss/env-nextjs': specifier: ^0.6.0 version: 0.6.0(typescript@5.1.6)(zod@3.21.4) @@ -206,8 +206,8 @@ importers: specifier: ^6.9.4 version: 6.9.4 posthog-js: - specifier: ^1.75.2 - version: 1.75.2 + specifier: ^1.75.3 + version: 1.75.3 prismjs: specifier: ^1.29.0 version: 1.29.0 @@ -268,8 +268,8 @@ importers: specifier: workspace:* version: link:../eslint-config-formbricks tsup: - specifier: ^7.1.0 - version: 7.1.0 + specifier: ^7.2.0 + version: 7.2.0 packages/database: dependencies: @@ -336,8 +336,8 @@ importers: specifier: workspace:* version: link:../eslint-config-formbricks tsup: - specifier: ^7.1.0 - version: 7.1.0 + specifier: ^7.2.0 + version: 7.2.0 packages/eslint-config-formbricks: devDependencies: @@ -348,8 +348,8 @@ importers: specifier: ^13.4.12 version: 13.4.12(eslint@8.46.0)(typescript@5.1.6) eslint-config-prettier: - specifier: ^8.9.0 - version: 8.9.0(eslint@8.46.0) + specifier: ^8.10.0 + version: 8.10.0(eslint@8.46.0) eslint-config-turbo: specifier: latest version: 1.8.8(eslint@8.46.0) @@ -378,11 +378,11 @@ importers: specifier: ^29.5.3 version: 29.5.3 '@typescript-eslint/eslint-plugin': - specifier: ^6.2.0 - version: 6.2.0(@typescript-eslint/parser@6.2.0)(eslint@8.46.0)(typescript@5.1.6) + specifier: ^6.2.1 + version: 6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.1.6) '@typescript-eslint/parser': - specifier: ^6.2.0 - version: 6.2.0(eslint@8.46.0)(typescript@5.1.6) + specifier: ^6.2.1 + version: 6.2.1(eslint@8.46.0)(typescript@5.1.6) autoprefixer: specifier: ^10.4.14 version: 10.4.14(postcss@8.4.27) @@ -397,7 +397,7 @@ importers: version: link:../eslint-config-formbricks eslint-config-preact: specifier: ^1.3.0 - version: 1.3.0(@typescript-eslint/eslint-plugin@6.2.0)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6) + version: 1.3.0(@typescript-eslint/eslint-plugin@6.2.1)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6) isomorphic-fetch: specifier: ^3.0.0 version: 3.0.0 @@ -493,11 +493,11 @@ importers: packages/tsconfig: devDependencies: '@types/node': - specifier: 20.4.5 - version: 20.4.5 + specifier: 20.4.6 + version: 20.4.6 '@types/react': - specifier: 18.2.17 - version: 18.2.17 + specifier: 18.2.18 + version: 18.2.18 '@types/react-dom': specifier: 18.2.7 version: 18.2.7 @@ -2973,7 +2973,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 chalk: 4.1.2 jest-message-util: 29.6.2 jest-util: 29.6.2 @@ -2994,14 +2994,14 @@ packages: '@jest/test-result': 29.6.2 '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.7.0 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.5.0 - jest-config: 29.6.2(@types/node@20.4.5) + jest-config: 29.6.2(@types/node@20.4.6) jest-haste-map: 29.6.2 jest-message-util: 29.6.2 jest-regex-util: 29.4.3 @@ -3029,7 +3029,7 @@ packages: dependencies: '@jest/fake-timers': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 jest-mock: 29.6.2 dev: true @@ -3063,7 +3063,7 @@ packages: dependencies: '@jest/types': 29.6.1 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 20.4.5 + '@types/node': 20.4.6 jest-message-util: 29.6.2 jest-mock: 29.6.2 jest-util: 29.6.2 @@ -3096,7 +3096,7 @@ packages: '@jest/transform': 29.6.2 '@jest/types': 29.6.1 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 20.4.5 + '@types/node': 20.4.6 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -3191,7 +3191,7 @@ packages: '@jest/schemas': 29.6.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -3224,7 +3224,7 @@ packages: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.17 + '@jridgewell/trace-mapping': 0.3.18 /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -3234,6 +3234,7 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + dev: true /@jridgewell/trace-mapping@0.3.18: resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} @@ -5170,25 +5171,25 @@ packages: /@rushstack/eslint-patch@1.2.0: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} - /@sentry-internal/tracing@7.60.1: - resolution: {integrity: sha512-2vM+3/ddzmoBfi92OOD9FFTHXf0HdQhKtNM26+/RsmkKnTid+/inbvA7nKi+Qa7ExcnlC6eclEHQEg+0X3yDkQ==} + /@sentry-internal/tracing@7.61.0: + resolution: {integrity: sha512-zTr+MXEG4SxNxif42LIgm2RQn+JRXL2NuGhRaKSD2i4lXKFqHVGlVdoWqY5UfqnnJPokiTWIj9ejR8I5HV8Ogw==} engines: {node: '>=8'} dependencies: - '@sentry/core': 7.60.1 - '@sentry/types': 7.60.1 - '@sentry/utils': 7.60.1 + '@sentry/core': 7.61.0 + '@sentry/types': 7.61.0 + '@sentry/utils': 7.61.0 tslib: 2.5.3 dev: false - /@sentry/browser@7.60.1: - resolution: {integrity: sha512-opZQee3S0c459LXt8YGpwOM/qiTlzluHEEnfW2q+D2yVCWh8iegsDX3kbRiv4i/mtQu9yPhM9M761KDnc/0eZw==} + /@sentry/browser@7.61.0: + resolution: {integrity: sha512-IGEkJZRP16Oe5CkXkmhU3QdV5RugW6Vds16yJFFYsgp87NprWtRZgqzldFDYkINStfBHVdctj/Rh/ZrLf8QlkQ==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.60.1 - '@sentry/core': 7.60.1 - '@sentry/replay': 7.60.1 - '@sentry/types': 7.60.1 - '@sentry/utils': 7.60.1 + '@sentry-internal/tracing': 7.61.0 + '@sentry/core': 7.61.0 + '@sentry/replay': 7.61.0 + '@sentry/types': 7.61.0 + '@sentry/utils': 7.61.0 tslib: 2.5.3 dev: false @@ -5209,27 +5210,27 @@ packages: - supports-color dev: false - /@sentry/core@7.60.1: - resolution: {integrity: sha512-yr/0VFYWOJyXj+F2nifkRYxXskotsNnDggUnFOZZN2ZgTG94IzRFsOZQ6RslHJ8nrYPTBNO74reU0C0GB++xRw==} + /@sentry/core@7.61.0: + resolution: {integrity: sha512-zl0ZKRjIoYJQWYTd3K/U6zZfS4GDY9yGd2EH4vuYO4kfYtEp/nJ8A+tfAeDo0c9FGxZ0Q+5t5F4/SfwbgyyQzg==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.60.1 - '@sentry/utils': 7.60.1 + '@sentry/types': 7.61.0 + '@sentry/utils': 7.61.0 tslib: 2.5.3 dev: false - /@sentry/integrations@7.60.1: - resolution: {integrity: sha512-GkxGGUOGyRZ2aJrHfGPGJ40wh+r03xDHgjeM7SMHwdJdxTgFhv4xUZAl6NlywbxL5t2jhVwCMZNYIvy/vUrcFQ==} + /@sentry/integrations@7.61.0: + resolution: {integrity: sha512-NEQ+CatBfUM1TmA4FOOyHfsMvSIwSg4pA55Lxiq9quDykzkEtrXFzUfFpZbTunz4cegG8hucPOqbzKFrDPfGjQ==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.60.1 - '@sentry/utils': 7.60.1 + '@sentry/types': 7.61.0 + '@sentry/utils': 7.61.0 localforage: 1.10.0 tslib: 2.5.3 dev: false - /@sentry/nextjs@7.60.1(next@13.4.10)(react@18.2.0): - resolution: {integrity: sha512-AwDbcvYudNOukYPndPId5Re8sRXdhA4iPS87QsRexAetUvPY/bCckFkdaGJok+OlMNBN8o3eudNNCytyZT2s+A==} + /@sentry/nextjs@7.61.0(next@13.4.10)(react@18.2.0): + resolution: {integrity: sha512-zSEcAITqVmJpR4hhah1jUyCzm/hjlq9vjmO6BmTnQjr84OgOdeKJGWtRdktXId+9zzHdCOehs/JPtmO7y+yG6Q==} engines: {node: '>=8'} peerDependencies: next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 @@ -5240,12 +5241,12 @@ packages: optional: true dependencies: '@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0) - '@sentry/core': 7.60.1 - '@sentry/integrations': 7.60.1 - '@sentry/node': 7.60.1 - '@sentry/react': 7.60.1(react@18.2.0) - '@sentry/types': 7.60.1 - '@sentry/utils': 7.60.1 + '@sentry/core': 7.61.0 + '@sentry/integrations': 7.61.0 + '@sentry/node': 7.61.0 + '@sentry/react': 7.61.0(react@18.2.0) + '@sentry/types': 7.61.0 + '@sentry/utils': 7.61.0 '@sentry/webpack-plugin': 1.20.0 chalk: 3.0.0 next: 13.4.10(react-dom@18.2.0)(react@18.2.0) @@ -5258,14 +5259,14 @@ packages: - supports-color dev: false - /@sentry/node@7.60.1: - resolution: {integrity: sha512-lBt3RqncY4XbzM+PlTbH/tUWeOsm24anwEzvA2DSDP1NL3WZ5MdvT77q7NqpvpVNd2LeGAQ6x7AXDzE53YBfnQ==} + /@sentry/node@7.61.0: + resolution: {integrity: sha512-oTCqD/h92uvbRCrtCdiAqN6Mfe3vF7ywVHZ8Nq3hHmJp6XadUT+fCBwNQ7rjMyqJAOYAnx/vp6iN9n8C5qcYZQ==} engines: {node: '>=8'} dependencies: - '@sentry-internal/tracing': 7.60.1 - '@sentry/core': 7.60.1 - '@sentry/types': 7.60.1 - '@sentry/utils': 7.60.1 + '@sentry-internal/tracing': 7.61.0 + '@sentry/core': 7.61.0 + '@sentry/types': 7.61.0 + '@sentry/utils': 7.61.0 cookie: 0.4.2 https-proxy-agent: 5.0.1 lru_map: 0.3.3 @@ -5274,39 +5275,39 @@ packages: - supports-color dev: false - /@sentry/react@7.60.1(react@18.2.0): - resolution: {integrity: sha512-977wb5gp7SHv9kHPs1HZtL60slt2WBFY9/YJI9Av7BjjJ/A89OhtBwbVhIcKXZ4hwHQVWuOiFCJdMrIfZXpFPA==} + /@sentry/react@7.61.0(react@18.2.0): + resolution: {integrity: sha512-17ZPDdzx3hzJSHsVFAiw4hUT701LUVIcm568q38sPlSUmnOmNmPeHx/xcQkuxMoVsw/xgf/82B/BKKnIP5/diA==} engines: {node: '>=8'} peerDependencies: react: 15.x || 16.x || 17.x || 18.x dependencies: - '@sentry/browser': 7.60.1 - '@sentry/types': 7.60.1 - '@sentry/utils': 7.60.1 + '@sentry/browser': 7.61.0 + '@sentry/types': 7.61.0 + '@sentry/utils': 7.61.0 hoist-non-react-statics: 3.3.2 react: 18.2.0 tslib: 2.5.3 dev: false - /@sentry/replay@7.60.1: - resolution: {integrity: sha512-WHQxEpJbHICs12L17LGgS/ql91yn9wJDH/hgb+1H90HaasjoR54ofWCKul29OvYV0snTWuHd6xauwtzyv9tzvg==} + /@sentry/replay@7.61.0: + resolution: {integrity: sha512-1ugk0yZssOPkSg6uTVcysjxlBydycXiOgV0PCU7DsXCFOV1ua5YpyPZFReTz9iFTtwD0LwGFM1LW9wJeQ67Fzg==} engines: {node: '>=12'} dependencies: - '@sentry/core': 7.60.1 - '@sentry/types': 7.60.1 - '@sentry/utils': 7.60.1 + '@sentry/core': 7.61.0 + '@sentry/types': 7.61.0 + '@sentry/utils': 7.61.0 dev: false - /@sentry/types@7.60.1: - resolution: {integrity: sha512-8lKKSCOhZ953cWxwnfZwoR3ZFFlZG4P3PQFTaFt/u4LxLh/0zYbdtgvtUqXRURjMCi5P6ddeE9Uw9FGnTJCsTw==} + /@sentry/types@7.61.0: + resolution: {integrity: sha512-/GLlIBNR35NKPE/SfWi9W10dK9hE8qTShzsuPVn5wAJxpT3Lb4+dkwmKCTLUYxdkmvRDEudkfOxgalsfQGTAWA==} engines: {node: '>=8'} dev: false - /@sentry/utils@7.60.1: - resolution: {integrity: sha512-ik+5sKGBx4DWuvf6UUKPSafaDiASxP+Xvjg3C9ppop2I/JWxP1FfZ5g22n5ZmPmNahD6clTSoTWly8qyDUlUOw==} + /@sentry/utils@7.61.0: + resolution: {integrity: sha512-jfj14d0XBFiCU0G6dZZ12SizATiF5Mt4stBGzkM5iS9nXFj8rh1oTT7/p+aZoYzP2JTF+sDzkNjWxyKZkcTo0Q==} engines: {node: '>=8'} dependencies: - '@sentry/types': 7.60.1 + '@sentry/types': 7.61.0 tslib: 2.5.3 dev: false @@ -5474,32 +5475,32 @@ packages: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/bonjour@3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/connect-history-api-fallback@1.3.5: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: '@types/express-serve-static-core': 4.17.33 - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/cross-spawn@6.0.2: resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/debug@4.1.7: @@ -5547,7 +5548,7 @@ packages: /@types/express-serve-static-core@4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 dev: true @@ -5564,7 +5565,7 @@ packages: /@types/graceful-fs@4.1.5: resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/hast@2.3.4: @@ -5576,14 +5577,14 @@ packages: /@types/hoist-non-react-statics@3.3.1: resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.18 hoist-non-react-statics: 3.3.2 dev: false /@types/http-proxy@1.17.10: resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/is-ci@3.0.0: @@ -5622,7 +5623,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -5636,7 +5637,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 /@types/linkify-it@3.0.2: resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==} @@ -5685,6 +5686,9 @@ packages: /@types/node@20.4.5: resolution: {integrity: sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==} + /@types/node@20.4.6: + resolution: {integrity: sha512-q0RkvNgMweWWIvSMDiXhflGUKMdIxBo2M2tYM/0kEGDueQByFzK4KZAgu5YHGFNxziTlppNpTIBcqHQAxlfHdA==} + /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true @@ -5714,20 +5718,20 @@ packages: /@types/react-dom@18.2.7: resolution: {integrity: sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==} dependencies: - '@types/react': 18.2.17 + '@types/react': 18.2.18 dev: true /@types/react-redux@7.1.25: resolution: {integrity: sha512-bAGh4e+w5D8dajd6InASVIyCo4pZLJ66oLb80F9OBLO1gKESbZcRCJpTT6uLXX+HAB57zw1WTdwJdAsewuTweg==} dependencies: '@types/hoist-non-react-statics': 3.3.1 - '@types/react': 18.2.17 + '@types/react': 18.2.18 hoist-non-react-statics: 3.3.2 redux: 4.2.1 dev: false - /@types/react@18.2.17: - resolution: {integrity: sha512-u+e7OlgPPh+aryjOm5UJMX32OvB2E3QASOAqVMY6Ahs90djagxwv2ya0IctglNbNTexC12qCSMZG47KPfy1hAA==} + /@types/react@18.2.18: + resolution: {integrity: sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==} dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 @@ -5744,13 +5748,13 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -5773,13 +5777,13 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/sockjs@0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/source-list-map@0.1.2: @@ -5815,7 +5819,7 @@ packages: /@types/webpack-sources@3.2.0: resolution: {integrity: sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 '@types/source-list-map': 0.1.2 source-map: 0.7.4 dev: true @@ -5823,7 +5827,7 @@ packages: /@types/webpack@4.41.33: resolution: {integrity: sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 '@types/tapable': 1.0.8 '@types/uglify-js': 3.17.1 '@types/webpack-sources': 3.2.0 @@ -5834,7 +5838,7 @@ packages: /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 dev: true /@types/yargs-parser@21.0.0: @@ -5847,8 +5851,8 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@6.2.0(@typescript-eslint/parser@6.2.0)(eslint@8.46.0)(typescript@5.1.6): - resolution: {integrity: sha512-rClGrMuyS/3j0ETa1Ui7s6GkLhfZGKZL3ZrChLeAiACBE/tRc1wq8SNZESUuluxhLj9FkUefRs2l6bCIArWBiQ==} + /@typescript-eslint/eslint-plugin@6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -5859,11 +5863,11 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.6.2 - '@typescript-eslint/parser': 6.2.0(eslint@8.46.0)(typescript@5.1.6) - '@typescript-eslint/scope-manager': 6.2.0 - '@typescript-eslint/type-utils': 6.2.0(eslint@8.46.0)(typescript@5.1.6) - '@typescript-eslint/utils': 6.2.0(eslint@8.46.0)(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 6.2.0 + '@typescript-eslint/parser': 6.2.1(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/type-utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.2.1 debug: 4.3.4 eslint: 8.46.0 graphemer: 1.4.0 @@ -5909,8 +5913,8 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@6.2.0(eslint@8.46.0)(typescript@5.1.6): - resolution: {integrity: sha512-igVYOqtiK/UsvKAmmloQAruAdUHihsOCvplJpplPZ+3h4aDkC/UKZZNKgB6h93ayuYLuEymU3h8nF1xMRbh37g==} + /@typescript-eslint/parser@6.2.1(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -5919,10 +5923,10 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.2.0 - '@typescript-eslint/types': 6.2.0 - '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 6.2.0 + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 6.2.1 debug: 4.3.4 eslint: 8.46.0 typescript: 5.1.6 @@ -5945,16 +5949,16 @@ packages: '@typescript-eslint/types': 5.59.9 '@typescript-eslint/visitor-keys': 5.59.9 - /@typescript-eslint/scope-manager@6.2.0: - resolution: {integrity: sha512-1ZMNVgm5nnHURU8ZSJ3snsHzpFeNK84rdZjluEVBGNu7jDymfqceB3kdIZ6A4xCfEFFhRIB6rF8q/JIqJd2R0Q==} + /@typescript-eslint/scope-manager@6.2.1: + resolution: {integrity: sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.2.0 - '@typescript-eslint/visitor-keys': 6.2.0 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/visitor-keys': 6.2.1 dev: true - /@typescript-eslint/type-utils@6.2.0(eslint@8.46.0)(typescript@5.1.6): - resolution: {integrity: sha512-DnGZuNU2JN3AYwddYIqrVkYW0uUQdv0AY+kz2M25euVNlujcN2u+rJgfJsBFlUEzBB6OQkUqSZPyuTLf2bP5mw==} + /@typescript-eslint/type-utils@6.2.1(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -5963,8 +5967,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.1.6) - '@typescript-eslint/utils': 6.2.0(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.1.6) + '@typescript-eslint/utils': 6.2.1(eslint@8.46.0)(typescript@5.1.6) debug: 4.3.4 eslint: 8.46.0 ts-api-utils: 1.0.1(typescript@5.1.6) @@ -5982,8 +5986,8 @@ packages: resolution: {integrity: sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@typescript-eslint/types@6.2.0: - resolution: {integrity: sha512-1nRRaDlp/XYJQLvkQJG5F3uBTno5SHPT7XVcJ5n1/k2WfNI28nJsvLakxwZRNY5spuatEKO7d5nZWsQpkqXwBA==} + /@typescript-eslint/types@6.2.1: + resolution: {integrity: sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==} engines: {node: ^16.0.0 || >=18.0.0} dev: true @@ -6028,8 +6032,8 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/typescript-estree@6.2.0(typescript@5.1.6): - resolution: {integrity: sha512-Mts6+3HQMSM+LZCglsc2yMIny37IhUgp1Qe8yJUYVyO6rHP7/vN0vajKu3JvHCBIy8TSiKddJ/Zwu80jhnGj1w==} + /@typescript-eslint/typescript-estree@6.2.1(typescript@5.1.6): + resolution: {integrity: sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -6037,8 +6041,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.2.0 - '@typescript-eslint/visitor-keys': 6.2.0 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/visitor-keys': 6.2.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -6069,8 +6073,8 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.2.0(eslint@8.46.0)(typescript@5.1.6): - resolution: {integrity: sha512-RCFrC1lXiX1qEZN8LmLrxYRhOkElEsPKTVSNout8DMzf8PeWoQG7Rxz2SadpJa3VSh5oYKGwt7j7X/VRg+Y3OQ==} + /@typescript-eslint/utils@6.2.1(eslint@8.46.0)(typescript@5.1.6): + resolution: {integrity: sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -6078,9 +6082,9 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.46.0) '@types/json-schema': 7.0.12 '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.2.0 - '@typescript-eslint/types': 6.2.0 - '@typescript-eslint/typescript-estree': 6.2.0(typescript@5.1.6) + '@typescript-eslint/scope-manager': 6.2.1 + '@typescript-eslint/types': 6.2.1 + '@typescript-eslint/typescript-estree': 6.2.1(typescript@5.1.6) eslint: 8.46.0 semver: 7.5.4 transitivePeerDependencies: @@ -6103,11 +6107,11 @@ packages: '@typescript-eslint/types': 5.59.9 eslint-visitor-keys: 3.4.2 - /@typescript-eslint/visitor-keys@6.2.0: - resolution: {integrity: sha512-QbaYUQVKKo9bgCzpjz45llCfwakyoxHetIy8CAvYCtd16Zu1KrpzNHofwF8kGkpPOxZB2o6kz+0nqH8ZkIzuoQ==} + /@typescript-eslint/visitor-keys@6.2.1: + resolution: {integrity: sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.2.0 + '@typescript-eslint/types': 6.2.1 eslint-visitor-keys: 3.4.2 dev: true @@ -9777,7 +9781,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@6.2.0)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6): + /eslint-config-preact@1.3.0(@typescript-eslint/eslint-plugin@6.2.1)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6): resolution: {integrity: sha512-yHYXg5qNzEJd3D/30AmsIW0W8MuY858KpApXp7xxBF08IYUljSKCOqMx+dVucXHQnAm7+11wOnMkgVHIBAechw==} peerDependencies: eslint: 6.x || 7.x || 8.x @@ -9789,7 +9793,7 @@ packages: '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) eslint: 8.46.0 eslint-plugin-compat: 4.1.2(eslint@8.46.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@6.2.0)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@6.2.1)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6) eslint-plugin-react: 7.33.1(eslint@8.46.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.46.0) transitivePeerDependencies: @@ -9799,8 +9803,8 @@ packages: - typescript dev: true - /eslint-config-prettier@8.9.0(eslint@8.46.0): - resolution: {integrity: sha512-+sbni7NfVXnOpnRadUA8S28AUlsZt9GjgFvABIRL9Hkn8KqNzOp+7Lw4QWtrwn20KzU3wqu1QoOj2m+7rKRqkA==} + /eslint-config-prettier@8.10.0(eslint@8.46.0): + resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -9919,7 +9923,7 @@ packages: - eslint-import-resolver-webpack - supports-color - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@6.2.0)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6): + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@6.2.1)(eslint@8.46.0)(jest@29.6.2)(typescript@5.1.6): resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -9932,7 +9936,7 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.2.0(@typescript-eslint/parser@6.2.0)(eslint@8.46.0)(typescript@5.1.6) + '@typescript-eslint/eslint-plugin': 6.2.1(@typescript-eslint/parser@6.2.1)(eslint@8.46.0)(typescript@5.1.6) '@typescript-eslint/experimental-utils': 5.54.0(eslint@8.46.0)(typescript@5.1.6) eslint: 8.46.0 jest: 29.6.2 @@ -10275,7 +10279,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/expect-utils': 29.6.2 - '@types/node': 20.4.5 + '@types/node': 20.4.6 jest-get-type: 29.4.3 jest-matcher-utils: 29.6.2 jest-message-util: 29.6.2 @@ -12295,7 +12299,7 @@ packages: '@jest/expect': 29.6.2 '@jest/test-result': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -12333,7 +12337,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.6.2(@types/node@20.4.5) + jest-config: 29.6.2(@types/node@20.4.6) jest-util: 29.6.2 jest-validate: 29.6.2 prompts: 2.4.2 @@ -12345,7 +12349,7 @@ packages: - ts-node dev: true - /jest-config@29.6.2(@types/node@20.4.5): + /jest-config@29.6.2(@types/node@20.4.6): resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -12360,7 +12364,7 @@ packages: '@babel/core': 7.22.9 '@jest/test-sequencer': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 babel-jest: 29.6.2(@babel/core@7.22.9) chalk: 4.1.2 ci-info: 3.7.0 @@ -12453,7 +12457,7 @@ packages: '@jest/environment': 29.6.2 '@jest/fake-timers': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 jest-mock: 29.6.2 jest-util: 29.6.2 dev: true @@ -12478,7 +12482,7 @@ packages: dependencies: '@jest/types': 29.6.1 '@types/graceful-fs': 4.1.5 - '@types/node': 20.4.5 + '@types/node': 20.4.6 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -12554,7 +12558,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 jest-util: 29.6.2 dev: true @@ -12637,7 +12641,7 @@ packages: '@jest/test-result': 29.6.2 '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 @@ -12668,7 +12672,7 @@ packages: '@jest/test-result': 29.6.2 '@jest/transform': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -12720,7 +12724,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 chalk: 4.1.2 ci-info: 3.7.0 graceful-fs: 4.2.10 @@ -12732,7 +12736,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 chalk: 4.1.2 ci-info: 3.7.0 graceful-fs: 4.2.10 @@ -12773,7 +12777,7 @@ packages: dependencies: '@jest/test-result': 29.6.2 '@jest/types': 29.6.1 - '@types/node': 20.4.5 + '@types/node': 20.4.6 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -12785,7 +12789,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -12794,7 +12798,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -12803,7 +12807,7 @@ packages: resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.4.5 + '@types/node': 20.4.6 jest-util: 29.6.2 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -16560,8 +16564,8 @@ packages: source-map-js: 1.0.2 dev: true - /posthog-js@1.75.2: - resolution: {integrity: sha512-tvLsKu9FXrsz1ytkjRc0xqo1eZJ/FZjTdrrKRrXrzgbpwnqeN5pgs6Mq4hMNxQeFuDhoCMwGnyChk1NnDL5hEw==} + /posthog-js@1.75.3: + resolution: {integrity: sha512-q5xP4R/Tx8E6H0goZQjY+URMLATFiYXc2raHA+31aNvpBs118fPTmExa4RK6MgRZDFhBiMUBZNT6aj7dM3SyUQ==} dependencies: fflate: 0.4.8 dev: false @@ -19685,8 +19689,8 @@ packages: /tslib@2.5.3: resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==} - /tsup@7.1.0: - resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} + /tsup@7.2.0: + resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} engines: {node: '>=16.14'} hasBin: true peerDependencies: From 1a8618692aa606906beaa8c3dcb39cdd164e6f69 Mon Sep 17 00:00:00 2001 From: Johannes Date: Thu, 3 Aug 2023 20:28:38 +0200 Subject: [PATCH 3/4] more metadata for articles --- .../components/shared/LayoutMdx.tsx | 13 +++- .../components/shared/MetaInformation.tsx | 28 +++++++-- apps/formbricks-com/next.config.mjs | 6 +- .../index.mdx | 58 ++++++++++++------ .../email-results-PMF-cal.png | Bin .../index.mdx | 4 ++ .../matti-jojo.jpg | Bin .../peer-tweet-typeform-open-source.png | Bin .../pmf-survey-dashboard.png | Bin ...forms-open-source-typeform-alternative.png | Bin .../survey-display-peak.png | Bin ...vey-tool-software-to-make-surveys-2023.png | Bin .../twitter-results-PMF-cal.png | Bin .../github-accelerator-experience/index.mdx | 10 ++- .../index.mdx | 4 ++ .../index.mdx | 4 ++ .../index.mdx | 4 ++ .../snoopforms-becomes-formbricks/index.mdx | 4 ++ .../peer-tweet-typeform-open-source.png | Bin 6628 -> 0 bytes .../index.mdx | 4 ++ pnpm-lock.yaml | 20 +++--- 21 files changed, 119 insertions(+), 40 deletions(-) rename apps/formbricks-com/pages/blog/{v1-and-how-we-got-here => experience-management-open-source}/email-results-PMF-cal.png (100%) rename apps/formbricks-com/pages/blog/{v1-and-how-we-got-here => experience-management-open-source}/index.mdx (98%) rename apps/formbricks-com/pages/blog/{v1-and-how-we-got-here => experience-management-open-source}/matti-jojo.jpg (100%) rename apps/formbricks-com/pages/blog/{ => experience-management-open-source}/peer-tweet-typeform-open-source.png (100%) rename apps/formbricks-com/pages/blog/{v1-and-how-we-got-here => experience-management-open-source}/pmf-survey-dashboard.png (100%) rename apps/formbricks-com/pages/blog/{v1-and-how-we-got-here => experience-management-open-source}/snoopforms-open-source-typeform-alternative.png (100%) rename apps/formbricks-com/pages/blog/{v1-and-how-we-got-here => experience-management-open-source}/survey-display-peak.png (100%) rename apps/formbricks-com/pages/blog/{v1-and-how-we-got-here => experience-management-open-source}/surveyjs-free-opensource-form-survey-tool-software-to-make-surveys-2023.png (100%) rename apps/formbricks-com/pages/blog/{v1-and-how-we-got-here => experience-management-open-source}/twitter-results-PMF-cal.png (100%) delete mode 100644 apps/formbricks-com/pages/blog/v1-and-how-we-got-here/peer-tweet-typeform-open-source.png diff --git a/apps/formbricks-com/components/shared/LayoutMdx.tsx b/apps/formbricks-com/components/shared/LayoutMdx.tsx index 6e8f98bbbd..dffad54af3 100644 --- a/apps/formbricks-com/components/shared/LayoutMdx.tsx +++ b/apps/formbricks-com/components/shared/LayoutMdx.tsx @@ -26,6 +26,10 @@ interface Props { meta: { title: string; description: string; + publishedTime: string; + authors: string[]; + section: string; + tags: string[]; }; children: JSX.Element; } @@ -34,7 +38,14 @@ export default function LayoutMdx({ meta, children }: Props) { useExternalLinks(".prose a"); return (
- +
diff --git a/apps/formbricks-com/components/shared/MetaInformation.tsx b/apps/formbricks-com/components/shared/MetaInformation.tsx index 5ec3d1a0f1..57ab4a8e16 100644 --- a/apps/formbricks-com/components/shared/MetaInformation.tsx +++ b/apps/formbricks-com/components/shared/MetaInformation.tsx @@ -3,10 +3,21 @@ import Head from "next/head"; interface Props { title: string; description: string; + publishedTime?: string; + authors?: string[]; + section?: string; + tags?: string[]; } -export default function MetaInformation({ title, description }: Props) { - const pageTitle = `${title} | Open-Source Survey Software`; +export default function MetaInformation({ + title, + description, + publishedTime, + authors, + section, + tags, +}: Props) { + const pageTitle = `${title} | Open-Source Experience Management, Privacy-first`; return ( {pageTitle} @@ -14,13 +25,22 @@ export default function MetaInformation({ title, description }: Props) { - + - + + + {publishedTime && } + {authors && } + {section && } + {tags && } + + + + ); } diff --git a/apps/formbricks-com/next.config.mjs b/apps/formbricks-com/next.config.mjs index dc3fd37cb4..60309722c6 100644 --- a/apps/formbricks-com/next.config.mjs +++ b/apps/formbricks-com/next.config.mjs @@ -91,12 +91,16 @@ const nextConfig = { destination: "/docs/actions/code", permanent: true, }, - { source: "/pmf", destination: "/", permanent: true, }, + { + source: "/blog/v1-and-how-we-got-here", + destination: "/blog/experience-management-open-source", + permanent: true, + }, ]; }, }; diff --git a/apps/formbricks-com/pages/blog/best-open-source-survey-software-2023/index.mdx b/apps/formbricks-com/pages/blog/best-open-source-survey-software-2023/index.mdx index 3f2b6cfdae..79233124ae 100644 --- a/apps/formbricks-com/pages/blog/best-open-source-survey-software-2023/index.mdx +++ b/apps/formbricks-com/pages/blog/best-open-source-survey-software-2023/index.mdx @@ -9,35 +9,39 @@ import SurveyJS from "./surveyjs-free-opensource-form-survey-tool-software-to-ma import AuthorBox from "@/components/shared/AuthorBox"; export const meta = { - title: "Best Open-source Form & Survey Tools (still maintained in 2023)", + title: "5 Open Source Survey and Form Tools maintained in 2023", description: - "Most open-source projects get abandoned after a while. But these 5 open-source form and survey tools are still alive and kicking in 2023.", + "Most open source projects get abandoned after a while. But these 5 open source survey tools are still alive and kicking in 2023.", date: "2023-04-12", + publishedTime: "2023-04-12T12:00:00", + authors: ["Johannes"], + section: "Open Source Surveys", + tags: ["Open Source Surveys", "Formbricks", "Typeform", "SurveyJS", "Typebot", "OpnForm", "LimeSurvey"], }; -_Most open-source projects get abandoned after a while. But these 5 open-source form and survey tools are still alive and kicking in 2023._ +_Most open source projects get abandoned after a while. But these 5 open source survey tools are still alive and kicking in 2023._ Free and self-hostable: Find the 5 best (and maintained) open-source survey tools 2023. -Looking for the perfect open-source form and survey tool to help you gather valuable insights and improve your business? Look no further! +Looking for the perfect open source survey tool to help you gather valuable insights and improve your business? Look no further! -We've compiled a list of the top 5 open-source form and survey tools that are still maintained in 2023. In-product surveys, conversational bots, AI-generated surveys: These tools offer various features that cater to different needs. +We've compiled a list of the top 5 open source form and survey tools that are still maintained in 2023. In app surveys, conversational bots, AI-generated surveys: These open source tools offer various features that cater to different needs. -## 1. Formbricks - In-product micro-surveys +## 1. Formbricks - In app micro surveys Formbricks is a free and open-source survey software for in-product micro-surveys. Ask any segment at any point in time. -Formbricks is a powerful open-source form and survey solution designed to help you get better experience data for your business. This tool allows you to survey specific customer segments at any point in the user journey, providing you with invaluable insights into what your customers think and feel. +Formbricks is a powerful open source survey tool designed to help you get better experience data for your business. This tool allows you to survey specific customer segments at any point in the user journey, providing you with invaluable insights into what your customers think and feel about your product. - 👍 **Pre-segment users:** Don't ask everyone, all the time. Granularly segment your user base to get deep insights - 👍 **Event-based surveys:** Trigger surveys based on user behavior, such as page views, clicks, and more @@ -45,11 +49,15 @@ Formbricks is a powerful open-source form and survey solution designed to help y - 👍 **Easy self-hosting:** Docker makes it possible to self-host Formbricks in minutes. - ⚠️ **It's early for Formbricks.** Product developes rapidly but might encounter a bug here and there. -[Try it out](https://app.formbricks.com), [read more](https://formbricks.com) or dive into the [code base.](https://formbricks.com/github) +[Try it out](https://app.formbricks.com), [read more](https://formbricks.com) or dive into the [code base](https://formbricks.com/github) or comprehensive [docs](https://formbricks.com/docs). -## 2. SurveyJS - Build-it-yourself libraries +## 2. SurveyJS - Build-it-yourself library -SurveyJS is a comprehensive +SurveyJS is a comprehensive JS library to build your own form or survey application. SurveyJS is a collection of JavaScript Librarys to build forms. Building your own form management system has never been easier than with SurveyJS. It packs: @@ -61,9 +69,13 @@ SurveyJS is a collection of JavaScript Librarys to build forms. Building your ow [Dive into the code on GitHub](https://github.com/surveyjs) -## 3. Typebot - Truly conversational Forms +## 3. Typebot - Truly conversational forms -SurveyJS is a comprehensive +Open source survey and form builder SurveyJS lets you build surveys fast Coming in at number three on our list is Typebot, that makes it really easy to create conversational forms and surveys. Typebot helps you engage with your audience in a more interactive way, leading to higher response rates and better data. It comes with: @@ -77,9 +89,13 @@ Coming in at number three on our list is Typebot, that makes it really easy to c ## 4. OpnForm - Straight-forward survey builder -SurveyJS is a comprehensive +OpnForm is an open source form builder for experience management -OpnForms is a flexible and powerful open-source form and survey tool designed to make data collection easy and efficient. OpnForm packs lots of features, especially for a Beta: +OpnForms is a flexible and powerful open source form and survey tool designed to make data collection easy and efficient. OpnForm packs lots of features, especially for a Beta: - 👍 **Multiple Question Types:** Choose from a wide variety of question types to create highly customizable forms and surveys. - 👍 **Conditional Logic:** Show or hide questions based on previous responses to create personalized surveys. @@ -90,7 +106,11 @@ OpnForms is a flexible and powerful open-source form and survey tool designed to ## 5. LimeSurvey - Old (but gold?) -SurveyJS is a comprehensive +LimeSurvey is open source survey builder to manage experiences with forms LimeSurvey has been around for at least a decade. It's a powerful survey tool made for more classical, scientific surveying. It packs: @@ -104,9 +124,9 @@ LimeSurvey has been around for at least a decade. It's a powerful survey tool ma ## Summary ☟ -In this article, we've rounded up the top 5 open-source form and survey tools that are still rocking it in 2023. Perfect for devs who are always on the lookout for the latest and greatest! +In this article, we've rounded up the top 5 open source form and survey tools that are still rocking it in 2023. Perfect for devs who are always on the lookout for the latest and greatest! -1. Formbricks: A game-changer for in-product micro-surveys, letting you target specific customer segments at any point in their journey. It's still early days, but this bad boy is worth keeping an eye on. +1. Formbricks: A game-changer for in app micro surveys, letting you target specific customer segments at any point in their journey. It's still early days, but this bad boy is worth keeping an eye on. 2. SurveyJS: A must-have for DIY enthusiasts, this collection of JavaScript libraries makes building your own form management system a breeze. Just remember, the starting price is $499/year. diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/email-results-PMF-cal.png b/apps/formbricks-com/pages/blog/experience-management-open-source/email-results-PMF-cal.png similarity index 100% rename from apps/formbricks-com/pages/blog/v1-and-how-we-got-here/email-results-PMF-cal.png rename to apps/formbricks-com/pages/blog/experience-management-open-source/email-results-PMF-cal.png diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/index.mdx b/apps/formbricks-com/pages/blog/experience-management-open-source/index.mdx similarity index 98% rename from apps/formbricks-com/pages/blog/v1-and-how-we-got-here/index.mdx rename to apps/formbricks-com/pages/blog/experience-management-open-source/index.mdx index 16491492b9..347e8e126f 100644 --- a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/index.mdx +++ b/apps/formbricks-com/pages/blog/experience-management-open-source/index.mdx @@ -16,6 +16,10 @@ export const meta = { description: "A lot has happened since Matti and I had a chat about open-source surveys in May last year. The release of Formbricks v1.0 is a perfect opportunity to look back on how it all started.", date: "2023-07-14", + publishedTime: "2023-07-14T08:10:33", + authors: ["Johannes"], + section: "Open Source Experience Management", + tags: ["Open Source", "Experience Management", "Formbricks"], }; diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/matti-jojo.jpg b/apps/formbricks-com/pages/blog/experience-management-open-source/matti-jojo.jpg similarity index 100% rename from apps/formbricks-com/pages/blog/v1-and-how-we-got-here/matti-jojo.jpg rename to apps/formbricks-com/pages/blog/experience-management-open-source/matti-jojo.jpg diff --git a/apps/formbricks-com/pages/blog/peer-tweet-typeform-open-source.png b/apps/formbricks-com/pages/blog/experience-management-open-source/peer-tweet-typeform-open-source.png similarity index 100% rename from apps/formbricks-com/pages/blog/peer-tweet-typeform-open-source.png rename to apps/formbricks-com/pages/blog/experience-management-open-source/peer-tweet-typeform-open-source.png diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/pmf-survey-dashboard.png b/apps/formbricks-com/pages/blog/experience-management-open-source/pmf-survey-dashboard.png similarity index 100% rename from apps/formbricks-com/pages/blog/v1-and-how-we-got-here/pmf-survey-dashboard.png rename to apps/formbricks-com/pages/blog/experience-management-open-source/pmf-survey-dashboard.png diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/snoopforms-open-source-typeform-alternative.png b/apps/formbricks-com/pages/blog/experience-management-open-source/snoopforms-open-source-typeform-alternative.png similarity index 100% rename from apps/formbricks-com/pages/blog/v1-and-how-we-got-here/snoopforms-open-source-typeform-alternative.png rename to apps/formbricks-com/pages/blog/experience-management-open-source/snoopforms-open-source-typeform-alternative.png diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/survey-display-peak.png b/apps/formbricks-com/pages/blog/experience-management-open-source/survey-display-peak.png similarity index 100% rename from apps/formbricks-com/pages/blog/v1-and-how-we-got-here/survey-display-peak.png rename to apps/formbricks-com/pages/blog/experience-management-open-source/survey-display-peak.png diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/surveyjs-free-opensource-form-survey-tool-software-to-make-surveys-2023.png b/apps/formbricks-com/pages/blog/experience-management-open-source/surveyjs-free-opensource-form-survey-tool-software-to-make-surveys-2023.png similarity index 100% rename from apps/formbricks-com/pages/blog/v1-and-how-we-got-here/surveyjs-free-opensource-form-survey-tool-software-to-make-surveys-2023.png rename to apps/formbricks-com/pages/blog/experience-management-open-source/surveyjs-free-opensource-form-survey-tool-software-to-make-surveys-2023.png diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/twitter-results-PMF-cal.png b/apps/formbricks-com/pages/blog/experience-management-open-source/twitter-results-PMF-cal.png similarity index 100% rename from apps/formbricks-com/pages/blog/v1-and-how-we-got-here/twitter-results-PMF-cal.png rename to apps/formbricks-com/pages/blog/experience-management-open-source/twitter-results-PMF-cal.png diff --git a/apps/formbricks-com/pages/blog/github-accelerator-experience/index.mdx b/apps/formbricks-com/pages/blog/github-accelerator-experience/index.mdx index 7479f5127b..baf9ebfd05 100644 --- a/apps/formbricks-com/pages/blog/github-accelerator-experience/index.mdx +++ b/apps/formbricks-com/pages/blog/github-accelerator-experience/index.mdx @@ -11,7 +11,11 @@ export const meta = { title: "Our GitHub Accelerator Experience 👀", description: "What we learned during the first GitHub Open-Source Accelerator Programm - our experience and if we would do it again.", - date: "2023-04-13", + date: "2023-06-06", + publishedTime: "2023-06-06T05:12:25", + authors: ["Johannes"], + section: "GitHub Accelerator", + tags: ["GitHub Accelerator", "Open-Source", "Startup"], }; @@ -40,7 +44,7 @@ January and February came and went. On the 22nd of March, we received an email f Needless to say, we were thrilled! We were selected from over 1000 open-source projects, alongside renowned and popular projects like [Nuxt](https://github.com/nuxt/nuxt), [TRPC](https://github.com/trpc/trpc), and [Responsively App](https://github.com/responsively-org/responsively-app). Here is a summary of what we got: -### What we got on paper +### What the GitHub Accelerator offers on paper ✅ Ten sessions with **well-known** figures from the open-source community (Wednesdays) @@ -108,7 +112,7 @@ Ericas talk was really impressive and so is she: Founder of Bitnami, COO of GitH **GitHub Demo Day:** All teams presented what they achieved during the 10 week programm. It was great fun to present Formbricks, [you can watch it on Youtube.](https://www.youtube.com/live/Gj6Bez2182k?feature=share&t=1448) -## Would we do it again? And should you? +## Would we do the GitHub Accelerator again? And should you? Yes, absolutely. The sessions were excellent, we met a handful of inspiring builders, and the 20k USD was a helpful financial boost. The application process might evolve, but since all of your code is open-source anyway, you might as well throw your hat in the ring. diff --git a/apps/formbricks-com/pages/blog/inaugural-batch-github-accelerator/index.mdx b/apps/formbricks-com/pages/blog/inaugural-batch-github-accelerator/index.mdx index ebae845d1d..2779d99626 100644 --- a/apps/formbricks-com/pages/blog/inaugural-batch-github-accelerator/index.mdx +++ b/apps/formbricks-com/pages/blog/inaugural-batch-github-accelerator/index.mdx @@ -9,6 +9,10 @@ export const meta = { description: "We're getting ready to take our open-source experience management platform to new heights, thanks to being part of the first-ever GitHub Accelerator program!", date: "2023-04-13", + publishedTime: "2023-04-13T05:12:25", + authors: ["Johannes"], + section: "GitHub Accelerator", + tags: ["GitHub Accelerator", "Open-Source"], }; diff --git a/apps/formbricks-com/pages/blog/open-source-forms-will-save-the-world/index.mdx b/apps/formbricks-com/pages/blog/open-source-forms-will-save-the-world/index.mdx index e26e013944..d924ace594 100644 --- a/apps/formbricks-com/pages/blog/open-source-forms-will-save-the-world/index.mdx +++ b/apps/formbricks-com/pages/blog/open-source-forms-will-save-the-world/index.mdx @@ -10,6 +10,10 @@ export const meta = { title: "Open source forms will save the world.", description: "What motivates us to build open source tech in such a crowded space?", date: "2022-08-26", + publishedTime: "2022-08-26T12:12:25", + authors: ["Johannes"], + section: "Open Source Survey Tool", + tags: ["Open Source", "Survey Tool", "Forms"], }; diff --git a/apps/formbricks-com/pages/blog/open-source-qualtrics-beats-typeform/index.mdx b/apps/formbricks-com/pages/blog/open-source-qualtrics-beats-typeform/index.mdx index 885c593e5e..06ca7c9409 100644 --- a/apps/formbricks-com/pages/blog/open-source-qualtrics-beats-typeform/index.mdx +++ b/apps/formbricks-com/pages/blog/open-source-qualtrics-beats-typeform/index.mdx @@ -16,6 +16,10 @@ export const meta = { description: "We kicked it off with a Typeform open-source alternative. As we build and learn, our focus is shifting. Read why:", date: "2023-03-24", + publishedTime: "2023-03-23T08:20:15", + authors: ["Johannes"], + section: "Open Source Experience Management", + tags: ["Open Source", "Experience Management", "Typeform", "Qualtrics"], }; diff --git a/apps/formbricks-com/pages/blog/snoopforms-becomes-formbricks/index.mdx b/apps/formbricks-com/pages/blog/snoopforms-becomes-formbricks/index.mdx index 4a562325e4..6555053b5c 100644 --- a/apps/formbricks-com/pages/blog/snoopforms-becomes-formbricks/index.mdx +++ b/apps/formbricks-com/pages/blog/snoopforms-becomes-formbricks/index.mdx @@ -8,6 +8,10 @@ export const meta = { title: "snoopForms → Formbricks 🎉", description: "A new name, a new look, key learnings and what's next.", date: "2022-11-07", + publishedTime: "2023-07-11T12:00:06", + authors: ["Johannes"], + section: "Formbricks", + tags: ["Formbricks", "snoopForms", "Open Source"], }; diff --git a/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/peer-tweet-typeform-open-source.png b/apps/formbricks-com/pages/blog/v1-and-how-we-got-here/peer-tweet-typeform-open-source.png deleted file mode 100644 index 0d40efba27209ca827e015ce5c6b3e51ed5bd319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6628 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 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14f0c73e7d..bcfb02c73b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -352,7 +352,7 @@ importers: version: 8.10.0(eslint@8.46.0) eslint-config-turbo: specifier: latest - version: 1.8.8(eslint@8.46.0) + version: 1.10.7(eslint@8.46.0) eslint-plugin-react: specifier: 7.33.1 version: 7.33.1(eslint@8.46.0) @@ -6420,11 +6420,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} - engines: {node: '>=0.4.0'} - hasBin: true - /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -9812,13 +9807,13 @@ packages: eslint: 8.46.0 dev: true - /eslint-config-turbo@1.8.8(eslint@8.46.0): - resolution: {integrity: sha512-+yT22sHOT5iC1sbBXfLIdXfbZuiv9bAyOXsxTxFCWelTeFFnANqmuKB3x274CFvf7WRuZ/vYP/VMjzU9xnFnxA==} + /eslint-config-turbo@1.10.7(eslint@8.46.0): + resolution: {integrity: sha512-0yHt5UlXVph8S4SOvP6gYehLvYjJj6XFKTYOG/WUQbjlcF0OU4pOT1a1juqmmBPWYlvJ0evt7v+RekY4tOopPQ==} peerDependencies: eslint: '>6.6.0' dependencies: eslint: 8.46.0 - eslint-plugin-turbo: 1.8.8(eslint@8.46.0) + eslint-plugin-turbo: 1.10.7(eslint@8.46.0) dev: true /eslint-import-resolver-node@0.3.6: @@ -10006,11 +10001,12 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.8 - /eslint-plugin-turbo@1.8.8(eslint@8.46.0): - resolution: {integrity: sha512-zqyTIvveOY4YU5jviDWw9GXHd4RiKmfEgwsjBrV/a965w0PpDwJgEUoSMB/C/dU310Sv9mF3DSdEjxjJLaw6rA==} + /eslint-plugin-turbo@1.10.7(eslint@8.46.0): + resolution: {integrity: sha512-YikBHc75DY9VV1vAFUIBekHLQlxqVT5zTNibK8zBQInCUhF7PvyPJc0xXw5FSz8EYtt4uOV3r0Km3CmFRclS4Q==} peerDependencies: eslint: '>6.6.0' dependencies: + dotenv: 16.0.3 eslint: 8.46.0 dev: true @@ -19426,7 +19422,7 @@ packages: hasBin: true dependencies: '@jridgewell/source-map': 0.3.2 - acorn: 8.8.1 + acorn: 8.10.0 commander: 2.20.3 source-map-support: 0.5.21 From ee545b7ade0a4bba1df9edbe6f86e513b567daf5 Mon Sep 17 00:00:00 2001 From: Johannes Date: Fri, 4 Aug 2023 09:51:49 +0200 Subject: [PATCH 4/4] remove N/A CR, exclude completed if has no submission --- apps/web/app/api/cron/weekly_summary/email.ts | 10 ++- apps/web/app/api/cron/weekly_summary/route.ts | 90 +++++++++++++++++++ 2 files changed, 97 insertions(+), 3 deletions(-) diff --git a/apps/web/app/api/cron/weekly_summary/email.ts b/apps/web/app/api/cron/weekly_summary/email.ts index 91a4d21f62..3e81f63177 100644 --- a/apps/web/app/api/cron/weekly_summary/email.ts +++ b/apps/web/app/api/cron/weekly_summary/email.ts @@ -61,10 +61,14 @@ const notificationInsight = (insights: Insights) =>

Completed

${insights.totalCompletedResponses}

- + ${ + insights.totalDisplays !== 0 + ? `

Completion %

-

${insights.totalDisplays === 0 ? "N/A" : `${Math.round(insights.completionRate)}%`}

- +

${Math.round(insights.completionRate)}%

+ ` + : "" + }
diff --git a/apps/web/app/api/cron/weekly_summary/route.ts b/apps/web/app/api/cron/weekly_summary/route.ts index 4d9d3d0c3c..60bb02f497 100644 --- a/apps/web/app/api/cron/weekly_summary/route.ts +++ b/apps/web/app/api/cron/weekly_summary/route.ts @@ -133,6 +133,20 @@ const getProducts = async (): Promise => { id: true, surveys: { where: { + NOT: { + AND: [ + { status: "completed" }, + { + responses: { + none: { + createdAt: { + gte: sevenDaysAgo, + }, + }, + }, + }, + ], + }, status: { not: "draft", }, @@ -190,3 +204,79 @@ const getProducts = async (): Promise => { }, }); }; + +/* const getProducts = async (): Promise => { + // gets all products together with team members, surveys, responses, and displays for the last 7 days + const sevenDaysAgo = new Date(); + sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); + + return await prisma.product.findMany({ + select: { + id: true, + name: true, + environments: { + where: { + type: "production", + }, + select: { + id: true, + surveys: { + where: { + status: { + not: "draft", + }, + }, + select: { + id: true, + name: true, + questions: true, + status: true, + responses: { + where: { + createdAt: { + gte: sevenDaysAgo, + }, + }, + select: { + id: true, + createdAt: true, + updatedAt: true, + finished: true, + data: true, + }, + orderBy: { + createdAt: "desc", + }, + }, + displays: { + where: { + createdAt: { + gte: sevenDaysAgo, + }, + }, + select: { + status: true, + }, + }, + }, + }, + }, + }, + team: { + select: { + memberships: { + select: { + user: { + select: { + email: true, + notificationSettings: true, + }, + }, + }, + }, + }, + }, + }, + }); +}; + */