Update Zod package, improve code formatting, and add awaiting indicators

This commit includes three main changes. First, it updates the Zod library from version 3.23.4 to 3.23.5 across all relevant packages. Second, code readability has been enhanced by formatting modifications in several TypeScript files. Lastly, the user feedback on certain operations such as creating a team or charging for a payment is strengthened, by displaying an awaiting indicator until the operation is complete.
This commit is contained in:
giancarlo
2024-04-30 13:16:51 +07:00
parent 437935e492
commit 2ff08a971d
35 changed files with 199 additions and 144 deletions

View File

@@ -20,6 +20,6 @@
"@tanstack/react-table": "^8.16.0",
"next": "14.2.3",
"tailwind-merge": "^2.3.0",
"zod": "^3.23.4"
"zod": "^3.23.5"
}
}

View File

@@ -1,4 +1,5 @@
import { Page } from '@playwright/test';
import { AuthPageObject } from '../authentication/auth.po';
import { TeamAccountsPageObject } from '../team-accounts/team-accounts.po';
@@ -17,10 +18,12 @@ export class InvitationsPageObject {
await this.teamAccounts.setup();
}
public async inviteMembers(invites: Array<{
email: string;
role: string;
}>) {
public async inviteMembers(
invites: Array<{
email: string;
role: string;
}>,
) {
const form = this.getInviteForm();
for (let index = 0; index < invites.length; index++) {
@@ -30,12 +33,17 @@ export class InvitationsPageObject {
continue;
}
console.log(`Inviting ${invite.email} with role ${invite.role}...`)
console.log(`Inviting ${invite.email} with role ${invite.role}...`);
const nth = index + 1;
await this.page.fill(`[data-test="invite-member-form-item"]:nth-child(${nth}) [data-test="invite-email-input"]`, invite.email);
await this.page.click(`[data-test="invite-member-form-item"]:nth-child(${nth}) [data-test="role-selector-trigger"]`);
await this.page.fill(
`[data-test="invite-member-form-item"]:nth-child(${nth}) [data-test="invite-email-input"]`,
invite.email,
);
await this.page.click(
`[data-test="invite-member-form-item"]:nth-child(${nth}) [data-test="role-selector-trigger"]`,
);
await this.page.click(`[data-test="role-option-${invite.role}"]`);
if (index < invites.length - 1) {
@@ -46,24 +54,24 @@ export class InvitationsPageObject {
await form.locator('button[type="submit"]').click();
}
navigateToMembers() {
return this.page.locator('a', {
hasText: 'Members',
}).click();
navigateToMembers() {
return this.page
.locator('a', {
hasText: 'Members',
})
.click();
}
async openInviteForm() {
await this.page.locator('[data-test="invite-members-form-trigger"]').click();
openInviteForm() {
return this.page
.locator('[data-test="invite-members-form-trigger"]')
.click();
}
async getInvitations() {
getInvitations() {
return this.page.locator('[data-test="invitation-email"]');
}
private getInviteForm() {
return this.page.locator('[data-test="invite-members-form"]');
}
async deleteInvitation(email: string) {
const actions = this.getInvitationRow(email).getByRole('button');
@@ -71,7 +79,9 @@ export class InvitationsPageObject {
await this.page.locator('[data-test="remove-invitation-trigger"]').click();
await this.page.click('[data-test="delete-invitation-form"] button[type="submit"]');
await this.page.click(
'[data-test="delete-invitation-form"] button[type="submit"]',
);
}
getInvitationRow(email: string) {
@@ -89,16 +99,27 @@ export class InvitationsPageObject {
await this.page.click(`[data-test="role-selector-trigger"]`);
await this.page.click(`[data-test="role-option-${role}"]`);
await this.page.click('[data-test="update-invitation-form"] button[type="submit"]');
await this.page.click(
'[data-test="update-invitation-form"] button[type="submit"]',
);
}
async acceptInvitation() {
console.log('Accepting invitation...');
await this.page.locator('[data-test="join-team-form"] button[type="submit"]').click();
await this.page
.locator('[data-test="join-team-form"] button[type="submit"]')
.click();
await this.page.waitForResponse(response => {
return response.url().includes('/join') && response.request().method() === 'POST';
await this.page.waitForResponse((response) => {
return (
response.url().includes('/join') &&
response.request().method() === 'POST'
);
});
}
}
private getInviteForm() {
return this.page.locator('[data-test="invite-members-form"]');
}
}

View File

@@ -28,11 +28,11 @@ test.describe('Invitations', () => {
await invitations.inviteMembers(invites);
await expect(await invitations.getInvitations()).toHaveCount(1);
await expect(invitations.getInvitations()).toHaveCount(1);
await invitations.deleteInvitation(email);
await expect(await invitations.getInvitations()).toHaveCount(0);
await expect(invitations.getInvitations()).toHaveCount(0);
});
test('users can update invites', async () => {
@@ -50,7 +50,7 @@ test.describe('Invitations', () => {
await invitations.inviteMembers(invites);
await expect(await invitations.getInvitations()).toHaveCount(1);
await expect(invitations.getInvitations()).toHaveCount(1);
await invitations.updateInvitation(email, 'owner');
@@ -92,7 +92,7 @@ test.describe('Full Invitation Flow', () => {
const firstEmail = invites[0]!.email;
await expect(await invitations.getInvitations()).toHaveCount(2);
await expect(invitations.getInvitations()).toHaveCount(2);
// sign out and sign in with the first email
await invitations.auth.signOut();
@@ -115,6 +115,6 @@ test.describe('Full Invitation Flow', () => {
await invitations.teamAccounts.openAccountsSelector();
await expect(await invitations.teamAccounts.getTeams()).toHaveCount(1);
await expect(invitations.teamAccounts.getTeams()).toHaveCount(1);
});
});

View File

@@ -1,4 +1,5 @@
import { expect, Page } from '@playwright/test';
import { Page, expect } from '@playwright/test';
import { AuthPageObject } from '../authentication/auth.po';
export class TeamAccountsPageObject {
@@ -15,34 +16,40 @@ export class TeamAccountsPageObject {
await this.createTeam(params);
}
async getTeamFromSelector(teamSlug: string) {
await this.openAccountsSelector();
return this.page.locator(`[data-test="account-selector-team"][data-value="${teamSlug}"]`);
getTeamFromSelector(teamSlug: string) {
return this.page.locator(
`[data-test="account-selector-team"][data-value="${teamSlug}"]`,
);
}
async selectAccount(teamName: string) {
await this.page.click(`[data-test="account-selector-team"][data-name="${teamName}"]`);
selectAccount(teamName: string) {
return this.page.click(
`[data-test="account-selector-team"][data-name="${teamName}"]`,
);
}
async getTeams() {
await this.openAccountsSelector();
getTeams() {
return this.page.locator('[data-test="account-selector-team"]');
}
goToSettings() {
return this.page.locator('a', {
hasText: 'Settings',
}).click();
return this.page
.locator('a', {
hasText: 'Settings',
})
.click();
}
goToBilling() {
return this.page.getByRole('button', { name: 'Billing' }).click();
return this.page
.locator('a', {
hasText: 'Billing',
})
.click();
}
async openAccountsSelector() {
await this.page.click('[data-test="account-selector-trigger"]');
openAccountsSelector() {
return this.page.click('[data-test="account-selector-trigger"]');
}
async createTeam({ teamName, slug } = this.createTeamName()) {
@@ -51,23 +58,36 @@ export class TeamAccountsPageObject {
await this.page.click('[data-test="create-team-account-trigger"]');
await this.page.fill('[data-test="create-team-form"] input', teamName);
await this.page.click('[data-test="create-team-form"] button:last-child');
await this.page.waitForURL(`/home/${slug}`);
}
async updateName(name: string) {
await this.page.fill('[data-test="update-team-account-name-form"] input', name);
await this.page.fill(
'[data-test="update-team-account-name-form"] input',
name,
);
await this.page.click('[data-test="update-team-account-name-form"] button');
}
async deleteAccount(teamName: string) {
await this.page.click('[data-test="delete-team-trigger"]');
expect(await this.page.locator('[data-test="delete-team-form-confirm-input"]').isVisible()).toBeTruthy();
expect(
await this.page
.locator('[data-test="delete-team-form-confirm-input"]')
.isVisible(),
).toBeTruthy();
await this.page.fill('[data-test="delete-team-form-confirm-input"]', teamName);
await this.page.fill(
'[data-test="delete-team-form-confirm-input"]',
teamName,
);
await this.page.click('[data-test="delete-team-form-confirm-button"]');
}
createTeamName() {
createTeamName() {
const random = (Math.random() * 100000000).toFixed(0);
const teamName = `Team-Name-${random}`;
@@ -75,4 +95,4 @@ export class TeamAccountsPageObject {
return { teamName, slug };
}
}
}

View File

@@ -1,4 +1,5 @@
import { expect, Page, test } from '@playwright/test';
import { Page, expect, test } from '@playwright/test';
import { TeamAccountsPageObject } from './team-accounts.po';
test.describe('Team Accounts', () => {
@@ -13,7 +14,7 @@ test.describe('Team Accounts', () => {
test('user can update their team name (and slug)', async () => {
await teamAccounts.setup();
const {teamName, slug} = teamAccounts.createTeamName();
const { teamName, slug } = teamAccounts.createTeamName();
await teamAccounts.goToSettings();
await teamAccounts.updateName(teamName);
@@ -21,7 +22,9 @@ test.describe('Team Accounts', () => {
// the slug should be updated to match the new team name
await page.waitForURL(`http://localhost:3000/home/${slug}/settings`);
await expect(await teamAccounts.getTeamFromSelector(slug)).toBeVisible();
await teamAccounts.openAccountsSelector();
await expect(teamAccounts.getTeamFromSelector(slug)).toBeVisible();
});
});
@@ -34,7 +37,10 @@ test.describe('Account Deletion', () => {
await teamAccounts.goToSettings();
await teamAccounts.deleteAccount(params.teamName);
await teamAccounts.openAccountsSelector();
await expect(await teamAccounts.getTeamFromSelector(params.slug)).not.toBeVisible();
await expect(
teamAccounts.getTeamFromSelector(params.slug),
).not.toBeVisible();
});
});
});

View File

@@ -1,4 +1,5 @@
import { Page } from '@playwright/test';
import { TeamAccountsPageObject } from '../team-accounts/team-accounts.po';
import { BillingPageObject } from '../utils/billing.po';
@@ -11,7 +12,7 @@ export class TeamBillingPageObject {
this.billing = new BillingPageObject(page);
}
async setup() {
await this.teamAccounts.setup();
setup() {
return this.teamAccounts.setup();
}
}
}

View File

@@ -11,10 +11,11 @@ test.describe('Team Billing', () => {
po = new TeamBillingPageObject(page);
await po.setup();
await po.teamAccounts.goToBilling();
});
test('a team can subscribe to a plan', async () => {
await po.teamAccounts.goToBilling();
await po.billing.selectPlan(0);
await po.billing.proceedToCheckout();
@@ -27,7 +28,7 @@ test.describe('Team Billing', () => {
await po.billing.returnToBilling();
await expect(await po.billing.getStatus()).toContainText('Active');
await expect(po.billing.getStatus()).toContainText('Active');
await expect(po.billing.manageBillingButton()).toBeVisible();
});
});

View File

@@ -26,7 +26,7 @@ test.describe('User Billing', () => {
await po.billing.returnToBilling();
await expect(await po.billing.getStatus()).toContainText('Active');
await expect(po.billing.getStatus()).toContainText('Active');
await expect(po.billing.manageBillingButton()).toBeVisible();
});
});

View File

@@ -1,12 +1,11 @@
import { Page } from '@playwright/test';
import { StripePageObject } from './stripe.po';
export class BillingPageObject {
public readonly stripe: StripePageObject;
constructor(
private readonly page: Page,
) {
constructor(private readonly page: Page) {
this.stripe = new StripePageObject(page);
}
@@ -32,14 +31,16 @@ export class BillingPageObject {
// wait a bit for the webhook to be processed
await this.page.waitForTimeout(1000);
await this.page.locator('[data-test="checkout-success-back-link"]').click();
return this.page
.locator('[data-test="checkout-success-back-link"]')
.click();
}
proceedToCheckout() {
return this.page.click('[data-test="checkout-submit-button"]');
}
async getStatus() {
getStatus() {
return this.page.locator('[data-test="current-plan-card-status-badge"]');
}
}
}

View File

@@ -70,7 +70,7 @@
"recharts": "^2.12.6",
"sonner": "^1.4.41",
"tailwind-merge": "^2.3.0",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"devDependencies": {
"@kit/eslint-config": "workspace:^",
@@ -86,7 +86,7 @@
"dotenv-cli": "^7.4.1",
"eslint": "^8.57.0",
"prettier": "^3.2.5",
"supabase": "^1.163.6",
"supabase": "^1.164.1",
"tailwindcss": "3.4.3",
"typescript": "^5.4.5"
},

View File

@@ -29,7 +29,7 @@
"lifetime": "Lifetime",
"trialPeriod": "{{period}} day trial",
"perPeriod": "per {{period}}",
"processing": "Processing...",
"redirectingToPayment": "Redirecting to checkout. Please wait...",
"proceedToPayment": "Proceed to Payment",
"startTrial": "Start Trial",
"perTeamMember": "Per team member",

View File

@@ -20,6 +20,7 @@
},
"yourTeams": "Your Teams ({{teamsCount}})",
"createTeam": "Create a Team",
"creatingTeam": "Creating Team...",
"personalAccount": "Personal Account",
"searchAccount": "Search Account...",
"membersTabLabel": "Members",

View File

@@ -22,7 +22,7 @@
"@kit/tailwind-config": "workspace:*",
"@kit/tsconfig": "workspace:*",
"@kit/ui": "workspace:*",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -35,7 +35,7 @@
"react": "18.3.1",
"react-hook-form": "^7.51.3",
"react-i18next": "^14.1.1",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -356,7 +356,7 @@ export function PlanPicker(
disabled={props.pending ?? !form.formState.isValid}
>
{props.pending ? (
t('processing')
t('redirectingToPayment')
) : (
<>
<If

View File

@@ -28,7 +28,7 @@
"@types/react": "^18.3.1",
"next": "14.2.3",
"react": "18.3.1",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -32,7 +32,7 @@
"date-fns": "^3.6.0",
"next": "14.2.3",
"react": "18.3.1",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -25,7 +25,7 @@
"@kit/tsconfig": "workspace:*",
"@kit/ui": "workspace:^",
"@types/node": "^20.12.7",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -24,7 +24,7 @@
"@kit/team-accounts": "workspace:^",
"@kit/tsconfig": "workspace:*",
"@supabase/supabase-js": "^2.42.7",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -45,7 +45,7 @@
"react-hook-form": "^7.51.3",
"react-i18next": "^14.1.1",
"sonner": "^1.4.41",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"prettier": "@kit/prettier-config",
"eslintConfig": {

View File

@@ -29,7 +29,7 @@
"react": "18.3.1",
"react-dom": "18.3.1",
"react-hook-form": "^7.51.3",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"exports": {
".": "./src/index.ts",

View File

@@ -36,7 +36,7 @@
"react-hook-form": "^7.51.3",
"react-i18next": "^14.1.1",
"sonner": "^1.4.41",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"prettier": "@kit/prettier-config",
"eslintConfig": {

View File

@@ -45,7 +45,7 @@
"react-hook-form": "^7.51.3",
"react-i18next": "^14.1.1",
"sonner": "^1.4.41",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"prettier": "@kit/prettier-config",
"eslintConfig": {

View File

@@ -120,15 +120,19 @@ function CreateOrganizationAccountForm(props: { onClose: () => void }) {
<div className={'flex justify-end space-x-2'}>
<Button
variant={'outline'}
disabled={pending}
type={'button'}
disabled={pending}
onClick={props.onClose}
>
<Trans i18nKey={'common:cancel'} />
</Button>
<Button data-test={'confirm-create-team-button'} disabled={pending}>
<Trans i18nKey={'teams:createTeamSubmitLabel'} />
{pending ? (
<Trans i18nKey={'teams:creatingTeam'} />
) : (
<Trans i18nKey={'teams:createTeamSubmitLabel'} />
)}
</Button>
</div>
</div>

View File

@@ -9,12 +9,12 @@ import { CreateTeamSchema } from '../../schema/create-team.schema';
import { createCreateTeamAccountService } from '../services/create-team-account.service';
export const createOrganizationAccountAction = enhanceAction(
async (params, user) => {
async ({ name }, user) => {
const client = getSupabaseServerActionClient();
const service = createCreateTeamAccountService(client);
const { data, error } = await service.createNewOrganizationAccount({
name: params.name,
name,
userId: user.id,
});

View File

@@ -22,7 +22,7 @@
"@kit/tailwind-config": "workspace:*",
"@kit/tsconfig": "workspace:*",
"@types/nodemailer": "6.4.14",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -27,7 +27,7 @@
"@kit/tsconfig": "workspace:*",
"@types/react": "^18.3.1",
"react": "18.3.1",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -23,7 +23,7 @@
"@kit/tsconfig": "workspace:*",
"@supabase/supabase-js": "^2.42.7",
"next": "14.2.3",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -32,7 +32,7 @@
"@types/react": "^18.3.1",
"next": "14.2.3",
"react": "18.3.1",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

View File

@@ -56,7 +56,7 @@
"tailwindcss": "3.4.3",
"tailwindcss-animate": "^1.0.7",
"typescript": "^5.4.5",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"eslintConfig": {
"root": true,

98
pnpm-lock.yaml generated
View File

@@ -45,8 +45,8 @@ importers:
specifier: ^2.3.0
version: 2.3.0
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
devDependencies:
'@playwright/test':
specifier: ^1.43.1
@@ -178,8 +178,8 @@ importers:
specifier: ^2.3.0
version: 2.3.0
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
devDependencies:
'@kit/eslint-config':
specifier: workspace:^
@@ -221,8 +221,8 @@ importers:
specifier: ^3.2.5
version: 3.2.5
supabase:
specifier: ^1.163.6
version: 1.163.6
specifier: ^1.164.1
version: 1.164.1
tailwindcss:
specifier: 3.4.3
version: 3.4.3
@@ -251,8 +251,8 @@ importers:
specifier: workspace:*
version: link:../../ui
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/billing/gateway:
devDependencies:
@@ -314,8 +314,8 @@ importers:
specifier: ^14.1.1
version: 14.1.1(i18next@23.11.3)(react-dom@18.3.1)(react@18.3.1)
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/billing/lemon-squeezy:
dependencies:
@@ -357,8 +357,8 @@ importers:
specifier: 18.3.1
version: 18.3.1
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/billing/stripe:
dependencies:
@@ -409,8 +409,8 @@ importers:
specifier: 18.3.1
version: 18.3.1
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/cms/core:
devDependencies:
@@ -455,8 +455,8 @@ importers:
specifier: ^20.12.7
version: 20.12.7
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/cms/wordpress:
devDependencies:
@@ -518,8 +518,8 @@ importers:
specifier: ^2.42.7
version: 2.42.7
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/email-templates:
dependencies:
@@ -625,8 +625,8 @@ importers:
specifier: ^1.4.41
version: 1.4.41(react-dom@18.3.1)(react@18.3.1)
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/features/admin:
devDependencies:
@@ -688,8 +688,8 @@ importers:
specifier: ^7.51.3
version: 7.51.3(react@18.3.1)
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/features/auth:
devDependencies:
@@ -748,8 +748,8 @@ importers:
specifier: ^1.4.41
version: 1.4.41(react-dom@18.3.1)(react@18.3.1)
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/features/notifications:
devDependencies:
@@ -881,8 +881,8 @@ importers:
specifier: ^1.4.41
version: 1.4.41(react-dom@18.3.1)(react@18.3.1)
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/i18n:
dependencies:
@@ -943,8 +943,8 @@ importers:
specifier: 6.4.14
version: 6.4.14
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/monitoring/api:
devDependencies:
@@ -1007,8 +1007,8 @@ importers:
specifier: 18.3.1
version: 18.3.1
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/monitoring/core:
devDependencies:
@@ -1101,8 +1101,8 @@ importers:
specifier: 14.2.3
version: 14.2.3(@opentelemetry/api@1.8.0)(react-dom@18.3.1)(react@18.3.1)
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/shared:
dependencies:
@@ -1162,8 +1162,8 @@ importers:
specifier: 18.3.1
version: 18.3.1
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages/ui:
dependencies:
@@ -1304,8 +1304,8 @@ importers:
specifier: ^5.4.5
version: 5.4.5
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
tooling/eslint:
dependencies:
@@ -1349,8 +1349,8 @@ importers:
specifier: ^2.3.0
version: 2.3.0
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
devDependencies:
'@kit/prettier-config':
specifier: workspace:^
@@ -1386,8 +1386,8 @@ importers:
specifier: ^2.3.0
version: 2.3.0
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
devDependencies:
'@kit/tsconfig':
specifier: workspace:^
@@ -1420,8 +1420,8 @@ importers:
specifier: ^1.0.7
version: 1.0.7(tailwindcss@3.4.3)
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
devDependencies:
'@kit/eslint-config':
specifier: workspace:^
@@ -1454,8 +1454,8 @@ importers:
specifier: ^2.3.0
version: 2.3.0
zod:
specifier: ^3.23.4
version: 3.23.4
specifier: ^3.23.5
version: 3.23.5
packages:
@@ -2276,7 +2276,7 @@ packages:
y-prosemirror: 1.2.3(prosemirror-model@1.20.0)(prosemirror-state@1.4.3)(prosemirror-view@1.33.5)(y-protocols@1.0.6)(yjs@13.6.15)
y-protocols: 1.0.6(yjs@13.6.15)
yjs: 13.6.15
zod: 3.23.4
zod: 3.23.5
transitivePeerDependencies:
- next
- supports-color
@@ -11901,8 +11901,8 @@ packages:
pirates: 4.0.6
ts-interface-checker: 0.1.13
/supabase@1.163.6:
resolution: {integrity: sha512-GuanZQdIEGXCWz1UYIMPDmIsAdqD8IiqnATqfNSqlWMYK4y4X912HxyGW1sjYZjQar/10RSkSwPAsRLwDTAxrw==}
/supabase@1.164.1:
resolution: {integrity: sha512-1NwkDBW9Ny28Nhdxwf79tyU/x3BLNWNw/9m5olZXvJZvhaZhOCKt1JZgPnSYX/eXS2OQiKd8MJkE0gMYRZorew==}
engines: {npm: '>=8'}
hasBin: true
requiresBuild: true
@@ -12785,8 +12785,8 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
/zod@3.23.4:
resolution: {integrity: sha512-/AtWOKbBgjzEYYQRNfoGKHObgfAZag6qUJX1VbHo2PRBgS+wfWagEY2mizjfyAPcGesrJOcx/wcl0L9WnVrHFw==}
/zod@3.23.5:
resolution: {integrity: sha512-fkwiq0VIQTksNNA131rDOsVJcns0pfVUjHzLrNBiF/O/Xxb5lQyEXkhZWcJ7npWsYlvs+h0jFWXXy4X46Em1JA==}
/zwitch@2.0.4:
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}

View File

@@ -26,7 +26,7 @@
"eslint-plugin-react-hooks": "^4.6.2",
"next": "14.2.3",
"tailwind-merge": "^2.3.0",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"devDependencies": {
"@kit/prettier-config": "workspace:^",

View File

@@ -15,7 +15,7 @@
"prettier": "^3.2.5",
"prettier-plugin-tailwindcss": "^0.5.14",
"tailwind-merge": "^2.3.0",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"devDependencies": {
"@kit/tsconfig": "workspace:^",

View File

@@ -21,7 +21,7 @@
"tailwind-merge": "^2.3.0",
"tailwindcss": "3.4.3",
"tailwindcss-animate": "^1.0.7",
"zod": "^3.23.4"
"zod": "^3.23.5"
},
"devDependencies": {
"@kit/eslint-config": "workspace:^",

View File

@@ -9,6 +9,6 @@
"@tanstack/react-table": "^8.16.0",
"next": "14.2.3",
"tailwind-merge": "^2.3.0",
"zod": "^3.23.4"
"zod": "^3.23.5"
}
}