Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Improve payload typings for Tasker handlers #14988

Closed
wants to merge 2 commits into from

Conversation

anikdhabal
Copy link
Contributor

What does this PR do?

Mandatory Tasks (DO NOT REMOVE)

  • I have self-reviewed the code (A decent size PR without self-review might be rejected)
  • I have added a Docs issue here if this PR makes changes that would require a documentation change
  • I have added or modified automated tests that prove my fix is effective or that my feature works (PRs might be rejected if logical changes are not properly tested)

How should this be tested?

  • Are there environment variables that should be set?
  • What are the minimal test data to have?
  • What is expected (happy path) to have (input and output)?
  • Any other important info that could help to test that PR

Checklist

  • I haven't read the contributing guide
  • My code doesn't follow the style guidelines of this project
  • I haven't commented my code, particularly in hard-to-understand areas
  • I haven't checked if my changes generate no new warnings

Copy link

vercel bot commented May 12, 2024

@anikdhabal is attempting to deploy a commit to the cal Team on Vercel.

A member of the Team first needs to authorize it.

@graphite-app graphite-app bot added the community Created by Linear-GitHub Sync label May 12, 2024
@graphite-app graphite-app bot requested a review from a team May 12, 2024 05:57
@github-actions github-actions bot added High priority Created by Linear-GitHub Sync 💻 refactor 🧹 Improvements Improvements to existing features. Mostly UX/UI labels May 12, 2024
Copy link
Contributor

github-actions bot commented May 12, 2024

Thank you for following the naming conventions! 🙏 Feel free to join our discord and post your PR link.

@dosubot dosubot bot added the 🐛 bug Something isn't working label May 12, 2024
Copy link

graphite-app bot commented May 12, 2024

Graphite Automations

"Add community label" took an action on this PR • (05/12/24)

1 label was added to this PR based on Keith Williams's automation.

"Add consumer team as reviewer" took an action on this PR • (05/12/24)

1 reviewer was added to this PR based on Keith Williams's automation.

Copy link
Contributor

github-actions bot commented May 12, 2024

📦 Next.js Bundle Analysis for @calcom/web

This analysis was generated by the Next.js Bundle Analysis action. 🤖

Three Pages Changed Size

The following pages changed size from the code in this PR compared to its base branch:

Page Size (compressed) First Load % of Budget (350 KB)
/settings/platform 261.21 KB 489.83 KB 139.95% (🟢 -0.18%)
/settings/platform/oauth-clients/[clientId]/edit 259.82 KB 488.44 KB 139.56% (🟢 -0.18%)
/settings/platform/oauth-clients/create 259.1 KB 487.72 KB 139.35% (🟢 -0.19%)
Details

Only the gzipped size is provided here based on an expert tip.

First Load is the size of the global bundle plus the bundle for the individual page. If a user were to show up to your website and land on a given page, the first load size represents the amount of javascript that user would need to download. If next/link is used, subsequent page loads would only need to download that page's bundle (the number in the "Size" column), since the global bundle has already been downloaded.

Any third party scripts you have added directly to your app using the <script> tag are not accounted for in this analysis

The "Budget %" column shows what percentage of your performance budget the First Load total takes up. For example, if your budget was 100kb, and a given page's first load size was 10kb, it would be 10% of your budget. You can also see how much this has increased or decreased compared to the base branch of your PR. If this percentage has increased by 20% or more, there will be a red status indicator applied, indicating that special attention should be given to this. If you see "+/- <0.01%" it means that there was a change in bundle size, but it is a trivial enough amount that it can be ignored.

export async function sendEmail(payload: string): Promise<void> {
try {
const parsedPayload = sendEmailPayloadSchema.parse(JSON.parse(payload));
const parsedPayloadObj: SendEmailPayload = JSON.parse(payload);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So now if the string payload we pass to this function doesn't match the SendEmailPayload type that we have inferred from the zod schema defined earlier, we would get a TypeError exception, correct?

@anikdhabal Please help me out in understanding this aspect of the changes

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Payload is saved in DB as string always. So no. This won't prevent getting an error on compile time. We also need to keep the runtime protection as well.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got it @zomars. Will have a further look

packages/features/tasker/tasks/sendEmail.ts Show resolved Hide resolved
Copy link
Member

@zomars zomars left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your contribution 🙏 Left some comments about the approach of this PR.

The idea overall is close to what we want but in the current state is not giving us the compile time protection while removing the runtime one. Which is not an acceptable trade off.

I would recommend coming up with an approach that checks both compile time and runtime.

@anikdhabal
Copy link
Contributor Author

Thank you for your contribution 🙏 Left some comments about the approach of this PR.

The idea overall is close to what we want but in the current state is not giving us the compile time protection while removing the runtime one. Which is not an acceptable trade off.

I would recommend coming up with an approach that checks both compile time and runtime.

Thanks @zomars for your review. I will fix that shortly.

@keithwillcode keithwillcode added this to the v4.2 milestone May 15, 2024
@anikdhabal anikdhabal requested a review from zomars May 16, 2024 18:52
export async function sendEmail(payload: string): Promise<void> {
try {
const parsedPayload = sendEmailPayloadSchema.parse(JSON.parse(payload));
const parsedPayload: SendEmailPayload = sendEmailPayloadSchema.parse(JSON.parse(payload));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @anikdhabal as far as I know, parsedPayload already has the correct type inference. These typing should be added to the packages/features/tasker/tasker.ts typings in order to keep the task creation type safe. Not in here. Will close the PR for now. 🙏

@zomars zomars closed this May 16, 2024
@dosubot dosubot bot modified the milestone: v4.2 May 16, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🐛 bug Something isn't working community Created by Linear-GitHub Sync High priority Created by Linear-GitHub Sync 🧹 Improvements Improvements to existing features. Mostly UX/UI 💻 refactor
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[CAL-3683] Improve payload typings for Tasker handlers
4 participants