mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 10:47:37 +00:00
fix build
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { clsx } from "clsx";
|
||||
import { ButtonHTMLAttributes, DetailedHTMLProps, forwardRef } from "react";
|
||||
|
||||
enum ButtonSizes {
|
||||
export enum ButtonSizes {
|
||||
Small = "Small",
|
||||
Large = "Large",
|
||||
}
|
||||
@@ -9,15 +9,16 @@ enum ButtonSizes {
|
||||
export enum ButtonVariants {
|
||||
Primary = "Primary",
|
||||
Secondary = "Secondary",
|
||||
}
|
||||
Destructive = "Destructive",
|
||||
}
|
||||
|
||||
enum ButtonColors {
|
||||
export enum ButtonColors {
|
||||
Neutral = "Neutral",
|
||||
Primary = "Primary",
|
||||
Warn = "Warn",
|
||||
}
|
||||
|
||||
type ButtonProps = DetailedHTMLProps<
|
||||
export type ButtonProps = DetailedHTMLProps<
|
||||
ButtonHTMLAttributes<HTMLButtonElement>,
|
||||
HTMLButtonElement
|
||||
> & {
|
||||
@@ -26,7 +27,7 @@ type ButtonProps = DetailedHTMLProps<
|
||||
color?: ButtonColors;
|
||||
};
|
||||
|
||||
const getButtonClasses = (
|
||||
export const getButtonClasses = (
|
||||
size: ButtonSizes,
|
||||
variant: ButtonVariants,
|
||||
color: ButtonColors,
|
||||
|
@@ -7,7 +7,7 @@ import {
|
||||
useState,
|
||||
} from "react";
|
||||
|
||||
type CheckboxProps = DetailedHTMLProps<
|
||||
export type CheckboxProps = DetailedHTMLProps<
|
||||
InputHTMLAttributes<HTMLInputElement>,
|
||||
HTMLInputElement
|
||||
> & {
|
||||
|
@@ -10,7 +10,7 @@ import {
|
||||
ReactNode,
|
||||
} from "react";
|
||||
|
||||
type TextInputProps = DetailedHTMLProps<
|
||||
export type TextInputProps = DetailedHTMLProps<
|
||||
InputHTMLAttributes<HTMLInputElement>,
|
||||
HTMLInputElement
|
||||
> & {
|
||||
|
@@ -17,7 +17,7 @@ import { SignInWithGitlab } from "./idps/sign-in-with-gitlab";
|
||||
import { SignInWithGoogle } from "./idps/sign-in-with-google";
|
||||
import { Translated } from "./translated";
|
||||
|
||||
interface SignInWithIDPProps {
|
||||
export interface SignInWithIDPProps {
|
||||
children?: ReactNode;
|
||||
identityProviders: IdentityProvider[];
|
||||
requestId?: string;
|
||||
|
@@ -8,7 +8,7 @@ export enum BadgeState {
|
||||
Alert = "alert",
|
||||
}
|
||||
|
||||
type StateBadgeProps = {
|
||||
export type StateBadgeProps = {
|
||||
state: BadgeState;
|
||||
children: ReactNode;
|
||||
evenPadding?: boolean;
|
||||
|
@@ -1,30 +1,57 @@
|
||||
import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2/branding_settings_pb";
|
||||
import tinycolor from "tinycolor2";
|
||||
|
||||
interface Color {
|
||||
export interface Color {
|
||||
name: string;
|
||||
hex: string;
|
||||
rgb: string;
|
||||
contrastColor: string;
|
||||
}
|
||||
|
||||
type MapName = "background" | "primary" | "warn" | "text" | "link";
|
||||
export type MapName = "background" | "primary" | "warn" | "text" | "link";
|
||||
|
||||
type ColorMap = {
|
||||
[_key in MapName]: Color[];
|
||||
export type ColorName =
|
||||
| "50"
|
||||
| "100"
|
||||
| "200"
|
||||
| "300"
|
||||
| "400"
|
||||
| "500"
|
||||
| "600"
|
||||
| "700"
|
||||
| "800"
|
||||
| "C900"
|
||||
| "A100"
|
||||
| "A200"
|
||||
| "A400"
|
||||
| "A700";
|
||||
|
||||
export type ColorMap = {
|
||||
[key in MapName]: Color[];
|
||||
};
|
||||
|
||||
const DARK_PRIMARY = "#2073c4";
|
||||
const PRIMARY = "#5469d4";
|
||||
export const DARK_PRIMARY = "#2073c4";
|
||||
export const PRIMARY = "#5469d4";
|
||||
|
||||
const DARK_WARN = "#ff3b5b";
|
||||
const WARN = "#cd3d56";
|
||||
export const DARK_WARN = "#ff3b5b";
|
||||
export const WARN = "#cd3d56";
|
||||
|
||||
const DARK_BACKGROUND = "#111827";
|
||||
const BACKGROUND = "#fafafa";
|
||||
export const DARK_BACKGROUND = "#111827";
|
||||
export const BACKGROUND = "#fafafa";
|
||||
|
||||
const DARK_TEXT = "#ffffff";
|
||||
const TEXT = "#000000";
|
||||
export const DARK_TEXT = "#ffffff";
|
||||
export const TEXT = "#000000";
|
||||
|
||||
export type LabelPolicyColors = {
|
||||
backgroundColor: string;
|
||||
backgroundColorDark: string;
|
||||
fontColor: string;
|
||||
fontColorDark: string;
|
||||
warnColor: string;
|
||||
warnColorDark: string;
|
||||
primaryColor: string;
|
||||
primaryColorDark: string;
|
||||
};
|
||||
|
||||
type BrandingColors = {
|
||||
lightTheme: {
|
||||
@@ -155,7 +182,7 @@ function getContrast(color: string): string {
|
||||
}
|
||||
}
|
||||
|
||||
function computeMap(branding: BrandingColors, dark: boolean): ColorMap {
|
||||
export function computeMap(branding: BrandingColors, dark: boolean): ColorMap {
|
||||
return {
|
||||
background: computeColors(
|
||||
dark
|
||||
@@ -186,7 +213,7 @@ export interface ColorShade {
|
||||
900: string;
|
||||
}
|
||||
|
||||
const COLORS = [
|
||||
export const COLORS = [
|
||||
{
|
||||
500: "#ef4444",
|
||||
200: "#fecaca",
|
||||
@@ -336,7 +363,7 @@ export function getColorHash(value: string): ColorShade {
|
||||
return COLORS[hash % COLORS.length];
|
||||
}
|
||||
|
||||
function hashCode(str: string, seed = 0): number {
|
||||
export function hashCode(str: string, seed = 0): number {
|
||||
let h1 = 0xdeadbeef ^ seed,
|
||||
h2 = 0x41c6ce57 ^ seed;
|
||||
for (let i = 0, ch; i < str.length; i++) {
|
||||
@@ -352,3 +379,61 @@ function hashCode(str: string, seed = 0): number {
|
||||
Math.imul(h1 ^ (h1 >>> 13), 3266489909);
|
||||
return 4294967296 * (2097151 & h2) + (h1 >>> 0);
|
||||
}
|
||||
|
||||
export function getMembershipColor(role: string): ColorShade {
|
||||
const hash = hashCode(role);
|
||||
let color = COLORS[hash % COLORS.length];
|
||||
|
||||
switch (role) {
|
||||
case "IAM_OWNER":
|
||||
color = COLORS[0];
|
||||
break;
|
||||
case "IAM_OWNER_VIEWER":
|
||||
color = COLORS[14];
|
||||
break;
|
||||
case "IAM_ORG_MANAGER":
|
||||
color = COLORS[11];
|
||||
break;
|
||||
case "IAM_USER_MANAGER":
|
||||
color = COLORS[8];
|
||||
break;
|
||||
|
||||
case "ORG_OWNER":
|
||||
color = COLORS[16];
|
||||
break;
|
||||
case "ORG_USER_MANAGER":
|
||||
color = COLORS[8];
|
||||
break;
|
||||
case "ORG_OWNER_VIEWER":
|
||||
color = COLORS[14];
|
||||
break;
|
||||
case "ORG_USER_PERMISSION_EDITOR":
|
||||
color = COLORS[7];
|
||||
break;
|
||||
case "ORG_PROJECT_PERMISSION_EDITOR":
|
||||
color = COLORS[11];
|
||||
break;
|
||||
case "ORG_PROJECT_CREATOR":
|
||||
color = COLORS[12];
|
||||
break;
|
||||
|
||||
case "PROJECT_OWNER":
|
||||
color = COLORS[9];
|
||||
break;
|
||||
case "PROJECT_OWNER_VIEWER":
|
||||
color = COLORS[10];
|
||||
break;
|
||||
case "PROJECT_OWNER_GLOBAL":
|
||||
color = COLORS[11];
|
||||
break;
|
||||
case "PROJECT_OWNER_VIEWER_GLOBAL":
|
||||
color = COLORS[12];
|
||||
break;
|
||||
|
||||
default:
|
||||
color = COLORS[hash % COLORS.length];
|
||||
break;
|
||||
}
|
||||
|
||||
return color;
|
||||
}
|
||||
|
@@ -7,11 +7,11 @@ import { cookies, headers } from "next/headers";
|
||||
import { userAgent } from "next/server";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
|
||||
async function getFingerprintId() {
|
||||
export async function getFingerprintId() {
|
||||
return uuidv4();
|
||||
}
|
||||
|
||||
async function setFingerprintIdCookie(fingerprintId: string) {
|
||||
export async function setFingerprintIdCookie(fingerprintId: string) {
|
||||
const cookiesList = await cookies();
|
||||
|
||||
return cookiesList.set({
|
||||
|
@@ -35,3 +35,4 @@ export const LANGS: Lang[] = [
|
||||
];
|
||||
|
||||
export const LANGUAGE_COOKIE_NAME = "NEXT_LOCALE";
|
||||
export const LANGUAGE_HEADER_NAME = "accept-language";
|
||||
|
@@ -19,7 +19,7 @@ type LoginWithSAMLAndSession = {
|
||||
request: NextRequest;
|
||||
};
|
||||
|
||||
async function getSAMLFormUID() {
|
||||
export async function getSAMLFormUID() {
|
||||
return uuidv4();
|
||||
}
|
||||
|
||||
|
@@ -15,6 +15,7 @@ import {
|
||||
ErrorDetail,
|
||||
} from "@zitadel/proto/zitadel/message_pb";
|
||||
import {
|
||||
Challenges,
|
||||
RequestChallenges,
|
||||
} from "@zitadel/proto/zitadel/session/v2/challenge_pb";
|
||||
import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb";
|
||||
@@ -185,6 +186,10 @@ export async function createSessionForIdpAndUpdateCookie({
|
||||
});
|
||||
}
|
||||
|
||||
export type SessionWithChallenges = Session & {
|
||||
challenges: Challenges | undefined;
|
||||
};
|
||||
|
||||
export async function setSessionAndUpdateCookie(
|
||||
recentCookie: CustomCookieData,
|
||||
checks?: Checks,
|
||||
|
@@ -13,7 +13,7 @@ import { getServiceUrlFromHeaders } from "../service-url";
|
||||
import { checkEmailVerification } from "../verify-helper";
|
||||
import { createSessionForIdpAndUpdateCookie } from "./cookie";
|
||||
|
||||
type RedirectToIdpState = { error?: string | null } | undefined;
|
||||
export type RedirectToIdpState = { error?: string | null } | undefined;
|
||||
|
||||
export async function redirectToIdp(
|
||||
prevState: RedirectToIdpState,
|
||||
@@ -63,7 +63,7 @@ export async function redirectToIdp(
|
||||
return { error: "Unexpected response from IDP flow" };
|
||||
}
|
||||
|
||||
type StartIDPFlowCommand = {
|
||||
export type StartIDPFlowCommand = {
|
||||
serviceUrl: string;
|
||||
host: string;
|
||||
idpId: string;
|
||||
|
@@ -81,7 +81,7 @@ export async function resetPassword(command: ResetPasswordCommand) {
|
||||
});
|
||||
}
|
||||
|
||||
type UpdateSessionCommand = {
|
||||
export type UpdateSessionCommand = {
|
||||
loginName: string;
|
||||
organization?: string;
|
||||
checks: Checks;
|
||||
|
@@ -11,6 +11,7 @@ import {
|
||||
getUserByID,
|
||||
} from "@/lib/zitadel";
|
||||
import { create } from "@zitadel/client";
|
||||
import { Factors } from "@zitadel/proto/zitadel/session/v2/session_pb";
|
||||
import {
|
||||
ChecksJson,
|
||||
ChecksSchema,
|
||||
@@ -29,6 +30,11 @@ type RegisterUserCommand = {
|
||||
requestId?: string;
|
||||
};
|
||||
|
||||
export type RegisterUserResponse = {
|
||||
userId: string;
|
||||
sessionId: string;
|
||||
factors: Factors | undefined;
|
||||
};
|
||||
export async function registerUser(command: RegisterUserCommand) {
|
||||
const _headers = await headers();
|
||||
const { serviceUrl } = getServiceUrlFromHeaders(_headers);
|
||||
@@ -151,6 +157,11 @@ type RegisterUserAndLinkToIDPommand = {
|
||||
idpUserName: string;
|
||||
};
|
||||
|
||||
export type registerUserAndLinkToIDPResponse = {
|
||||
userId: string;
|
||||
sessionId: string;
|
||||
factors: Factors | undefined;
|
||||
};
|
||||
export async function registerUserAndLinkToIDP(
|
||||
command: RegisterUserAndLinkToIDPommand,
|
||||
) {
|
||||
|
@@ -105,7 +105,7 @@ export async function continueWithSession({
|
||||
}
|
||||
}
|
||||
|
||||
type UpdateSessionCommand = {
|
||||
export type UpdateSessionCommand = {
|
||||
loginName?: string;
|
||||
sessionId?: string;
|
||||
organization?: string;
|
||||
|
@@ -47,6 +47,34 @@ export function checkPasswordChangeRequired(
|
||||
}
|
||||
}
|
||||
|
||||
export function checkEmailVerified(
|
||||
session: Session,
|
||||
humanUser?: HumanUser,
|
||||
organization?: string,
|
||||
requestId?: string,
|
||||
) {
|
||||
if (!humanUser?.email?.isVerified) {
|
||||
const paramsVerify = new URLSearchParams({
|
||||
loginName: session.factors?.user?.loginName as string,
|
||||
userId: session.factors?.user?.id as string, // verify needs user id
|
||||
send: "true", // we request a new email code once the page is loaded
|
||||
});
|
||||
|
||||
if (organization || session.factors?.user?.organizationId) {
|
||||
paramsVerify.append(
|
||||
"organization",
|
||||
organization ?? (session.factors?.user?.organizationId as string),
|
||||
);
|
||||
}
|
||||
|
||||
if (requestId) {
|
||||
paramsVerify.append("requestId", requestId);
|
||||
}
|
||||
|
||||
return { redirect: "/verify?" + paramsVerify };
|
||||
}
|
||||
}
|
||||
|
||||
export function checkEmailVerification(
|
||||
session: Session,
|
||||
humanUser?: HumanUser,
|
||||
|
@@ -40,6 +40,8 @@ import { SendInviteCodeSchema } from "@zitadel/proto/zitadel/user/v2/user_pb";
|
||||
import {
|
||||
AddHumanUserRequest,
|
||||
AddHumanUserRequestSchema,
|
||||
ResendEmailCodeRequest,
|
||||
ResendEmailCodeRequestSchema,
|
||||
SendEmailCodeRequestSchema,
|
||||
SetPasswordRequest,
|
||||
SetPasswordRequestSchema,
|
||||
@@ -62,6 +64,41 @@ async function cacheWrapper<T>(callback: Promise<T>) {
|
||||
return callback;
|
||||
}
|
||||
|
||||
export async function getHostedLoginTranslation({
|
||||
serviceUrl,
|
||||
organization,
|
||||
locale,
|
||||
}: {
|
||||
serviceUrl: string;
|
||||
organization?: string;
|
||||
locale?: string;
|
||||
}) {
|
||||
const settingsService: Client<typeof SettingsService> =
|
||||
await createServiceForHost(SettingsService, serviceUrl);
|
||||
|
||||
const callback = settingsService
|
||||
.getHostedLoginTranslation(
|
||||
{
|
||||
level: organization
|
||||
? {
|
||||
case: "organizationId",
|
||||
value: organization,
|
||||
}
|
||||
: {
|
||||
case: "instance",
|
||||
value: true,
|
||||
},
|
||||
locale: locale,
|
||||
},
|
||||
{},
|
||||
)
|
||||
.then((resp) => {
|
||||
return resp.translations ? resp.translations : undefined;
|
||||
});
|
||||
|
||||
return useCache ? cacheWrapper(callback) : callback;
|
||||
}
|
||||
|
||||
export async function getBrandingSettings({
|
||||
serviceUrl,
|
||||
organization,
|
||||
@@ -205,6 +242,21 @@ export async function registerTOTP({
|
||||
return userService.registerTOTP({ userId }, {});
|
||||
}
|
||||
|
||||
export async function getGeneralSettings({
|
||||
serviceUrl,
|
||||
}: {
|
||||
serviceUrl: string;
|
||||
}) {
|
||||
const settingsService: Client<typeof SettingsService> =
|
||||
await createServiceForHost(SettingsService, serviceUrl);
|
||||
|
||||
const callback = settingsService
|
||||
.getGeneralSettings({}, {})
|
||||
.then((resp) => resp.supportedLanguages);
|
||||
|
||||
return useCache ? cacheWrapper(callback) : callback;
|
||||
}
|
||||
|
||||
export async function getLegalAndSupportSettings({
|
||||
serviceUrl,
|
||||
organization,
|
||||
@@ -375,7 +427,7 @@ export async function listSessions({ serviceUrl, ids }: ListSessionsCommand) {
|
||||
);
|
||||
}
|
||||
|
||||
type AddHumanUserData = {
|
||||
export type AddHumanUserData = {
|
||||
serviceUrl: string;
|
||||
firstName: string;
|
||||
lastName: string;
|
||||
@@ -587,7 +639,7 @@ export async function createInviteCode({
|
||||
);
|
||||
}
|
||||
|
||||
type ListUsersCommand = {
|
||||
export type ListUsersCommand = {
|
||||
serviceUrl: string;
|
||||
loginName?: string;
|
||||
userName?: string;
|
||||
@@ -1151,6 +1203,33 @@ export async function verifyEmail({
|
||||
);
|
||||
}
|
||||
|
||||
export async function resendEmailCode({
|
||||
serviceUrl,
|
||||
userId,
|
||||
urlTemplate,
|
||||
}: {
|
||||
serviceUrl: string;
|
||||
userId: string;
|
||||
urlTemplate: string;
|
||||
}) {
|
||||
let request: ResendEmailCodeRequest = create(ResendEmailCodeRequestSchema, {
|
||||
userId,
|
||||
});
|
||||
|
||||
const medium = create(SendEmailVerificationCodeSchema, {
|
||||
urlTemplate,
|
||||
});
|
||||
|
||||
request = { ...request, verification: { case: "sendCode", value: medium } };
|
||||
|
||||
const userService: Client<typeof UserService> = await createServiceForHost(
|
||||
UserService,
|
||||
serviceUrl,
|
||||
);
|
||||
|
||||
return userService.resendEmailCode(request, {});
|
||||
}
|
||||
|
||||
export async function retrieveIDPIntent({
|
||||
serviceUrl,
|
||||
id,
|
||||
|
@@ -17,6 +17,7 @@
|
||||
}
|
||||
},
|
||||
"devDependencies": {
|
||||
"@changesets/cli": "^2.29.5"
|
||||
"@changesets/cli": "^2.29.5",
|
||||
"turbo": "2.5.5"
|
||||
}
|
||||
}
|
||||
|
64
pnpm-lock.yaml
generated
64
pnpm-lock.yaml
generated
@@ -16,6 +16,9 @@ importers:
|
||||
'@changesets/cli':
|
||||
specifier: ^2.29.5
|
||||
version: 2.29.5
|
||||
turbo:
|
||||
specifier: 2.5.5
|
||||
version: 2.5.5
|
||||
|
||||
apps/login:
|
||||
dependencies:
|
||||
@@ -13036,6 +13039,40 @@ packages:
|
||||
tunnel-agent@0.6.0:
|
||||
resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
|
||||
|
||||
turbo-darwin-64@2.5.5:
|
||||
resolution: {integrity: sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ==}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
turbo-darwin-arm64@2.5.5:
|
||||
resolution: {integrity: sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw==}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
turbo-linux-64@2.5.5:
|
||||
resolution: {integrity: sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w==}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
turbo-linux-arm64@2.5.5:
|
||||
resolution: {integrity: sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw==}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
turbo-windows-64@2.5.5:
|
||||
resolution: {integrity: sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ==}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
turbo-windows-arm64@2.5.5:
|
||||
resolution: {integrity: sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q==}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
turbo@2.5.5:
|
||||
resolution: {integrity: sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A==}
|
||||
hasBin: true
|
||||
|
||||
tweetnacl@0.14.5:
|
||||
resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==}
|
||||
|
||||
@@ -30716,6 +30753,33 @@ snapshots:
|
||||
dependencies:
|
||||
safe-buffer: 5.2.1
|
||||
|
||||
turbo-darwin-64@2.5.5:
|
||||
optional: true
|
||||
|
||||
turbo-darwin-arm64@2.5.5:
|
||||
optional: true
|
||||
|
||||
turbo-linux-64@2.5.5:
|
||||
optional: true
|
||||
|
||||
turbo-linux-arm64@2.5.5:
|
||||
optional: true
|
||||
|
||||
turbo-windows-64@2.5.5:
|
||||
optional: true
|
||||
|
||||
turbo-windows-arm64@2.5.5:
|
||||
optional: true
|
||||
|
||||
turbo@2.5.5:
|
||||
optionalDependencies:
|
||||
turbo-darwin-64: 2.5.5
|
||||
turbo-darwin-arm64: 2.5.5
|
||||
turbo-linux-64: 2.5.5
|
||||
turbo-linux-arm64: 2.5.5
|
||||
turbo-windows-64: 2.5.5
|
||||
turbo-windows-arm64: 2.5.5
|
||||
|
||||
tweetnacl@0.14.5: {}
|
||||
|
||||
type-check@0.4.0:
|
||||
|
16
turbo.json
16
turbo.json
@@ -21,16 +21,14 @@
|
||||
"cache": true
|
||||
},
|
||||
"build": {},
|
||||
"build:login:standalone": {},
|
||||
"build:client:standalone": {},
|
||||
"test": {},
|
||||
"start": {},
|
||||
"start:built": {},
|
||||
"test:unit": {},
|
||||
"test:unit:standalone": {},
|
||||
"test:watch": {
|
||||
"persistent": true
|
||||
"quality": {
|
||||
"with": [
|
||||
"lint",
|
||||
"test:unit"
|
||||
]
|
||||
},
|
||||
"start": {},
|
||||
"test:unit": {},
|
||||
"lint": {},
|
||||
"lint:fix": {},
|
||||
"dev": {
|
||||
|
Reference in New Issue
Block a user