diff --git a/.github/workflows/on_pr.yml b/.github/workflows/on_pr.yml index a29920cb4..40b56d1bd 100644 --- a/.github/workflows/on_pr.yml +++ b/.github/workflows/on_pr.yml @@ -35,7 +35,11 @@ jobs: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} deploy-preview: - permissions: write-all + permissions: + contents: read + deployments: write + pull-requests: write + statuses: write runs-on: ubuntu-latest timeout-minutes: 30 needs: diff --git a/core/app/c/[communitySlug]/activity/actions/getActionRunsTableColumns.tsx b/core/app/c/[communitySlug]/activity/actions/getActionRunsTableColumns.tsx index ac429d979..d6a58c5dd 100644 --- a/core/app/c/[communitySlug]/activity/actions/getActionRunsTableColumns.tsx +++ b/core/app/c/[communitySlug]/activity/actions/getActionRunsTableColumns.tsx @@ -4,10 +4,12 @@ import type { ColumnDef } from "@tanstack/react-table"; import Link from "next/link"; +import type { PubsId } from "db/public"; import { Badge } from "ui/badge"; import { DataTableColumnHeader } from "ui/data-table"; import { HoverCard, HoverCardContent, HoverCardTrigger } from "ui/hover-card"; +import type { PubTitleProps } from "~/lib/pubs"; import { PubTitle } from "~/app/components/PubTitle"; export type ActionRun = { @@ -15,13 +17,7 @@ export type ActionRun = { createdAt: Date; actionInstance: { name: string; action: string } | null; stage: { id: string; name: string } | null; - pub: { - id: string; - values: { field: { slug: string }; value: unknown }[] | Record; - createdAt: Date; - pubType: { name: string }; - title: string | null; - } | null; + pub: PubTitleProps & { id: PubsId }; result: unknown; } & ( | { diff --git a/core/app/c/[communitySlug]/activity/actions/page.tsx b/core/app/c/[communitySlug]/activity/actions/page.tsx index 20fd39cde..2c6a99548 100644 --- a/core/app/c/[communitySlug]/activity/actions/page.tsx +++ b/core/app/c/[communitySlug]/activity/actions/page.tsx @@ -1,7 +1,7 @@ import type { Metadata } from "next"; import { notFound, redirect } from "next/navigation"; -import { jsonArrayFrom, jsonObjectFrom } from "kysely/helpers/postgres"; +import { jsonObjectFrom } from "kysely/helpers/postgres"; import { Capabilities, MembershipType } from "db/public"; @@ -76,20 +76,6 @@ export default async function Page(props: { .selectFrom("pubs") .select(["pubs.id", "pubs.createdAt", "pubs.title"]) .whereRef("pubs.id", "=", "action_runs.pubId") - .select((eb) => - jsonArrayFrom( - eb - .selectFrom("pub_values") - .leftJoin("pub_fields", "pub_values.fieldId", "pub_fields.id") - .select([ - "pub_values.value", - "pub_fields.name as fieldName", - "pub_fields.schemaName as schemaName", - "pub_fields.slug as fieldSlug", - ]) - .whereRef("pub_values.pubId", "=", "pubs.id") - ).as("values") - ) .select((eb) => pubType({ eb, pubTypeIdRef: "pubs.pubTypeId" })) ).as("pub"), jsonObjectFrom( diff --git a/core/app/c/[communitySlug]/forms/actions.ts b/core/app/c/[communitySlug]/forms/actions.ts index 59574b483..17b5b49d0 100644 --- a/core/app/c/[communitySlug]/forms/actions.ts +++ b/core/app/c/[communitySlug]/forms/actions.ts @@ -7,6 +7,7 @@ import { assert } from "utils"; import { isUniqueConstraintError } from "~/kysely/errors"; import { getLoginData } from "~/lib/authentication/loginData"; +import { getPubType } from "~/lib/server"; import { autoRevalidate } from "~/lib/server/cache/autoRevalidate"; import { findCommunityBySlug } from "~/lib/server/community"; import { defineServerAction } from "~/lib/server/defineServerAction"; @@ -27,8 +28,9 @@ export const createForm = defineServerAction(async function createForm( } try { + const pubType = await getPubType(pubTypeId).executeTakeFirstOrThrow(); await autoRevalidate( - insertForm(pubTypeId, name, slug, communityId, false) + insertForm(pubType, name, slug, communityId, false) ).executeTakeFirstOrThrow(); } catch (error) { if (isUniqueConstraintError(error)) { diff --git a/core/app/c/[communitySlug]/pubs/[pubId]/components/queries.ts b/core/app/c/[communitySlug]/pubs/[pubId]/components/queries.ts index 0afa852e0..98e67a647 100644 --- a/core/app/c/[communitySlug]/pubs/[pubId]/components/queries.ts +++ b/core/app/c/[communitySlug]/pubs/[pubId]/components/queries.ts @@ -53,12 +53,9 @@ const memberFields = (pubId: Expression) => .whereRef("pub_values.pubId", "=", pubId) .where("pub_fields.schemaName", "=", CoreSchemaType.MemberId) .distinctOn("pub_fields.id") - .orderBy(["pub_fields.id", "pub_values.createdAt desc"]) + .orderBy(["pub_fields.id", "pub_values.updatedAt desc"]) ); -const pubType = (pubTypeId: Expression) => - jsonObjectFrom(getPubTypeBase().whereRef("pub_types.id", "=", pubTypeId)); - export const getPubChildrenTable = (parentId: PubsId, selectedPubTypeId?: PubTypesId) => { return autoCache( db diff --git a/core/app/c/[communitySlug]/types/actions.ts b/core/app/c/[communitySlug]/types/actions.ts index 0517658e9..5fe22f486 100644 --- a/core/app/c/[communitySlug]/types/actions.ts +++ b/core/app/c/[communitySlug]/types/actions.ts @@ -8,7 +8,7 @@ import { isUniqueConstraintError } from "~/kysely/errors"; import { getLoginData } from "~/lib/authentication/loginData"; import { userCan } from "~/lib/authorization/capabilities"; import { defaultFormName, defaultFormSlug } from "~/lib/form"; -import { ApiError } from "~/lib/server"; +import { ApiError, getPubType } from "~/lib/server"; import { autoRevalidate } from "~/lib/server/cache/autoRevalidate"; import { findCommunityBySlug } from "~/lib/server/community"; import { defineServerAction } from "~/lib/server/defineServerAction"; @@ -157,7 +157,7 @@ export const createPubType = defineServerAction(async function createPubType( } try { await db.transaction().execute(async (trx) => { - const pubType = await autoRevalidate( + const { id: pubTypeId } = await autoRevalidate( trx .with("newType", (db) => db @@ -180,9 +180,11 @@ export const createPubType = defineServerAction(async function createPubType( .returning("B as id") ).executeTakeFirstOrThrow(); + const pubType = await getPubType(pubTypeId, trx).executeTakeFirstOrThrow(); + await autoRevalidate( insertForm( - pubType.id, + pubType, defaultFormName(name), defaultFormSlug(name), communityId, diff --git a/core/app/components/FormBuilder/ElementPanel/ButtonConfigurationForm.tsx b/core/app/components/FormBuilder/ElementPanel/ButtonConfigurationForm.tsx index 58ee072fa..ab24b55f7 100644 --- a/core/app/components/FormBuilder/ElementPanel/ButtonConfigurationForm.tsx +++ b/core/app/components/FormBuilder/ElementPanel/ButtonConfigurationForm.tsx @@ -1,5 +1,6 @@ import { useMemo } from "react"; import { zodResolver } from "@hookform/resolvers/zod"; +import mudder from "mudder"; import { useForm, useFormContext } from "react-hook-form"; import { z } from "zod"; @@ -27,7 +28,7 @@ import { ChevronDown } from "ui/icon"; import { Input } from "ui/input"; import { cn } from "utils"; -import type { ButtonElement, FormBuilderSchema } from "../types"; +import type { FormBuilderSchema } from "../types"; import { useCommunity } from "../../providers/CommunityProvider"; import { useFormBuilder } from "../FormBuilderContext"; import { ButtonOption } from "../SubmissionSettings"; @@ -48,7 +49,7 @@ export const ButtonConfigurationForm = ({ // This uses the parent's form context to get the most up to date version of 'elements' const { getValues } = useFormContext(); // Derive some initial values based on the state of the parent form when this panel was opened - const { button, buttonIndex, otherButtons, numElements } = useMemo(() => { + const { button, buttonIndex, otherButtons, numElements, elements } = useMemo(() => { const elements = getValues()["elements"]; // Because a button might not have an ID yet (if it wasn't saved to the db yet) fall back to its label as an identifier const buttonIndex = buttonIdentifier @@ -66,7 +67,7 @@ export const ButtonConfigurationForm = ({ e.elementId !== buttonIdentifier && e.label !== buttonIdentifier ); - return { button, buttonIndex, otherButtons, numElements: elements.length }; + return { button, buttonIndex, otherButtons, numElements: elements.length, elements }; }, []); const schema = z.object({ @@ -102,7 +103,11 @@ export const ButtonConfigurationForm = ({ const onSubmit = (values: z.infer) => { const index = buttonIndex === -1 ? numElements : buttonIndex; update(index, { - order: null, + rank: mudder.base62.mudder( + elements[index - 1]?.rank ?? "", + elements[index + 1]?.rank ?? "", + 1 + )[0], type: ElementType.button, elementId: button?.elementId, label: values.label, diff --git a/core/app/components/FormBuilder/ElementPanel/InputComponentConfigurationForm.tsx b/core/app/components/FormBuilder/ElementPanel/InputComponentConfigurationForm.tsx index d4d1101a0..81093945e 100644 --- a/core/app/components/FormBuilder/ElementPanel/InputComponentConfigurationForm.tsx +++ b/core/app/components/FormBuilder/ElementPanel/InputComponentConfigurationForm.tsx @@ -415,7 +415,7 @@ export const InputComponentConfigurationForm = ({ index, fieldInputElement }: Pr data-testid="save-configuration-button" type="submit" className="bg-blue-500 hover:bg-blue-600" - disabled={!form.formState.isDirty} + disabled={!form.formState.isDirty && fieldInputElement.configured} > Save diff --git a/core/app/components/FormBuilder/ElementPanel/SelectElement.tsx b/core/app/components/FormBuilder/ElementPanel/SelectElement.tsx index 330913178..ddce27663 100644 --- a/core/app/components/FormBuilder/ElementPanel/SelectElement.tsx +++ b/core/app/components/FormBuilder/ElementPanel/SelectElement.tsx @@ -1,9 +1,9 @@ +import mudder from "mudder"; import { useFormContext } from "react-hook-form"; -import { defaultComponent, SCHEMA_TYPES_WITH_ICONS } from "schemas"; +import { defaultComponent } from "schemas"; -import { ElementType, StructuralFormElement } from "db/public"; +import { ElementType, InputComponent, StructuralFormElement } from "db/public"; import { Button } from "ui/button"; -import { Type } from "ui/icon"; import { Input } from "ui/input"; import { usePubFieldContext } from "ui/pubFields"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "ui/tabs"; @@ -18,9 +18,9 @@ export const SelectElement = ({ panelState }: { panelState: PanelState }) => { const { elementsCount, dispatch, addElement } = useFormBuilder(); const { getValues } = useFormContext(); + const elements: FormElementData[] = getValues()["elements"]; const fieldButtons = Object.values(fields).map((field) => { - const elements: FormElementData[] = getValues()["elements"]; const usedFields = elements.map((e) => e.fieldId); if ( usedFields.includes(field.id) || @@ -49,9 +49,16 @@ export const SelectElement = ({ panelState }: { panelState: PanelState }) => { fieldId: field.id, required: true, type: ElementType.pubfield, - order: elementsCount, + rank: mudder.base62.mudder(elements[elementsCount - 1].rank, "", 1)[0], configured: false, - label: field.name, + config: field.isRelation + ? { + relationshipConfig: { + label: field.name, + component: InputComponent.relationBlock, + }, + } + : { label: field.name }, component, schemaName, isRelation: field.isRelation, @@ -130,7 +137,11 @@ export const SelectElement = ({ panelState }: { panelState: PanelState }) => { addElement({ element: elementType, type: ElementType.structural, - order: elementsCount, + rank: mudder.base62.mudder( + elements[elementsCount - 1].rank, + "", + 1 + )[0], configured: false, }); dispatch({ diff --git a/core/app/components/FormBuilder/FormBuilder.tsx b/core/app/components/FormBuilder/FormBuilder.tsx index d3c4205bd..a420cdf66 100644 --- a/core/app/components/FormBuilder/FormBuilder.tsx +++ b/core/app/components/FormBuilder/FormBuilder.tsx @@ -1,21 +1,26 @@ "use client"; +import type { DragEndEvent } from "@dnd-kit/core"; + import * as React from "react"; import { useCallback, useReducer, useRef } from "react"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; -import { DndContext } from "@dnd-kit/core"; +import { DndContext, KeyboardSensor, PointerSensor, useSensor, useSensors } from "@dnd-kit/core"; import { restrictToParentElement, restrictToVerticalAxis } from "@dnd-kit/modifiers"; -import { SortableContext, verticalListSortingStrategy } from "@dnd-kit/sortable"; +import { + SortableContext, + sortableKeyboardCoordinates, + verticalListSortingStrategy, +} from "@dnd-kit/sortable"; import { zodResolver } from "@hookform/resolvers/zod"; -import { createPortal } from "react-dom"; +import mudder from "mudder"; import { useFieldArray, useForm } from "react-hook-form"; import type { Stages } from "db/public"; import { logger } from "logger"; -import { Button } from "ui/button"; import { Form, FormControl, FormField, FormItem } from "ui/form"; import { useUnsavedChangesWarning } from "ui/hooks"; -import { CircleCheck, X } from "ui/icon"; +import { CircleCheck } from "ui/icon"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "ui/tabs"; import { TokenProvider } from "ui/tokens"; import { toast } from "ui/use-toast"; @@ -27,7 +32,7 @@ import { didSucceed, useServerAction } from "~/lib/serverActions"; import { PanelHeader, PanelWrapper, SidePanel } from "../SidePanel"; import { saveForm } from "./actions"; import { ElementPanel } from "./ElementPanel"; -import { FormBuilderProvider, useFormBuilder } from "./FormBuilderContext"; +import { FormBuilderProvider } from "./FormBuilderContext"; import { FormElement } from "./FormElement"; import { formBuilderSchema, isButtonElement } from "./types"; @@ -189,7 +194,7 @@ export function FormBuilder({ pubForm, id, stages }: Props) { [elements] ); const removeIfUnconfigured = useCallback(() => { - if (panelState.selectedElementIndex === null) { + if (panelState.selectedElementIndex === null || panelState.backButton !== "selecting") { return; } const element = elements[panelState.selectedElementIndex]; @@ -198,8 +203,50 @@ export function FormBuilder({ pubForm, id, stages }: Props) { } }, [elements, remove, panelState.selectedElementIndex]); + // Update ranks and rhf field array position when elements are dragged + const handleDragEnd = useCallback( + (event: DragEndEvent) => { + const { active, over } = event; + if (over && active.id !== over?.id) { + // activeIndex is the position the element started at and over is where it was dropped + const activeIndex = active.data.current?.sortable?.index; + const overIndex = over.data.current?.sortable?.index; + if (activeIndex !== undefined && overIndex !== undefined) { + // "earlier" means towards the beginning of the list, or towards the top of the page + const isMovedEarlier = activeIndex > overIndex; + const activeElem = elements[activeIndex]; + + // When moving an element earlier in the array, find a rank between the rank of the + // element at the dropped position and the element before it. When moving an element + // later, instead find a rank between that element and the element after it + const aboveRank = + elements[isMovedEarlier ? overIndex : overIndex + 1]?.rank ?? ""; + const belowRank = + elements[isMovedEarlier ? overIndex - 1 : overIndex]?.rank ?? ""; + const [rank] = mudder.base62.mudder(belowRank, aboveRank, 1); + + // move doesn't trigger a rerender, so it's safe to chain these calls + move(activeIndex, overIndex); + update(overIndex, { + ...activeElem, + rank, + updated: true, + }); + } + } + }, + [elements] + ); + const tokens = { content: renderWithPubTokens }; + const sensors = useSensors( + useSensor(PointerSensor), + useSensor(KeyboardSensor, { + coordinateGetter: sortableKeyboardCoordinates, + }) + ); + return ( Builder Preview - +
logger.error({ msg: "unable to submit form", @@ -247,29 +295,14 @@ export function FormBuilder({ pubForm, id, stages }: Props) { name="elements" render={() => ( <> -
+
    { - const { active, over } = event; - if (over && active.id !== over?.id) { - const activeIndex = - active.data.current?.sortable - ?.index; - const overIndex = - over.data.current?.sortable - ?.index; - if ( - activeIndex !== undefined && - overIndex !== undefined - ) { - move(activeIndex, overIndex); - } - } - }} + onDragEnd={handleDragEnd} + sensors={sensors} > -
+
Deleted on save
@@ -43,13 +46,13 @@ export const FormElement = ({ element, index, isEditing, isDisabled }: FormEleme type="button" disabled={isDisabled} variant="ghost" - className="invisible p-2 hover:bg-white group-hover:visible" + className="p-2 opacity-0 hover:bg-white group-focus-within:opacity-100 group-hover:opacity-100 [&_svg]:pointer-events-auto [&_svg]:hover:text-red-500" aria-label="Restore element" onClick={() => { restoreElement(index); }} > - + ) : ( @@ -57,33 +60,33 @@ export const FormElement = ({ element, index, isEditing, isDisabled }: FormEleme type="button" disabled={isDisabled} variant="ghost" - className="invisible p-2 hover:bg-white group-hover:visible" + className="p-2 opacity-0 hover:bg-white group-focus-within:opacity-100 group-hover:opacity-100 [&_svg]:pointer-events-auto [&_svg]:hover:text-red-500" aria-label="Delete element" onClick={() => { removeElement(index); }} > - + ); return ( -
-
+
{isFieldInput(element) && ( - + )} {isStructuralElement(element) && ( - + )} {isEditing ? (
EDITING
@@ -92,9 +95,10 @@ export const FormElement = ({ element, index, isEditing, isDisabled }: FormEleme {restoreRemoveButton}
)}
-
+ ); }; type FieldInputElementProps = { element: InputElement; isEditing: boolean; + labelId?: string; }; -export const FieldInputElement = ({ element, isEditing }: FieldInputElementProps) => { +export const FieldInputElement = ({ element, isEditing, labelId }: FieldInputElementProps) => { const pubFields = usePubFieldContext(); const field = pubFields[element.fieldId as PubFieldsId]; @@ -137,8 +145,11 @@ export const FieldInputElement = ({ element, isEditing }: FieldInputElementProps />
{field.slug}
-
- {element.label ?? field.name} +
+ {(element.config as any)?.label ?? field.name}
@@ -148,8 +159,9 @@ export const FieldInputElement = ({ element, isEditing }: FieldInputElementProps type StructuralElementProps = { element: StructuralElement; isEditing: boolean; + labelId?: string; }; -const StructuralElement = ({ element, isEditing }: StructuralElementProps) => { +const StructuralElement = ({ element, isEditing, labelId }: StructuralElementProps) => { const { Icon, name } = structuralElements[element.element]; return ( @@ -163,7 +175,9 @@ const StructuralElement = ({ element, isEditing }: StructuralElementProps) => { )} />
-
{name}
+
+ {name} +
{/* TODO: sanitize links, truncate, generally improve styles for rendered content*/} {element.content} diff --git a/core/app/components/FormBuilder/actions.ts b/core/app/components/FormBuilder/actions.ts index 7c710a838..a328909d6 100644 --- a/core/app/components/FormBuilder/actions.ts +++ b/core/app/components/FormBuilder/actions.ts @@ -54,13 +54,12 @@ export const saveForm = defineServerAction(async function saveForm(form: FormBui } else if (!element.elementId) { // Newly created elements have no elementId acc.upserts.push(formElementsInitializerSchema.parse({ formId, ...element })); - } else if (element.updated || element.order !== index + 1) { + } else if (element.updated) { acc.upserts.push( formElementsInitializerSchema.parse({ ...element, formId, id: element.elementId, - order: index + 1, }) ); // TODO: only update changed columns } diff --git a/core/app/components/FormBuilder/types.ts b/core/app/components/FormBuilder/types.ts index ad314b731..c5fd14cce 100644 --- a/core/app/components/FormBuilder/types.ts +++ b/core/app/components/FormBuilder/types.ts @@ -13,7 +13,7 @@ import { const baseElementSchema = z.object({ id: z.string().optional(), // react-hook-form assigned ID, meaningless in our DB elementId: formElementsIdSchema.optional(), - order: z.number().int().nullable(), + rank: z.string(), deleted: z.boolean().default(false), updated: z.boolean().default(false), configured: z.boolean().default(true), diff --git a/core/app/components/forms/elements/RelatedPubsElement.tsx b/core/app/components/forms/elements/RelatedPubsElement.tsx index 3e6c18347..8678acc0f 100644 --- a/core/app/components/forms/elements/RelatedPubsElement.tsx +++ b/core/app/components/forms/elements/RelatedPubsElement.tsx @@ -94,8 +94,11 @@ export const ConfigureRelatedValue = ({ onBlur?: () => void; className?: string; }) => { - const configLabel = "label" in element.config ? element.config.label : undefined; - const label = configLabel || element.label || slug; + const configLabel = + "relationshipConfig" in element.config + ? element.config.relationshipConfig.label + : element.config.label; + const label = configLabel || element.label || element.slug; const { watch, formState } = useFormContext(); const [isPopoverOpen, setPopoverIsOpen] = useState(false); diff --git a/core/app/components/forms/types.ts b/core/app/components/forms/types.ts index f349d817f..ade66e15c 100644 --- a/core/app/components/forms/types.ts +++ b/core/app/components/forms/types.ts @@ -30,7 +30,7 @@ type BasePubFieldElement = { required: boolean | null; stageId: null; element: null; - order: number | null; + rank: string; slug: string; isRelation: boolean; }; @@ -53,7 +53,7 @@ export type ButtonElement = { id: FormElementsId; type: ElementType.button; fieldId: null; - order: number | null; + rank: string; label: string | null; element: null; content: null; @@ -70,7 +70,7 @@ export type StructuralElement = { id: FormElementsId; type: ElementType.structural; fieldId: null; - order: number | null; + rank: string; label: string | null; element: StructuralFormElement | null; content: string | null; diff --git a/core/app/components/pubs/PubEditor/PubEditor.tsx b/core/app/components/pubs/PubEditor/PubEditor.tsx index 8cbc49463..a0bc0a1d0 100644 --- a/core/app/components/pubs/PubEditor/PubEditor.tsx +++ b/core/app/components/pubs/PubEditor/PubEditor.tsx @@ -35,7 +35,10 @@ const RelatedPubValueElement = ({ fieldName: string; element: PubFieldElement; }) => { - const configLabel = "label" in element.config ? element.config.label : undefined; + const configLabel = + "relationshipConfig" in element.config + ? element.config.relationshipConfig.label + : element.config.label; const label = configLabel || element.label || element.slug; return ( diff --git a/core/app/components/pubs/PubEditor/helpers.ts b/core/app/components/pubs/PubEditor/helpers.ts index fa9f2b305..26f3ca01f 100644 --- a/core/app/components/pubs/PubEditor/helpers.ts +++ b/core/app/components/pubs/PubEditor/helpers.ts @@ -1,3 +1,4 @@ +import mudder from "mudder"; import { defaultComponent } from "schemas"; import type { FormElementsId } from "db/public"; @@ -20,7 +21,7 @@ export function makeFormElementDefFromPubFields( slug: field.slug, schemaName: field.schemaName, type: ElementType.pubfield, - order: index + 1, + rank: mudder.base62.numberToString(index + 1), stageId: null, fieldId: field.id, label: field.name ?? null, diff --git a/core/lib/__tests__/matchers.ts b/core/lib/__tests__/matchers.ts index 75f3d31c6..76bebc4fa 100644 --- a/core/lib/__tests__/matchers.ts +++ b/core/lib/__tests__/matchers.ts @@ -5,15 +5,19 @@ import type { PubsId } from "db/public"; import type { db } from "~/kysely/database"; -const deepSortValues = (pub: ProcessedPub): ProcessedPub => { - pub.values +const deepSortValues = ( + values: Partial[] +): Partial[] => { + values .sort((a, b) => (a.value as string).localeCompare(b.value as string)) .map((item) => ({ ...item, - relatedPub: item.relatedPub?.values ? deepSortValues(item.relatedPub) : item.relatedPub, + relatedPub: item.relatedPub?.values + ? deepSortValues(item.relatedPub.values) + : item.relatedPub, })); - return pub; + return values; }; expect.extend({ @@ -35,10 +39,10 @@ expect.extend({ toHaveValues(received: ProcessedPub, expected: Partial[]) { const pub = received; - const sortedPubValues = deepSortValues(pub); + const sortedPubValues = deepSortValues(pub.values); const expectedLength = expected.length; - const receivedLength = sortedPubValues.values.length; + const receivedLength = sortedPubValues.length; const isNot = this.isNot; if (!isNot && !this.equals(expectedLength, receivedLength)) { @@ -50,7 +54,7 @@ expect.extend({ } // equiv. to .toMatchObject - const pass = this.equals(sortedPubValues.values, expected, [ + const pass = this.equals(sortedPubValues, deepSortValues(expected), [ this.utils.iterableEquality, this.utils.subsetEquality, ]); diff --git a/core/lib/server/form.ts b/core/lib/server/form.ts index 26998d5a7..20f03aa42 100644 --- a/core/lib/server/form.ts +++ b/core/lib/server/form.ts @@ -2,28 +2,20 @@ import type { QueryCreator } from "kysely"; import { sql } from "kysely"; import { jsonArrayFrom } from "kysely/helpers/postgres"; -import { componentsBySchema } from "schemas"; +import mudder from "mudder"; +import { defaultComponent } from "schemas"; -import type { - CommunitiesId, - CoreSchemaType, - FormsId, - InputComponent, - PublicSchema, - PubsId, - PubTypesId, - UsersId, -} from "db/public"; -import { AuthTokenType, ElementType, StructuralFormElement } from "db/public"; +import type { CommunitiesId, FormsId, PublicSchema, PubsId, PubTypesId, UsersId } from "db/public"; +import { AuthTokenType, ElementType, InputComponent, StructuralFormElement } from "db/public"; import type { XOR } from "../types"; +import type { GetPubTypesResult } from "./pubtype"; import type { FormElements } from "~/app/components/forms/types"; import { db } from "~/kysely/database"; import { createMagicLink } from "../authentication/createMagicLink"; import { autoCache } from "./cache/autoCache"; import { autoRevalidate } from "./cache/autoRevalidate"; import { getCommunitySlug } from "./cache/getCommunitySlug"; -import { _getPubFields } from "./pubFields"; import { getUser } from "./user"; /** @@ -62,7 +54,7 @@ export const getForm = ( "form_elements.fieldId", "form_elements.component", eb.fn.coalesce("form_elements.config", sql`'{}'`).as("config"), - "form_elements.order", + "form_elements.rank", "form_elements.label", "form_elements.content", "form_elements.element", @@ -73,7 +65,7 @@ export const getForm = ( "pub_fields.isRelation", ]) .$narrowType() - .orderBy("form_elements.order") + .orderBy("rank") ).as("elements") ) ); @@ -215,61 +207,23 @@ export const createFormInviteLink = async (props: FormInviteLinkProps) => { return magicLink; }; -const componentsBySchemaTable = Object.entries(componentsBySchema) - .map(([schema, components]) => { - const component = components[0] - ? `'${components[0]}'::"InputComponent"` - : `null::"InputComponent"`; - return `('${schema}'::"CoreSchemaType", ${component})`; - }) - .join(", "); - export const insertForm = ( - pubTypeId: PubTypesId, + pubType: GetPubTypesResult[number], name: string, slug: string, communityId: CommunitiesId, isDefault: boolean, trx = db ) => { + const ranks = mudder.base62.mudder(pubType.fields.length + 1); + return trx - .with("components", (db) => - // This lets us set an appropriate default component during creation by turning - // the js mapping from schemaName to InputComponent into a temporary table which - // can be used during the query. Without this, we would need to first query for - // the pubtype's fields (and their schemaNames), then determine the input - // components in js before inserting - db - .selectFrom( - sql<{ - schema: CoreSchemaType; - component: InputComponent; - }>`(values ${sql.raw(componentsBySchemaTable)})`.as<"c">( - sql`c(schema, component)` - ) - ) - .selectAll("c") - ) - .with("fields", () => - _getPubFields({ pubTypeId, communityId }) - .clearSelect() - .select((eb) => [ - eb.ref("f.id").as("fieldId"), - eb.ref("f.json", "->>").key("name").as("name"), - eb - .cast( - eb.ref("f.json", "->>").key("schemaName"), - sql.raw('"CoreSchemaType"') - ) - .as("schemaName"), - ]) - ) .with("form", (db) => db .insertInto("forms") .values({ name, - pubTypeId, + pubTypeId: pubType.id, slug, communityId, isDefault, @@ -282,31 +236,26 @@ export const insertForm = ( type: ElementType.structural, element: StructuralFormElement.p, content: '# :value{field="title"}', - order: 0, + rank: ranks[0], })) ) .insertInto("form_elements") - .columns(["fieldId", "formId", "label", "type", "order", "component"]) - .expression((eb) => - eb - .selectFrom("fields") - .innerJoin("form", (join) => join.onTrue()) - .select((eb) => [ - "fields.fieldId", - "form.id as formId", - "fields.name as label", - eb.val("pubfield").as("type"), - eb( - eb.fn.agg("ROW_NUMBER").over((o) => o.partitionBy("id")), - "+", - 1 // Offset order by 1 for the title element - ).as("order"), - eb - .selectFrom("components") - .select("component") - .whereRef("components.schema", "=", "fields.schemaName") - .as("component"), - ]) + .values((eb) => + pubType.fields.map((field, i) => ({ + fieldId: field.id, + config: field.isRelation + ? { + relationshipConfig: { + component: InputComponent.relationBlock, + label: field.name, + }, + } + : { label: field.name }, + type: ElementType.pubfield, + component: defaultComponent(field.schemaName!), + rank: ranks[i + 1], + formId: eb.selectFrom("form").select("form.id"), + })) ); }; export const FORM_NAME_UNIQUE_CONSTRAINT = "forms_name_communityId_key"; diff --git a/core/lib/server/pub.db.test.ts b/core/lib/server/pub.db.test.ts index 73d960fef..472a43f53 100644 --- a/core/lib/server/pub.db.test.ts +++ b/core/lib/server/pub.db.test.ts @@ -501,7 +501,7 @@ describe("getPubsWithRelatedValuesAndChildren", () => { expect(pub.pubType).toMatchObject({ id: pubTypes["Basic Pub"].id, - fields: Object.values(pubTypes["Basic Pub"].pubFields).map((f) => ({ + fields: Object.values(pubTypes["Basic Pub"].fields).map((f) => ({ id: f.id, slug: f.slug, })), @@ -1142,15 +1142,13 @@ describe("upsertPubRelations", () => { { depth: 10 } ); - expect(updatedPub).toMatchObject({ - values: [ - { value: "test title" }, - { - value: "test relation value", - relatedPub: { values: [{ value: "Some title" }] }, - }, - ], - }); + expect(updatedPub).toHaveValues([ + { value: "test title" }, + { + value: "test relation value", + relatedPub: { values: [{ value: "Some title" }] }, + }, + ]); }); it("should be able to create new pubs as relations", async () => { @@ -1198,15 +1196,14 @@ describe("upsertPubRelations", () => { { depth: 10 } ); - expect(updatedPub).toMatchObject({ - values: [ - { value: "test title" }, - { - value: "test relation value", - relatedPub: { values: [{ value: "new related pub" }] }, - }, - ], - }); + expect(updatedPub).toHaveValues([ + { fieldSlug: pubFields["Title"].slug, value: "test title" }, + { + fieldSlug: pubFields["Some relation"].slug, + value: "test relation value", + relatedPub: { values: [{ value: "new related pub" }] }, + }, + ]); }); it("should validate relation values against schema", async () => { diff --git a/core/lib/server/pub.ts b/core/lib/server/pub.ts index ece9b0528..837778cdb 100644 --- a/core/lib/server/pub.ts +++ b/core/lib/server/pub.ts @@ -10,6 +10,7 @@ import type { import { sql, Transaction } from "kysely"; import { jsonArrayFrom, jsonObjectFrom } from "kysely/helpers/postgres"; import partition from "lodash.partition"; +import mudder from "mudder"; import type { CreatePubRequestBodyWithNullsNew, @@ -41,7 +42,7 @@ import { Capabilities, CoreSchemaType, MemberRole, MembershipType, OperationType import { logger } from "logger"; import { assert, expect } from "utils"; -import type { MaybeHas, Prettify, XOR } from "../types"; +import type { DefinitelyHas, MaybeHas, Prettify, XOR } from "../types"; import type { SafeUser } from "./user"; import { db } from "~/kysely/database"; import { env } from "../env/env.mjs"; @@ -124,6 +125,13 @@ const pubValues = ( .as("fields"), (join) => join.onRef("fields.id", "=", "pub_values.fieldId") ) + .orderBy([ + (eb) => + sql`${eb.fn + .max("pub_values.updatedAt") + .over((ob) => ob.partitionBy("pub_values.fieldId"))} desc`, + "pub_values.rank", + ]) .$if(!!pubId, (qb) => qb.where("pub_values.pubId", "=", pubId!)) .$if(!!pubIdRef, (qb) => qb.whereRef("pub_values.pubId", "=", ref(pubIdRef!))) .as(alias) @@ -550,17 +558,23 @@ export const createPubRecursiveNew = async ({ + rankedValues.map(({ fieldId, value, relatedPubId, rank }, index) => ({ fieldId, pubId: newPub.id, value: JSON.stringify(value), relatedPubId, + rank, lastModifiedBy, })) ) @@ -1196,6 +1210,104 @@ export const updatePub = async ({ return result; }; +/** + * Adds an appropriate "rank" attribute to each related pub value passed in, based on the highest + * existing rank on the relevant pub. Returns all the pub values passed in. + */ + +const getRankedValues = async ({ + pubId, + pubValues, + trx, +}: { + pubId: PubsId; + pubValues: { + pubId?: PubsId; + fieldId: PubFieldsId; + relatedPubId?: PubsId; + value: unknown; + }[]; + trx: typeof db; +}) => { + const { relatedValues, plainValues } = Object.groupBy(pubValues, (v) => + v.relatedPubId === undefined ? "plainValues" : "relatedValues" + ); + const groupedValues: Record< + PubsId, + Record[]> + > = {}; + let rankedValues; + if (relatedValues?.length) { + const firstVal = relatedValues[0]; + + const valuesQuery = trx + .selectFrom("pub_values") + .select(["rank", "fieldId", "pubId"]) + .where("pubId", "=", firstVal.pubId ?? pubId) + .where("fieldId", "=", firstVal.fieldId) + .where("rank", "is not", null) + .orderBy("rank desc") + .limit(1); + + for (const value of relatedValues) { + const newValue = { ...value, pubId: value.pubId ?? pubId }; + if (!groupedValues[newValue.pubId]) { + groupedValues[newValue.pubId] = { [value.fieldId]: [newValue] }; + } else if (!groupedValues[newValue.pubId][value.fieldId]) { + groupedValues[newValue.pubId][value.fieldId] = [newValue]; + } + + // If we've already found the highest ranked value for this pubId + fieldId combination, + // continue without adding to the query + else if ( + groupedValues[newValue.pubId] && + groupedValues[newValue.pubId][value.fieldId]?.length + ) { + groupedValues[newValue.pubId][value.fieldId].push(newValue); + continue; + } + + if (value === firstVal) { + continue; + } + + // Select the highest ranked value for the given pub + field, and append (UNION ALL) + // that single row to the output + valuesQuery.unionAll((eb) => + eb + .selectFrom("pub_values") + .select(["rank", "fieldId", "pubId"]) + .where("pubId", "=", newValue.pubId) + .where("fieldId", "=", value.fieldId) + .where("rank", "is not", null) + .orderBy("rank desc") + .limit(1) + ); + } + const highestRanks = await valuesQuery.execute(); + + rankedValues = Object.values(groupedValues).flatMap((valuesForPub) => + Object.values(valuesForPub).flatMap((valuesForField) => { + const highestRank = + highestRanks.find( + ({ pubId, fieldId }) => + valuesForField[0].pubId === pubId && + valuesForField[0].fieldId === fieldId + )?.rank ?? ""; + const ranks = mudder.base62.mudder(highestRank, "", valuesForField.length); + return valuesForField.map((value, i) => ({ ...value, rank: ranks[i] })); + }) + ); + } + + const allValues: ((typeof pubValues)[number] & { rank?: string })[] = [ + ...(plainValues || []), + ...(rankedValues || []), + ]; + + return allValues; +}; + export const upsertPubValues = async ({ pubId, pubValues, @@ -1218,17 +1330,19 @@ export const upsertPubValues = async ({ if (!pubValues.length) { return []; } + const rankedValues = await getRankedValues({ pubId, pubValues, trx }); return autoRevalidate( trx .insertInto("pub_values") .values( - pubValues.map((value) => ({ + rankedValues.map((value) => ({ pubId: value.pubId ?? pubId, fieldId: value.fieldId, value: JSON.stringify(value.value), lastModifiedBy, relatedPubId: value.relatedPubId, + rank: value.rank, })) ) .onConflict((oc) => @@ -1265,15 +1379,18 @@ export const upsertPubRelationValues = async ({ return []; } + const rankedValues = await getRankedValues({ pubId, pubValues: allRelationsToCreate, trx }); + return autoRevalidate( trx .insertInto("pub_values") .values( - allRelationsToCreate.map((value) => ({ + rankedValues.map((value) => ({ pubId: value.pubId ?? pubId, relatedPubId: value.relatedPubId, value: JSON.stringify(value.value), fieldId: value.fieldId, + rank: value.rank, lastModifiedBy, })) ) @@ -1810,7 +1927,15 @@ export async function getPubsWithRelatedValuesAndChildren< "pub_fields.name as fieldName", ]) .whereRef("pv.pubId", "=", "pt.pubId") - .orderBy("pv.createdAt desc") + // Order by most recently updated value (grouped by pub field), then rank + .orderBy([ + (eb) => + // Equivalent to: max(pv."updatedAt") over(partition by pv."fieldId") desc + sql`${eb.fn + .max("pv.updatedAt") + .over((ob) => ob.partitionBy("pv.fieldId"))} desc`, + "pv.rank", + ]) ).as("values") ) ) diff --git a/core/lib/server/pubtype.ts b/core/lib/server/pubtype.ts index fad65499a..1afffa87b 100644 --- a/core/lib/server/pubtype.ts +++ b/core/lib/server/pubtype.ts @@ -52,8 +52,8 @@ export const getPubTypeBase = >( ).as("fields"), ]); -export const getPubType = (pubTypeId: PubTypesId) => - autoCache(getPubTypeBase().where("pub_types.id", "=", pubTypeId)); +export const getPubType = (pubTypeId: PubTypesId, trx = db) => + autoCache(getPubTypeBase(trx).where("pub_types.id", "=", pubTypeId)); export const getPubTypeForPubId = async (pubId: PubsId) => { return autoCache( diff --git a/core/package.json b/core/package.json index 392e58ffd..18a35b4fc 100644 --- a/core/package.json +++ b/core/package.json @@ -102,12 +102,13 @@ "jsonpath-plus": "^10.2.0", "jsonwebtoken": "^9.0.0", "katex": "catalog:", - "kysely": "^0.27.3", + "kysely": "^0.27.5", "lodash.partition": "^4.6.0", "logger": "workspace:*", "lucia": "^3.2.2", "lucide-react": "^0.469.0", "micromark-extension-directive": "^3.0.0", + "mudder": "^2.1.1", "next": "catalog:", "next-connect": "^1.0.0", "nodemailer": "^6.9.5", @@ -161,6 +162,7 @@ "@types/jsonwebtoken": "^9.0.2", "@types/lodash.partition": "^4.6.9", "@types/mdast": "^4.0.4", + "@types/mudder": "^2.1.3", "@types/node": "catalog:", "@types/nodemailer": "^6.4.9", "@types/pg": "^8.11.6", diff --git a/core/playwright/formBuilder.spec.ts b/core/playwright/formBuilder.spec.ts index ebe273539..d6150f129 100644 --- a/core/playwright/formBuilder.spec.ts +++ b/core/playwright/formBuilder.spec.ts @@ -175,7 +175,9 @@ test.describe("relationship fields", () => { if (request.method() === "POST" && request.url().includes(`forms/${formSlug}/edit`)) { const data = request.postDataJSON(); const { elements } = data[0]; - const authorElement = elements.find((e: PubFieldElement) => e.label === "author"); + const authorElement = elements.find( + (e: PubFieldElement) => "label" in e.config && e.config.label === "Role" + ); expect(authorElement.component).toEqual(InputComponent.textArea); expect(authorElement.config).toMatchObject({ relationshipConfig: { @@ -219,7 +221,9 @@ test.describe("relationship fields", () => { const data = request.postDataJSON(); const { elements } = data[0]; const authorElement = elements.find( - (e: PubFieldElement) => e.label === "author null" + (e: PubFieldElement) => + "relationshipConfig" in e.config && + e.config.relationshipConfig.label === "Authors" ); expect(authorElement.component).toBeNull(); expect(authorElement.config).toMatchObject({ @@ -238,3 +242,31 @@ test.describe("relationship fields", () => { await formEditPage.saveForm(); }); }); + +test.describe("reordering fields", async () => { + test("field order is persisted after saving", async () => { + const formEditPage = new FormsEditPage(page, COMMUNITY_SLUG, FORM_SLUG); + + await formEditPage.goto(); + + const elements = page.getByRole("form", { name: "Form builder" }).getByRole("listitem"); + const initialElements = await elements.allTextContents(); + + await page.getByRole("button", { name: "Drag handle" }).first().press(" "); + await page.keyboard.press("ArrowDown"); + await page.keyboard.press(" "); + + await page.getByRole("button", { name: "Drag handle" }).last().press(" "); + await page.keyboard.press("ArrowUp"); + await page.keyboard.press(" "); + + // Make sure reordering worked on the client + await expect(elements).not.toHaveText(initialElements); + + const changedElements = await elements.allTextContents(); + await formEditPage.saveForm(); + + // Make sure the form is returned in the same order it was saved in + await expect(elements).toHaveText(changedElements); + }); +}); diff --git a/core/prisma/exampleCommunitySeeds/arcadia.ts b/core/prisma/exampleCommunitySeeds/arcadia.ts index 5960283a5..a2d03f1bc 100644 --- a/core/prisma/exampleCommunitySeeds/arcadia.ts +++ b/core/prisma/exampleCommunitySeeds/arcadia.ts @@ -128,7 +128,7 @@ export const seedArcadia = async (communityId?: CommunitiesId) => { } return { - value: null, + value: "", alsoAsChild: true, pub, }; @@ -195,7 +195,7 @@ export const seedArcadia = async (communityId?: CommunitiesId) => { "Issue Number": { schemaName: CoreSchemaType.Number }, ISSN: { schemaName: CoreSchemaType.String }, Issues: { schemaName: CoreSchemaType.Null, relation: true }, - Articles: { schemaName: CoreSchemaType.Null, relation: true }, + Articles: { schemaName: CoreSchemaType.String, relation: true }, Journals: { schemaName: CoreSchemaType.Null, relation: true }, // site settings @@ -534,9 +534,9 @@ export const seedArcadia = async (communityId?: CommunitiesId) => { relatedPubs: { Articles: [ { - value: null, alsoAsChild: true, pub: { + value: "", id: articleId, pubType: "Journal Article", stage: "Articles", @@ -739,6 +739,7 @@ export const seedArcadia = async (communityId?: CommunitiesId) => { value: '"Edited"', fieldId: seed.pubFields.Articles.id, lastModifiedBy: createLastModifiedBy("system"), + rank: "0", }, { pubId: authorId as PubsId, @@ -746,6 +747,7 @@ export const seedArcadia = async (communityId?: CommunitiesId) => { relatedPubId: articleId2 as PubsId, fieldId: seed.pubFields.Articles.id, lastModifiedBy: createLastModifiedBy("system"), + rank: "1", }, ]) .execute(); diff --git a/core/prisma/migrations/20250213201642_add_mudder_ranks/migration.sql b/core/prisma/migrations/20250213201642_add_mudder_ranks/migration.sql new file mode 100644 index 000000000..505a4014a --- /dev/null +++ b/core/prisma/migrations/20250213201642_add_mudder_ranks/migration.sql @@ -0,0 +1,92 @@ +BEGIN; + CREATE TEMP TABLE "mudder_ranks" ( + index SERIAL PRIMARY KEY, + rank TEXT + ); + /* + * This temp table holds 200 mudder generated keys which we use to assign initial ranks to existing + * form elements and related pubs in the migration. + * Generated with: mudder.base62.mudder(200).map((rank) => `('${rank}')`).join(", ") + */ + + INSERT INTO "mudder_ranks"("index","rank") VALUES (0,'0J'); + INSERT INTO "mudder_ranks"("rank") + VALUES ('0c'), ('0v'), ('1'), ('1X'), ('1q'), ('2'), ('2S'), ('2m'), ('3'), ('3O'), ('3h'), + ('4'), ('4J'), ('4c'), ('4v'), ('5'), ('5Y'), ('5r'), ('6'), ('6T'), ('6m'), ('7'), ('7O'), ('7i'), + ('8'), ('8K'), ('8d'), ('8w'), ('9'), ('9Y'), ('9r'), ('A'), ('AU'), ('An'), ('B'), ('BP'), ('Bi'), + ('C'), ('CK'), ('Ce'), ('Cx'), ('D'), ('DZ'), ('Ds'), ('E'), ('EU'), ('En'), ('F'), ('FQ'), ('Fj'), + ('G'), ('GL'), ('Ge'), ('Gx'), ('H'), ('Ha'), ('Ht'), ('I'), ('IV'), ('Io'), ('J'), ('JQ'), ('Jj'), + ('K'), ('KM'), ('Kf'), ('Ky'), ('L'), ('La'), ('Lt'), ('M'), ('MW'), ('Mp'), ('N'), ('NR'), ('Nk'), + ('O'), ('OM'), ('Of'), ('Oz'), ('P'), ('Pb'), ('Pu'), ('Q'), ('QW'), ('Qp'), ('R'), ('RS'), ('Rl'), + ('S'), ('SN'), ('Sg'), ('Sz'), ('T'), ('Tb'), ('Tv'), ('U'), ('UX'), ('Uq'), ('V'), ('VS'), ('Vl'), + ('W'), ('WO'), ('Wh'), ('X'), ('XJ'), ('Xc'), ('Xv'), ('Y'), ('YX'), ('Yr'), ('Z'), ('ZT'), ('Zm'), + ('a'), ('aO'), ('ah'), ('b'), ('bK'), ('bd'), ('bw'), ('c'), ('cY'), ('cr'), ('d'), ('dT'), ('dn'), + ('e'), ('eP'), ('ei'), ('f'), ('fK'), ('fd'), ('fw'), ('g'), ('gZ'), ('gs'), ('h'), ('hU'), ('hn'), + ('i'), ('iP'), ('ij'), ('j'), ('jL'), ('je'), ('jx'), ('k'), ('kZ'), ('ks'), ('l'), ('lV'), ('lo'), + ('m'), ('mQ'), ('mj'), ('n'), ('nL'), ('nf'), ('ny'), ('o'), ('oa'), ('ot'), ('p'), ('pV'), ('po'), + ('q'), ('qR'), ('qk'), ('r'), ('rM'), ('rf'), ('ry'), ('s'), ('sb'), ('su'), ('t'), ('tW'), ('tp'), + ('u'), ('uR'), ('uk'), ('v'), ('vN'), ('vg'), ('vz'), ('w'), ('wb'), ('wu'), ('x'), ('xX'), ('xq'), + ('y'), ('yS'), ('yl'), ('z'), ('zN'), ('zg'); + + -- Add rank to form_elements + -- Uses "C" collation order to ensure uppercase letters sort before lowercase to match mudder + ALTER TABLE "form_elements" ADD COLUMN "rank" TEXT COLLATE "C"; + + -- Set initial rank values for form elements based on 'order' + UPDATE "form_elements" + SET "rank" = "mudder_ranks"."rank" + FROM "mudder_ranks" + WHERE + "form_elements"."order" IS NOT NULL + AND "form_elements"."order" = "mudder_ranks"."index"; + + -- Set a rank for submit buttons which were previously unordered, near the end (zzzz...) + WITH "buttons" AS ( + -- Assign a somewhat arbitrary numeric order to the buttons + -- Since some have order = null, the non-null ordered ones will come first + SELECT "id", "formId", ROW_NUMBER() OVER (PARTITION BY "formId" ORDER BY "order") AS "index" + FROM "form_elements" + WHERE "form_elements"."type" = 'button'::"ElementType" + ) + UPDATE "form_elements" + SET "rank" = REPEAT('z'::text, "buttons"."index"::int + 10) + FROM "buttons" + WHERE "form_elements"."type" = 'button'::"ElementType" + AND "form_elements"."id" = "buttons"."id"; + + -- Now that there are ranks for all elements, add a not null constraint + ALTER TABLE "form_elements" ALTER COLUMN "rank" SET NOT NULL; + +-- Add rank to pub_values +-- This one is nullable for now + ALTER TABLE "pub_values" ADD COLUMN "rank" TEXT COLLATE "C"; + +-- Get all pub_values with multiple related pubs, then assign initial ranks ordered by updatedAt + WITH "related_pubs" AS ( + SELECT "pubId", "fieldId" + FROM "pub_values" + WHERE "relatedPubId" IS NOT NULL + GROUP BY "pubId", "fieldId" + HAVING COUNT("pubId") > 1 + ), + "row_numbers" AS ( + SELECT + "pub_values"."id", + ROW_NUMBER() OVER ( + PARTITION BY "pub_values"."pubId", "pub_values"."fieldId" + ORDER BY "pub_values"."updatedAt" + ) as "r" + FROM "pub_values" + JOIN "related_pubs" ON + "related_pubs"."pubId" = "pub_values"."pubId" + AND "related_pubs"."fieldId" = "pub_values"."fieldId" + ) + UPDATE "pub_values" + SET + "rank" = "mudder_ranks"."rank", + "lastModifiedBy" = 'system|' || FLOOR(EXTRACT(EPOCH FROM CURRENT_TIMESTAMP) * 1000) + FROM "mudder_ranks", "row_numbers" + WHERE + "mudder_ranks"."index" = "row_numbers"."r" + AND "row_numbers"."id" = "pub_values"."id"; +COMMIT; \ No newline at end of file diff --git a/core/prisma/schema/schema.dbml b/core/prisma/schema/schema.dbml index a649027fd..d42a960cf 100644 --- a/core/prisma/schema/schema.dbml +++ b/core/prisma/schema/schema.dbml @@ -149,6 +149,7 @@ Table pub_values { updatedAt DateTime [default: `now()`, not null] relatedPub pubs relatedPubId String + rank String } Table pub_types { @@ -384,6 +385,7 @@ Table form_elements { field pub_fields formId String [not null] order Int + rank String [not null] label String element StructuralFormElement component InputComponent diff --git a/core/prisma/schema/schema.prisma b/core/prisma/schema/schema.prisma index 55db04e39..4254e032c 100644 --- a/core/prisma/schema/schema.prisma +++ b/core/prisma/schema/schema.prisma @@ -207,6 +207,10 @@ model PubValue { relatedPub Pub? @relation(fields: [relatedPubId], references: [id], onDelete: Cascade, name: "related_pub") relatedPubId String? + // Rank is only used for ordering multiple related pubs for a single field, not for ordering + // values within a pub + rank String? // Uses "C" collation + @@map(name: "pub_values") } @@ -532,6 +536,7 @@ model FormElement { field PubField? @relation(fields: [fieldId], references: [id], onDelete: Cascade) formId String order Int? + rank String // Uses "C" collation // label is only used by elements with type: ElementType.button. Pubfield inputs put everything in config label String? element StructuralFormElement? diff --git a/core/prisma/seed/seedCommunity.db.test.ts b/core/prisma/seed/seedCommunity.db.test.ts index 8ac140e2a..2232ab57c 100644 --- a/core/prisma/seed/seedCommunity.db.test.ts +++ b/core/prisma/seed/seedCommunity.db.test.ts @@ -289,7 +289,7 @@ describe("seedCommunity", () => { element: "p", fieldId: null, label: null, - order: 0, + rank: "F", required: null, stageId: null, type: "structural", @@ -302,7 +302,7 @@ describe("seedCommunity", () => { content: null, element: null, label: null, - order: 1, + rank: "U", required: null, stageId: null, type: "pubfield", @@ -314,7 +314,7 @@ describe("seedCommunity", () => { element: null, fieldId: null, label: "Submit", - order: 2, + rank: "k", required: null, stageId: null, type: "button", diff --git a/core/prisma/seed/seedCommunity.ts b/core/prisma/seed/seedCommunity.ts index c9eb76024..e8c8619cf 100644 --- a/core/prisma/seed/seedCommunity.ts +++ b/core/prisma/seed/seedCommunity.ts @@ -7,6 +7,7 @@ import type { import { faker } from "@faker-js/faker"; import { jsonArrayFrom } from "kysely/helpers/postgres"; +import mudder from "mudder"; import type { ProcessedPub } from "contracts"; import type { @@ -433,7 +434,7 @@ type PubFieldsByName = { }; type PubTypesByName = { - [K in keyof PT]: Omit & { name: K } & { pubFields: PubFieldsByName }; + [K in keyof PT]: Omit & { name: K } & { fields: PubFieldsByName }; }; type UsersBySlug = { @@ -796,25 +797,12 @@ export async function seedCommunity< .execute() : []; - await Promise.all( - createdPubTypes.map((type) => - insertForm( - type.id, - `${type.name} Editor (Default)`, - `${slugifyString(type.name)}-default-editor`, - communityId, - true, - trx - ).execute() - ) - ); - const pubTypesWithPubFieldsByName = Object.fromEntries( createdPubTypes.map((pubType) => [ pubType.name, { ...pubType, - pubFields: Object.fromEntries( + fields: Object.fromEntries( createdPubFieldToPubTypes .filter((pubFieldToPubType) => pubFieldToPubType.B === pubType.id) .map((pubFieldToPubType) => { @@ -832,6 +820,19 @@ export async function seedCommunity< ]) ) as PubTypesByName; + await Promise.all( + Object.values(pubTypesWithPubFieldsByName).map((pubType) => + insertForm( + { ...pubType, fields: Object.values(pubType.fields) }, + `${pubType.name} Editor (Default)`, + `${slugifyString(pubType.name)}-default-editor`, + communityId, + true, + trx + ).execute() + ) + ); + const userValues = await Promise.all( Object.entries(props.users ?? {}).map(async ([slug, userInfo]) => ({ slug: options?.randomSlug === false ? slug : `${slug}-${new Date().toISOString()}`, @@ -1054,8 +1055,13 @@ export async function seedCommunity< db .insertInto("form_elements") .values((eb) => - formList.flatMap(([formTitle, formInput], idx) => - formInput.elements.map((elementInput, elementIndex) => ({ + formList.flatMap(([formTitle, formInput], idx) => { + const ranks = mudder.base62.mudder( + "", + "", + formInput.elements.length + ); + return formInput.elements.map((elementInput, elementIndex) => ({ formId: eb .selectFrom("form") .select("form.id") @@ -1071,10 +1077,10 @@ export async function seedCommunity< label: elementInput.label, element: elementInput.element, component: elementInput.component, - order: elementIndex, + rank: ranks[elementIndex], config: elementInput.config, - })) - ) + })); + }) ) .returningAll() ) diff --git a/packages/contracts/src/resources/site.ts b/packages/contracts/src/resources/site.ts index bf94bdb84..3c3daefa8 100644 --- a/packages/contracts/src/resources/site.ts +++ b/packages/contracts/src/resources/site.ts @@ -1,14 +1,11 @@ -import type { AppRouteResponse, ContractOtherResponse, Opaque } from "@ts-rest/core"; - import { initContract } from "@ts-rest/core"; -import { z, ZodNull } from "zod"; +import { z } from "zod"; import type { CommunitiesId, CoreSchemaType, MemberRole, PubFields, - PubFieldSchemaId, PubFieldsId, PubsId, PubTypes, @@ -21,7 +18,6 @@ import type { } from "db/public"; import { communitiesIdSchema, - communityMembershipsIdSchema, communityMembershipsSchema, coreSchemaTypeSchema, memberRoleSchema, diff --git a/packages/db/src/public/FormElements.ts b/packages/db/src/public/FormElements.ts index e0859337a..af7a3d8e1 100644 --- a/packages/db/src/public/FormElements.ts +++ b/packages/db/src/public/FormElements.ts @@ -54,6 +54,8 @@ export interface FormElementsTable { createdAt: ColumnType; updatedAt: ColumnType; + + rank: ColumnType; } export type FormElements = Selectable; @@ -79,6 +81,7 @@ export const formElementsSchema = z.object({ config: z.unknown().nullable(), createdAt: z.date(), updatedAt: z.date(), + rank: z.string(), }); export const formElementsInitializerSchema = z.object({ @@ -96,6 +99,7 @@ export const formElementsInitializerSchema = z.object({ config: z.unknown().optional().nullable(), createdAt: z.date().optional(), updatedAt: z.date().optional(), + rank: z.string(), }); export const formElementsMutatorSchema = z.object({ @@ -113,4 +117,5 @@ export const formElementsMutatorSchema = z.object({ config: z.unknown().optional().nullable(), createdAt: z.date().optional(), updatedAt: z.date().optional(), + rank: z.string().optional(), }); diff --git a/packages/db/src/public/PubValues.ts b/packages/db/src/public/PubValues.ts index 77fb38a05..853e765f3 100644 --- a/packages/db/src/public/PubValues.ts +++ b/packages/db/src/public/PubValues.ts @@ -32,6 +32,8 @@ export interface PubValuesTable { relatedPubId: ColumnType; lastModifiedBy: ColumnType; + + rank: ColumnType; } export type PubValues = Selectable; @@ -51,6 +53,7 @@ export const pubValuesSchema = z.object({ updatedAt: z.date(), relatedPubId: pubsIdSchema.nullable(), lastModifiedBy: modifiedByTypeSchema, + rank: z.string().nullable(), }); export const pubValuesInitializerSchema = z.object({ @@ -62,6 +65,7 @@ export const pubValuesInitializerSchema = z.object({ updatedAt: z.date().optional(), relatedPubId: pubsIdSchema.optional().nullable(), lastModifiedBy: modifiedByTypeSchema, + rank: z.string().optional().nullable(), }); export const pubValuesMutatorSchema = z.object({ @@ -73,4 +77,5 @@ export const pubValuesMutatorSchema = z.object({ updatedAt: z.date().optional(), relatedPubId: pubsIdSchema.optional().nullable(), lastModifiedBy: modifiedByTypeSchema.optional(), + rank: z.string().optional().nullable(), }); diff --git a/packages/db/src/table-names.ts b/packages/db/src/table-names.ts index 86242bf3d..f76be76e0 100644 --- a/packages/db/src/table-names.ts +++ b/packages/db/src/table-names.ts @@ -917,6 +917,14 @@ export const databaseTables = [ isAutoIncrementing: false, hasDefaultValue: true, }, + { + name: "rank", + dataType: "text", + dataTypeSchema: "pg_catalog", + isNullable: false, + isAutoIncrementing: false, + hasDefaultValue: false, + }, ], }, { @@ -1453,6 +1461,14 @@ export const databaseTables = [ hasDefaultValue: false, comment: "@type(LastModifiedBy, '../types', true, false, true)", }, + { + name: "rank", + dataType: "text", + dataTypeSchema: "pg_catalog", + isNullable: true, + isAutoIncrementing: false, + hasDefaultValue: false, + }, ], }, { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 731293dda..d7996c1ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,7 +38,7 @@ catalogs: version: 3.51.0 '@types/node': specifier: ^20 - version: 20.16.5 + version: 20.17.12 clsx: specifier: ^2.0.0 version: 2.1.1 @@ -56,7 +56,7 @@ catalogs: version: 15.1.4 postcss: specifier: ^8.4.27 - version: 8.4.47 + version: 8.4.49 prettier: specifier: ^3.4.2 version: 3.4.2 @@ -128,7 +128,7 @@ importers: version: link:config/prettier '@turbo/gen': specifier: ^2.1.1 - version: 2.1.1(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2) + version: 2.1.1(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2) concurrently: specifier: ^9.0.1 version: 9.0.1 @@ -183,7 +183,7 @@ importers: version: 6.10.0 '@types/node': specifier: 'catalog:' - version: 20.16.5 + version: 20.17.12 eslint: specifier: 'catalog:' version: 9.10.0(jiti@1.21.6) @@ -306,19 +306,19 @@ importers: version: 8.20.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@ts-rest/core': specifier: 'catalog:' - version: 3.51.0(@types/node@20.16.5)(zod@3.23.8) + version: 3.51.0(@types/node@20.17.12)(zod@3.23.8) '@ts-rest/next': specifier: 'catalog:' - version: 3.51.0(@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8))(next@15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(zod@3.23.8) + version: 3.51.0(@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8))(next@15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(zod@3.23.8) '@ts-rest/open-api': specifier: 'catalog:' - version: 3.51.0(@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8))(zod@3.23.8) + version: 3.51.0(@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8))(zod@3.23.8) '@ts-rest/react-query': specifier: 'catalog:' - version: 3.51.0(@tanstack/react-query@5.61.0(react@19.0.0))(@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8))(react@19.0.0)(zod@3.23.8) + version: 3.51.0(@tanstack/react-query@5.61.0(react@19.0.0))(@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8))(react@19.0.0)(zod@3.23.8) '@ts-rest/serverless': specifier: 'catalog:' - version: 3.51.0(@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8))(@types/aws-lambda@8.10.145)(next@15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(zod@3.23.8) + version: 3.51.0(@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8))(@types/aws-lambda@8.10.145)(next@15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(zod@3.23.8) '@types/hast': specifier: ^3.0.4 version: 3.0.4 @@ -380,8 +380,8 @@ importers: specifier: 'catalog:' version: 0.16.18 kysely: - specifier: ^0.27.3 - version: 0.27.4 + specifier: ^0.27.5 + version: 0.27.5 lodash.partition: specifier: ^4.6.0 version: 4.6.0 @@ -397,6 +397,9 @@ importers: micromark-extension-directive: specifier: ^3.0.0 version: 3.0.1 + mudder: + specifier: ^2.1.1 + version: 2.1.1 next: specifier: 'catalog:' version: 15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -526,7 +529,7 @@ importers: version: link:../config/prettier '@tailwindcss/forms': specifier: ^0.5.6 - version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2))) + version: 0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2))) '@tanstack/react-query-devtools': specifier: ^5.61.3 version: 5.61.3(@tanstack/react-query@5.61.0(react@19.0.0))(react@19.0.0) @@ -551,9 +554,12 @@ importers: '@types/mdast': specifier: ^4.0.4 version: 4.0.4 + '@types/mudder': + specifier: ^2.1.3 + version: 2.1.3 '@types/node': specifier: 'catalog:' - version: 20.16.5 + version: 20.17.12 '@types/nodemailer': specifier: ^6.4.9 version: 6.4.15 @@ -574,10 +580,10 @@ importers: version: 9.0.8 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.3.1(vite@5.4.3(@types/node@20.16.5)(terser@5.37.0)) + version: 4.3.1(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0)) autoprefixer: specifier: ^10.4.14 - version: 10.4.20(postcss@8.4.47) + version: 10.4.20(postcss@8.4.49) csv-parse: specifier: ^5.5.2 version: 5.5.6 @@ -598,7 +604,7 @@ importers: version: 0.4.0 postcss: specifier: 'catalog:' - version: 8.4.47 + version: 8.4.49 prisma: specifier: ^5.2.0 version: 5.19.1 @@ -607,10 +613,10 @@ importers: version: 0.12.0 tailwindcss: specifier: 'catalog:' - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2)) ts-node: specifier: ^10.9.1 - version: 10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2) + version: 10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2) tsconfig: specifier: workspace:* version: link:../config/tsconfig @@ -622,10 +628,10 @@ importers: version: 5.7.2 vite-tsconfig-paths: specifier: ^5.0.1 - version: 5.0.1(typescript@5.7.2)(vite@5.4.3(@types/node@20.16.5)(terser@5.37.0)) + version: 5.0.1(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0)) vitest: specifier: 'catalog:' - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.16.5)(jsdom@25.0.1)(terser@5.37.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.12)(jsdom@25.0.1)(terser@5.39.0) yargs: specifier: ^17.7.2 version: 17.7.2 @@ -637,10 +643,10 @@ importers: version: 0.6.1 '@opentelemetry/auto-instrumentations-node': specifier: 'catalog:' - version: 0.53.0(@opentelemetry/api@1.7.0) + version: 0.53.0(@opentelemetry/api@1.9.0) '@ts-rest/core': specifier: 'catalog:' - version: 3.51.0(@types/node@20.16.5)(zod@3.23.8) + version: 3.51.0(@types/node@20.17.12)(zod@3.23.8) contracts: specifier: workspace:* version: link:../packages/contracts @@ -665,7 +671,7 @@ importers: version: link:../config/prettier '@types/node': specifier: 'catalog:' - version: 20.16.5 + version: 20.17.12 dotenv-cli: specifier: ^7.2.1 version: 7.4.2 @@ -879,7 +885,7 @@ importers: version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2) '@storybook/react-vite': specifier: ^8.4.7 - version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.21.2)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0))(webpack-sources@3.2.3) + version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.21.2)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0))(webpack-sources@3.2.3) '@storybook/test': specifier: ^8.4.7 version: 8.4.7(storybook@8.4.7(prettier@3.4.2)) @@ -909,7 +915,7 @@ importers: version: 2.0.0-alpha.27(@babel/runtime@7.25.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.3.1(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0)) + version: 4.3.1(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0)) prosemirror-dev-tools: specifier: ^4.1.0 version: 4.1.0(@babel/core@7.25.2)(@babel/template@7.25.0)(@types/react@19.0.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -927,13 +933,13 @@ importers: version: 5.7.2 vitest: specifier: 'catalog:' - version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.12)(jsdom@25.0.1)(terser@5.37.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@20.17.12)(jsdom@25.0.1)(terser@5.39.0) packages/contracts: dependencies: '@types/node': specifier: 'catalog:' - version: 20.16.5 + version: 20.17.12 db: specifier: workspace:* version: link:../db @@ -946,7 +952,7 @@ importers: version: link:../../config/prettier '@ts-rest/core': specifier: 'catalog:' - version: 3.51.0(@types/node@20.16.5)(zod@3.23.8) + version: 3.51.0(@types/node@20.17.12)(zod@3.23.8) tsconfig: specifier: workspace:* version: link:../../config/tsconfig @@ -977,7 +983,7 @@ importers: version: link:../../config/prettier '@ts-rest/core': specifier: 'catalog:' - version: 3.51.0(@types/node@22.13.0)(zod@3.23.8) + version: 3.51.0(@types/node@22.13.5)(zod@3.23.8) '@types/pg': specifier: ^8.11.6 version: 8.11.8 @@ -1050,7 +1056,7 @@ importers: version: link:../../config/prettier '@types/node': specifier: 'catalog:' - version: 20.16.5 + version: 20.17.12 '@types/react': specifier: catalog:react19 version: 19.0.6 @@ -1069,7 +1075,7 @@ importers: version: link:../../config/prettier '@types/node': specifier: 'catalog:' - version: 20.16.5 + version: 20.17.12 tsconfig: specifier: workspace:* version: link:../../config/tsconfig @@ -1106,7 +1112,7 @@ importers: version: 5.7.2 vitest: specifier: 'catalog:' - version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.0)(jsdom@25.0.1)(terser@5.37.0) + version: 3.0.5(@types/debug@4.1.12)(@types/node@22.13.5)(jsdom@25.0.1)(terser@5.39.0) packages/ui: dependencies: @@ -1220,7 +1226,7 @@ importers: version: 1.1.1(@types/react-dom@19.0.3(@types/react@19.0.6))(@types/react@19.0.6)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@tailwindcss/typography': specifier: ^0.5.10 - version: 0.5.15(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2))) + version: 0.5.15(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2))) '@tanstack/react-table': specifier: ^8.20.6 version: 8.20.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -1283,7 +1289,7 @@ importers: version: 2.5.2 tailwindcss-animate: specifier: ^1.0.6 - version: 1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2))) utils: specifier: workspace:* version: link:../utils @@ -1302,13 +1308,13 @@ importers: version: 9.10.0(jiti@1.21.6) postcss: specifier: 'catalog:' - version: 8.4.47 + version: 8.4.49 react: specifier: catalog:react19 version: 19.0.0 tailwindcss: specifier: 'catalog:' - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) tsconfig: specifier: workspace:* version: link:../../config/tsconfig @@ -1373,7 +1379,7 @@ importers: version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2) '@storybook/react-vite': specifier: ^8.4.7 - version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.21.2)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@5.4.3(@types/node@22.13.0)(terser@5.37.0))(webpack-sources@3.2.3) + version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.21.2)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@5.4.3(@types/node@22.13.5)(terser@5.39.0))(webpack-sources@3.2.3) '@storybook/test': specifier: ^8.4.7 version: 8.4.7(storybook@8.4.7(prettier@3.4.2)) @@ -1397,7 +1403,7 @@ importers: version: 8.4.7(prettier@3.4.2) tailwindcss: specifier: 'catalog:' - version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)) + version: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) tsconfig: specifier: workspace:* version: link:../config/tsconfig @@ -6447,17 +6453,17 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + '@types/mudder@2.1.3': + resolution: {integrity: sha512-t4Sacwmm/xj5Ml74q8cHhwTNJPL5I30hG5iqFrlpIOla1ygdDMdzaYZzQ0+OT56kHlP5Ar+G6XKLWxgNBjq+MQ==} + '@types/mysql@2.15.26': resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} - '@types/node@20.16.5': - resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} - '@types/node@20.17.12': resolution: {integrity: sha512-vo/wmBgMIiEA23A/knMfn/cf37VnuF52nZh5ZoW0GWt4e4sxNquibrMRJ7UQsA06+MBx9r/H1jsI9grYjQCQlw==} - '@types/node@22.13.0': - resolution: {integrity: sha512-ClIbNe36lawluuvq3+YYhnIN2CELi+6q8NpnM7PYp4hBn/TatfboPgVSm2rwKRfnV2M+Ty9GWDFI64KEe+kysA==} + '@types/node@22.13.5': + resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} '@types/nodemailer@6.4.15': resolution: {integrity: sha512-0EBJxawVNjPkng1zm2vopRctuWVCxk34JcIlRuXSf54habUWdz1FB7wHDqOqvDa8Mtpt0Q3LTXQkAs2LNyK5jQ==} @@ -7146,6 +7152,9 @@ packages: caniuse-lite@1.0.30001696: resolution: {integrity: sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==} + caniuse-lite@1.0.30001700: + resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} + case-anything@2.1.13: resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} engines: {node: '>=12.13'} @@ -7729,8 +7738,8 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - electron-to-chromium@1.5.90: - resolution: {integrity: sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==} + electron-to-chromium@1.5.105: + resolution: {integrity: sha512-ccp7LocdXx3yBhwiG0qTQ7XFrK48Ua2pxIxBdJO8cbddp/MvbBtPFzvnTchtyHQTsgqqczO8cdmAIbpMa0u2+g==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -7749,8 +7758,8 @@ packages: resolution: {integrity: sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.18.0: - resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} enquirer@2.4.1: @@ -8981,6 +8990,7 @@ packages: resolution: {integrity: sha512-t0etAxTUk1w5MYdNOkZBZ8rvYYN5iL+2dHCCx/DpkFm/bW28M6y5nUS83D4XdZiHy35Fpaw6LBb+F88fHZnVCw==} engines: {node: '>=8.17.0'} hasBin: true + bundledDependencies: [] jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -9071,6 +9081,10 @@ packages: resolution: {integrity: sha512-dyNKv2KRvYOQPLCAOCjjQuCk4YFd33BvGdf/o5bC7FiW+BB6snA81Zt+2wT9QDFzKqxKa5rrOmvlK/anehCcgA==} engines: {node: '>=14.0.0'} + kysely@0.27.5: + resolution: {integrity: sha512-s7hZHcQeSNKpzCkHRm8yA+0JPLjncSWnjb+2TIElwS2JAqYr+Kv3Ess+9KFfJS0C1xcQ1i9NkNHpWwCYpHMWsA==} + engines: {node: '>=14.0.0'} + language-subtag-registry@0.3.23: resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} @@ -9497,6 +9511,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mudder@2.1.1: + resolution: {integrity: sha512-0/F//kjoRlefsazFcGxa7FAuwRNDoX3ALal7W9uOZgE9QKxKatFM1NKu3tkmxMAFvUXoIHN2b/PlIt5B+hJirQ==} + mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} @@ -10072,10 +10089,6 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.49: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} @@ -11166,6 +11179,11 @@ packages: engines: {node: '>=10'} hasBin: true + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} + engines: {node: '>=10'} + hasBin: true + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -14107,19 +14125,19 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0))': dependencies: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.7.2) - vite: 5.4.3(@types/node@20.17.12)(terser@5.37.0) + vite: 5.4.3(@types/node@20.17.12)(terser@5.39.0) optionalDependencies: typescript: 5.7.2 - '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.2)(vite@5.4.3(@types/node@22.13.0)(terser@5.37.0))': + '@joshwooding/vite-plugin-react-docgen-typescript@0.4.2(typescript@5.7.2)(vite@5.4.3(@types/node@22.13.5)(terser@5.39.0))': dependencies: magic-string: 0.27.0 react-docgen-typescript: 2.2.2(typescript@5.7.2) - vite: 5.4.3(@types/node@22.13.0)(terser@5.37.0) + vite: 5.4.3(@types/node@22.13.5)(terser@5.39.0) optionalDependencies: typescript: 5.7.2 @@ -14699,60 +14717,6 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@opentelemetry/auto-instrumentations-node@0.53.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-amqplib': 0.44.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-aws-lambda': 0.48.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-aws-sdk': 0.47.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-bunyan': 0.43.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-cassandra-driver': 0.43.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-connect': 0.41.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-cucumber': 0.11.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-dataloader': 0.14.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-dns': 0.41.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-express': 0.45.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-fastify': 0.42.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-fs': 0.17.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-generic-pool': 0.41.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-graphql': 0.45.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-grpc': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-hapi': 0.43.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-http': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-ioredis': 0.45.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-kafkajs': 0.5.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-knex': 0.42.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-koa': 0.45.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-lru-memoizer': 0.42.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-memcached': 0.41.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-mongodb': 0.49.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-mongoose': 0.44.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-mysql': 0.43.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-mysql2': 0.43.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-nestjs-core': 0.42.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-net': 0.41.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-pg': 0.48.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-pino': 0.44.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-redis': 0.44.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-redis-4': 0.44.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-restify': 0.43.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-router': 0.42.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-socket.io': 0.44.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-tedious': 0.16.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-undici': 0.8.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation-winston': 0.42.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resource-detector-alibaba-cloud': 0.29.7(@opentelemetry/api@1.7.0) - '@opentelemetry/resource-detector-aws': 1.10.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resource-detector-azure': 0.3.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resource-detector-container': 0.5.3(@opentelemetry/api@1.7.0) - '@opentelemetry/resource-detector-gcp': 0.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-node': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - encoding - - supports-color - '@opentelemetry/auto-instrumentations-node@0.53.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14811,10 +14775,6 @@ snapshots: dependencies: '@opentelemetry/api': 1.7.0 - '@opentelemetry/context-async-hooks@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/context-async-hooks@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14828,11 +14788,6 @@ snapshots: '@opentelemetry/api': 1.7.0 '@opentelemetry/semantic-conventions': 1.19.0 - '@opentelemetry/core@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/core@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14843,25 +14798,11 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/core@1.30.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/exporter-logs-otlp-grpc@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@grpc/grpc-js': 1.11.2 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-logs-otlp-grpc@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.11.2 @@ -14871,15 +14812,6 @@ snapshots: '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-http@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-logs-otlp-http@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14889,17 +14821,6 @@ snapshots: '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-logs-otlp-proto@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-logs-otlp-proto@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -14952,16 +14873,6 @@ snapshots: '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-grpc@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@grpc/grpc-js': 1.11.2 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-grpc-exporter-base': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-grpc@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.11.2 @@ -14981,15 +14892,6 @@ snapshots: '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-http@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-http@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15009,15 +14911,6 @@ snapshots: '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-proto@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-proto@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15035,14 +14928,6 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) '@opentelemetry/semantic-conventions': 1.19.0 - '@opentelemetry/exporter-zipkin@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/exporter-zipkin@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15051,15 +14936,6 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/instrumentation-amqplib@0.44.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-amqplib@0.44.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15078,15 +14954,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-aws-lambda@0.48.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@types/aws-lambda': 8.10.143 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-aws-lambda@0.48.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15096,16 +14963,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-aws-sdk@0.47.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagation-utils': 0.30.15(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-aws-sdk@0.47.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15116,15 +14973,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-bunyan@0.43.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@types/bunyan': 1.8.9 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-bunyan@0.43.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15134,14 +14982,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-cassandra-driver@0.43.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-cassandra-driver@0.43.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15150,16 +14990,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-connect@0.41.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@types/connect': 3.4.36 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-connect@0.41.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15180,14 +15010,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-cucumber@0.11.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-cucumber@0.11.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15196,13 +15018,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-dataloader@0.14.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-dataloader@0.14.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15217,13 +15032,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-dns@0.41.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-dns@0.41.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15231,15 +15039,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-express@0.45.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-express@0.45.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15258,15 +15057,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fastify@0.42.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-fastify@0.42.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15285,14 +15075,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-fs@0.17.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-fs@0.17.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15309,13 +15091,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-generic-pool@0.41.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-generic-pool@0.41.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15330,13 +15105,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-graphql@0.45.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-graphql@0.45.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15351,14 +15119,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-grpc@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.27.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-grpc@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15367,15 +15127,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-hapi@0.43.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-hapi@0.43.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15394,17 +15145,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-http@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.27.0 - forwarded-parse: 2.1.2 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-http@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15427,15 +15167,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-ioredis@0.45.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-ioredis@0.45.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15454,14 +15185,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-kafkajs@0.5.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-kafkajs@0.5.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15478,14 +15201,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-knex@0.42.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-knex@0.42.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15502,15 +15217,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-koa@0.45.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-koa@0.45.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15529,13 +15235,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-lru-memoizer@0.42.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-lru-memoizer@0.42.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15550,15 +15249,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-memcached@0.41.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@types/memcached': 2.2.10 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-memcached@0.41.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15568,14 +15258,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongodb@0.49.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-mongodb@0.49.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15592,15 +15274,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mongoose@0.44.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-mongoose@0.44.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15619,15 +15292,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql2@0.43.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-mysql2@0.43.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15646,15 +15310,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-mysql@0.43.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@types/mysql': 2.15.26 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-mysql@0.43.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15673,14 +15328,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-nestjs-core@0.42.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-nestjs-core@0.42.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15697,14 +15344,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-net@0.41.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-net@0.41.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15713,18 +15352,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-pg@0.48.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.7.0) - '@types/pg': 8.6.1 - '@types/pg-pool': 2.0.6 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-pg@0.48.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15749,33 +15376,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-pino@0.44.0(@opentelemetry/api@1.7.0)': + '@opentelemetry/instrumentation-pino@0.44.0(@opentelemetry/api@1.9.0)': dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-pino@0.44.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.0 '@opentelemetry/api-logs': 0.55.0 '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.9.0) transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-redis-4@0.44.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-redis-4@0.44.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15794,15 +15403,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-redis@0.44.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/redis-common': 0.36.2 - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-redis@0.44.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15812,15 +15412,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-restify@0.43.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-restify@0.43.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15830,14 +15421,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-router@0.42.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-router@0.42.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15846,14 +15429,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-socket.io@0.44.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-socket.io@0.44.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15862,15 +15437,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-tedious@0.16.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@types/tedious': 4.0.14 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-tedious@0.16.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15889,14 +15455,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-undici@0.8.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-undici@0.8.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15913,14 +15471,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation-winston@0.42.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation-winston@0.42.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15952,18 +15502,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/instrumentation@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@types/shimmer': 1.2.0 - import-in-the-middle: 1.12.0 - require-in-the-middle: 7.4.0 - semver: 7.6.3 - shimmer: 1.2.1 - transitivePeerDependencies: - - supports-color - '@opentelemetry/instrumentation@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -15993,12 +15531,6 @@ snapshots: '@opentelemetry/api': 1.7.0 '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-exporter-base@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-exporter-base@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16013,14 +15545,6 @@ snapshots: '@opentelemetry/otlp-exporter-base': 0.46.0(@opentelemetry/api@1.7.0) protobufjs: 7.4.0 - '@opentelemetry/otlp-grpc-exporter-base@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@grpc/grpc-js': 1.11.2 - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-exporter-base': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-grpc-exporter-base@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@grpc/grpc-js': 1.11.2 @@ -16046,17 +15570,6 @@ snapshots: '@opentelemetry/sdk-metrics': 1.19.0(@opentelemetry/api@1.7.0) '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) - '@opentelemetry/otlp-transformer@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-metrics': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.7.0) - protobufjs: 7.4.0 - '@opentelemetry/otlp-transformer@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16068,10 +15581,6 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.9.0) protobufjs: 7.4.0 - '@opentelemetry/propagation-utils@0.30.15(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/propagation-utils@0.30.15(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16081,11 +15590,6 @@ snapshots: '@opentelemetry/api': 1.7.0 '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagator-b3@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagator-b3@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16096,11 +15600,6 @@ snapshots: '@opentelemetry/api': 1.7.0 '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagator-jaeger@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagator-jaeger@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16108,13 +15607,6 @@ snapshots: '@opentelemetry/redis-common@0.36.2': {} - '@opentelemetry/resource-detector-alibaba-cloud@0.29.7(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-alibaba-cloud@0.29.7(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16122,13 +15614,6 @@ snapshots: '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-aws@1.10.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-aws@1.10.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16136,13 +15621,6 @@ snapshots: '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-azure@0.3.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-azure@0.3.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16150,13 +15628,6 @@ snapshots: '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-container@0.5.3(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-container@0.5.3(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16164,17 +15635,6 @@ snapshots: '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resource-detector-gcp@0.30.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - gcp-metadata: 6.1.0 - transitivePeerDependencies: - - encoding - - supports-color - '@opentelemetry/resource-detector-gcp@0.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16192,24 +15652,12 @@ snapshots: '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) '@opentelemetry/semantic-conventions': 1.19.0 - '@opentelemetry/resources@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/resources@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/resources@1.30.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.28.0 - '@opentelemetry/resources@1.30.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16223,13 +15671,6 @@ snapshots: '@opentelemetry/core': 1.19.0(@opentelemetry/api@1.7.0) '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-logs@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-logs@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16244,12 +15685,6 @@ snapshots: '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) lodash.merge: 4.6.2 - '@opentelemetry/sdk-metrics@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-metrics@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16275,28 +15710,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@opentelemetry/sdk-node@0.55.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/api-logs': 0.55.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-logs-otlp-grpc': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-logs-otlp-http': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-logs-otlp-proto': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-grpc': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-http': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-trace-otlp-proto': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/exporter-zipkin': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/instrumentation': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-logs': 0.55.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-metrics': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-node': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.27.0 - transitivePeerDependencies: - - supports-color - '@opentelemetry/sdk-node@0.55.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16326,13 +15739,6 @@ snapshots: '@opentelemetry/resources': 1.19.0(@opentelemetry/api@1.7.0) '@opentelemetry/semantic-conventions': 1.19.0 - '@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/resources': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/semantic-conventions': 1.27.0 - '@opentelemetry/sdk-trace-base@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16357,16 +15763,6 @@ snapshots: '@opentelemetry/sdk-trace-base': 1.19.0(@opentelemetry/api@1.7.0) semver: 7.6.3 - '@opentelemetry/sdk-trace-node@1.28.0(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/context-async-hooks': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/core': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagator-b3': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/propagator-jaeger': 1.28.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sdk-trace-base': 1.28.0(@opentelemetry/api@1.7.0) - semver: 7.6.3 - '@opentelemetry/sdk-trace-node@1.28.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -16383,11 +15779,6 @@ snapshots: '@opentelemetry/semantic-conventions@1.28.0': {} - '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.7.0)': - dependencies: - '@opentelemetry/api': 1.7.0 - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.7.0) - '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 @@ -18291,23 +17682,23 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@storybook/builder-vite@8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0))(webpack-sources@3.2.3)': + '@storybook/builder-vite@8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0))(webpack-sources@3.2.3)': dependencies: '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.4.2))(webpack-sources@3.2.3) browser-assert: 1.2.1 storybook: 8.4.7(prettier@3.4.2) ts-dedent: 2.2.0 - vite: 5.4.3(@types/node@20.17.12)(terser@5.37.0) + vite: 5.4.3(@types/node@20.17.12)(terser@5.39.0) transitivePeerDependencies: - webpack-sources - '@storybook/builder-vite@8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.3(@types/node@22.13.0)(terser@5.37.0))(webpack-sources@3.2.3)': + '@storybook/builder-vite@8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.3(@types/node@22.13.5)(terser@5.39.0))(webpack-sources@3.2.3)': dependencies: '@storybook/csf-plugin': 8.4.7(storybook@8.4.7(prettier@3.4.2))(webpack-sources@3.2.3) browser-assert: 1.2.1 storybook: 8.4.7(prettier@3.4.2) ts-dedent: 2.2.0 - vite: 5.4.3(@types/node@22.13.0)(terser@5.37.0) + vite: 5.4.3(@types/node@22.13.5)(terser@5.39.0) transitivePeerDependencies: - webpack-sources @@ -18384,11 +17775,11 @@ snapshots: react-dom: 19.0.0(react@19.0.0) storybook: 8.4.7(prettier@3.4.2) - '@storybook/react-vite@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.21.2)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0))(webpack-sources@3.2.3)': + '@storybook/react-vite@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.21.2)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0))(webpack-sources@3.2.3)': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0)) '@rollup/pluginutils': 5.1.0(rollup@4.21.2) - '@storybook/builder-vite': 8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0))(webpack-sources@3.2.3) + '@storybook/builder-vite': 8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0))(webpack-sources@3.2.3) '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2) find-up: 5.0.0 magic-string: 0.30.17 @@ -18398,7 +17789,7 @@ snapshots: resolve: 1.22.8 storybook: 8.4.7(prettier@3.4.2) tsconfig-paths: 4.2.0 - vite: 5.4.3(@types/node@20.17.12)(terser@5.37.0) + vite: 5.4.3(@types/node@20.17.12)(terser@5.39.0) transitivePeerDependencies: - '@storybook/test' - rollup @@ -18406,11 +17797,11 @@ snapshots: - typescript - webpack-sources - '@storybook/react-vite@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.21.2)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@5.4.3(@types/node@22.13.0)(terser@5.37.0))(webpack-sources@3.2.3)': + '@storybook/react-vite@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(rollup@4.21.2)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2)(vite@5.4.3(@types/node@22.13.5)(terser@5.39.0))(webpack-sources@3.2.3)': dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@5.4.3(@types/node@22.13.0)(terser@5.37.0)) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.4.2(typescript@5.7.2)(vite@5.4.3(@types/node@22.13.5)(terser@5.39.0)) '@rollup/pluginutils': 5.1.0(rollup@4.21.2) - '@storybook/builder-vite': 8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.3(@types/node@22.13.0)(terser@5.37.0))(webpack-sources@3.2.3) + '@storybook/builder-vite': 8.4.7(storybook@8.4.7(prettier@3.4.2))(vite@5.4.3(@types/node@22.13.5)(terser@5.39.0))(webpack-sources@3.2.3) '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(prettier@3.4.2))(typescript@5.7.2) find-up: 5.0.0 magic-string: 0.30.17 @@ -18420,7 +17811,7 @@ snapshots: resolve: 1.22.8 storybook: 8.4.7(prettier@3.4.2) tsconfig-paths: 4.2.0 - vite: 5.4.3(@types/node@22.13.0)(terser@5.37.0) + vite: 5.4.3(@types/node@22.13.5)(terser@5.39.0) transitivePeerDependencies: - '@storybook/test' - rollup @@ -18535,11 +17926,6 @@ snapshots: optionalDependencies: typescript: 5.7.2 - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2)))': - dependencies: - mini-svg-data-uri: 1.4.4 - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2)) - '@tailwindcss/forms@0.5.9(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2)))': dependencies: mini-svg-data-uri: 1.4.4 @@ -18553,13 +17939,13 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2)) - '@tailwindcss/typography@0.5.15(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)))': + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)))': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)) + tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) '@tanstack/query-core@5.60.6': {} @@ -18633,41 +18019,41 @@ snapshots: '@transloadit/prettier-bytes@0.3.4': {} - '@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8)': + '@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8)': optionalDependencies: - '@types/node': 20.16.5 + '@types/node': 20.17.12 zod: 3.23.8 - '@ts-rest/core@3.51.0(@types/node@22.13.0)(zod@3.23.8)': + '@ts-rest/core@3.51.0(@types/node@22.13.5)(zod@3.23.8)': optionalDependencies: - '@types/node': 22.13.0 + '@types/node': 22.13.5 zod: 3.23.8 - '@ts-rest/next@3.51.0(@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8))(next@15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(zod@3.23.8)': + '@ts-rest/next@3.51.0(@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8))(next@15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(zod@3.23.8)': dependencies: - '@ts-rest/core': 3.51.0(@types/node@20.16.5)(zod@3.23.8) + '@ts-rest/core': 3.51.0(@types/node@20.17.12)(zod@3.23.8) next: 15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) optionalDependencies: zod: 3.23.8 - '@ts-rest/open-api@3.51.0(@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8))(zod@3.23.8)': + '@ts-rest/open-api@3.51.0(@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8))(zod@3.23.8)': dependencies: '@anatine/zod-openapi': 1.14.2(openapi3-ts@2.0.2)(zod@3.23.8) - '@ts-rest/core': 3.51.0(@types/node@20.16.5)(zod@3.23.8) + '@ts-rest/core': 3.51.0(@types/node@20.17.12)(zod@3.23.8) openapi3-ts: 2.0.2 zod: 3.23.8 - '@ts-rest/react-query@3.51.0(@tanstack/react-query@5.61.0(react@19.0.0))(@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8))(react@19.0.0)(zod@3.23.8)': + '@ts-rest/react-query@3.51.0(@tanstack/react-query@5.61.0(react@19.0.0))(@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8))(react@19.0.0)(zod@3.23.8)': dependencies: '@tanstack/react-query': 5.61.0(react@19.0.0) - '@ts-rest/core': 3.51.0(@types/node@20.16.5)(zod@3.23.8) + '@ts-rest/core': 3.51.0(@types/node@20.17.12)(zod@3.23.8) react: 19.0.0 optionalDependencies: zod: 3.23.8 - '@ts-rest/serverless@3.51.0(@ts-rest/core@3.51.0(@types/node@20.16.5)(zod@3.23.8))(@types/aws-lambda@8.10.145)(next@15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(zod@3.23.8)': + '@ts-rest/serverless@3.51.0(@ts-rest/core@3.51.0(@types/node@20.17.12)(zod@3.23.8))(@types/aws-lambda@8.10.145)(next@15.1.4(@babel/core@7.25.2)(@opentelemetry/api@1.9.0)(@playwright/test@1.48.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(zod@3.23.8)': dependencies: - '@ts-rest/core': 3.51.0(@types/node@20.16.5)(zod@3.23.8) + '@ts-rest/core': 3.51.0(@types/node@20.17.12)(zod@3.23.8) itty-router: 5.0.18 optionalDependencies: '@types/aws-lambda': 8.10.145 @@ -18682,7 +18068,7 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@turbo/gen@2.1.1(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)': + '@turbo/gen@2.1.1(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)': dependencies: '@turbo/workspaces': 2.1.1 commander: 10.0.1 @@ -18692,7 +18078,7 @@ snapshots: node-plop: 0.26.3 picocolors: 1.0.1 proxy-agent: 6.4.0 - ts-node: 10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2) update-check: 1.5.4 validate-npm-package-name: 5.0.1 transitivePeerDependencies: @@ -18971,19 +18357,17 @@ snapshots: '@types/ms@0.7.34': {} + '@types/mudder@2.1.3': {} + '@types/mysql@2.15.26': dependencies: '@types/node': 20.17.12 - '@types/node@20.16.5': - dependencies: - undici-types: 6.19.8 - '@types/node@20.17.12': dependencies: undici-types: 6.19.8 - '@types/node@22.13.0': + '@types/node@22.13.5': dependencies: undici-types: 6.20.0 @@ -19253,25 +18637,14 @@ snapshots: lodash: 4.17.21 preact: 10.23.2 - '@vitejs/plugin-react@4.3.1(vite@5.4.3(@types/node@20.16.5)(terser@5.37.0))': + '@vitejs/plugin-react@4.3.1(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0))': dependencies: '@babel/core': 7.25.2 '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.3(@types/node@20.16.5)(terser@5.37.0) - transitivePeerDependencies: - - supports-color - - '@vitejs/plugin-react@4.3.1(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0))': - dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.2 - vite: 5.4.3(@types/node@20.17.12)(terser@5.37.0) + vite: 5.4.3(@types/node@20.17.12)(terser@5.39.0) transitivePeerDependencies: - supports-color @@ -19289,29 +18662,21 @@ snapshots: chai: 5.1.2 tinyrainbow: 2.0.0 - '@vitest/mocker@3.0.5(vite@5.4.3(@types/node@20.16.5)(terser@5.37.0))': + '@vitest/mocker@3.0.5(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 5.4.3(@types/node@20.16.5)(terser@5.37.0) + vite: 5.4.3(@types/node@20.17.12)(terser@5.39.0) - '@vitest/mocker@3.0.5(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0))': + '@vitest/mocker@3.0.5(vite@5.4.3(@types/node@22.13.5)(terser@5.39.0))': dependencies: '@vitest/spy': 3.0.5 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 5.4.3(@types/node@20.17.12)(terser@5.37.0) - - '@vitest/mocker@3.0.5(vite@5.4.3(@types/node@22.13.0)(terser@5.37.0))': - dependencies: - '@vitest/spy': 3.0.5 - estree-walker: 3.0.3 - magic-string: 0.30.17 - optionalDependencies: - vite: 5.4.3(@types/node@22.13.0)(terser@5.37.0) + vite: 5.4.3(@types/node@22.13.5)(terser@5.39.0) '@vitest/pretty-format@2.0.5': dependencies: @@ -19687,16 +19052,6 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.20(postcss@8.4.47): - dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001696 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.1.1 - postcss: 8.4.47 - postcss-value-parser: 4.2.0 - autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.4 @@ -19800,8 +19155,8 @@ snapshots: browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001696 - electron-to-chromium: 1.5.90 + caniuse-lite: 1.0.30001700 + electron-to-chromium: 1.5.105 node-releases: 2.0.19 update-browserslist-db: 1.1.2(browserslist@4.24.4) @@ -19862,6 +19217,8 @@ snapshots: caniuse-lite@1.0.30001696: {} + caniuse-lite@1.0.30001700: {} + case-anything@2.1.13: {} ccount@2.0.1: {} @@ -20422,7 +19779,7 @@ snapshots: dependencies: safe-buffer: 5.2.1 - electron-to-chromium@1.5.90: {} + electron-to-chromium@1.5.105: {} emoji-regex@8.0.0: {} @@ -20451,7 +19808,7 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.18.0: + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -22156,6 +21513,8 @@ snapshots: kysely@0.27.4: {} + kysely@0.27.5: {} + language-subtag-registry@0.3.23: {} language-tags@1.0.9: @@ -22699,6 +22058,8 @@ snapshots: ms@2.1.3: {} + mudder@2.1.1: {} + mute-stream@0.0.8: {} mz@2.7.0: @@ -22765,7 +22126,7 @@ snapshots: '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 - caniuse-lite: 1.0.30001696 + caniuse-lite: 1.0.30001700 postcss: 8.4.31 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) @@ -23291,14 +22652,6 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2)): - dependencies: - lilconfig: 3.1.3 - yaml: 2.5.1 - optionalDependencies: - postcss: 8.4.49 - ts-node: 10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2) - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2)): dependencies: lilconfig: 3.1.3 @@ -23307,13 +22660,13 @@ snapshots: postcss: 8.4.49 ts-node: 10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2) - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)): dependencies: lilconfig: 3.1.3 yaml: 2.5.1 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2) postcss-nested@6.2.0(postcss@8.4.49): dependencies: @@ -23338,12 +22691,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.4.47: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.4.49: dependencies: nanoid: 3.3.7 @@ -24625,36 +23972,9 @@ snapshots: tailwind-merge@2.5.2: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2))): - dependencies: - tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)) - - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2)): + tailwindcss-animate@1.0.7(tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2))): dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.2 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.6 - lilconfig: 2.1.0 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.4.49 - postcss-import: 15.1.0(postcss@8.4.49) - postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2)) - postcss-nested: 6.2.0(postcss@8.4.49) - postcss-selector-parser: 6.1.2 - resolve: 1.22.8 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node + tailwindcss: 3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2)): dependencies: @@ -24683,7 +24003,7 @@ snapshots: transitivePeerDependencies: - ts-node - tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)): + tailwindcss@3.4.13(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -24702,7 +24022,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -24753,7 +24073,7 @@ snapshots: jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.37.0 + terser: 5.39.0 webpack: 5.94.0(@swc/core@1.7.24(@swc/helpers@0.5.15)) optionalDependencies: '@swc/core': 1.7.24(@swc/helpers@0.5.15) @@ -24765,6 +24085,13 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + terser@5.39.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + text-table@0.2.0: {} thenify-all@1.6.0: @@ -24867,26 +24194,6 @@ snapshots: ts-interface-checker@0.1.13: {} - ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.16.5)(typescript@5.7.2): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 20.16.5 - acorn: 8.14.0 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - typescript: 5.7.2 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - optionalDependencies: - '@swc/core': 1.7.24(@swc/helpers@0.5.15) - ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@20.17.12)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 @@ -24906,16 +24213,15 @@ snapshots: yn: 3.1.1 optionalDependencies: '@swc/core': 1.7.24(@swc/helpers@0.5.15) - optional: true - ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.0)(typescript@5.7.2): + ts-node@10.9.2(@swc/core@1.7.24(@swc/helpers@0.5.15))(@types/node@22.13.5)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.13.0 + '@types/node': 22.13.5 acorn: 8.14.0 acorn-walk: 8.3.4 arg: 4.1.3 @@ -25262,31 +24568,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.0.5(@types/node@20.16.5)(terser@5.37.0): - dependencies: - cac: 6.7.14 - debug: 4.4.0 - es-module-lexer: 1.6.0 - pathe: 2.0.2 - vite: 5.4.3(@types/node@20.16.5)(terser@5.37.0) - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - vite-node@3.0.5(@types/node@20.17.12)(terser@5.37.0): + vite-node@3.0.5(@types/node@20.17.12)(terser@5.39.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.2 - vite: 5.4.3(@types/node@20.17.12)(terser@5.37.0) + vite: 5.4.3(@types/node@20.17.12)(terser@5.39.0) transitivePeerDependencies: - '@types/node' - less @@ -25298,13 +24586,13 @@ snapshots: - supports-color - terser - vite-node@3.0.5(@types/node@22.13.0)(terser@5.37.0): + vite-node@3.0.5(@types/node@22.13.5)(terser@5.39.0): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.6.0 pathe: 2.0.2 - vite: 5.4.3(@types/node@22.13.0)(terser@5.37.0) + vite: 5.4.3(@types/node@22.13.5)(terser@5.39.0) transitivePeerDependencies: - '@types/node' - less @@ -25316,28 +24604,18 @@ snapshots: - supports-color - terser - vite-tsconfig-paths@5.0.1(typescript@5.7.2)(vite@5.4.3(@types/node@20.16.5)(terser@5.37.0)): + vite-tsconfig-paths@5.0.1(typescript@5.7.2)(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0)): dependencies: debug: 4.4.0 globrex: 0.1.2 tsconfck: 3.1.3(typescript@5.7.2) optionalDependencies: - vite: 5.4.3(@types/node@20.16.5)(terser@5.37.0) + vite: 5.4.3(@types/node@20.17.12)(terser@5.39.0) transitivePeerDependencies: - supports-color - typescript - vite@5.4.3(@types/node@20.16.5)(terser@5.37.0): - dependencies: - esbuild: 0.21.5 - postcss: 8.4.49 - rollup: 4.21.2 - optionalDependencies: - '@types/node': 20.16.5 - fsevents: 2.3.3 - terser: 5.37.0 - - vite@5.4.3(@types/node@20.17.12)(terser@5.37.0): + vite@5.4.3(@types/node@20.17.12)(terser@5.39.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 @@ -25345,59 +24623,22 @@ snapshots: optionalDependencies: '@types/node': 20.17.12 fsevents: 2.3.3 - terser: 5.37.0 + terser: 5.39.0 - vite@5.4.3(@types/node@22.13.0)(terser@5.37.0): + vite@5.4.3(@types/node@22.13.5)(terser@5.39.0): dependencies: esbuild: 0.21.5 postcss: 8.4.49 rollup: 4.21.2 optionalDependencies: - '@types/node': 22.13.0 + '@types/node': 22.13.5 fsevents: 2.3.3 - terser: 5.37.0 - - vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.16.5)(jsdom@25.0.1)(terser@5.37.0): - dependencies: - '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@5.4.3(@types/node@20.16.5)(terser@5.37.0)) - '@vitest/pretty-format': 3.0.5 - '@vitest/runner': 3.0.5 - '@vitest/snapshot': 3.0.5 - '@vitest/spy': 3.0.5 - '@vitest/utils': 3.0.5 - chai: 5.1.2 - debug: 4.4.0 - expect-type: 1.1.0 - magic-string: 0.30.17 - pathe: 2.0.2 - std-env: 3.8.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinypool: 1.0.2 - tinyrainbow: 2.0.0 - vite: 5.4.3(@types/node@20.16.5)(terser@5.37.0) - vite-node: 3.0.5(@types/node@20.16.5)(terser@5.37.0) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 20.16.5 - jsdom: 25.0.1 - transitivePeerDependencies: - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser + terser: 5.39.0 - vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.17.12)(jsdom@25.0.1)(terser@5.37.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@20.17.12)(jsdom@25.0.1)(terser@5.39.0): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@5.4.3(@types/node@20.17.12)(terser@5.37.0)) + '@vitest/mocker': 3.0.5(vite@5.4.3(@types/node@20.17.12)(terser@5.39.0)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -25413,8 +24654,8 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 5.4.3(@types/node@20.17.12)(terser@5.37.0) - vite-node: 3.0.5(@types/node@20.17.12)(terser@5.37.0) + vite: 5.4.3(@types/node@20.17.12)(terser@5.39.0) + vite-node: 3.0.5(@types/node@20.17.12)(terser@5.39.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 @@ -25431,10 +24672,10 @@ snapshots: - supports-color - terser - vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.0)(jsdom@25.0.1)(terser@5.37.0): + vitest@3.0.5(@types/debug@4.1.12)(@types/node@22.13.5)(jsdom@25.0.1)(terser@5.39.0): dependencies: '@vitest/expect': 3.0.5 - '@vitest/mocker': 3.0.5(vite@5.4.3(@types/node@22.13.0)(terser@5.37.0)) + '@vitest/mocker': 3.0.5(vite@5.4.3(@types/node@22.13.5)(terser@5.39.0)) '@vitest/pretty-format': 3.0.5 '@vitest/runner': 3.0.5 '@vitest/snapshot': 3.0.5 @@ -25450,12 +24691,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 5.4.3(@types/node@22.13.0)(terser@5.37.0) - vite-node: 3.0.5(@types/node@22.13.0)(terser@5.37.0) + vite: 5.4.3(@types/node@22.13.5)(terser@5.39.0) + vite-node: 3.0.5(@types/node@22.13.5)(terser@5.39.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.13.0 + '@types/node': 22.13.5 jsdom: 25.0.1 transitivePeerDependencies: - less @@ -25505,7 +24746,7 @@ snapshots: acorn-import-attributes: 1.9.5(acorn@8.14.0) browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.0 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0