- {dose.toFixed(0)}{" "}
+ {dose > 1
+ ? Math.round(
+ dose,
+ ).toLocaleString()
+ : dose > 0
+ ? dose
+ .toPrecision(2)
+ .toLocaleString()
+ : 0}{" "}
{description.unit}
diff --git a/fdm-app/app/components/blocks/organic-certification/schema.ts b/fdm-app/app/components/blocks/organic-certification/schema.ts
new file mode 100644
index 000000000..669f5a2d0
--- /dev/null
+++ b/fdm-app/app/components/blocks/organic-certification/schema.ts
@@ -0,0 +1,72 @@
+import { z } from "zod"
+
+/**
+ * Regular expression for validating EU TRACES document numbers for Organic Operator Certificates.
+ * Examples: NL-BIO-01.528-0002967.2025.001, NL-BIO-01.528-0005471.2025.001
+ *
+ * NOTE: This is duplicated from fdm-core/src/organic.ts because fdm-core is not fully client-side safe.
+ */
+const TRACES_REGEX = /^NL-BIO-\d{2}\.\d{3}-\d{7}\.\d{4}\.\d{3}$/
+
+/**
+ * Regular expression for validating SKAL numbers.
+ * Examples: 026281, 024295
+ *
+ * NOTE: This is duplicated from fdm-core/src/organic.ts because fdm-core is not fully client-side safe.
+ */
+const SKAL_REGEX = /^\d{6}$/
+
+// Client-side safe validation functions
+function isValidTracesNumber(tracesNumber: string): boolean {
+ return TRACES_REGEX.test(tracesNumber)
+}
+
+function isValidSkalNumber(skalNumber: string): boolean {
+ return SKAL_REGEX.test(skalNumber)
+}
+
+export const formSchema = z
+ .object({
+ b_organic_traces: z
+ .string()
+ .trim()
+ .optional()
+ .refine((val) => !val || isValidTracesNumber(val), {
+ message: "Ongeldig TRACES-nummer",
+ }),
+ b_organic_skal: z
+ .string()
+ .trim()
+ .optional()
+ .refine((val) => !val || isValidSkalNumber(val), {
+ message: "Ongeldig SKAL-nummer",
+ }),
+ b_organic_issued: z.coerce.date({
+ required_error: "Startdatum is verplicht",
+ invalid_type_error: "Ongeldige datum",
+ }),
+ b_organic_expires: z.coerce
+ .date({
+ invalid_type_error: "Ongeldige datum",
+ })
+ .optional(),
+ })
+ .refine(
+ (data) => {
+ if (data.b_organic_issued && data.b_organic_expires) {
+ return (
+ data.b_organic_issued.getTime() <
+ data.b_organic_expires.getTime()
+ )
+ }
+ return true
+ },
+ {
+ message: "Startdatum kan niet na einddatum liggen",
+ path: ["b_organic_issued"],
+ },
+ )
+ .refine((data) => !!(data.b_organic_traces || data.b_organic_skal), {
+ message: "Vul een TRACES- of SKAL-nummer in",
+ path: ["b_organic_traces"],
+ })
diff --git a/fdm-app/app/components/blocks/soil/form-upload.tsx b/fdm-app/app/components/blocks/soil/form-upload.tsx
index 2efbc980a..fc1f32374 100644
--- a/fdm-app/app/components/blocks/soil/form-upload.tsx
+++ b/fdm-app/app/components/blocks/soil/form-upload.tsx
@@ -82,17 +82,26 @@ export function SoilAnalysisUploadForm() {
}
}
- const handleDragOver = (e: React.DragEvent) => {
+ const handleDragOver = (e: React.DragEvent) => {
e.preventDefault() // Prevent default to allow drop
}
- const handleDrop = (e: React.DragEvent) => {
+ const handleDrop = (e: React.DragEvent) => {
e.preventDefault() // Prevent default file opening in browser
if (e.dataTransfer.files && e.dataTransfer.files.length > 0) {
const file = e.dataTransfer.files[0]
form.setValue("soilAnalysisFile", file, { shouldValidate: true })
setFileName(file.name)
setUploadStatus("idle") // Reset status when a new file is dropped
+
+ const fileInput = document.getElementById(
+ "file-upload",
+ ) as HTMLInputElement | null
+ if (fileInput) {
+ const container = new DataTransfer()
+ container.items.add(file)
+ fileInput.files = container.files
+ }
e.dataTransfer.clearData()
}
}
@@ -131,117 +140,107 @@ export function SoilAnalysisUploadForm() {
}) => (
Bodemanalyse
-
-
{
+ onChange(
+ event.target
+ .files?.[0],
+ )
+ handleFileChange(
+ event,
+ )
+ }}
+ ref={ref}
+ type="file"
+ placeholder=""
+ className="hidden"
+ accept=".pdf"
+ multiple={false}
+ required={true}
+ disabled={disabled}
+ id="file-upload"
+ />
+
+
+ {uploadStatus ===
+ "idle" && (
+ <>
+
+
+ {fileName
+ ? fileName
+ : "Klik om te uploaden of sleep een PDF bestand naar hier"}
+
+
+ PDF tot
+ 5MB
+
+ >
)}
- onDragOver={
- handleDragOver
- }
- onDrop={handleDrop}
- >
-
{
- onChange(
- event
- .target
- .files?.[0],
- )
- handleFileChange(
- event,
- )
- }}
- ref={ref}
- type="file"
- placeholder=""
- className="hidden"
- accept=".pdf"
- multiple={false}
- required={true}
- disabled={
- disabled
- }
- id="file-upload"
- />
-
- {uploadStatus ===
- "idle" && (
- <>
-
-
- {fileName
- ? fileName
- : "Klik om te uploaden of sleep een PDF bestand naar hier"}
-
-
- PDF
- tot
- 5MB
-
- >
- )}
- {uploadStatus ===
- "uploading" && (
- <>
-
-
- Uploading{" "}
- {
- fileName
- }
- ...
-
-
- >
- )}
+ {uploadStatus ===
+ "uploading" && (
+ <>
+
+
+ Uploading{" "}
+ {
+ fileName
+ }
+ ...
+
+
+ >
+ )}
- {uploadStatus ===
- "success" && (
- <>
-
-
- Uploaden
- succesvol!
-
- >
- )}
+ {uploadStatus ===
+ "success" && (
+ <>
+
+
+ Uploaden
+ succesvol!
+
+ >
+ )}
- {uploadStatus ===
- "error" && (
- <>
-
-
- Uploaden
- mislukt.
- Probeer
- het
- opnieuw.
-
- >
- )}
-
+ {uploadStatus ===
+ "error" && (
+ <>
+
+
+ Uploaden
+ mislukt.
+ Probeer
+ het
+ opnieuw.
+
+ >
+ )}
-
+
diff --git a/fdm-app/app/components/ui/empty.tsx b/fdm-app/app/components/ui/empty.tsx
new file mode 100644
index 000000000..66952242b
--- /dev/null
+++ b/fdm-app/app/components/ui/empty.tsx
@@ -0,0 +1,104 @@
+import { cva, type VariantProps } from "class-variance-authority"
+
+import { cn } from "~/lib/utils"
+
+function Empty({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function EmptyHeader({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+const emptyMediaVariants = cva(
+ "mb-2 flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
+ {
+ variants: {
+ variant: {
+ default: "bg-transparent",
+ icon: "bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+)
+
+function EmptyMedia({
+ className,
+ variant = "default",
+ ...props
+}: React.ComponentProps<"div"> & VariantProps
) {
+ return (
+
+ )
+}
+
+function EmptyTitle({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function EmptyDescription({ className, ...props }: React.ComponentProps<"p">) {
+ return (
+ a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",
+ className,
+ )}
+ {...props}
+ />
+ )
+}
+
+function EmptyContent({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+export {
+ Empty,
+ EmptyHeader,
+ EmptyTitle,
+ EmptyDescription,
+ EmptyContent,
+ EmptyMedia,
+}
diff --git a/fdm-app/app/components/ui/field.tsx b/fdm-app/app/components/ui/field.tsx
new file mode 100644
index 000000000..777c4feed
--- /dev/null
+++ b/fdm-app/app/components/ui/field.tsx
@@ -0,0 +1,241 @@
+import { cva, type VariantProps } from "class-variance-authority"
+import { useMemo } from "react"
+import { Label } from "~/components/ui/label"
+import { Separator } from "~/components/ui/separator"
+import { cn } from "~/lib/utils"
+
+function FieldSet({ className, ...props }: React.ComponentProps<"fieldset">) {
+ return (
+
[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
+ className,
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldLegend({
+ className,
+ variant = "legend",
+ ...props
+}: React.ComponentProps<"legend"> & { variant?: "legend" | "label" }) {
+ return (
+
+ )
+}
+
+function FieldGroup({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+ [data-slot=field-group]]:gap-4",
+ className,
+ )}
+ {...props}
+ />
+ )
+}
+
+const fieldVariants = cva(
+ "group/field data-[invalid=true]:text-destructive flex w-full gap-3",
+ {
+ variants: {
+ orientation: {
+ vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
+ horizontal: [
+ "flex-row items-center",
+ "[&>[data-slot=field-label]]:flex-auto",
+ "has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start",
+ ],
+ responsive: [
+ "@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto",
+ "@md/field-group:[&>[data-slot=field-label]]:flex-auto",
+ "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
+ ],
+ },
+ },
+ defaultVariants: {
+ orientation: "vertical",
+ },
+ },
+)
+
+function Field({
+ className,
+ orientation = "vertical",
+ ...props
+}: React.ComponentProps<"div"> & VariantProps
) {
+ return (
+
+ )
+}
+
+function FieldContent({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function FieldLabel({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+ [data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4",
+ "has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10",
+ className,
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldTitle({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function FieldDescription({ className, ...props }: React.ComponentProps<"p">) {
+ return (
+ a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
+ className,
+ )}
+ {...props}
+ />
+ )
+}
+
+function FieldSeparator({
+ children,
+ className,
+ ...props
+}: React.ComponentProps<"div"> & {
+ children?: React.ReactNode
+}) {
+ return (
+
+
+ {children && (
+
+ {children}
+
+ )}
+
+ )
+}
+
+function FieldError({
+ className,
+ children,
+ errors,
+ ...props
+}: React.ComponentProps<"div"> & {
+ errors?: Array<{ message?: string } | undefined>
+}) {
+ const content = useMemo(() => {
+ if (children) {
+ return children
+ }
+
+ if (!errors) {
+ return null
+ }
+
+ if (errors?.length === 1 && errors[0]?.message) {
+ return errors[0].message
+ }
+
+ return (
+
+ {errors.map(
+ (error, index) =>
+ error?.message && {error.message} ,
+ )}
+
+ )
+ }, [children, errors])
+
+ if (!content) {
+ return null
+ }
+
+ return (
+
+ {content}
+
+ )
+}
+
+export {
+ Field,
+ FieldLabel,
+ FieldDescription,
+ FieldError,
+ FieldGroup,
+ FieldLegend,
+ FieldSeparator,
+ FieldSet,
+ FieldContent,
+ FieldTitle,
+}
diff --git a/fdm-app/app/components/ui/item.tsx b/fdm-app/app/components/ui/item.tsx
new file mode 100644
index 000000000..32b3b08c3
--- /dev/null
+++ b/fdm-app/app/components/ui/item.tsx
@@ -0,0 +1,191 @@
+import { Slot } from "@radix-ui/react-slot"
+import { cva, type VariantProps } from "class-variance-authority"
+import type * as React from "react"
+import { Separator } from "~/components/ui/separator"
+import { cn } from "~/lib/utils"
+
+function ItemGroup({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function ItemSeparator({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ )
+}
+
+const itemVariants = cva(
+ "group/item [a]:hover:bg-accent/50 focus-visible:border-ring focus-visible:ring-ring/50 [a]:transition-colors flex flex-wrap items-center rounded-md border border-transparent text-sm outline-none transition-colors duration-100 focus-visible:ring-[3px]",
+ {
+ variants: {
+ variant: {
+ default: "bg-transparent",
+ outline: "border-border",
+ muted: "bg-muted/50",
+ },
+ size: {
+ default: "gap-4 p-4 ",
+ sm: "gap-2.5 px-4 py-3",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ size: "default",
+ },
+ },
+)
+
+function Item({
+ className,
+ variant = "default",
+ size = "default",
+ asChild = false,
+ ...props
+}: React.ComponentProps<"div"> &
+ VariantProps & { asChild?: boolean }) {
+ const Comp = asChild ? Slot : "div"
+ return (
+
+ )
+}
+
+const itemMediaVariants = cva(
+ "flex shrink-0 items-center justify-center gap-2 group-has-[[data-slot=item-description]]/item:translate-y-0.5 group-has-[[data-slot=item-description]]/item:self-start [&_svg]:pointer-events-none",
+ {
+ variants: {
+ variant: {
+ default: "bg-transparent",
+ icon: "bg-muted size-8 rounded-sm border [&_svg:not([class*='size-'])]:size-4",
+ image: "size-10 overflow-hidden rounded-sm [&_img]:size-full [&_img]:object-cover",
+ },
+ },
+ defaultVariants: {
+ variant: "default",
+ },
+ },
+)
+
+function ItemMedia({
+ className,
+ variant = "default",
+ ...props
+}: React.ComponentProps<"div"> & VariantProps) {
+ return (
+
+ )
+}
+
+function ItemContent({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function ItemTitle({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function ItemDescription({ className, ...props }: React.ComponentProps<"p">) {
+ return (
+ a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
+ className,
+ )}
+ {...props}
+ />
+ )
+}
+
+function ItemActions({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function ItemHeader({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+function ItemFooter({ className, ...props }: React.ComponentProps<"div">) {
+ return (
+
+ )
+}
+
+export {
+ Item,
+ ItemMedia,
+ ItemContent,
+ ItemActions,
+ ItemGroup,
+ ItemSeparator,
+ ItemTitle,
+ ItemDescription,
+ ItemHeader,
+ ItemFooter,
+}
diff --git a/fdm-app/app/components/ui/label.tsx b/fdm-app/app/components/ui/label.tsx
index 912806c23..4d718fb7b 100644
--- a/fdm-app/app/components/ui/label.tsx
+++ b/fdm-app/app/components/ui/label.tsx
@@ -1,24 +1,22 @@
-import { cva, type VariantProps } from "class-variance-authority"
-import { Label as LabelPrimitive } from "radix-ui"
-import * as React from "react"
+import * as LabelPrimitive from "@radix-ui/react-label"
+import type * as React from "react"
import { cn } from "~/lib/utils"
-const labelVariants = cva(
- "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
-)
-
-const Label = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef &
- VariantProps
->(({ className, ...props }, ref) => (
-
-))
-Label.displayName = LabelPrimitive.Root.displayName
+function Label({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ )
+}
export { Label }
diff --git a/fdm-app/app/components/ui/progress.tsx b/fdm-app/app/components/ui/progress.tsx
index 969881c1f..5ed02d195 100644
--- a/fdm-app/app/components/ui/progress.tsx
+++ b/fdm-app/app/components/ui/progress.tsx
@@ -1,29 +1,31 @@
-import { Progress as ProgressPrimitive } from "radix-ui"
-import type * as React from "react"
+import * as ProgressPrimitive from "@radix-ui/react-progress"
+import * as React from "react"
import { cn } from "~/lib/utils"
-function Progress({
- className,
- value,
- ...props
-}: React.ComponentProps) {
- return (
- ,
+ React.ComponentPropsWithoutRef & {
+ colorBar?: string
+ }
+>(({ className, value, colorBar, ...props }, ref) => (
+
+
-
-
- )
-}
+ style={{ width: `${value || 0}%` }}
+ />
+
+))
+Progress.displayName = ProgressPrimitive.Root.displayName
export { Progress }
diff --git a/fdm-app/app/components/ui/separator.tsx b/fdm-app/app/components/ui/separator.tsx
index d4353aa3c..3b3db9bc5 100644
--- a/fdm-app/app/components/ui/separator.tsx
+++ b/fdm-app/app/components/ui/separator.tsx
@@ -1,29 +1,26 @@
-import { Separator as SeparatorPrimitive } from "radix-ui"
-import * as React from "react"
+import * as SeparatorPrimitive from "@radix-ui/react-separator"
+import type * as React from "react"
import { cn } from "~/lib/utils"
-const Separator = React.forwardRef<
- React.ElementRef,
- React.ComponentPropsWithoutRef
->(
- (
- { className, orientation = "horizontal", decorative = true, ...props },
- ref,
- ) => (
+function Separator({
+ className,
+ orientation = "horizontal",
+ decorative = true,
+ ...props
+}: React.ComponentProps) {
+ return (
- ),
-)
-Separator.displayName = SeparatorPrimitive.Root.displayName
+ )
+}
export { Separator }
diff --git a/fdm-app/app/components/ui/spinner.tsx b/fdm-app/app/components/ui/spinner.tsx
new file mode 100644
index 000000000..a81e950a4
--- /dev/null
+++ b/fdm-app/app/components/ui/spinner.tsx
@@ -0,0 +1,16 @@
+import { Loader2Icon } from "lucide-react"
+
+import { cn } from "~/lib/utils"
+
+function Spinner({ className, ...props }: React.ComponentProps<"svg">) {
+ return (
+
+ )
+}
+
+export { Spinner }
diff --git a/fdm-app/app/integrations/calculator.ts b/fdm-app/app/integrations/calculator.ts
new file mode 100644
index 000000000..e865aa8ee
--- /dev/null
+++ b/fdm-app/app/integrations/calculator.ts
@@ -0,0 +1,165 @@
+import {
+ collectInputForNitrogenBalance,
+ createFunctionsForFertilizerApplicationFilling,
+ createFunctionsForNorms,
+ getNitrogenBalance,
+ getNutrientAdvice,
+ type NitrogenBalanceNumeric,
+} from "@svenvw/fdm-calculator"
+import {
+ type Cultivation,
+ type FdmType,
+ type Field,
+ type fdmSchema,
+ getCultivations,
+ getCurrentSoilData,
+ type PrincipalId,
+ type Timeframe,
+} from "@svenvw/fdm-core"
+import { getNmiApiKey } from "./nmi"
+
+// Get nitrogen balance for the field
+export async function getNitrogenBalanceforField({
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_id,
+ timeframe,
+}: {
+ fdm: FdmType
+ principal_id: PrincipalId
+ b_id_farm: fdmSchema.farmsTypeSelect["b_id_farm"]
+ b_id: Field.b_id
+ timeframe: Timeframe
+}): Promise {
+ const nitrogenBalanceInput = await collectInputForNitrogenBalance(
+ fdm,
+ principal_id,
+ b_id_farm,
+ timeframe,
+ b_id,
+ )
+
+ const nitrogenBalanceResult = await getNitrogenBalance(
+ fdm,
+ nitrogenBalanceInput,
+ )
+ const nitrogenBalance = nitrogenBalanceResult.fields.find(
+ (field: { b_id: string }) => field.b_id === b_id,
+ )
+ if (!nitrogenBalance) {
+ throw new Error(`Nitrogen balance not found for field ${b_id}`)
+ }
+
+ return nitrogenBalance
+}
+
+export async function getNutrientAdviceForField({
+ fdm,
+ principal_id,
+ b_id,
+ b_centroid,
+ timeframe,
+}: {
+ fdm: FdmType
+ principal_id: PrincipalId
+ b_id: Field.b_id
+ b_centroid: Field.b_centroid
+ timeframe: Timeframe
+}) {
+ const nmiApiKey = getNmiApiKey()
+
+ const currentSoilData = await getCurrentSoilData(fdm, principal_id, b_id)
+
+ const cultivations = await getCultivations(
+ fdm,
+ principal_id,
+ b_id,
+ timeframe,
+ )
+ let b_lu_catalogue: Cultivation.b_lu_catalogue
+
+ if (!cultivations.length) {
+ b_lu_catalogue = null
+ } else {
+ // For now take the first cultivation
+ // TODO: Replace this with hoofdteelt
+ b_lu_catalogue = cultivations[0].b_lu_catalogue
+ }
+
+ const nutrientAdvice = await getNutrientAdvice(fdm, {
+ b_lu_catalogue: b_lu_catalogue,
+ b_centroid: b_centroid,
+ currentSoilData: currentSoilData,
+ nmiApiKey: nmiApiKey,
+ })
+
+ return nutrientAdvice
+}
+
+export async function getNorms({
+ fdm,
+ principal_id,
+ b_id,
+}: {
+ fdm: FdmType
+ principal_id: PrincipalId
+ b_id: Field.b_id
+}) {
+ const functionsForNorms = createFunctionsForNorms("NL", "2025")
+ const functionsForFilling = createFunctionsForFertilizerApplicationFilling(
+ "NL",
+ "2025",
+ )
+
+ const normsInput = await functionsForNorms.collectInputForNorms(
+ fdm,
+ principal_id,
+ b_id,
+ )
+
+ const [normManure, normPhosphate, normNitrogen] = await Promise.all([
+ functionsForNorms.calculateNormForManure(fdm, normsInput),
+ functionsForNorms.calculateNormForPhosphate(fdm, normsInput),
+ functionsForNorms.calculateNormForNitrogen(fdm, normsInput),
+ ])
+
+ const fillingInput =
+ await functionsForFilling.collectInputForFertilizerApplicationFilling(
+ fdm,
+ principal_id,
+ b_id,
+ normPhosphate.normValue,
+ )
+
+ const [fillingManure, fillingPhosphate, fillingNitrogen] =
+ await Promise.all([
+ functionsForFilling.calculateFertilizerApplicationFillingForManure(
+ fdm,
+ fillingInput,
+ ),
+ functionsForFilling.calculateFertilizerApplicationFillingForPhosphate(
+ fdm,
+ fillingInput,
+ ),
+ functionsForFilling.calculateFertilizerApplicationFillingForNitrogen(
+ fdm,
+ fillingInput,
+ ),
+ ])
+
+ const norms = {
+ value: {
+ manure: normManure.normValue,
+ phosphate: normPhosphate.normValue,
+ nitrogen: normNitrogen.normValue,
+ },
+ filling: {
+ manure: fillingManure.normFilling,
+ phosphate: fillingPhosphate.normFilling,
+ nitrogen: fillingNitrogen.normFilling,
+ },
+ }
+
+ return norms
+}
diff --git a/fdm-app/app/integrations/nmi.ts b/fdm-app/app/integrations/nmi.ts
index 013962a36..ab2d0f04e 100644
--- a/fdm-app/app/integrations/nmi.ts
+++ b/fdm-app/app/integrations/nmi.ts
@@ -1,4 +1,3 @@
-import type { CurrentSoilData } from "@svenvw/fdm-core"
import centroid from "@turf/centroid"
import type { Feature, Geometry, Polygon } from "geojson"
import { z } from "zod"
@@ -205,7 +204,14 @@ export async function extractSoilAnalysis(formData: FormData) {
// Process the other parameters
if (field.b_date) {
- soilAnalysis.b_sampling_date = new Date(field.b_date)
+ // As b_date is in format dd-mm-yyyy
+ const dateParts = field.b_date.split("-")
+ if (dateParts.length === 3) {
+ const day = Number.parseInt(dateParts[0], 10)
+ const month = Number.parseInt(dateParts[1], 10) - 1 // Month is 0-indexed
+ const year = Number.parseInt(dateParts[2], 10)
+ soilAnalysis.b_sampling_date = new Date(year, month, day)
+ }
}
if (field.b_soiltype_agr) {
soilAnalysis.b_soil_type = field.b_soiltype_agr
@@ -227,61 +233,3 @@ export async function extractSoilAnalysis(formData: FormData) {
}
return soilAnalysis
}
-
-export async function getNutrientAdvice(
- b_lu_catalogue: string,
- b_centroid: [number, number],
- currentSoilData: CurrentSoilData,
-) {
- const nmiApiKey = getNmiApiKey()
-
- if (!nmiApiKey) {
- throw new Error("NMI API key not configured")
- }
-
- let a_nmin_cc_d30: number | undefined
- let a_nmin_cc_d60: number | undefined
- const soilData: Record = {}
- for (const item of currentSoilData) {
- if (item.parameter === "a_nmin_cc") {
- if (item.a_depth_lower <= 30) {
- a_nmin_cc_d30 = item.value
- } else if (item.a_depth_lower <= 60) {
- a_nmin_cc_d60 = item.value
- }
- }
- soilData[item.parameter] = item.value
- }
-
- // Create request body
- const body = {
- a_lon: b_centroid[0],
- a_lat: b_centroid[1],
- b_lu_brp: [b_lu_catalogue.split("_")[1]],
- a_nmin_cc_d30: a_nmin_cc_d30,
- a_nmin_cc_d60: a_nmin_cc_d60,
- ...soilData,
- }
-
- // Send request to NMI API
- const responseApi = await fetch(
- "https://api.nmi-agro.nl/bemestingsplan/nutrients",
- {
- method: "POST",
- headers: {
- Authorization: `Bearer ${nmiApiKey}`,
- "Content-Type": "application/json",
- },
- body: JSON.stringify(body),
- },
- )
-
- if (!responseApi.ok) {
- throw new Error("Request to NMI API failed")
- }
-
- const result = await responseApi.json()
- const response = result.data.year
-
- return response
-}
diff --git a/fdm-app/app/lib/error.ts b/fdm-app/app/lib/error.ts
index 4b2c2f66e..c7bb2541a 100644
--- a/fdm-app/app/lib/error.ts
+++ b/fdm-app/app/lib/error.ts
@@ -1,5 +1,40 @@
+import * as Sentry from "@sentry/react-router"
+import { customAlphabet } from "nanoid"
import { data, redirect } from "react-router"
import { dataWithError, dataWithWarning } from "remix-toast"
+import { clientConfig } from "~/lib/config"
+
+const customErrorAlphabet = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ" // No lookalikes (0, 1, I, O, S, Z)
+const errorIdSize = 8 // Number of characters in ID
+
+export const createErrorId = customAlphabet(customErrorAlphabet, errorIdSize)
+
+export function reportError(
+ error: unknown,
+ tags: Record = {},
+ context?: Record,
+): string {
+ const errorId =
+ createErrorId()
+ .match(/.{1,4}/g)
+ ?.join("-") || createErrorId() // Format as XXXX-XXXX
+
+ if (clientConfig.analytics.sentry?.dsn) {
+ Sentry.captureException(error, {
+ tags: {
+ ...tags,
+ },
+ extra: {
+ ...context,
+ errorId: errorId,
+ },
+ })
+ } else {
+ console.error(`Error (code: ${errorId}):`, error, context)
+ }
+
+ return errorId
+}
export function handleLoaderError(error: unknown) {
// Handle 'data' thrown errors
@@ -97,14 +132,18 @@ export function handleLoaderError(error: unknown) {
// All other errors
console.error("Loader Error: ", error)
+ // Forward error to Sentry
+ const errorId = reportError(error, {
+ scope: "loader",
+ })
+
return data(
{
warning: error instanceof Error ? error.message : "Unknown error",
},
{
status: 500,
- statusText:
- "Er is helaas iets fout gegaan. Probeer het later opnieuw of neem contact op met Ondersteuning.",
+ statusText: `Er is helaas iets fout gegaan. Probeer het later opnieuw of neem contact op met Ondersteuning en meldt de volgende foutcode: ${errorId}.`,
},
)
}
@@ -199,8 +238,11 @@ export function handleActionError(error: unknown) {
// All other errors
console.error("Error: ", error)
+ const errorId = reportError(error, {
+ scope: "action",
+ })
return dataWithError(
error instanceof Error ? error.message : "Unknown error",
- "Er is helaas iets fout gegaan. Probeer het later opnieuw of neem contact op met Ondersteuning.",
+ `Er is helaas iets fout gegaan. Probeer het later opnieuw of neem contact op met Ondersteuning en meldt de volgende foutcode: ${errorId}.`,
)
}
diff --git a/fdm-app/app/routes/about.whats-new._index.tsx b/fdm-app/app/routes/about.whats-new._index.tsx
index caeada671..6315d70b8 100644
--- a/fdm-app/app/routes/about.whats-new._index.tsx
+++ b/fdm-app/app/routes/about.whats-new._index.tsx
@@ -23,6 +23,25 @@ export const meta: MetaFunction = () => {
}
export const changelogEntries: ChangelogEntry[] = [
+ {
+ version: "v0.24.0",
+ date: "3 november 2025",
+ title: "Inzicht in bemesting, invulling van gebruiksruimte en meer",
+ description:
+ "Deze update introduceert een nieuw overzicht van gebruiksruimte, stikstofbalans en bemestingsadvies op de bemestingspagina, voegt de mogelijkheid toe om biologische certificering en beweidingsintentie vast te leggen, en verbetert de weergave van meststoffen.",
+ items: [
+ "Overzicht van Gebruiksruimte, Stikstofbalans en Bemestingsadvies: Op de pagina met toegediende mestgiften voor een perceel wordt nu een uitgebreid overzicht getoond van de gebruiksruimte, de stikstofbalans en het bemestingsadvies. Dit geeft u in één oogopslag inzicht in de actuele stand van zaken voor uw perceel.",
+ "Opvulling van Gebruiksruimte: Naast het berekenen van de gebruiksruimte voor stikstof, fosfaat en dierlijke mest, wordt nu ook de opvulling via bemesting berekend. Hierbij kunt u nu ook op perceelsniveau voor elke bemesting zien hoeveel deze bijdraagt per norm.",
+ "Biologische bedrijven: U kunt nu vastleggen of een bedrijf een biologisch (Skal) certificaat heeft. Dit heeft namelijk invloed op de invulling van de gebruiksruimte en wordt nu meegenomen in de berekening.",
+ "Beweidingsintentie: Geef per jaar aan of u van plan bent om uw dieren te weiden. Deze informatie wordt gebruikt om de stikstofgebruiksnormen voor grasland correct te berekenen.",
+ "Bewerken van Toegediende Mestgiften: Het is nu mogelijk om eerder ingevoerde mestgiften te bewerken. Hierdoor hoeft u niet eerst een bemesting te verwijderen en daarna toe te voegen, maar kan het eenvoudig worden bijgewerkt.",
+ "Verbeterd Ontwerp van Mestgiften: De weergave van toegediende meststoffen is overzichtelijker gemaakt door het gebruik van iconen voor het type meststof en een betere uitlijning van de gegevens.",
+ "Mestcode (RVO) als Kenmerk van Meststof: Bij het toevoegen van een meststof wordt nu de officiële RVO-mestcode gebruikt in plaats van het algemene 'Meststoftype'. Dit zorgt voor een betere aansluiting bij de regelgeving.",
+ "Verbeterde Weergave van Mestcodes: In de lijst met toegediende meststoffen wordt de RVO-mestcode nu gekleurd weergegeven op basis van het type meststof, wat de leesbaarheid ten goede komt.",
+ "Verbeterde Foutafhandeling Stikstofbalans: Als de berekening van de stikstofbalans voor een specifiek perceel mislukt, worden de resultaten voor de andere percelen en het bedrijfsniveau nog steeds weergegeven.",
+ "Prestatieverbeteringen: De berekeningen voor de gebruiksnormen en de stikstofbalans zijn aanzienlijk versneld door het gebruik van caching. Dit zorgt voor een snellere en soepelere gebruikerservaring.",
+ ],
+ },
{
version: "v0.23.0",
date: "29 September 2025",
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.balance.nitrogen.$b_id.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.balance.nitrogen.$b_id.tsx
index c849e8596..a2f2afefe 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.balance.nitrogen.$b_id.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.balance.nitrogen.$b_id.tsx
@@ -1,6 +1,6 @@
import {
- calculateNitrogenBalance,
collectInputForNitrogenBalance,
+ getNitrogenBalance,
} from "@svenvw/fdm-calculator"
import { getFarm, getField } from "@svenvw/fdm-core"
import {
@@ -35,9 +35,9 @@ import {
import { getSession } from "~/lib/auth.server"
import { getTimeframe } from "~/lib/calendar"
import { clientConfig } from "~/lib/config"
+import { handleLoaderError, reportError } from "~/lib/error"
import { fdm } from "~/lib/fdm.server"
import { useCalendarStore } from "~/store/calendar"
-import { serverConfig } from "../lib/config.server"
// Meta
export const meta: MetaFunction = () => {
@@ -53,75 +53,103 @@ export const meta: MetaFunction = () => {
}
export async function loader({ request, params }: LoaderFunctionArgs) {
- const datasetsUrl = serverConfig.datasets_url
+ try {
+ // Get the farm id
+ const b_id_farm = params.b_id_farm
+ if (!b_id_farm) {
+ throw data("invalid: b_id_farm", {
+ status: 400,
+ statusText: "invalid: b_id_farm",
+ })
+ }
- // Get the farm id
- const b_id_farm = params.b_id_farm
- if (!b_id_farm) {
- throw data("invalid: b_id_farm", {
- status: 400,
- statusText: "invalid: b_id_farm",
- })
- }
+ // Get the field id
+ const b_id = params.b_id
+ if (!b_id) {
+ throw data("invalid: b_id", {
+ status: 400,
+ statusText: "invalid: b_id",
+ })
+ }
- // Get the farm id
- const b_id = params.b_id
- if (!b_id) {
- throw data("invalid: b_id", {
- status: 400,
- statusText: "invalid: b_id",
- })
- }
+ // Get the session
+ const session = await getSession(request)
- // Get the session
- const session = await getSession(request)
+ // Get timeframe from calendar store
+ const timeframe = getTimeframe(params)
- // Get timeframe from calendar store
- const timeframe = getTimeframe(params)
+ // Get details of farm
+ const farm = await getFarm(fdm, session.principal_id, b_id_farm)
+ if (!farm) {
+ throw data("not found: b_id_farm", {
+ status: 404,
+ statusText: "not found: b_id_farm",
+ })
+ }
- // Get details of farm
- const farm = await getFarm(fdm, session.principal_id, b_id_farm)
- if (!farm) {
- throw data("not found: b_id_farm", {
- status: 404,
- statusText: "not found: b_id_farm",
- })
- }
+ // Get details of field
+ const field = await getField(fdm, session.principal_id, b_id)
- // Get details of field
- const field = await getField(fdm, session.principal_id, b_id)
+ // Return promise directly for React Router v7 Suspense pattern
+ const nitrogenBalancePromise = collectInputForNitrogenBalance(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ timeframe,
+ b_id,
+ ).then(async (input) => {
+ const nitrogenBalanceResult = await getNitrogenBalance(fdm, input)
+ let fieldResult = nitrogenBalanceResult.fields.find(
+ (field: { b_id: string }) => field.b_id === b_id,
+ )
+
+ if (!fieldResult) {
+ throw new Error(
+ `Nitrogen balance data not found for field ${b_id}`,
+ )
+ }
+
+ if (fieldResult.errorMessage) {
+ const errorId = reportError(
+ fieldResult.errorMessage,
+ {
+ page: "farm/{b_id_farm}/{calendar}/balance/nitrogen/{b_id}",
+ scope: "loader",
+ },
+ {
+ b_id,
+ b_id_farm,
+ timeframe,
+ fieldArea: field?.b_area,
+ userId: session.principal_id,
+ },
+ )
+
+ fieldResult = {
+ b_id: b_id,
+ b_area: field?.b_area ?? 0,
+ errorMessage: fieldResult.errorMessage,
+ errorId: errorId,
+ }
+ }
+ const inputForField = input.fields.find(
+ (field: { field: { b_id: string } }) =>
+ field.field.b_id === b_id,
+ )
- // Return promise directly for React Router v7 Suspense pattern
- const nitrogenBalancePromise = collectInputForNitrogenBalance(
- fdm,
- session.principal_id,
- b_id_farm,
- timeframe,
- datasetsUrl,
- )
- .then(async (input) => {
- const result = await calculateNitrogenBalance(input)
return {
- input: input.fields.find(
- (field: { field: { b_id: string } }) =>
- field.field.b_id === b_id,
- ),
- result: result.fields.find(
- (field: { b_id: string }) => field.b_id === b_id,
- ),
- errorMessage: null,
+ fieldResult: fieldResult,
+ fieldInput: inputForField,
}
})
- .catch((error) => ({
- input: null,
- result: null,
- errorMessage: String(error).replace("Error: ", ""),
- }))
- return {
- nitrogenBalanceResult: nitrogenBalancePromise,
- field: field,
- farm: farm,
+ return {
+ nitrogenBalanceResult: nitrogenBalancePromise,
+ field: field,
+ farm: farm,
+ }
+ } catch (error) {
+ throw handleLoaderError(error)
}
}
@@ -154,39 +182,13 @@ function NitrogenBalance({
field,
nitrogenBalanceResult,
}: Awaited>) {
- const { input, result, errorMessage } = use(nitrogenBalanceResult)
+ const { fieldResult, fieldInput } = use(nitrogenBalanceResult)
const location = useLocation()
const page = location.pathname
const calendar = useCalendarStore((state) => state.calendar)
- if (!input) {
- return (
-
-
-
- Ongeldig jaar
-
-
-
-
- Dit perceel was niet in gebruik voor dit jaar.
- Als dit perceel wel in gebruik was, werk dan de
- startdatum bij in de perceelsinstelling.
-
-
-
-
-
- Naar perceelsinstelling
-
-
-
-
- )
- }
-
- if (errorMessage) {
+ if (fieldResult.errorMessage) {
return (
@@ -197,31 +199,29 @@ function NitrogenBalance({
- {!errorMessage ? (
-
-
- Er is een onbekende fout opgetreden. Probeer
- opnieuw of neem contact op met
- Ondersteuning.
-
-
- ) : errorMessage.match(
- /Missing required soil parameters/,
- ) ? (
+ {fieldResult.errorMessage.match(
+ /Missing required soil parameters/,
+ ) ? (
- Voor niet alle percelen zijn de benodigde
- bodemparameters bekend:
+ Voor dit perceel zijn de benodigde
+ bodemparameters niet bekend:
- {errorMessage.match(/a_n_rt/) ? (
+ {fieldResult.errorMessage.match(
+ /a_n_rt/,
+ ) ? (
Totaal stikstofgehalte
) : null}
- {errorMessage.match(/b_soiltype_agr/) ? (
+ {fieldResult.errorMessage.match(
+ /b_soiltype_agr/,
+ ) ? (
Agrarisch bodemtype
) : null}
- {errorMessage.match(/a_c_of|a_som_loi/) ? (
+ {fieldResult.errorMessage.match(
+ /a_c_of|a_som_loi/,
+ ) ? (
Organische stofgehalte
) : null}
@@ -237,7 +237,9 @@ function NitrogenBalance({
{JSON.stringify(
{
- message: errorMessage,
+ // message:
+ // fieldResult.errorMessage,
+ errorId: fieldResult.errorId,
page: page,
timestamp: new Date(),
},
@@ -254,6 +256,38 @@ function NitrogenBalance({
)
}
+ // If fieldResult.balance is undefined, it means there was an error that was caught
+ // and handled by returning an errorMessage, which is handled above.
+ // If it's still undefined here, it's an unexpected state, so we can return a generic error.
+ if (!fieldResult.balance) {
+ return (
+
+
+
+ Ongeldig jaar of onbekende fout
+
+
+
+
+ Dit perceel was niet in gebruik voor dit jaar of
+ er is een onbekende fout opgetreden. Als dit
+ perceel wel in gebruik was, werk dan de
+ startdatum bij in de perceelsinstelling.
+
+
+
+
+
+ Naar perceelsinstelling
+
+
+
+
+ )
+ }
+
+ const result = fieldResult.balance // Use the actual balance data
+
return (
<>
@@ -358,8 +392,8 @@ function NitrogenBalance({
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.balance.nitrogen._index.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.balance.nitrogen._index.tsx
index 97c8ed505..e2f88fe27 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.balance.nitrogen._index.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.balance.nitrogen._index.tsx
@@ -1,7 +1,7 @@
import {
- calculateNitrogenBalance,
collectInputForNitrogenBalance,
- type NitrogenBalanceNumeric,
+ getNitrogenBalance,
+ type NitrogenBalanceFieldResultNumeric,
} from "@svenvw/fdm-calculator"
import { getFarm, getFields } from "@svenvw/fdm-core"
import {
@@ -11,6 +11,7 @@ import {
ArrowUpFromLine,
CircleAlert,
CircleCheck,
+ CircleX,
} from "lucide-react"
import { Suspense, use } from "react"
import {
@@ -19,7 +20,6 @@ import {
type MetaFunction,
NavLink,
useLoaderData,
- useLocation,
} from "react-router"
import { NitrogenBalanceChart } from "~/components/blocks/balance/nitrogen-chart"
import { NitrogenBalanceFallback } from "~/components/blocks/balance/skeletons"
@@ -31,9 +31,15 @@ import {
CardHeader,
CardTitle,
} from "~/components/ui/card"
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipTrigger,
+} from "~/components/ui/tooltip"
import { getSession } from "~/lib/auth.server"
import { getTimeframe } from "~/lib/calendar"
import { clientConfig } from "~/lib/config"
+import { handleLoaderError, reportError } from "~/lib/error"
import { fdm } from "~/lib/fdm.server"
import { useFieldFilterStore } from "~/store/field-filter"
@@ -51,61 +57,75 @@ export const meta: MetaFunction = () => {
}
export async function loader({ request, params }: LoaderFunctionArgs) {
- // Get the farm id
- const b_id_farm = params.b_id_farm
- if (!b_id_farm) {
- throw data("invalid: b_id_farm", {
- status: 400,
- statusText: "invalid: b_id_farm",
- })
- }
+ try {
+ // Get the farm id
+ const b_id_farm = params.b_id_farm
+ if (!b_id_farm) {
+ throw data("invalid: b_id_farm", {
+ status: 400,
+ statusText: "invalid: b_id_farm",
+ })
+ }
- // Get the session
- const session = await getSession(request)
+ // Get the session
+ const session = await getSession(request)
- // Get timeframe from calendar store
- const timeframe = getTimeframe(params)
+ // Get timeframe from calendar store
+ const timeframe = getTimeframe(params)
- // Get details of farm
- const farm = await getFarm(fdm, session.principal_id, b_id_farm)
- if (!farm) {
- throw data("not found: b_id_farm", {
- status: 404,
- statusText: "not found: b_id_farm",
- })
- }
+ // Get details of farm
+ const farm = await getFarm(fdm, session.principal_id, b_id_farm)
+ if (!farm) {
+ throw data("not found: b_id_farm", {
+ status: 404,
+ statusText: "not found: b_id_farm",
+ })
+ }
- // Get details of fields
- const fields = await getFields(fdm, session.principal_id, b_id_farm)
+ // Get details of fields
+ const fields = await getFields(fdm, session.principal_id, b_id_farm)
- const asyncData = (async () => {
- // Collect input data for nutrient balance calculation
- const nitrogenBalanceInput = await collectInputForNitrogenBalance(
- fdm,
- session.principal_id,
- b_id_farm,
- timeframe,
- )
+ const asyncData = (async () => {
+ // Collect input data for nutrient balance calculation
+ const nitrogenBalanceInput = await collectInputForNitrogenBalance(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ timeframe,
+ )
- let nitrogenBalanceResult = null as NitrogenBalanceNumeric | null
- let errorMessage = null as string | null
- try {
- nitrogenBalanceResult =
- await calculateNitrogenBalance(nitrogenBalanceInput)
- } catch (error) {
- errorMessage = String(error).replace("Error: ", "")
- }
+ const nitrogenBalanceResult = await getNitrogenBalance(
+ fdm,
+ nitrogenBalanceInput,
+ )
+
+ if (nitrogenBalanceResult.hasErrors) {
+ reportError(
+ nitrogenBalanceResult.fieldErrorMessages.join(",\n"),
+ {
+ page: "farm/{b_id_farm}/{calendar}/balance/nitrogen/_index",
+ scope: "loader",
+ },
+ {
+ b_id_farm,
+ timeframe,
+ userId: session.principal_id,
+ },
+ )
+ }
+
+ return {
+ nitrogenBalanceResult: nitrogenBalanceResult,
+ }
+ })()
return {
- nitrogenBalanceResult: nitrogenBalanceResult,
- errorMessage: errorMessage,
+ farm: farm,
+ fields: fields,
+ asyncData: asyncData,
}
- })()
-
- return {
- farm: farm,
- fields: fields,
- asyncData: asyncData,
+ } catch (error) {
+ throw handleLoaderError(error)
}
}
@@ -138,13 +158,12 @@ function FarmBalanceNitrogenOverview({
fields,
asyncData,
}: Awaited
>) {
- const location = useLocation()
- const page = location.pathname
- const { nitrogenBalanceResult, errorMessage } = use(asyncData)
+ const { nitrogenBalanceResult } = use(asyncData)
const { showProductiveOnly } = useFieldFilterStore()
const resolvedNitrogenBalanceResult = nitrogenBalanceResult
- if (errorMessage) {
+
+ if (resolvedNitrogenBalanceResult.errorMessage) {
return (
@@ -155,68 +174,39 @@ function FarmBalanceNitrogenOverview({
- {!errorMessage ? (
-
-
- Er is een onbekende fout opgetreden. Probeer
- opnieuw of neem contact op met
- Ondersteuning.
-
-
- ) : errorMessage.match(
- /Missing required soil parameters/,
- ) ? (
-
-
- Voor niet alle percelen zijn de benodigde
- bodemparameters bekend:
-
-
-
- {errorMessage.match(/a_n_rt/) ? (
- Totaal stikstofgehalte
- ) : null}
- {errorMessage.match(/b_soiltype_agr/) ? (
- Agrarisch bodemtype
- ) : null}
- {errorMessage.match(/a_c_of|a_som_loi/) ? (
- Organische stofgehalte
- ) : null}
-
+
+
+ Er is helaas wat misgegaan. Probeer opnieuw of
+ neem contact op met Ondersteuning en deel de
+ volgende foutmelding:
+
+
+
+ {JSON.stringify(
+ {
+ message:
+ resolvedNitrogenBalanceResult.errorMessage,
+ timestamp: new Date(),
+ },
+ null,
+ 2,
+ )}
+
- ) : (
-
-
- Er is helaas wat misgegaan. Probeer opnieuw
- of neem contact op met Ondersteuning en deel
- de volgende foutmelding:
-
-
-
- {JSON.stringify(
- {
- message: errorMessage,
- page: page,
- timestamp: new Date(),
- },
- null,
- 2,
- )}
-
-
-
- )}
+
)
}
+ const { hasErrors } = resolvedNitrogenBalanceResult
+
const fieldsMap = new Map(fields.map((f) => [f.b_id, f]))
const filteredFields = resolvedNitrogenBalanceResult.fields.filter(
- (field) => {
+ (fieldResult: NitrogenBalanceFieldResultNumeric) => {
if (!showProductiveOnly) return true
- const fieldData = fieldsMap.get(field.b_id)
+ const fieldData = fieldsMap.get(fieldResult.b_id)
return fieldData ? fieldData.b_isproductive === true : false
},
)
@@ -237,11 +227,21 @@ function FarmBalanceNitrogenOverview({
{`${resolvedNitrogenBalanceResult.balance} / ${resolvedNitrogenBalanceResult.target}`}
- {resolvedNitrogenBalanceResult.balance <=
- resolvedNitrogenBalanceResult.target ? (
+ {hasErrors ? (
+
+
+
+
+
+ Niet alle percelen konden worden
+ berekend
+
+
+ ) : resolvedNitrogenBalanceResult.balance <=
+ resolvedNitrogenBalanceResult.target ? (
) : (
-
+
)}
@@ -332,22 +332,31 @@ function FarmBalanceNitrogenOverview({
{filteredFields.map(
(
- field: NitrogenBalanceNumeric["fields"][number],
+ fieldResult: NitrogenBalanceFieldResultNumeric,
) => {
- const fieldData = fieldsMap.get(field.b_id)
+ const fieldData = fieldsMap.get(
+ fieldResult.b_id,
+ )
return (
- {field.balance <= field.target ? (
-
+ {fieldResult.balance ? (
+ fieldResult.balance.balance <=
+ fieldResult.balance.target ? (
+
+ ) : (
+
+ )
) : (
-
+
)}
-
+
{fieldData?.b_name}
@@ -357,7 +366,19 @@ function FarmBalanceNitrogenOverview({
- {field.balance} / {field.target}
+ {fieldResult.balance ? (
+ `${fieldResult.balance.balance} / ${fieldResult.balance.target}`
+ ) : (
+
+
+ {
+ "Bekijk foutmelding"
+ }
+
+
+ )}
)
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer._index.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer._index.tsx
index f97d614da..1bdc0ea9d 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer._index.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer._index.tsx
@@ -6,6 +6,7 @@ import {
getFertilizers,
getField,
removeFertilizerApplication,
+ updateFertilizerApplication,
} from "@svenvw/fdm-core"
import {
type ActionFunctionArgs,
@@ -13,16 +14,26 @@ import {
type LoaderFunctionArgs,
type MetaFunction,
useLoaderData,
+ useNavigation,
} from "react-router"
import { dataWithError, dataWithSuccess } from "remix-toast"
import { FertilizerApplicationCard } from "~/components/blocks/fertilizer-applications/card"
-import { FormSchema } from "~/components/blocks/fertilizer-applications/formschema"
+import {
+ FormSchema,
+ FormSchemaModify,
+} from "~/components/blocks/fertilizer-applications/formschema"
+import { FertilizerApplicationMetricsCard } from "~/components/blocks/fertilizer-applications/metrics"
import { getSession } from "~/lib/auth.server"
-import { getTimeframe } from "~/lib/calendar"
+import { getCalendar, getTimeframe } from "~/lib/calendar"
import { clientConfig } from "~/lib/config"
import { handleActionError, handleLoaderError } from "~/lib/error"
import { fdm } from "~/lib/fdm.server"
import { extractFormValuesFromRequest } from "~/lib/form"
+import {
+ getNitrogenBalanceforField,
+ getNorms,
+ getNutrientAdviceForField,
+} from "../integrations/calculator"
// Meta
export const meta: MetaFunction = () => {
@@ -70,6 +81,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
// Get the session
const session = await getSession(request)
+ const principal_id = session.principal_id
// Get timeframe from calendar store
const timeframe = getTimeframe(params)
@@ -82,6 +94,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
statusText: "Field is not found",
})
}
+ const b_centroid = field.b_centroid
// Get available fertilizers for the farm
const fertilizers = await getFertilizers(
@@ -92,15 +105,16 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
const fertilizerParameterDescription =
getFertilizerParametersDescription()
const applicationMethods = fertilizerParameterDescription.find(
- (x) => x.parameter === "p_app_method_options",
+ (x: { parameter: string }) =>
+ x.parameter === "p_app_method_options",
)
if (!applicationMethods) throw new Error("Parameter metadata missing")
// Map fertilizers to options for the combobox
const fertilizerOptions = fertilizers.map((fertilizer) => {
const applicationMethodOptions = fertilizer.p_app_method_options
- .map((opt) => {
+ .map((opt: any) => {
const meta = applicationMethods.options.find(
- (x) => x.value === opt,
+ (x: any) => x.value === opt,
)
return meta ? { value: opt, label: meta.label } : undefined
})
@@ -125,13 +139,42 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
fertilizers,
})
- // Return user information from loader
+ const fertilizerApplicationMetricsData = {
+ norms: getNorms({
+ fdm,
+ principal_id,
+ b_id,
+ }),
+ nitrogenBalance: getNitrogenBalanceforField({
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_id,
+ timeframe,
+ }),
+ nutrientAdvice: getNutrientAdviceForField({
+ fdm,
+ principal_id,
+ b_id,
+ b_centroid,
+ timeframe,
+ }),
+ dose: dose.dose,
+ b_id: b_id,
+ b_id_farm: b_id_farm,
+ calendar: getCalendar(params),
+ }
+
+ // Return user information from loader, including the promises
return {
field: field,
fertilizerOptions: fertilizerOptions,
fertilizerApplications: fertilizerApplications,
+ fertilizers: fertilizers,
dose: dose.dose,
applicationMethodOptions: applicationMethods.options,
+ fertilizerApplicationMetricsData: fertilizerApplicationMetricsData,
+ calendar: getCalendar(params),
}
} catch (error) {
throw handleLoaderError(error)
@@ -149,15 +192,34 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
*/
export default function FarmFieldsOverviewBlock() {
const loaderData = useLoaderData
()
+ const navigation = useNavigation()
+ const isSubmitting = navigation.state === "submitting"
return (
-
-
+
)
}
@@ -209,6 +271,37 @@ export async function action({ request, params }: ActionFunctionArgs) {
)
}
+ if (request.method === "PUT") {
+ // Collect form entry
+ const formValues = await extractFormValuesFromRequest(
+ request,
+ FormSchemaModify,
+ )
+ const { p_app_id, p_id, p_app_amount, p_app_date, p_app_method } =
+ formValues
+
+ if (!p_app_id || typeof p_app_id !== "string") {
+ return dataWithError(
+ "Invalid or missing p_app_id value",
+ "Helaas, er is wat misgegaan. Probeer het later opnieuw of neem contact op met ondersteuning.",
+ )
+ }
+
+ await updateFertilizerApplication(
+ fdm,
+ session.principal_id,
+ p_app_id,
+ p_id,
+ p_app_amount,
+ p_app_method,
+ p_app_date,
+ )
+
+ return dataWithSuccess("Date edited successfully", {
+ message: "Bemesting is gewijzigd",
+ })
+ }
+
if (request.method === "DELETE") {
const formData = await request.formData()
const p_app_id = formData.get("p_app_id")
@@ -216,7 +309,7 @@ export async function action({ request, params }: ActionFunctionArgs) {
if (!p_app_id || typeof p_app_id !== "string") {
return dataWithError(
"Invalid or missing p_app_id value",
- "Oops! Something went wrong. Please try again later.",
+ "Helaas, er is wat misgegaan. Probeer het later opnieuw of neem contact op met ondersteuning.",
)
}
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.manage.new.$p_id.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.manage.new.$p_id.tsx
index 064a307b5..85b4cd074 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.manage.new.$p_id.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.manage.new.$p_id.tsx
@@ -161,7 +161,8 @@ export async function action({ request, params }: ActionFunctionArgs) {
p_name_nl: formValues.p_name_nl,
p_name_en: formValues.p_name_en,
p_description: formValues.p_description,
- p_type: formValues.p_type,
+ p_type: null,
+ p_type_rvo: formValues.p_type_rvo,
p_dm: formValues.p_dm,
p_density: formValues.p_density,
p_om: formValues.p_om,
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.manage.new.custom.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.manage.new.custom.tsx
index 766f53a1b..e5284b9d4 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.manage.new.custom.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.$b_id.fertilizer.manage.new.custom.tsx
@@ -54,6 +54,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
p_source: b_id_farm,
p_name_nl: "",
p_type: undefined,
+ p_type_rvo: undefined,
p_dm: undefined,
p_density: undefined,
p_om: undefined,
@@ -165,7 +166,8 @@ export async function action({ request, params }: ActionFunctionArgs) {
p_name_nl: formValues.p_name_nl,
p_name_en: formValues.p_name_en,
p_description: formValues.p_description,
- p_type: formValues.p_type,
+ p_type: null,
+ p_type_rvo: formValues.p_type_rvo,
p_dm: formValues.p_dm,
p_density: formValues.p_density,
p_om: formValues.p_om,
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.fertilizer.manage.new.$p_id.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.fertilizer.manage.new.$p_id.tsx
index 16b564e32..da74625b0 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.fertilizer.manage.new.$p_id.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.fertilizer.manage.new.$p_id.tsx
@@ -172,7 +172,8 @@ export async function action({ request, params }: ActionFunctionArgs) {
p_name_nl: formValues.p_name_nl,
p_name_en: formValues.p_name_en,
p_description: formValues.p_description,
- p_type: formValues.p_type,
+ p_type: null,
+ p_type_rvo: formValues.p_type_rvo,
p_dm: formValues.p_dm,
p_density: formValues.p_density,
p_om: formValues.p_om,
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.fertilizer.manage.new.custom.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.fertilizer.manage.new.custom.tsx
index 777b65a5c..3352d968c 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.fertilizer.manage.new.custom.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.fertilizer.manage.new.custom.tsx
@@ -62,6 +62,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
p_source: b_id_farm,
p_name_nl: "",
p_type: undefined,
+ p_type_rvo: undefined,
p_dm: undefined,
p_density: undefined,
p_om: undefined,
@@ -168,7 +169,8 @@ export async function action({ request, params }: ActionFunctionArgs) {
p_name_nl: formValues.p_name_nl,
p_name_en: formValues.p_name_en,
p_description: formValues.p_description,
- p_type: formValues.p_type,
+ p_type: null,
+ p_type_rvo: formValues.p_type_rvo,
p_dm: formValues.p_dm,
p_density: formValues.p_density,
p_om: formValues.p_om,
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.new.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.new.tsx
index dbec73054..980e16bd0 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.new.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.field.new.tsx
@@ -3,6 +3,7 @@ import {
addField,
addSoilAnalysis,
getCultivationsFromCatalogue,
+ getDefaultDatesOfCultivation,
getFarm,
getFarms,
getFields,
@@ -417,13 +418,24 @@ export async function action({ request, params }: ActionFunctionArgs) {
const b_geometry = JSON.parse(
JSON.parse(String(formValues.b_geometry)),
) as Polygon
- const currentYear = new Date().getFullYear()
- const defaultDate = timeframe.start
- ? timeframe.start
- : `${currentYear}-01-01`
- const b_start = defaultDate
- const b_lu_start = defaultDate
- const b_lu_end = undefined
+ const parsedYear = Number.parseInt(String(calendar ?? ""), 10)
+
+ const currentYear =
+ Number.isInteger(parsedYear) &&
+ parsedYear >= 1970 &&
+ parsedYear < 2100
+ ? parsedYear
+ : timeframe.start.getFullYear()
+ const cultivationDefaultDates = await getDefaultDatesOfCultivation(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ b_lu_catalogue,
+ currentYear,
+ )
+ const b_start = new Date(`${currentYear}-01-01`)
+ const b_lu_start = cultivationDefaultDates.b_lu_start
+ const b_lu_end = cultivationDefaultDates.b_lu_end
const b_end = undefined
const b_acquiring_method = "unknown"
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.norms.$b_id.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.norms.$b_id.tsx
new file mode 100644
index 000000000..c299d036f
--- /dev/null
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.norms.$b_id.tsx
@@ -0,0 +1,521 @@
+import type { GebruiksnormResult, NormFilling } from "@svenvw/fdm-calculator"
+import {
+ createFunctionsForFertilizerApplicationFilling,
+ createFunctionsForNorms,
+} from "@svenvw/fdm-calculator"
+import {
+ getFarm,
+ getFarms,
+ getFertilizerApplications,
+ getField,
+ getFields,
+} from "@svenvw/fdm-core"
+import { format } from "date-fns"
+import { nl } from "date-fns/locale"
+import { AlertTriangle } from "lucide-react"
+import { Suspense, use } from "react"
+import {
+ data,
+ type LoaderFunctionArgs,
+ type MetaFunction,
+ useLoaderData,
+} from "react-router"
+import { FarmTitle } from "~/components/blocks/farm/farm-title"
+import { Header } from "~/components/blocks/header/base"
+import { HeaderFarm } from "~/components/blocks/header/farm"
+import { HeaderNorms } from "~/components/blocks/header/norms"
+import { NormCard } from "~/components/blocks/norms/norm-card"
+import { NormsFallback } from "~/components/blocks/norms/skeletons"
+import { Alert, AlertDescription, AlertTitle } from "~/components/ui/alert"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardHeader,
+ CardTitle,
+} from "~/components/ui/card"
+import {
+ Item,
+ ItemContent,
+ ItemDescription,
+ ItemGroup,
+ ItemSeparator,
+ ItemTitle,
+} from "~/components/ui/item"
+import { Separator } from "~/components/ui/separator"
+import { SidebarInset } from "~/components/ui/sidebar"
+import {
+ Tooltip,
+ TooltipContent,
+ TooltipTrigger,
+} from "~/components/ui/tooltip"
+import { getSession } from "~/lib/auth.server"
+import { getCalendar, getTimeframe } from "~/lib/calendar"
+import { clientConfig } from "~/lib/config"
+import { handleLoaderError } from "~/lib/error"
+import { fdm } from "~/lib/fdm.server"
+
+interface FieldNormData {
+ b_id: string
+ b_name: string
+ b_area: number
+ norms?: {
+ manure: GebruiksnormResult
+ phosphate: GebruiksnormResult
+ nitrogen: GebruiksnormResult
+ }
+ normsFilling?: {
+ manure: NormFilling
+ phosphate: NormFilling
+ nitrogen: NormFilling
+ }
+ fertilizerApplications?: Awaited<
+ ReturnType
+ >
+ errorMessage?: string
+}
+
+type FertilizerApplication = Awaited<
+ ReturnType
+>[number]
+
+// Meta
+export const meta: MetaFunction = () => {
+ return [
+ { title: `Gebruiksruimte - Perceel | ${clientConfig.name}` },
+ {
+ name: "description",
+ content: "Bekijk de gebruiksruimte en opvulling voor dit perceel.",
+ },
+ ]
+}
+
+export async function loader({ request, params }: LoaderFunctionArgs) {
+ try {
+ const b_id_farm = params.b_id_farm
+ const b_id = params.b_id
+ if (!b_id_farm) {
+ throw data("invalid: b_id_farm", {
+ status: 400,
+ statusText: "invalid: b_id_farm",
+ })
+ }
+ if (!b_id) {
+ throw data("invalid: b_id", {
+ status: 400,
+ statusText: "invalid: b_id",
+ })
+ }
+
+ const session = await getSession(request)
+ const timeframe = getTimeframe(params)
+ const calendar = getCalendar(params)
+
+ const farm = await getFarm(fdm, session.principal_id, b_id_farm)
+ if (!farm) {
+ throw data("not found: b_id_farm", {
+ status: 404,
+ statusText: "not found: b_id_farm",
+ })
+ }
+
+ const farms = await getFarms(fdm, session.principal_id)
+ if (!farms || farms.length === 0) {
+ throw data("not found: farms", {
+ status: 404,
+ statusText: "not found: farms",
+ })
+ }
+
+ const farmOptions = farms.map((farm) => {
+ return {
+ b_id_farm: farm.b_id_farm,
+ b_name_farm: farm.b_name_farm,
+ }
+ })
+
+ const field = await getField(fdm, session.principal_id, b_id)
+ if (!field) {
+ throw data("not found: b_id", {
+ status: 404,
+ statusText: "not found: b_id",
+ })
+ }
+
+ // Get the fields to be selected
+ const fields = await getFields(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ timeframe,
+ )
+ const fieldOptions = fields.map((field) => {
+ if (!field?.b_id || !field?.b_name) {
+ throw new Error("Invalid field data structure")
+ }
+ return {
+ b_id: field.b_id,
+ b_name: field.b_name,
+ }
+ })
+
+ const asyncData = (async () => {
+ if (calendar !== "2025") {
+ return {
+ fieldNormData: undefined,
+ errorMessage:
+ "Gebruiksnormen zijn alleen beschikbaar voor 2025.",
+ }
+ }
+
+ let fieldNormData: FieldNormData = {
+ b_id: field.b_id,
+ b_name: field.b_name,
+ b_area: field.b_area,
+ }
+ let errorMessage: string | null = null
+
+ try {
+ const functionsForNorms = createFunctionsForNorms(
+ "NL",
+ calendar,
+ )
+ const functionsForFilling =
+ createFunctionsForFertilizerApplicationFilling(
+ "NL",
+ calendar,
+ )
+
+ const input = await functionsForNorms.collectInputForNorms(
+ fdm,
+ session.principal_id,
+ field.b_id,
+ )
+
+ const [normManure, normPhosphate, normNitrogen] =
+ await Promise.all([
+ functionsForNorms.calculateNormForManure(fdm, input),
+ functionsForNorms.calculateNormForPhosphate(fdm, input),
+ functionsForNorms.calculateNormForNitrogen(fdm, input),
+ ])
+
+ const fillingInput =
+ await functionsForFilling.collectInputForFertilizerApplicationFilling(
+ fdm,
+ session.principal_id,
+ field.b_id,
+ normPhosphate.normValue,
+ )
+
+ const [fillingManure, fillingPhosphate, fillingNitrogen] =
+ await Promise.all([
+ functionsForFilling.calculateFertilizerApplicationFillingForManure(
+ fdm,
+ fillingInput,
+ ),
+ functionsForFilling.calculateFertilizerApplicationFillingForPhosphate(
+ fdm,
+ fillingInput,
+ ),
+ functionsForFilling.calculateFertilizerApplicationFillingForNitrogen(
+ fdm,
+ fillingInput,
+ ),
+ ])
+
+ const fertilizerApplications = await getFertilizerApplications(
+ fdm,
+ session.principal_id,
+ field.b_id,
+ timeframe,
+ )
+
+ fieldNormData = {
+ ...fieldNormData,
+ norms: {
+ manure: normManure,
+ phosphate: normPhosphate,
+ nitrogen: normNitrogen,
+ },
+ normsFilling: {
+ manure: fillingManure,
+ phosphate: fillingPhosphate,
+ nitrogen: fillingNitrogen,
+ },
+ fertilizerApplications: fertilizerApplications,
+ }
+ } catch (error) {
+ errorMessage = String(error).replace("Error: ", "")
+ fieldNormData = { ...fieldNormData, errorMessage }
+ }
+
+ return { fieldNormData, errorMessage }
+ })()
+
+ return {
+ farm,
+ field,
+ b_id_farm,
+ b_id,
+ calendar,
+ farmOptions,
+ fieldOptions,
+ asyncData,
+ }
+ } catch (error) {
+ throw handleLoaderError(error)
+ }
+}
+
+export default function FieldNormsBlock() {
+ const loaderData = useLoaderData()
+
+ return (
+
+
+
+
+ }
+ >
+
+
+
+
+ )
+}
+
+interface FertilizerApplicationCardProps {
+ application: FertilizerApplication
+ normsFilling: {
+ manure: NormFilling
+ phosphate: NormFilling
+ nitrogen: NormFilling
+ }
+}
+
+const FertilizerApplicationCard = ({
+ application,
+ normsFilling,
+}: FertilizerApplicationCardProps) => {
+ const applicationFilling = {
+ nitrogen: normsFilling.nitrogen.applicationFilling?.find(
+ (d: { p_app_id: string }) => d.p_app_id === application.p_app_id,
+ ),
+ phosphate: normsFilling.phosphate.applicationFilling?.find(
+ (d: { p_app_id: string }) => d.p_app_id === application.p_app_id,
+ ),
+ manure: normsFilling.manure.applicationFilling?.find(
+ (d: { p_app_id: string }) => d.p_app_id === application.p_app_id,
+ ),
+ }
+
+ const renderApplicationContributionForNorm = (
+ title: string,
+ filling:
+ | { normFilling?: number; normFillingDetails?: string }
+ | undefined,
+ ) => {
+ if (!filling) {
+ return null
+ }
+
+ const details = filling.normFillingDetails
+ const value = filling.normFilling || 0
+
+ return (
+ -
+
+ {title}
+ {details && (
+
+
+
+ {details}
+
+
+ {details}
+
+ )}
+
+
+ {value.toFixed(0)} kg
+
+
+ )
+ }
+
+ return (
+
+
+ {application.p_name_nl}
+
+ {format(new Date(application.p_app_date), "d MMMM yyyy", {
+ locale: nl,
+ })}{" "}
+ - {application.p_app_amount} kg/ha
+
+
+
+
+ {renderApplicationContributionForNorm(
+ "Stikstof, werkzaam",
+ applicationFilling.nitrogen,
+ )}
+
+ {renderApplicationContributionForNorm(
+ "Fosfaat",
+ applicationFilling.phosphate,
+ )}
+
+ {renderApplicationContributionForNorm(
+ "Stikstof uit dierlijke mest",
+ applicationFilling.manure,
+ )}
+
+
+
+ )
+}
+
+function FieldNormsContent(loaderData: Awaited>) {
+ const { fieldNormData, errorMessage } = use(loaderData.asyncData)
+
+ if (errorMessage) {
+ return (
+
+
+
+
+ Helaas is het niet mogelijk om de gebruiksnormen uit
+ te rekenen voor dit perceel
+
+
+
+
+
+ Er is onverwacht wat misgegaan. Probeer opnieuw
+ of neem contact op met Ondersteuning en deel de
+ volgende foutmelding:
+
+
+
+ {JSON.stringify(
+ {
+ message: errorMessage,
+ fieldId: fieldNormData?.b_id,
+ timestamp: new Date(),
+ },
+ null,
+ 2,
+ )}
+
+
+
+
+
+
+ )
+ }
+
+ if (!fieldNormData) {
+ return (
+
+
+
+ Geen gegevens beschikbaar
+
+
+
+ Er zijn geen normgegevens gevonden voor dit perceel.
+
+
+
+
+ )
+ }
+
+ const { norms, normsFilling, fertilizerApplications } = fieldNormData
+
+ return (
+
+
+
+ Disclaimer
+
+ Deze getallen zijn uitsluitend bedoeld voor informatieve
+ doeleinden. De getoonde gebruiksnormen zijn indicatief en
+ dienen te worden geverifieerd voor juridische naleving.
+ Raadpleeg altijd de officiële RVO-publicaties en uw adviseur
+ voor definitieve normen.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Bemesting op dit perceel
+
+
+ Hieronder vindt u een overzicht van de bemesting op dit
+ perceel en hun bijdrage aan de gebruiksnormen.
+
+
+
+ {fertilizerApplications &&
+ normsFilling &&
+ fertilizerApplications.map((app) => (
+
+ ))}
+
+
+
+ )
+}
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.norms.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.norms._index.tsx
similarity index 69%
rename from fdm-app/app/routes/farm.$b_id_farm.$calendar.norms.tsx
rename to fdm-app/app/routes/farm.$b_id_farm.$calendar.norms._index.tsx
index fd3f464de..c75afb872 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.norms.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.norms._index.tsx
@@ -1,9 +1,17 @@
+import type {
+ AggregatedNormFillingsToFarmLevel,
+ AggregatedNormsToFarmLevel,
+ GebruiksnormResult,
+ InputAggregateNormFillingsToFarmLevel,
+ InputAggregateNormsToFarmLevel,
+ NormFilling,
+} from "@svenvw/fdm-calculator"
import {
- type AggregatedNormsToFarmLevel,
+ createFunctionsForFertilizerApplicationFilling,
createFunctionsForNorms,
- type GebruiksnormResult,
} from "@svenvw/fdm-calculator"
import { getFarm, getFarms, getFields } from "@svenvw/fdm-core"
+import { AlertTriangle } from "lucide-react"
import { Suspense, use } from "react"
import {
data,
@@ -20,7 +28,7 @@ import { HeaderNorms } from "~/components/blocks/header/norms"
import { FarmNorms } from "~/components/blocks/norms/farm-norms"
import { FieldNorms } from "~/components/blocks/norms/field-norms"
import { NormsFallback } from "~/components/blocks/norms/skeletons"
-import { Alert, AlertDescription } from "~/components/ui/alert"
+import { Alert, AlertDescription, AlertTitle } from "~/components/ui/alert"
import { Button } from "~/components/ui/button"
import { Card, CardContent, CardHeader, CardTitle } from "~/components/ui/card"
import { Separator } from "~/components/ui/separator"
@@ -40,16 +48,22 @@ interface FieldNorm {
phosphate: GebruiksnormResult
nitrogen: GebruiksnormResult
}
+ normsFilling?: {
+ manure: NormFilling
+ phosphate: NormFilling
+ nitrogen: NormFilling
+ }
errorMessage?: string
}
// Meta
export const meta: MetaFunction = () => {
return [
- { title: `Gebruiksnormen ${clientConfig.name}` },
+ { title: `Gebruiksruimte - Bedrijf | ${clientConfig.name}` },
{
name: "description",
- content: "Bekijk de Gebruiksnormen voor je bedrijf.",
+ content:
+ "Bekijk de gebruiksruimte en opvulling voor je bedrijf en percelen.",
},
]
}
@@ -116,30 +130,80 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
let fieldNorms = undefined as FieldNorm[] | undefined
let farmNorms = undefined as AggregatedNormsToFarmLevel | undefined
+ let farmFillings = undefined as
+ | AggregatedNormFillingsToFarmLevel
+ | undefined
let errorMessage = null as string | null
let hasFieldNormErrors = false
const fieldErrorMessages: string[] = []
try {
// Calculate norms per field
- const functionsForms = createFunctionsForNorms("NL", calendar)
+ const functionsForNorms = createFunctionsForNorms(
+ "NL",
+ calendar,
+ )
+ const functionsForFilling =
+ createFunctionsForFertilizerApplicationFilling(
+ "NL",
+ calendar,
+ )
const fieldNormPromises = fields.map(async (field) => {
try {
- // Collect the input
- const input = await functionsForms.collectInputForNorms(
- fdm,
- session.principal_id,
- field.b_id,
- )
+ // Collect the input for norms
+ const input =
+ await functionsForNorms.collectInputForNorms(
+ fdm,
+ session.principal_id,
+ field.b_id,
+ )
- // Calculate the norms
+ // Calculate the norms first
const [normManure, normPhosphate, normNitrogen] =
await Promise.all([
- functionsForms.calculateNormForManure(input),
- functionsForms.calculateNormForPhosphate(input),
- functionsForms.calculateNormForNitrogen(input),
+ functionsForNorms.calculateNormForManure(
+ fdm,
+ input,
+ ),
+ functionsForNorms.calculateNormForPhosphate(
+ fdm,
+ input,
+ ),
+ functionsForNorms.calculateNormForNitrogen(
+ fdm,
+ input,
+ ),
])
+ // Collect the input for fillings, using the calculated phosphate norm
+ const fillingInput =
+ await functionsForFilling.collectInputForFertilizerApplicationFilling(
+ fdm,
+ session.principal_id,
+ field.b_id,
+ normPhosphate.normValue, // Pass the calculated fosfaatgebruiksnorm
+ )
+
+ // Calculate the fillings
+ const [
+ fillingManure,
+ fillingPhosphate,
+ fillingNitrogen,
+ ] = await Promise.all([
+ functionsForFilling.calculateFertilizerApplicationFillingForManure(
+ fdm,
+ fillingInput,
+ ),
+ functionsForFilling.calculateFertilizerApplicationFillingForPhosphate(
+ fdm,
+ fillingInput,
+ ),
+ functionsForFilling.calculateFertilizerApplicationFillingForNitrogen(
+ fdm,
+ fillingInput,
+ ),
+ ])
+
return {
b_id: field.b_id,
b_area: field.b_area,
@@ -148,6 +212,11 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
phosphate: normPhosphate,
nitrogen: normNitrogen,
},
+ normsFilling: {
+ manure: fillingManure,
+ phosphate: fillingPhosphate,
+ nitrogen: fillingNitrogen,
+ },
}
} catch (error) {
hasFieldNormErrors = true
@@ -200,18 +269,17 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
// Aggregate the norms to farm level
const validFieldNorms = (fieldNorms || []).filter(
(field) => field.norms !== undefined,
- ) as {
- b_id: string
- b_area: number
- norms: {
- manure: GebruiksnormResult
- phosphate: GebruiksnormResult
- nitrogen: GebruiksnormResult
- }
- }[]
+ ) as InputAggregateNormsToFarmLevel
farmNorms =
- await functionsForms.aggregateNormsToFarmLevel(
- validFieldNorms,
+ functionsForNorms.aggregateNormsToFarmLevel(validFieldNorms)
+
+ // Aggregate the fillings to farm level
+ const validFieldFillings = (fieldNorms || []).filter(
+ (field) => field.normsFilling !== undefined,
+ ) as InputAggregateNormFillingsToFarmLevel
+ farmFillings =
+ functionsForFilling.aggregateNormFillingsToFarmLevel(
+ validFieldFillings,
)
} catch (error) {
errorMessage = String(error).replace("Error: ", "")
@@ -222,6 +290,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
errorMessage: errorMessage,
fieldNorms: fieldNorms,
farmNorms: farmNorms,
+ farmFillings: farmFillings,
hasFieldNormErrors: hasFieldNormErrors,
fieldErrorMessages: fieldErrorMessages,
}
@@ -255,9 +324,9 @@ export default function FarmNormsBlock() {
>) {
const {
farmNorms,
+ farmFillings,
fieldNorms,
errorMessage,
hasFieldNormErrors,
@@ -343,19 +413,25 @@ function Norms(loaderData: Awaited>) {
})
return (
-
-
-
- Disclaimer: Deze getallen zijn
- uitsluitend bedoeld voor informatieve doeleinden. De
- getoonde gebruiksnormen zijn indicatief en dienen te
- worden geverifieerd voor juridische naleving. Raadpleeg
- altijd de officiële RVO-publicaties en uw adviseur voor
- definitieve normen.
+
+
+
+ Disclaimer
+
+ Deze getallen zijn uitsluitend bedoeld voor informatieve
+ doeleinden. De getoonde gebruiksnormen zijn indicatief
+ en dienen te worden geverifieerd voor juridische
+ naleving. Raadpleeg altijd de officiële RVO-publicaties
+ en uw adviseur voor definitieve normen.
+
@@ -369,7 +445,7 @@ function Norms(loaderData: Awaited
>) {
}
// This block is now an independent return, not an else clause
return (
-
+
Helaas, nog geen gebruiksnormen beschikbaar voor{" "}
diff --git a/fdm-app/app/routes/farm.$b_id_farm.$calendar.nutrient_advice.$b_id.tsx b/fdm-app/app/routes/farm.$b_id_farm.$calendar.nutrient_advice.$b_id.tsx
index ef0605278..24ad9702f 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.$calendar.nutrient_advice.$b_id.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.$calendar.nutrient_advice.$b_id.tsx
@@ -1,4 +1,4 @@
-import { calculateDose } from "@svenvw/fdm-calculator"
+import { calculateDose, getNutrientAdvice } from "@svenvw/fdm-calculator"
import {
getCultivations,
getCurrentSoilData,
@@ -22,12 +22,12 @@ import {
import { FieldNutrientAdviceSkeleton } from "~/components/blocks/nutrient-advice/skeletons"
import type { NutrientDescription } from "~/components/blocks/nutrient-advice/types"
import { ErrorBlock } from "~/components/custom/error"
-import { getNutrientAdvice } from "~/integrations/nmi"
import { getSession } from "~/lib/auth.server"
import { getCalendar, getTimeframe } from "~/lib/calendar"
import { clientConfig } from "~/lib/config"
import { handleLoaderError } from "~/lib/error"
import { fdm } from "~/lib/fdm.server"
+import { getNmiApiKey } from "../integrations/nmi"
// Meta
export const meta: MetaFunction = () => {
@@ -126,11 +126,13 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
})
// Request nutrient advice
- const nutrientAdvice = await getNutrientAdvice(
+ const nmiApiKey = getNmiApiKey()
+ const nutrientAdvice = await getNutrientAdvice(fdm, {
b_lu_catalogue,
- field.b_centroid,
- resolvedCurrentSoilData,
- )
+ b_centroid: field.b_centroid,
+ currentSoilData: resolvedCurrentSoilData,
+ nmiApiKey: nmiApiKey,
+ })
return {
nutrientAdvice: nutrientAdvice,
diff --git a/fdm-app/app/routes/farm.$b_id_farm._index.tsx b/fdm-app/app/routes/farm.$b_id_farm._index.tsx
index 306d35824..b2c6d809d 100644
--- a/fdm-app/app/routes/farm.$b_id_farm._index.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm._index.tsx
@@ -1,12 +1,15 @@
+import { cowHead } from "@lucide/lab"
import { getFarm, getFarms, getFields } from "@svenvw/fdm-core"
import {
ArrowRightLeft,
BookOpenText,
ChevronUp,
Home,
+ Icon,
Landmark,
MapIcon,
Plus,
+ ScrollText,
Shapes,
Square,
Trash2,
@@ -420,6 +423,29 @@ export default function FarmDashboardIndex() {
Derogatie
+
+
+
+ Bio-certificaat
+
+
+
+
+
+ Beweiding
+
+
x.parameter === "p_type_rvo",
+ )?.options ?? []
+ const rvoLabelByValue = new Map(
+ p_type_rvo_options.map((opt: { value: string; label: string }) => [
+ String(opt.value),
+ opt.label,
+ ]),
+ )
+
+ // Get the available fertilizers and the label for p_type_rvo
const fertilizers: Fertilizer[] = await getFertilizers(
fdm,
session.principal_id,
b_id_farm,
+ ).then((fertilizers) =>
+ fertilizers.map((fertilizer) => ({
+ ...fertilizer,
+ p_type_rvo_label:
+ rvoLabelByValue.get(String(fertilizer.p_type_rvo)) ?? null,
+ })),
)
// Return user information from loader
diff --git a/fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.$p_id.tsx b/fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.$p_id.tsx
index 83fd6024d..19d83b234 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.$p_id.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.$p_id.tsx
@@ -152,7 +152,8 @@ export async function action({ request, params }: ActionFunctionArgs) {
p_name_nl: formValues.p_name_nl,
p_name_en: formValues.p_name_en,
p_description: formValues.p_description,
- p_type: formValues.p_type,
+ p_type: null,
+ p_type_rvo: formValues.p_type_rvo,
p_dm: formValues.p_dm,
p_density: formValues.p_density,
p_om: formValues.p_om,
diff --git a/fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.custom.tsx b/fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.custom.tsx
index cf36a2b68..268588b65 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.custom.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.fertilizers.new.custom.tsx
@@ -52,7 +52,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
p_id: undefined, // Added p_id
p_source: b_id_farm,
p_name_nl: "",
- p_type: undefined,
+ p_type_rvo: undefined,
p_dm: undefined,
p_density: undefined,
p_om: undefined,
@@ -156,7 +156,8 @@ export async function action({ request, params }: ActionFunctionArgs) {
p_name_nl: formValues.p_name_nl,
p_name_en: formValues.p_name_en,
p_description: formValues.p_description,
- p_type: formValues.p_type,
+ p_type: null,
+ p_type_rvo: formValues.p_type_rvo,
p_dm: formValues.p_dm,
p_density: formValues.p_density,
p_om: formValues.p_om,
diff --git a/fdm-app/app/routes/farm.$b_id_farm.settings.derogation.tsx b/fdm-app/app/routes/farm.$b_id_farm.settings.derogation.tsx
index e79c7c0dc..c03a88750 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.settings.derogation.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.settings.derogation.tsx
@@ -94,8 +94,8 @@ export default function DerogationSettings() {
.filter((year) => year >= 2006 && year <= 2025)
return (
-
-
+
+
Derogatie
diff --git a/fdm-app/app/routes/farm.$b_id_farm.settings.grazing-intention.tsx b/fdm-app/app/routes/farm.$b_id_farm.settings.grazing-intention.tsx
new file mode 100644
index 000000000..d5c04db3f
--- /dev/null
+++ b/fdm-app/app/routes/farm.$b_id_farm.settings.grazing-intention.tsx
@@ -0,0 +1,151 @@
+import { getGrazingIntentions, setGrazingIntention } from "@svenvw/fdm-core"
+import {
+ type ActionFunctionArgs,
+ type LoaderFunctionArgs,
+ useFetcher,
+ useLoaderData,
+} from "react-router"
+import { dataWithSuccess } from "remix-toast"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardHeader,
+ CardTitle,
+} from "~/components/ui/card"
+import { Switch } from "~/components/ui/switch"
+import {
+ Table,
+ TableBody,
+ TableCell,
+ TableHead,
+ TableHeader,
+ TableRow,
+} from "~/components/ui/table"
+import { getSession } from "~/lib/auth.server"
+import { getCalendarSelection } from "~/lib/calendar"
+import { handleActionError, handleLoaderError } from "~/lib/error"
+import { fdm } from "~/lib/fdm.server"
+
+export async function loader({ request, params }: LoaderFunctionArgs) {
+ try {
+ const b_id_farm = params.b_id_farm
+ if (!b_id_farm) {
+ throw new Error("invalid: b_id_farm")
+ }
+ const session = await getSession(request)
+ const grazingIntentions = await getGrazingIntentions(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ )
+ return { b_id_farm, grazingIntentions }
+ } catch (error) {
+ throw handleLoaderError(error)
+ }
+}
+
+export async function action({ request, params }: ActionFunctionArgs) {
+ try {
+ const b_id_farm = params.b_id_farm
+ if (!b_id_farm) {
+ throw new Error("invalid: b_id_farm")
+ }
+ const session = await getSession(request)
+ const formData = await request.formData()
+ const year = Number(formData.get("year"))
+ const hasGrazingIntention =
+ formData.get("hasGrazingIntention") === "true"
+ if (Number.isNaN(year)) {
+ throw new Error("invalid: year")
+ }
+
+ await setGrazingIntention(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ year,
+ !hasGrazingIntention,
+ )
+
+ if (hasGrazingIntention) {
+ return dataWithSuccess({}, `Beweiding voor ${year} uitgeschakeld.`)
+ }
+ return dataWithSuccess({}, `Beweiding voor ${year} ingeschakeld.`)
+ } catch (error) {
+ throw handleActionError(error)
+ }
+}
+
+export default function GrazingIntentionSettings() {
+ const { grazingIntentions } = useLoaderData()
+ const fetcher = useFetcher()
+
+ const currentYear = new Date().getFullYear()
+ const years = getCalendarSelection()
+ .map(Number)
+ .filter((year) => year >= 2006 && year <= currentYear + 1)
+
+ return (
+
+
+
+ Beweiding
+
+ Geef hier aan of je voor een bepaald jaar hebt beweid of
+ van plan bent te gaan beweiden. Dit heeft invloed op de
+ berekeningen.
+
+
+
+
+
+
+ Jaar
+ Beweiding
+
+
+
+ {years.map((year) => {
+ const hasGrazingIntention =
+ grazingIntentions.some(
+ (g) =>
+ g.b_grazing_intention_year ===
+ year && g.b_grazing_intention,
+ )
+ return (
+
+ {year}
+
+
+ {
+ fetcher.submit(
+ {
+ year: String(
+ year,
+ ),
+ hasGrazingIntention:
+ String(
+ hasGrazingIntention,
+ ),
+ },
+ { method: "post" },
+ )
+ }}
+ />
+
+
+
+ )
+ })}
+
+
+
+
+
+ )
+}
diff --git a/fdm-app/app/routes/farm.$b_id_farm.settings.organic-certification.tsx b/fdm-app/app/routes/farm.$b_id_farm.settings.organic-certification.tsx
new file mode 100644
index 000000000..39fa32106
--- /dev/null
+++ b/fdm-app/app/routes/farm.$b_id_farm.settings.organic-certification.tsx
@@ -0,0 +1,419 @@
+import { zodResolver } from "@hookform/resolvers/zod"
+import {
+ addOrganicCertification,
+ listOrganicCertifications,
+ removeOrganicCertification,
+} from "@svenvw/fdm-core"
+import { format } from "date-fns"
+import { nl } from "date-fns/locale"
+import { ScrollText, Trash2 } from "lucide-react"
+import { useId } from "react"
+import {
+ type ActionFunctionArgs,
+ Form,
+ type LoaderFunctionArgs,
+ type MetaFunction,
+ useLoaderData,
+ useNavigation,
+} from "react-router"
+import { RemixFormProvider, useRemixForm } from "remix-hook-form"
+import { dataWithSuccess } from "remix-toast"
+import type { z } from "zod"
+import { formSchema } from "~/components/blocks/organic-certification/schema"
+import { DatePicker } from "~/components/custom/date-picker"
+import { LoadingSpinner } from "~/components/custom/loadingspinner"
+import { Button } from "~/components/ui/button"
+import {
+ Card,
+ CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
+} from "~/components/ui/card"
+import {
+ Dialog,
+ DialogClose,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+ DialogTrigger,
+} from "~/components/ui/dialog"
+import {
+ Empty,
+ EmptyContent,
+ EmptyDescription,
+ EmptyHeader,
+ EmptyMedia,
+ EmptyTitle,
+} from "~/components/ui/empty"
+import {
+ FormControl,
+ FormDescription,
+ FormField,
+ FormItem,
+ FormLabel,
+ FormMessage,
+} from "~/components/ui/form"
+import { Input } from "~/components/ui/input"
+import { getSession } from "~/lib/auth.server"
+import { clientConfig } from "~/lib/config"
+import { handleLoaderError } from "~/lib/error"
+import { fdm } from "~/lib/fdm.server"
+import { extractFormValuesFromRequest } from "~/lib/form"
+
+export const meta: MetaFunction = () => {
+ return [
+ {
+ title: `Bio-certificaat - Instellingen - Bedrijf | ${clientConfig.name}`,
+ },
+ {
+ name: "description",
+ content: "Bekijk of voeg een bio-certificaat voor dit bedrijf toe.",
+ },
+ ]
+}
+
+export async function loader({ request, params }: LoaderFunctionArgs) {
+ try {
+ const b_id_farm = params.b_id_farm
+ if (b_id_farm === undefined) {
+ throw new Error("missing: b_id_farm")
+ }
+
+ const session = await getSession(request)
+ const organicCertifications = await listOrganicCertifications(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ )
+
+ // For now we expect that a farm can have only 1 certification
+ const organicCertification = organicCertifications[0]
+
+ return { b_id_farm, organicCertification }
+ } catch (error) {
+ throw handleLoaderError(error)
+ }
+}
+
+export async function action({ request, params }: ActionFunctionArgs) {
+ try {
+ const b_id_farm = params.b_id_farm
+ if (b_id_farm === undefined) {
+ throw new Error("missing: b_id_farm")
+ }
+ const session = await getSession(request)
+
+ if (request.method === "POST") {
+ const formValues = await extractFormValuesFromRequest(
+ request,
+ formSchema,
+ )
+
+ const b_organic_traces = formValues.b_organic_traces
+ const b_organic_skal = formValues.b_organic_skal
+ const b_organic_issued = formValues.b_organic_issued
+ const b_organic_expires = formValues.b_organic_expires
+
+ await addOrganicCertification(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ b_organic_traces,
+ b_organic_skal,
+ b_organic_issued,
+ b_organic_expires,
+ )
+
+ return dataWithSuccess("organic certification added", {
+ message: "Bio-certificaat is toegevoegd! 🎉",
+ })
+ }
+ if (request.method === "DELETE") {
+ const formData = await request.formData()
+ const b_id_organic = formData.get("b_id_organic")
+
+ if (typeof b_id_organic !== "string") {
+ throw new Error("missing: b_id_organic")
+ }
+ await removeOrganicCertification(
+ fdm,
+ session.principal_id,
+ b_id_organic,
+ )
+ return dataWithSuccess("organic certification deleted", {
+ message: "Bio-certificaat is verwijderd",
+ })
+ }
+ throw new Error("invalid method")
+ } catch (error) {
+ throw handleLoaderError(error)
+ }
+}
+
+export default function OrganicCertificationSettings() {
+ const { organicCertification } = useLoaderData()
+ const navigation = useNavigation()
+
+ const isDeleting =
+ navigation.state === "submitting" && navigation.formMethod === "DELETE"
+
+ const form = useRemixForm>({
+ mode: "onTouched",
+ resolver: zodResolver(formSchema),
+ defaultValues: {
+ b_organic_traces: "",
+ b_organic_skal: "",
+ b_organic_issued: undefined, // DatePicker handles undefined for initial state
+ b_organic_expires: undefined,
+ },
+ })
+
+ const formId = useId()
+
+ return (
+
+ {organicCertification ? (
+
+
+
+
+ Bio-certificaat
+
+
+ Details van het bio-certificaat voor dit bedrijf.
+
+
+
+
+
+
+ SKAL-nummer
+
+
+ {organicCertification.b_organic_skal ||
+ "Onbekend"}
+
+
+
+
+ Geldig van:
+
+
+ {format(
+ new Date(
+ organicCertification.b_organic_issued,
+ ),
+ "PP",
+ { locale: nl },
+ )}
+
+
+
+
+ Verloopt op:
+
+
+ {organicCertification.b_organic_expires
+ ? format(
+ new Date(
+ organicCertification.b_organic_expires,
+ ),
+ "PP",
+ { locale: nl },
+ )
+ : "Onbekend"}
+
+
+
+
+
+
+
+
+ Verwijderen
+
+
+
+
+ Weet u het zeker?
+
+ Deze actie kan niet ongedaan worden
+ gemaakt. Dit zal het bio-certificaat
+ permanent verwijderen.
+
+
+
+
+
+ Annuleren
+
+
+
+
+
+
+
+
+ ) : (
+
+
+
+
+
+
+
+ Dit bedrijf heeft geen bio-certificaat
+
+
+ Als dit bedrijf wel een bio-certificaat heeft,
+ kunt u deze toevoegen.
+
+
+
+
+ Voeg toe
+
+
+
+
+
+
+
+
+
+ )}
+
+ )
+}
diff --git a/fdm-app/app/routes/farm.$b_id_farm.settings.tsx b/fdm-app/app/routes/farm.$b_id_farm.settings.tsx
index 2146bc176..3718a2da8 100644
--- a/fdm-app/app/routes/farm.$b_id_farm.settings.tsx
+++ b/fdm-app/app/routes/farm.$b_id_farm.settings.tsx
@@ -88,14 +88,22 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
to: `/farm/${b_id_farm}/settings/properties`,
title: "Gegevens",
},
- {
- to: `/farm/${b_id_farm}/settings/access`,
- title: "Toegang",
- },
{
to: `/farm/${b_id_farm}/settings/derogation`,
title: "Derogatie",
},
+ {
+ to: `/farm/${b_id_farm}/settings/organic-certification`,
+ title: "Bio-certificaat",
+ },
+ {
+ to: `/farm/${b_id_farm}/settings/grazing-intention`,
+ title: "Beweiding",
+ },
+ {
+ to: `/farm/${b_id_farm}/settings/access`,
+ title: "Toegang",
+ },
{
to: `/farm/${b_id_farm}/settings/delete`,
title: "Verwijderen",
diff --git a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.atlas.tsx b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.atlas.tsx
index 88ca355b7..ba84c5d44 100644
--- a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.atlas.tsx
+++ b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.atlas.tsx
@@ -3,6 +3,7 @@ import {
addField,
addSoilAnalysis,
getCultivations,
+ getDefaultDatesOfCultivation,
getFarm,
getFields,
} from "@svenvw/fdm-core"
@@ -428,13 +429,28 @@ export async function action({ request, params }: ActionFunctionArgs) {
const b_id_source = field.properties.b_id_source
const b_lu_catalogue = field.properties.b_lu_catalogue
const b_geometry = field.geometry
- const currentYear = new Date().getFullYear()
- const defaultDate = timeframe.start
- ? timeframe.start
- : `${currentYear}-01-01`
- const b_start = defaultDate
- const b_lu_start = defaultDate
- const b_lu_end = undefined
+
+ const parsedYear = Number.parseInt(
+ String(calendar ?? ""),
+ 10,
+ )
+ const currentYear =
+ Number.isInteger(parsedYear) &&
+ parsedYear >= 1970 &&
+ parsedYear < 2100
+ ? parsedYear
+ : timeframe.start.getFullYear()
+ const cultivationDefaultDates =
+ await getDefaultDatesOfCultivation(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ b_lu_catalogue,
+ currentYear,
+ )
+ const b_start = new Date(`${currentYear}-01-01`)
+ const b_lu_start = cultivationDefaultDates.b_lu_start
+ const b_lu_end = cultivationDefaultDates.b_lu_end
const b_end = undefined
const b_acquiring_method = "unknown"
diff --git a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue._index.tsx b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue._index.tsx
index 99817a2c7..0277a3ba3 100644
--- a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue._index.tsx
+++ b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue._index.tsx
@@ -5,6 +5,7 @@ import {
getFertilizerParametersDescription,
getFertilizers,
removeFertilizerApplication,
+ updateFertilizerApplication,
} from "@svenvw/fdm-core"
import {
type ActionFunctionArgs,
@@ -15,7 +16,10 @@ import {
} from "react-router"
import { dataWithSuccess } from "remix-toast"
import { FertilizerApplicationCard } from "~/components/blocks/fertilizer-applications/card"
-import { FormSchema } from "~/components/blocks/fertilizer-applications/formschema"
+import {
+ FormSchema,
+ FormSchemaModify,
+} from "~/components/blocks/fertilizer-applications/formschema"
import { getSession } from "~/lib/auth.server"
import { getTimeframe } from "~/lib/calendar"
import { clientConfig } from "~/lib/config"
@@ -67,6 +71,15 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
session.principal_id,
b_id_farm,
)
+
+ // Map fertilizer catalogue ids to their farm fertilizer acquiring ids
+ const fertilizerAcquiringIds: Record = {}
+ for (const fertilizer of fertilizers) {
+ if (fertilizer.p_id_catalogue) {
+ fertilizerAcquiringIds[fertilizer.p_id_catalogue] = fertilizer.p_id
+ }
+ }
+
const fertilizerParameterDescription = getFertilizerParametersDescription()
const applicationMethods = fertilizerParameterDescription.find(
(x: { parameter: string }) => x.parameter === "p_app_method_options",
@@ -126,7 +139,13 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
existingApplication.p_app_ids.push(app.p_app_id)
} else {
// If it's a new application, add it to the accumulator with a new p_app_ids array.
- accumulator.push({ ...app, p_app_ids: [app.p_app_id] })
+ accumulator.push({
+ ...app,
+ p_id:
+ fertilizerAcquiringIds[app.p_id_catalogue] ??
+ app.p_id_catalogue,
+ p_app_ids: [app.p_app_id],
+ })
}
})
@@ -145,6 +164,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
b_id_farm: b_id_farm,
fertilizerOptions: fertilizerOptions,
fertilizerApplications: fertilizerApplications,
+ fertilizers: fertilizers,
dose: dose.dose,
applicationMethodOptions: applicationMethods.options,
}
@@ -160,6 +180,7 @@ export default function Index() {
@@ -229,6 +250,37 @@ export async function action({ request, params }: ActionFunctionArgs) {
{ message: "Bemesting is toegevoegd! 🎉" },
)
}
+ if (request.method === "PUT") {
+ const formValues = await extractFormValuesFromRequest(
+ request,
+ FormSchemaModify,
+ )
+ const rawAppIds = formValues.p_app_id
+
+ if (!rawAppIds || typeof rawAppIds !== "string") {
+ throw new Error("invalid: p_app_id")
+ }
+
+ const p_app_ids = rawAppIds.split(",")
+
+ const { p_id, p_app_amount, p_app_date, p_app_method } = formValues
+
+ await Promise.all(
+ p_app_ids.map((p_app_id: string) =>
+ updateFertilizerApplication(
+ fdm,
+ session.principal_id,
+ p_app_id,
+ p_id,
+ p_app_amount,
+ p_app_method,
+ p_app_date,
+ ),
+ ),
+ )
+
+ return dataWithSuccess({}, { message: "Bemesting is gewijzigd" })
+ }
if (request.method === "DELETE") {
const formData = await request.formData()
const rawAppIds = formData.get("p_app_id")
diff --git a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue.manage.new.$p_id.tsx b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue.manage.new.$p_id.tsx
index a3e50a3ed..696abc122 100644
--- a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue.manage.new.$p_id.tsx
+++ b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue.manage.new.$p_id.tsx
@@ -161,7 +161,8 @@ export async function action({ request, params }: ActionFunctionArgs) {
p_name_nl: formValues.p_name_nl,
p_name_en: formValues.p_name_en,
p_description: formValues.p_description,
- p_type: formValues.p_type,
+ p_type: null,
+ p_type_rvo: formValues.p_type_rvo,
p_dm: formValues.p_dm,
p_density: formValues.p_density,
p_om: formValues.p_om,
diff --git a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue.manage.new.custom.tsx b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue.manage.new.custom.tsx
index ddae4bb67..e9e9d415d 100644
--- a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue.manage.new.custom.tsx
+++ b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.fertilizers.$b_lu_catalogue.manage.new.custom.tsx
@@ -54,6 +54,7 @@ export async function loader({ request, params }: LoaderFunctionArgs) {
p_source: b_id_farm,
p_name_nl: "",
p_type: undefined,
+ p_type_rvo: undefined,
p_dm: undefined,
p_density: undefined,
p_om: undefined,
@@ -165,7 +166,8 @@ export async function action({ request, params }: ActionFunctionArgs) {
p_name_nl: formValues.p_name_nl,
p_name_en: formValues.p_name_en,
p_description: formValues.p_description,
- p_type: formValues.p_type,
+ p_type: null,
+ p_type_rvo: formValues.p_type_rvo,
p_dm: formValues.p_dm,
p_density: formValues.p_density,
p_om: formValues.p_om,
diff --git a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.upload.tsx b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.upload.tsx
index e49ae9326..7e823c342 100644
--- a/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.upload.tsx
+++ b/fdm-app/app/routes/farm.create.$b_id_farm.$calendar.upload.tsx
@@ -4,6 +4,7 @@ import {
addCultivation,
addField,
addSoilAnalysis,
+ getDefaultDatesOfCultivation,
getFarm,
} from "@svenvw/fdm-core"
import * as turf from "@turf/turf"
@@ -233,13 +234,22 @@ export async function action({ request, params }: ActionFunctionArgs) {
b_end,
)
+ const cultivationDefaultDates = await getDefaultDatesOfCultivation(
+ fdm,
+ session.principal_id,
+ b_id_farm,
+ b_lu_catalogue,
+ Number(calendar),
+ )
+ const b_lu_start = cultivationDefaultDates.b_lu_start
+ const b_lu_end = cultivationDefaultDates.b_lu_end
await addCultivation(
fdm,
session.principal_id,
b_lu_catalogue,
fieldId,
- new Date(`${calendar}-01-01`),
- undefined,
+ b_lu_start,
+ b_lu_end,
)
if (nmiApiKey) {
diff --git a/fdm-app/app/store/field-fertilizer-form.tsx b/fdm-app/app/store/field-fertilizer-form.tsx
index f716042cc..75dedf5f7 100644
--- a/fdm-app/app/store/field-fertilizer-form.tsx
+++ b/fdm-app/app/store/field-fertilizer-form.tsx
@@ -1,9 +1,7 @@
-import type { z } from "zod"
import { create } from "zustand"
import { createJSONStorage, persist } from "zustand/middleware"
-import type { FormSchema } from "~/components/blocks/fertilizer-applications/formschema"
+import type { FieldFertilizerFormValues } from "~/components/blocks/fertilizer-applications/formschema"
-type FieldFertilizerFormValues = z.infer
interface FieldFertilizerFormStore {
db: Record>
save(
diff --git a/fdm-app/package.json b/fdm-app/package.json
index b7d286e78..7c0ee8bb0 100644
--- a/fdm-app/package.json
+++ b/fdm-app/package.json
@@ -1,6 +1,6 @@
{
"name": "@svenvw/fdm-app",
- "version": "0.23.2",
+ "version": "0.24.0",
"private": true,
"sideEffects": false,
"type": "module",
@@ -16,24 +16,28 @@
"dependencies": {
"@date-fns/tz": "^1.4.1",
"@hookform/resolvers": "^5.2.2",
+ "@lucide/lab": "^0.1.2",
"@mapbox/geojson-extent": "^1.0.1",
"@mapbox/mapbox-gl-geocoder": "^5.1.2",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-icons": "^1.3.2",
+ "@radix-ui/react-label": "^2.1.7",
+ "@radix-ui/react-progress": "^1.1.7",
+ "@radix-ui/react-separator": "^1.1.7",
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-switch": "^1.2.6",
- "@react-email/components": "^0.5.3",
+ "@react-email/components": "^0.5.6",
"@react-email/tailwind": "1.2.2",
- "@react-router/node": "^7.9.1",
- "@react-router/serve": "^7.9.1",
+ "@react-router/node": "^7.9.4",
+ "@react-router/serve": "^7.9.4",
"@remix-run/file-storage": "^0.9.0",
"@remix-run/form-data-parser": "^0.10.1",
- "@sentry/profiling-node": "^10.12.0",
- "@sentry/react-router": "^10.12.0",
+ "@sentry/profiling-node": "^10.22.0",
+ "@sentry/react-router": "^10.22.0",
"@svenvw/fdm-calculator": "workspace:^",
"@svenvw/fdm-core": "workspace:^",
"@svenvw/fdm-data": "workspace:*",
- "@tailwindcss/vite": "^4.1.13",
+ "@tailwindcss/vite": "^4.1.14",
"@tanstack/react-table": "^8.21.3",
"@turf/centroid": "^7.2.0",
"@turf/turf": "^7.2.0",
@@ -44,67 +48,68 @@
"date-fns": "^4.1.0",
"drizzle-orm": "catalog:",
"file-type": "^21.0.0",
- "flatgeobuf": "^4.2.0",
- "framer-motion": "^12.23.14",
+ "flatgeobuf": "^4.3.1",
+ "framer-motion": "^12.23.24",
"fuzzysort": "^3.1.0",
- "isbot": "^5.1.30",
+ "isbot": "^5.1.31",
"lodash.throttle": "^4.1.1",
- "lucide-react": "^0.544.0",
+ "lucide-react": "^0.545.0",
"mapbox-gl": "^3.15.0",
+ "nanoid": "^5.1.5",
"next-themes": "^0.4.6",
"postgres": "^3.4.7",
- "posthog-js": "^1.266.0",
- "posthog-node": "^5.8.4",
+ "posthog-js": "^1.284.0",
+ "posthog-node": "^5.11.0",
"postmark": "^4.0.5",
"proj4": "^2.19.10",
"radix-ui": "^1.4.3",
- "react": "^19.1.1",
- "react-day-picker": "9.10.0",
- "react-dom": "^19.1.1",
- "react-hook-form": "^7.62.0",
- "react-map-gl": "^8.0.4",
+ "react": "^19.2.0",
+ "react-day-picker": "9.11.1",
+ "react-dom": "^19.2.0",
+ "react-hook-form": "^7.65.0",
+ "react-map-gl": "^8.1.0",
"react-markdown": "^10.1.0",
- "react-router": "^7.9.1",
- "react-router-dom": "^7.9.1",
+ "react-router": "^7.9.4",
+ "react-router-dom": "^7.9.4",
"recharts": "^2.15.4",
"remark-gfm": "^4.0.1",
"remix-hook-form": "7.1.0",
- "remix-toast": "^3.2.0",
- "remix-utils": "^8.8.0",
- "shpjs": "^6.1.0",
+ "remix-toast": "^3.3.0",
+ "remix-utils": "^9.0.0",
+ "shpjs": "^6.2.0",
"sonner": "^2.0.7",
"tailwind-merge": "^3.3.1",
"tailwindcss-animate": "^1.0.7",
- "validator": "^13.15.15",
- "vite-node": "^3.2.4",
+ "validator": "^13.15.20",
"zod": "^3.25.76",
"zustand": "^5.0.8"
},
"devDependencies": {
"@dotenvx/dotenvx": "catalog:",
- "@react-router/dev": "^7.9.1",
- "@react-router/fs-routes": "^7.9.1",
+ "@react-router/dev": "^7.9.4",
+ "@react-router/fs-routes": "^7.9.4",
"@svenvw/fdm-calculator": "workspace:*",
"@svenvw/fdm-core": "workspace:*",
"@svenvw/fdm-data": "workspace:*",
- "@tailwindcss/postcss": "^4.1.13",
+ "@tailwindcss/postcss": "^4.1.14",
"@types/geojson": "^7946.0.16",
"@types/lodash.throttle": "^4.1.9",
"@types/mapbox-gl": "^3.4.1",
"@types/mapbox__geojson-extent": "^1.0.3",
"@types/mapbox__mapbox-gl-geocoder": "^5.0.0",
- "@types/react": "^19.1.13",
- "@types/react-dom": "^19.1.9",
+ "@types/react": "^19.2.2",
+ "@types/react-dom": "^19.2.2",
"@types/react-map-gl": "^6.1.7",
"@types/validator": "^13.15.3",
"postcss": "^8.5.6",
- "tailwindcss": "^4.1.13",
+ "tailwindcss": "^4.1.14",
"typescript": "catalog:",
"vite": "catalog:",
+ "vite-node": "^3.2.4",
"vite-tsconfig-paths": "catalog:"
},
"engines": {
"node": ">=20.0.0"
},
- "packageManager": "pnpm@10.17.0"
+ "packageManager": "pnpm@10.18.3"
}
diff --git a/fdm-calculator/.gitignore b/fdm-calculator/.gitignore
index 1cac5597e..231bf6cdf 100644
--- a/fdm-calculator/.gitignore
+++ b/fdm-calculator/.gitignore
@@ -11,6 +11,7 @@ node_modules
dist
dist-ssr
*.local
+coverage
# Editor directories and files
.vscode/*
diff --git a/fdm-calculator/CHANGELOG.md b/fdm-calculator/CHANGELOG.md
index 116d8b115..ffbb5aac6 100644
--- a/fdm-calculator/CHANGELOG.md
+++ b/fdm-calculator/CHANGELOG.md
@@ -1,5 +1,30 @@
# fdm-calculator
+## 0.8.0
+
+### Minor Changes
+
+- a74a6e8: Add `getNutrientAdvice` and `requestNutrientAdvice` to fetch nutrient advices from the NMI API
+- 77c309d: The nitrogen balance can now be calculated per field instead of only per farm.
+- 77c309d: The nitrogen balance calculation now gracefully handles errors for individual fields. Instead of failing the entire farm calculation, it will now return partial results for successfully calculated fields and provide specific error messages for fields that encountered issues.
+- 91d4103: Add cached versions of main calculator functions for `balance` and `norms` to enable caching
+- 8b2bf8c: Add functions to calculate the norm filling by fertilizer application for NL 2025
+
+### Patch Changes
+
+- 726ae00: Fixes to differentiate stikstofgebruiksnorm for grassland based on "beweiden" or "volledig maaien"
+- Updated dependencies [a226f7e]
+- Updated dependencies [a00a331]
+- Updated dependencies [8f9d4ff]
+- Updated dependencies [2f7b281]
+- Updated dependencies [c939de9]
+- Updated dependencies [b58cd07]
+- Updated dependencies [b58cd07]
+- Updated dependencies [ac5d94f]
+- Updated dependencies [6bcb528]
+- Updated dependencies [91d4103]
+ - @svenvw/fdm-core@0.26.0
+
## 0.7.2
### Patch Changes
diff --git a/fdm-calculator/package.json b/fdm-calculator/package.json
index d50151043..4c3a5d4fb 100644
--- a/fdm-calculator/package.json
+++ b/fdm-calculator/package.json
@@ -1,7 +1,7 @@
{
"name": "@svenvw/fdm-calculator",
"private": false,
- "version": "0.7.2",
+ "version": "0.8.0",
"description": "Calculate various insights based on the Farm Data Model",
"license": "MIT",
"homepage": "https://github.com/SvenVw/fdm",
@@ -61,5 +61,5 @@
"typescript": "catalog:",
"vitest": "catalog:"
},
- "packageManager": "pnpm@10.17.0"
+ "packageManager": "pnpm@10.18.3"
}
diff --git a/fdm-calculator/rollup.config.js b/fdm-calculator/rollup.config.js
index c5702b1e2..6dde9aafc 100644
--- a/fdm-calculator/rollup.config.js
+++ b/fdm-calculator/rollup.config.js
@@ -3,6 +3,7 @@ import resolve from "@rollup/plugin-node-resolve"
import terser from "@rollup/plugin-terser"
import typescript from "@rollup/plugin-typescript"
import { defineConfig } from "rollup"
+import packageJson from "./package.json" with { type: "json" }
export default defineConfig({
input: "src/index.ts", // Your entry point
@@ -29,6 +30,44 @@ export default defineConfig({
}
: false,
}), // Minifies the output
+ {
+ renderChunk: (code, map) => {
+ const replacement = `"fdm-calculator:${packageJson.version}"`
+
+ const placeholder = `"fdm-calculator:{FDM_CALCULATOR_VERSION}"`
+ const occurrences =
+ code.match(
+ new RegExp(
+ placeholder.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&"),
+ "g",
+ ),
+ ) || []
+
+ if (occurrences.length === 0) {
+ console.warn(
+ `⚠️ Version placeholder "${placeholder}" not found in bundle`,
+ )
+ } else if (occurrences.length > 1) {
+ console.warn(
+ `⚠️ Version placeholder "${placeholder}" appears ${occurrences.length} times`,
+ )
+ }
+
+ if (replacement.length > placeholder.length) {
+ console.warn(
+ "⚠️ Replacement fdm-calculator version string ended up longer than the placeholder in package.ts. Source map will be broken.",
+ )
+ }
+
+ return {
+ code: code.replace(
+ placeholder,
+ replacement.padEnd(placeholder.length, " "), // Pad to not break the source map
+ ),
+ map,
+ }
+ },
+ }, // Modifies bundled package.ts to contain the actual package version
],
external: ["@svenvw/fdm-core", "geotiff"],
})
diff --git a/fdm-calculator/src/balance/nitrogen/emission/ammonia/fertilizers.test.ts b/fdm-calculator/src/balance/nitrogen/emission/ammonia/fertilizers.test.ts
index 4178e6c7b..976b9fe61 100644
--- a/fdm-calculator/src/balance/nitrogen/emission/ammonia/fertilizers.test.ts
+++ b/fdm-calculator/src/balance/nitrogen/emission/ammonia/fertilizers.test.ts
@@ -1,4 +1,4 @@
-import { describe, expect, it, vi } from "vitest"
+import { describe, expect, it } from "vitest"
import type {
CultivationDetail,
FertilizerDetail,
diff --git a/fdm-calculator/src/balance/nitrogen/emission/ammonia/residues.ts b/fdm-calculator/src/balance/nitrogen/emission/ammonia/residues.ts
index a28f056c7..a67f23035 100644
--- a/fdm-calculator/src/balance/nitrogen/emission/ammonia/residues.ts
+++ b/fdm-calculator/src/balance/nitrogen/emission/ammonia/residues.ts
@@ -111,7 +111,10 @@ export function calculateNitrogenEmissionViaAmmoniaByResidues(
)
// Calculate the Emission Factor
- let emissionFactor = new Decimal(0.41).times(b_lu_n_residue).minus(5.42).dividedBy(100)
+ let emissionFactor = new Decimal(0.41)
+ .times(b_lu_n_residue)
+ .minus(5.42)
+ .dividedBy(100)
if (emissionFactor.lt(0)) {
emissionFactor = new Decimal(0)
} else if (emissionFactor.gt(1)) {
diff --git a/fdm-calculator/src/balance/nitrogen/index.test.ts b/fdm-calculator/src/balance/nitrogen/index.test.ts
index 480c3aec3..5a4831606 100644
--- a/fdm-calculator/src/balance/nitrogen/index.test.ts
+++ b/fdm-calculator/src/balance/nitrogen/index.test.ts
@@ -129,9 +129,10 @@ describe("calculateNitrogenBalance", () => {
},
}
- await expect(
- calculateNitrogenBalance(mockNitrogenBalanceInput),
- ).rejects.toThrowError()
+ const result = await calculateNitrogenBalance(mockNitrogenBalanceInput)
+
+ expect(result.hasErrors).toBe(true)
+ expect(result.fieldErrorMessages.length).toBeGreaterThan(0)
})
})
diff --git a/fdm-calculator/src/balance/nitrogen/index.ts b/fdm-calculator/src/balance/nitrogen/index.ts
index 23b13209d..3ece2c142 100644
--- a/fdm-calculator/src/balance/nitrogen/index.ts
+++ b/fdm-calculator/src/balance/nitrogen/index.ts
@@ -1,4 +1,4 @@
-import type { fdmSchema } from "@svenvw/fdm-core"
+import { type fdmSchema, withCalculationCache } from "@svenvw/fdm-core"
import Decimal from "decimal.js"
import {
calculateBulkDensity,
@@ -6,6 +6,7 @@ import {
calculateOrganicCarbon,
calculateOrganicMatter,
} from "../../conversions/soil"
+import pkg from "../../package"
import { getFdmPublicDataUrl } from "../../shared/public-data-url"
import { calculateNitrogenEmission } from "./emission"
import { calculateNitrogenRemoval } from "./removal"
@@ -18,6 +19,8 @@ import type {
FieldInput,
NitrogenBalance,
NitrogenBalanceField,
+ NitrogenBalanceFieldNumeric,
+ NitrogenBalanceFieldResult,
NitrogenBalanceInput,
NitrogenBalanceNumeric,
SoilAnalysisPicked,
@@ -37,79 +40,102 @@ import type {
export async function calculateNitrogenBalance(
nitrogenBalanceInput: NitrogenBalanceInput,
): Promise {
- // Changed return type
- try {
- // Destructure input directly
- const { fields, fertilizerDetails, cultivationDetails, timeFrame } =
- nitrogenBalanceInput
+ // Destructure input directly
+ const { fields, fertilizerDetails, cultivationDetails, timeFrame } =
+ nitrogenBalanceInput
- // Set the link to location of FDM public data
- const fdmPublicDataUrl = getFdmPublicDataUrl()
+ // Set the link to location of FDM public data
+ const fdmPublicDataUrl = getFdmPublicDataUrl()
- // Pre-process details into Maps for efficient lookups
- const fertilizerDetailsMap = new Map(
- fertilizerDetails.map((detail) => [detail.p_id_catalogue, detail]),
- )
- const cultivationDetailsMap = new Map(
- cultivationDetails.map((detail) => [detail.b_lu_catalogue, detail]),
- )
+ // Pre-process details into Maps for efficient lookups
+ const fertilizerDetailsMap = new Map(
+ fertilizerDetails.map((detail) => [detail.p_id_catalogue, detail]),
+ )
+ const cultivationDetailsMap = new Map(
+ cultivationDetails.map((detail) => [detail.b_lu_catalogue, detail]),
+ )
- // Fetch all deposition data in a single, batched request to avoid requesting the GeoTIIF for every field
- const depositionByField =
- await calculateAllFieldsNitrogenSupplyByDeposition(
- fields,
- timeFrame,
- fdmPublicDataUrl,
- )
+ // Fetch all deposition data in a single, batched request to avoid requesting the GeoTIIF for every field
+ const depositionByField =
+ await calculateAllFieldsNitrogenSupplyByDeposition(
+ fields,
+ timeFrame,
+ fdmPublicDataUrl,
+ )
- //
- // Process fields in batches to control concurrency.
- // Instead of running all fields in parallel with Promise.all, which can
- // overwhelm the server for farms with many fields, we process them in
- // smaller, manageable chunks. This provides more stable performance.
- const batchSize = 50 // A sensible default, can be tuned based on profiling.
- const fieldsWithBalance: NitrogenBalanceField[] = []
-
- for (let i = 0; i < fields.length; i += batchSize) {
- const batch = fields.slice(i, i + batchSize)
- const batchResults = batch.map((field: FieldInput) => {
- const depositionSupply = depositionByField.get(field.field.b_id)
- if (!depositionSupply) {
- // This should not happen if the deposition calculation is correct
- throw new Error(
- `Deposition data not found for field ${field.field.b_id}`,
- )
+ // Process fields in batches to control concurrency.
+ // Instead of running all fields in parallel with Promise.all, which can
+ // overwhelm the server for farms with many fields, we process them in
+ // smaller, manageable chunks. This provides more stable performance.
+ const batchSize = 50 // A sensible default, can be tuned based on profiling.
+ const fieldsWithBalanceResults: NitrogenBalanceFieldResult[] = []
+ let hasErrors = false
+ const fieldErrorMessages: string[] = []
+
+ for (let i = 0; i < fields.length; i += batchSize) {
+ const batch = fields.slice(i, i + batchSize)
+ const batchPromises = batch.map(async (field: FieldInput) => {
+ const depositionSupply = depositionByField.get(field.field.b_id)
+ if (!depositionSupply) {
+ return {
+ b_id: field.field.b_id,
+ b_area: field.field.b_area ?? 0,
+ errorMessage: `Deposition data not found for field ${field.field.b_id}`,
}
+ }
- return calculateNitrogenBalanceField(
- field.field,
- field.cultivations,
- field.harvests,
- field.fertilizerApplications,
- field.soilAnalyses,
- fertilizerDetailsMap,
- cultivationDetailsMap,
- timeFrame,
- depositionSupply,
- )
- })
+ return calculateNitrogenBalanceField(
+ field.field,
+ field.cultivations,
+ field.harvests,
+ field.fertilizerApplications,
+ field.soilAnalyses,
+ fertilizerDetailsMap,
+ cultivationDetailsMap,
+ timeFrame,
+ depositionSupply,
+ )
+ })
- fieldsWithBalance.push(...batchResults)
+ const batchResults = await Promise.all(batchPromises)
+ for (const r of batchResults) {
+ if (r.errorMessage) {
+ hasErrors = true
+ fieldErrorMessages.push(`[${r.b_id}] ${r.errorMessage}`)
+ }
}
+ fieldsWithBalanceResults.push(...batchResults)
+ }
- // Aggregate the field balances to farm level
- const farmWithBalanceDecimal = calculateNitrogenBalancesFieldToFarm(
- fieldsWithBalance,
- fields,
- )
+ // Aggregate the field balances to farm level
+ const farmWithBalanceDecimal = calculateNitrogenBalancesFieldToFarm(
+ fieldsWithBalanceResults,
+ fields,
+ hasErrors,
+ fieldErrorMessages,
+ )
- // Convert the final result to use numbers instead of Decimals
- return convertNitrogenBalanceToNumeric(farmWithBalanceDecimal)
- } catch (error) {
- throw new Error(String(error))
- }
+ // Convert the final result to use numbers instead of Decimals
+ return convertNitrogenBalanceToNumeric(farmWithBalanceDecimal)
}
+/**
+ * A cached version of the `calculateNitrogenBalance` function.
+ *
+ * This function provides the same functionality as `calculateNitrogenBalance` but
+ * includes a caching mechanism to improve performance for repeated calls with the
+ * same input. The cache is managed by `withCalculationCache` and uses the
+ * `pkg.calculatorVersion` as part of its cache key.
+ *
+ * @param nitrogenBalanceInput - The input data for the nitrogen balance calculation.
+ * @returns A promise that resolves with the calculated nitrogen balance, with numeric values as numbers.
+ */
+export const getNitrogenBalance = withCalculationCache(
+ calculateNitrogenBalance,
+ "calculateNitrogenBalance",
+ pkg.calculatorVersion,
+)
+
/**
* Calculates the nitrogen balance for a single field, considering nitrogen supply, removal, and emission.
*
@@ -133,8 +159,7 @@ export async function calculateNitrogenBalance(
* @param cultivationDetailsMap - A map containing details for each cultivation.
* @param timeFrame - The time frame for the calculation.
* @param depositionSupply - The pre-calculated nitrogen supply from deposition.
- * @returns The calculated nitrogen balance for the field.
- * @throws Throws an error if any of the calculations fail.
+ * @returns The calculated nitrogen balance for the field, or an error message if the calculation fails.
*/
export function calculateNitrogenBalanceField(
field: FieldInput["field"],
@@ -146,72 +171,87 @@ export function calculateNitrogenBalanceField(
cultivationDetailsMap: Map,
timeFrame: NitrogenBalanceInput["timeFrame"],
depositionSupply: NitrogenBalanceField["supply"]["deposition"],
-): NitrogenBalanceField {
- // Get the details of the field
- const fieldDetails = field
-
- // Combine soil analyses
- const soilAnalysis = combineSoilAnalyses(soilAnalyses)
-
- // Use a field-local timeframe (intersection with input timeframe)
- const timeFrameField = {
- start:
- field.b_start && field.b_start.getTime() > timeFrame.start.getTime()
- ? field.b_start
- : timeFrame.start,
- end:
- field.b_end && field.b_end.getTime() < timeFrame.end.getTime()
- ? field.b_end
- : timeFrame.end,
- }
- // Normalize: ensure start <= end
- if (timeFrameField.end.getTime() < timeFrameField.start.getTime()) {
- // Clamp to an empty interval at the boundary to signal “no overlap”
- timeFrameField.end = timeFrameField.start
- }
+): NitrogenBalanceFieldResult {
+ try {
+ // Get the details of the field
+ const fieldDetails = field
+
+ // Combine soil analyses
+ const soilAnalysis = combineSoilAnalyses(soilAnalyses)
+
+ // Use a field-local timeframe (intersection with input timeframe)
+ const timeFrameField = {
+ start:
+ field.b_start &&
+ field.b_start.getTime() > timeFrame.start.getTime()
+ ? field.b_start
+ : timeFrame.start,
+ end:
+ field.b_end && field.b_end.getTime() < timeFrame.end.getTime()
+ ? field.b_end
+ : timeFrame.end,
+ }
+ // Normalize: ensure start <= end
+ if (timeFrameField.end.getTime() < timeFrameField.start.getTime()) {
+ // Clamp to an empty interval at the boundary to signal “no overlap”
+ timeFrameField.end = timeFrameField.start
+ }
- // Calculate the amount of Nitrogen supplied
- const supply = calculateNitrogenSupply(
- cultivations,
- fertilizerApplications,
- soilAnalysis,
- cultivationDetailsMap,
- fertilizerDetailsMap,
- depositionSupply,
- timeFrameField,
- )
+ // Calculate the amount of Nitrogen supplied
+ const supply = calculateNitrogenSupply(
+ cultivations,
+ fertilizerApplications,
+ soilAnalysis,
+ cultivationDetailsMap,
+ fertilizerDetailsMap,
+ depositionSupply,
+ timeFrameField,
+ )
- // Calculate the amount of Nitrogen removed
- const removal = calculateNitrogenRemoval(
- cultivations,
- harvests,
- cultivationDetailsMap,
- )
+ // Calculate the amount of Nitrogen removed
+ const removal = calculateNitrogenRemoval(
+ cultivations,
+ harvests,
+ cultivationDetailsMap,
+ )
- // Calculate the amount of Nitrogen that is volatilized
- const emission = calculateNitrogenEmission(
- cultivations,
- harvests,
- fertilizerApplications,
- cultivationDetailsMap,
- fertilizerDetailsMap,
- )
+ // Calculate the amount of Nitrogen that is volatilized
+ const emission = calculateNitrogenEmission(
+ cultivations,
+ harvests,
+ fertilizerApplications,
+ cultivationDetailsMap,
+ fertilizerDetailsMap,
+ )
- // Calculate the target for the Nitrogen balance
- const target = calculateTargetForNitrogenBalance(
- cultivations,
- soilAnalysis,
- cultivationDetailsMap,
- timeFrameField,
- )
+ // Calculate the target for the Nitrogen balance
+ const target = calculateTargetForNitrogenBalance(
+ cultivations,
+ soilAnalysis,
+ cultivationDetailsMap,
+ timeFrameField,
+ )
- return {
- b_id: fieldDetails.b_id,
- balance: supply.total.add(removal.total).add(emission.ammonia.total),
- supply: supply,
- removal: removal,
- emission: emission,
- target: target,
+ return {
+ b_id: fieldDetails.b_id,
+ b_area: fieldDetails.b_area ?? 0,
+ balance: {
+ b_id: fieldDetails.b_id,
+ balance: supply.total
+ .add(removal.total)
+ .add(emission.ammonia.total),
+ supply: supply,
+ removal: removal,
+ emission: emission,
+ target: target,
+ },
+ }
+ } catch (error) {
+ return {
+ b_id: field.b_id,
+ b_area: field.b_area ?? 0,
+ errorMessage: String(error).replace("Error: ", ""),
+ }
}
}
@@ -224,55 +264,57 @@ export function calculateNitrogenBalanceField(
*
* The function returns a comprehensive nitrogen balance for the farm, including total supply,
* removal, emission, and the overall balance.
- * @param fieldsWithBalance - An array of nitrogen balance results for individual fields.
+ * @param fieldsWithBalanceResults - An array of nitrogen balance results for individual fields, potentially including errors.
+ * @param fields - All field inputs, used to get original field data like area.
+ * @param hasErrors - Indicates if any field calculations failed.
+ * @param fieldErrorMessages - A list of error messages for fields that failed to calculate.
* @returns The aggregated nitrogen balance for the farm.
*/
export function calculateNitrogenBalancesFieldToFarm(
- fieldsWithBalance: NitrogenBalanceField[],
+ fieldsWithBalanceResults: NitrogenBalanceFieldResult[],
fields: FieldInput[],
+ hasErrors: boolean,
+ fieldErrorMessages: string[],
): NitrogenBalance {
- // Explicitly state it returns the Decimal version
- // Calculate the total farm area
- const totalFarmArea = fields.reduce(
- (sum, field) => sum.add(new Decimal(field.field.b_area ?? 0)),
- Decimal(0),
- )
+ // Filter out fields that have errors for aggregation
+ const successfulFieldBalances = fieldsWithBalanceResults.filter(
+ (result) => result.balance !== undefined,
+ ) as (NitrogenBalanceFieldResult & { balance: NitrogenBalanceField })[]
// Calculate total weighted supply, removal, and emission across the farm
let totalFarmSupply = new Decimal(0)
let totalFarmRemoval = new Decimal(0)
let totalFarmEmission = new Decimal(0)
let totalFarmTarget = new Decimal(0)
+ let totalFarmArea = new Decimal(0)
- for (const fieldBalance of fieldsWithBalance) {
- const fieldInput = fields.find(
- (f) => f.field.b_id === fieldBalance.b_id,
- )
+ for (const fieldResult of successfulFieldBalances) {
+ const fieldInput = fields.find((f) => f.field.b_id === fieldResult.b_id)
if (!fieldInput) {
- // Should not happen if inputs are consistent, but good to handle
console.warn(
- `Could not find field input for field balance ${fieldBalance.b_id}`,
+ `Could not find field input for field balance ${fieldResult.b_id}`,
)
- continue // Skip this iteration if fieldInput is not found
+ continue
}
const fieldArea = new Decimal(fieldInput.field.b_area ?? 0)
+ totalFarmArea = totalFarmArea.add(fieldArea)
totalFarmSupply = totalFarmSupply.add(
- fieldBalance.supply.total.times(fieldArea),
+ fieldResult.balance.supply.total.times(fieldArea),
)
totalFarmRemoval = totalFarmRemoval.add(
- fieldBalance.removal.total.times(fieldArea),
+ fieldResult.balance.removal.total.times(fieldArea),
)
totalFarmEmission = totalFarmEmission.add(
- fieldBalance.emission.ammonia.total.times(fieldArea),
+ fieldResult.balance.emission.ammonia.total.times(fieldArea),
)
totalFarmTarget = totalFarmTarget.add(
- fieldBalance.target.times(fieldArea),
+ fieldResult.balance.target.times(fieldArea),
)
}
- // Calculate average values per hectare for the farm
+ // Calculate average values per hectare for the farm, only considering the area of successfully calculated fields
const avgFarmSupply = totalFarmArea.isZero()
? new Decimal(0)
: totalFarmSupply.dividedBy(totalFarmArea)
@@ -298,7 +340,11 @@ export function calculateNitrogenBalancesFieldToFarm(
removal: avgFarmRemoval,
emission: avgFarmEmission,
target: avgFarmTarget,
- fields: fieldsWithBalance,
+ fields: fieldsWithBalanceResults,
+ hasErrors:
+ hasErrors ||
+ fieldsWithBalanceResults.length !== successfulFieldBalances.length,
+ fieldErrorMessages: fieldErrorMessages,
}
return farmWithBalance
@@ -331,7 +377,29 @@ export function convertNitrogenBalanceToNumeric(
balance: NitrogenBalance, // Input is the original Decimal-based type
): NitrogenBalanceNumeric {
// Output is the new number-based type
- return convertDecimalToNumberRecursive(balance) as NitrogenBalanceNumeric
+ const numericBalance = convertDecimalToNumberRecursive(
+ balance,
+ ) as NitrogenBalanceNumeric
+
+ // Ensure fields are correctly converted, especially handling errorMessage
+ numericBalance.fields = balance.fields.map((fieldResult) => {
+ if (fieldResult.balance) {
+ return {
+ b_id: fieldResult.b_id,
+ b_area: fieldResult.b_area,
+ balance: convertDecimalToNumberRecursive(
+ fieldResult.balance,
+ ) as NitrogenBalanceFieldNumeric,
+ }
+ }
+ return {
+ b_id: fieldResult.b_id,
+ b_area: fieldResult.b_area,
+ errorMessage: fieldResult.errorMessage,
+ }
+ })
+
+ return numericBalance
}
/**
diff --git a/fdm-calculator/src/balance/nitrogen/input.ts b/fdm-calculator/src/balance/nitrogen/input.ts
index 07d45591d..086b43ba8 100644
--- a/fdm-calculator/src/balance/nitrogen/input.ts
+++ b/fdm-calculator/src/balance/nitrogen/input.ts
@@ -9,6 +9,7 @@ import {
getCultivationsFromCatalogue,
getFertilizerApplications,
getFertilizers,
+ getField,
getFields,
getHarvests,
getSoilAnalyses,
@@ -37,16 +38,26 @@ export async function collectInputForNitrogenBalance(
principal_id: PrincipalId,
b_id_farm: fdmSchema.farmsTypeSelect["b_id_farm"],
timeframe: Timeframe,
+ b_id?: fdmSchema.fieldsTypeSelect["b_id"],
): Promise {
try {
return await fdm.transaction(async (tx: FdmType) => {
// Collect the fields for the farm
- const farmFields = await getFields(
- tx,
- principal_id,
- b_id_farm,
- timeframe,
- )
+ let farmFields: fdmSchema.fieldsTypeSelect[]
+ if (b_id) {
+ const field = await getField(tx, principal_id, b_id)
+ if (!field) {
+ throw new Error(`Field not found: ${String(b_id)}`)
+ }
+ farmFields = [field]
+ } else {
+ farmFields = await getFields(
+ tx,
+ principal_id,
+ b_id_farm,
+ timeframe,
+ )
+ }
// Collect the details per field
const fields = await Promise.all(
diff --git a/fdm-calculator/src/balance/nitrogen/performance.test.ts b/fdm-calculator/src/balance/nitrogen/performance.test.ts
index 19fc6390f..d1033251f 100644
--- a/fdm-calculator/src/balance/nitrogen/performance.test.ts
+++ b/fdm-calculator/src/balance/nitrogen/performance.test.ts
@@ -131,7 +131,7 @@ function generateMockData(numberOfFields: number): NitrogenBalanceInput {
b_id: fieldId,
b_id_farm: "test-farm",
p_app_date: new Date(2023, 4, 1),
- p_app_method: "broadcasting",
+ p_app_method: "broadcasting",
p_name_nl: "Mock Fertilizer",
p_id: `mock-fert-${i}`,
},
diff --git a/fdm-calculator/src/balance/nitrogen/target.ts b/fdm-calculator/src/balance/nitrogen/target.ts
index f49f39377..70cdb1b78 100644
--- a/fdm-calculator/src/balance/nitrogen/target.ts
+++ b/fdm-calculator/src/balance/nitrogen/target.ts
@@ -28,7 +28,7 @@ export function calculateTargetForNitrogenBalance(
): Decimal {
// Determine whether field is grassland or arable
let cultivationType = "arable"
- cultivations.map((cultivation) => {
+ cultivations.forEach((cultivation) => {
const cultivationDetail = cultivationDetailsMap.get(
cultivation.b_lu_catalogue,
)
diff --git a/fdm-calculator/src/balance/nitrogen/types.d.ts b/fdm-calculator/src/balance/nitrogen/types.d.ts
index 68b623727..4ad783272 100644
--- a/fdm-calculator/src/balance/nitrogen/types.d.ts
+++ b/fdm-calculator/src/balance/nitrogen/types.d.ts
@@ -347,6 +347,16 @@ export type NitrogenBalanceField = {
target: Decimal
}
+/**
+ * Represents the result of a nitrogen balance calculation for a single field, which may include an error message.
+ */
+export type NitrogenBalanceFieldResult = {
+ b_id: string
+ b_area: number
+ balance?: NitrogenBalanceField
+ errorMessage?: string
+}
+
/**
* Represents the total nitrogen balance across all fields.
* All values are in kilograms of nitrogen per hectare (kg N / ha).
@@ -375,7 +385,15 @@ export type NitrogenBalance = {
/**
* A detailed breakdown of the nitrogen balance for each individual field.
*/
- fields: NitrogenBalanceField[]
+ fields: NitrogenBalanceFieldResult[]
+ /**
+ * Indicates if any field calculations failed.
+ */
+ hasErrors: boolean
+ /**
+ * A list of error messages for fields that failed to calculate.
+ */
+ fieldErrorMessages: string[]
}
export type SoilAnalysisPicked = Pick<
@@ -527,10 +545,6 @@ export type NitrogenEmissionAmmoniaFertilizersNumeric = {
total: number
applications: { id: string; value: number }[]
}
- mineral: {
- total: number
- applications: { id: string; value: number }[]
- }
compost: {
total: number
applications: { id: string; value: number }[]
@@ -559,6 +573,7 @@ export type NitrogenEmissionAmmoniaNumeric = {
export type NitrogenEmissionNumeric = {
total: number
ammonia: NitrogenEmissionAmmoniaNumeric
+ nitrate: { total: number }
}
// Numeric version of NitrogenBalanceField
@@ -571,6 +586,16 @@ export type NitrogenBalanceFieldNumeric = {
emission: NitrogenEmissionNumeric
}
+/**
+ * Represents the numeric version of NitrogenBalanceFieldResult.
+ */
+export type NitrogenBalanceFieldResultNumeric = {
+ b_id: string
+ b_area: number
+ balance?: NitrogenBalanceFieldNumeric
+ errorMessage?: string
+}
+
// Numeric version of NitrogenBalance
export type NitrogenBalanceNumeric = {
balance: number
@@ -578,5 +603,7 @@ export type NitrogenBalanceNumeric = {
removal: number
emission: number
target: number
- fields: NitrogenBalanceFieldNumeric[]
+ fields: NitrogenBalanceFieldResultNumeric[]
+ hasErrors: boolean
+ fieldErrorMessages: string[]
}
diff --git a/fdm-calculator/src/index.ts b/fdm-calculator/src/index.ts
index 0d0eaa3d6..4275a63a2 100644
--- a/fdm-calculator/src/index.ts
+++ b/fdm-calculator/src/index.ts
@@ -1,7 +1,14 @@
-export { calculateNitrogenBalance } from "./balance/nitrogen/index"
+import pkg from "./package"
+export const fdmCalculator = pkg
+export {
+ calculateNitrogenBalance,
+ getNitrogenBalance,
+} from "./balance/nitrogen/index"
export { collectInputForNitrogenBalance } from "./balance/nitrogen/input"
export type {
FieldInput,
+ NitrogenBalanceFieldNumeric,
+ NitrogenBalanceFieldResultNumeric,
NitrogenBalanceInput,
NitrogenBalanceNumeric,
NitrogenEmissionAmmoniaFertilizersNumeric,
@@ -14,7 +21,6 @@ export type {
NitrogenSupplyFixationNumeric,
NitrogenSupplyMineralizationNumeric,
NitrogenSupplyNumeric,
- NitrogenVolatilizationNumeric,
} from "./balance/nitrogen/types"
export { calculateDose } from "./doses/calculate-dose"
export type { Dose } from "./doses/d"
@@ -23,16 +29,31 @@ export {
createFunctionsForFertilizerApplicationFilling,
createFunctionsForNorms,
} from "./norms"
-export type { AggregatedNormsToFarmLevel } from "./norms/farm"
+export type {
+ AggregatedNormFillingsToFarmLevel,
+ AggregatedNormsToFarmLevel,
+ InputAggregateNormFillingsToFarmLevel,
+ InputAggregateNormsToFarmLevel,
+} from "./norms/farm"
+export type { NormFilling } from "./norms/nl/2025/filling/types"
export {
isFieldInGWGBGebied,
isFieldInNatura2000Gebied,
-} from "./norms/nl/2025/dierlijke-mest-gebruiksnorm"
+} from "./norms/nl/2025/value/dierlijke-mest-gebruiksnorm"
export {
getRegion,
isFieldInNVGebied,
-} from "./norms/nl/2025/stikstofgebruiksnorm"
+} from "./norms/nl/2025/value/stikstofgebruiksnorm"
export type {
GebruiksnormResult,
NL2025NormsInput,
-} from "./norms/nl/2025/types.d"
+} from "./norms/nl/2025/value/types"
+export {
+ getNutrientAdvice,
+ requestNutrientAdvice,
+} from "./nutrient-advice"
+export type {
+ NutrientAdvice,
+ NutrientAdviceInputs,
+ NutrientAdviceResponse,
+} from "./nutrient-advice/types"
diff --git a/fdm-calculator/src/norms/farm.test.ts b/fdm-calculator/src/norms/farm.test.ts
index 1e0f83a95..11b713704 100644
--- a/fdm-calculator/src/norms/farm.test.ts
+++ b/fdm-calculator/src/norms/farm.test.ts
@@ -1,146 +1,184 @@
import { describe, expect, it } from "vitest"
-import { aggregateNormsToFarmLevel } from "./farm"
-import type { GebruiksnormResult } from "./nl/2025/types"
+import type {
+ InputAggregateNormFillingsToFarmLevel,
+ InputAggregateNormsToFarmLevel,
+} from "./farm"
+import {
+ aggregateNormFillingsToFarmLevel,
+ aggregateNormsToFarmLevel,
+} from "./farm"
describe("aggregateNormsToFarmLevel", () => {
- it("should correctly aggregate norms from multiple fields", () => {
- const fieldData = [
+ it("should correctly aggregate norm values to farm level", () => {
+ const fieldData: InputAggregateNormsToFarmLevel = [
{
b_id: "field1",
- b_area: 10,
+ b_area: 10, // hectares
norms: {
- manure: {
- normValue: 100,
- normSource: "Source A",
- } as GebruiksnormResult,
- nitrogen: {
- normValue: 150,
- normSource: "Source B",
- } as GebruiksnormResult,
- phosphate: {
- normValue: 50,
- normSource: "Source C",
- } as GebruiksnormResult,
+ manure: { normValue: 100, normSource: "Source A" }, // kg N/ha
+ nitrogen: { normValue: 150, normSource: "Source B" }, // kg N/ha
+ phosphate: { normValue: 50, normSource: "Source C" }, // kg P2O5/ha
},
},
{
b_id: "field2",
- b_area: 5,
+ b_area: 5, // hectares
norms: {
- manure: {
- normValue: 90,
- normSource: "Source A",
- } as GebruiksnormResult,
- nitrogen: {
- normValue: 140,
- normSource: "Source B",
- } as GebruiksnormResult,
- phosphate: {
- normValue: 45,
- normSource: "Source C",
- } as GebruiksnormResult,
+ manure: { normValue: 90, normSource: "Source A" }, // kg N/ha
+ nitrogen: { normValue: 140, normSource: "Source B" }, // kg N/ha
+ phosphate: { normValue: 45, normSource: "Source C" }, // kg P2O5/ha
},
},
]
- const result = aggregateNormsToFarmLevel(fieldData)
+ const aggregatedNorms = aggregateNormsToFarmLevel(fieldData)
- expect(result.manure).toBe(1450)
- expect(result.nitrogen).toBe(2200)
- expect(result.phosphate).toBe(725)
+ expect(aggregatedNorms).toEqual({
+ manure: 1450, // (100 * 10) + (90 * 5)
+ nitrogen: 2200, // (150 * 10) + (140 * 5)
+ phosphate: 725, // (50 * 10) + (45 * 5)
+ })
})
- it("should handle an empty array of fields", () => {
- const result = aggregateNormsToFarmLevel([])
- expect(result.manure).toBe(0)
- expect(result.nitrogen).toBe(0)
- expect(result.phosphate).toBe(0)
+ it("should handle empty input array", () => {
+ const fieldData: InputAggregateNormsToFarmLevel = []
+ const aggregatedNorms = aggregateNormsToFarmLevel(fieldData)
+ expect(aggregatedNorms).toEqual({
+ manure: 0,
+ nitrogen: 0,
+ phosphate: 0,
+ })
})
it("should handle fields with zero area", () => {
- const fieldData = [
+ const fieldData: InputAggregateNormsToFarmLevel = [
{
b_id: "field1",
- b_area: 0,
+ b_area: 0, // hectares
norms: {
- manure: {
- normValue: 100,
- normSource: "Source A",
- } as GebruiksnormResult,
- nitrogen: {
- normValue: 150,
- normSource: "Source B",
- } as GebruiksnormResult,
- phosphate: {
- normValue: 50,
- normSource: "Source C",
- } as GebruiksnormResult,
+ manure: { normValue: 100, normSource: "Source A" },
+ nitrogen: { normValue: 150, normSource: "Source B" },
+ phosphate: { normValue: 50, normSource: "Source C" },
},
},
]
-
- const result = aggregateNormsToFarmLevel(fieldData)
-
- expect(result.manure).toBe(0)
- expect(result.nitrogen).toBe(0)
- expect(result.phosphate).toBe(0)
+ const aggregatedNorms = aggregateNormsToFarmLevel(fieldData)
+ expect(aggregatedNorms).toEqual({
+ manure: 0,
+ nitrogen: 0,
+ phosphate: 0,
+ })
})
+})
- it("should handle fields with zero norm values", () => {
- const fieldData = [
+describe("aggregateNormFillingsToFarmLevel", () => {
+ it("should correctly aggregate norm filling values to farm level", () => {
+ const fieldData: InputAggregateNormFillingsToFarmLevel = [
{
b_id: "field1",
- b_area: 10,
- norms: {
+ b_area: 10, // hectares
+ normsFilling: {
manure: {
- normValue: 0,
- normSource: "Source A",
- } as GebruiksnormResult,
+ normFilling: 10,
+ applicationFilling: [
+ { p_app_id: "app1", normFilling: 5 },
+ { p_app_id: "app2", normFilling: 5 },
+ ],
+ },
nitrogen: {
- normValue: 0,
- normSource: "Source B",
- } as GebruiksnormResult,
+ normFilling: 20,
+ applicationFilling: [
+ { p_app_id: "app1", normFilling: 10 },
+ { p_app_id: "app2", normFilling: 10 },
+ ],
+ },
phosphate: {
- normValue: 0,
- normSource: "Source C",
- } as GebruiksnormResult,
+ normFilling: 5,
+ applicationFilling: [
+ { p_app_id: "app1", normFilling: 2 },
+ { p_app_id: "app2", normFilling: 3 },
+ ],
+ },
+ },
+ },
+ {
+ b_id: "field2",
+ b_area: 5, // hectares
+ normsFilling: {
+ manure: {
+ normFilling: 8,
+ applicationFilling: [
+ { p_app_id: "app3", normFilling: 4 },
+ { p_app_id: "app4", normFilling: 4 },
+ ],
+ },
+ nitrogen: {
+ normFilling: 15,
+ applicationFilling: [
+ { p_app_id: "app3", normFilling: 7 },
+ { p_app_id: "app4", normFilling: 8 },
+ ],
+ },
+ phosphate: {
+ normFilling: 3,
+ applicationFilling: [
+ { p_app_id: "app3", normFilling: 1 },
+ { p_app_id: "app4", normFilling: 2 },
+ ],
+ },
},
},
]
- const result = aggregateNormsToFarmLevel(fieldData)
+ const aggregatedFillings = aggregateNormFillingsToFarmLevel(fieldData)
+
+ expect(aggregatedFillings.manure).toBe(140) // (10 * 10) + (8 * 5)
+ expect(aggregatedFillings.nitrogen).toBe(275) // (20 * 10) + (15 * 5)
+ expect(aggregatedFillings.phosphate).toBe(65) // (5 * 10) + (3 * 5)
+ })
- expect(result.manure).toBe(0)
- expect(result.nitrogen).toBe(0)
- expect(result.phosphate).toBe(0)
+ it("should handle empty input array for norm fillings", () => {
+ const fieldData: InputAggregateNormFillingsToFarmLevel = []
+ const aggregatedFillings = aggregateNormFillingsToFarmLevel(fieldData)
+ expect(aggregatedFillings).toEqual({
+ manure: 0,
+ nitrogen: 0,
+ phosphate: 0,
+ })
})
- it("should handle floating point numbers for area and norm values", () => {
- const fieldData = [
+ it("should handle fields with zero area for norm fillings", () => {
+ const fieldData: InputAggregateNormFillingsToFarmLevel = [
{
b_id: "field1",
- b_area: 10.5,
- norms: {
+ b_area: 0, // hectares
+ normsFilling: {
manure: {
- normValue: 100.5,
- normSource: "Source A",
- } as GebruiksnormResult,
+ normFilling: 10,
+ applicationFilling: [
+ { p_app_id: "app1", normFilling: 5 },
+ ],
+ },
nitrogen: {
- normValue: 150.5,
- normSource: "Source B",
- } as GebruiksnormResult,
+ normFilling: 20,
+ applicationFilling: [
+ { p_app_id: "app1", normFilling: 10 },
+ ],
+ },
phosphate: {
- normValue: 50.5,
- normSource: "Source C",
- } as GebruiksnormResult,
+ normFilling: 5,
+ applicationFilling: [
+ { p_app_id: "app1", normFilling: 2 },
+ ],
+ },
},
},
]
-
- const result = aggregateNormsToFarmLevel(fieldData)
-
- expect(result.manure).toBe(1055) // 10.5 * 100.5 = 1055.25
- expect(result.nitrogen).toBe(1580) // 10.5 * 150.5 = 1580.25
- expect(result.phosphate).toBe(530) // 10.5 * 50.5 = 530.25
+ const aggregatedFillings = aggregateNormFillingsToFarmLevel(fieldData)
+ expect(aggregatedFillings).toEqual({
+ manure: 0,
+ nitrogen: 0,
+ phosphate: 0,
+ })
})
})
diff --git a/fdm-calculator/src/norms/farm.ts b/fdm-calculator/src/norms/farm.ts
index 3890b0c10..58e242015 100644
--- a/fdm-calculator/src/norms/farm.ts
+++ b/fdm-calculator/src/norms/farm.ts
@@ -1,11 +1,12 @@
import { Decimal } from "decimal.js"
-import type { GebruiksnormResult } from "./nl/2025/types"
+import type { NormFilling } from "./nl/2025/filling/types"
+import type { GebruiksnormResult } from "./nl/2025/value/types"
/**
* Represents the input structure for the `aggregateNormsToFarmLevel` function.
* It is an array of objects, where each object contains information for a single field.
*/
-type InputAggregateNormsToFarmLevel = {
+export type InputAggregateNormsToFarmLevel = {
/**
* The unique identifier of the field.
*/
@@ -110,3 +111,90 @@ export function aggregateNormsToFarmLevel(
phosphate: totalPhosphate.toDecimalPlaces(0).toNumber(),
}
}
+
+/**
+ * Represents the input structure for the `aggregateNormFillingsToFarmLevel` function.
+ * It is an array of objects, where each object contains information for a single field.
+ */
+export type InputAggregateNormFillingsToFarmLevel = {
+ /**
+ * The unique identifier of the field.
+ */
+ b_id: string
+ /**
+ * The area of the field in hectares.
+ */
+ b_area: number
+ /**
+ * The calculated norm fillings for manure, nitrogen, and phosphate for this field.
+ */
+ normsFilling: {
+ manure: NormFilling
+ nitrogen: NormFilling
+ phosphate: NormFilling
+ }
+}[]
+
+/**
+ * Represents the aggregated output of the `aggregateNormFillingsToFarmLevel` function.
+ * The results are expressed as total amounts for the farm, not per hectare.
+ */
+export type AggregatedNormFillingsToFarmLevel = {
+ /**
+ * Total manure norm filling in kg N for the entire farm.
+ */
+ manure: number
+ /**
+ * Total nitrogen norm filling in kg N for the entire farm.
+ */
+ nitrogen: number
+ /**
+ * Total phosphate norm filling in kg P2O5 for the entire farm.
+ */
+ phosphate: number
+}
+
+/**
+ * Aggregates the norm filling values from individual fields to the farm level.
+ * This function takes the output per field of the norm filling calculation,
+ * multiplies each norm filling by the field's area, and sums these values
+ * across all fields to provide total norm fillings for the farm.
+ *
+ * The result are three objects (manure, nitrogen, phosphate) each containing
+ * the total normFilling and combined applicationFillings, expressed as totals, not per hectare.
+ *
+ * @param input An array of field data, each containing field ID, area, and calculated norm fillings.
+ * @returns An object containing the total aggregated norm fillings for manure, nitrogen, and phosphate for the farm.
+ */
+export function aggregateNormFillingsToFarmLevel(
+ input: InputAggregateNormFillingsToFarmLevel,
+): AggregatedNormFillingsToFarmLevel {
+ let totalManureFilling = new Decimal(0)
+ let totalNitrogenFilling = new Decimal(0)
+ let totalPhosphateFilling = new Decimal(0)
+
+ for (const field of input) {
+ const area = new Decimal(field.b_area)
+
+ // Aggregate manure filling
+ totalManureFilling = totalManureFilling.plus(
+ new Decimal(field.normsFilling.manure.normFilling).times(area),
+ )
+
+ // Aggregate nitrogen filling
+ totalNitrogenFilling = totalNitrogenFilling.plus(
+ new Decimal(field.normsFilling.nitrogen.normFilling).times(area),
+ )
+
+ // Aggregate phosphate filling
+ totalPhosphateFilling = totalPhosphateFilling.plus(
+ new Decimal(field.normsFilling.phosphate.normFilling).times(area),
+ )
+ }
+
+ return {
+ manure: totalManureFilling.toDecimalPlaces(0).toNumber(),
+ nitrogen: totalNitrogenFilling.toDecimalPlaces(0).toNumber(),
+ phosphate: totalPhosphateFilling.toDecimalPlaces(0).toNumber(),
+ }
+}
diff --git a/fdm-calculator/src/norms/index.test.ts b/fdm-calculator/src/norms/index.test.ts
index 47b971ad0..a5374797e 100644
--- a/fdm-calculator/src/norms/index.test.ts
+++ b/fdm-calculator/src/norms/index.test.ts
@@ -1,13 +1,20 @@
import { describe, expect, it } from "vitest"
-import { aggregateNormsToFarmLevel } from "./farm"
+import {
+ aggregateNormFillingsToFarmLevel,
+ aggregateNormsToFarmLevel,
+} from "./farm"
import {
createFunctionsForFertilizerApplicationFilling,
createFunctionsForNorms,
} from "./index"
-import { getNL2025DierlijkeMestGebruiksNorm } from "./nl/2025/dierlijke-mest-gebruiksnorm"
-import { getNL2025FosfaatGebruiksNorm } from "./nl/2025/fosfaatgebruiksnorm"
-import { collectNL2025InputForNorms } from "./nl/2025/input"
-import { getNL2025StikstofGebruiksNorm } from "./nl/2025/stikstofgebruiksnorm"
+import { getNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm } from "./nl/2025/filling/dierlijke-mest-gebruiksnorm"
+import { getNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm } from "./nl/2025/filling/fosfaatgebruiksnorm"
+import { collectInputForFertilizerApplicationFilling } from "./nl/2025/filling/input"
+import { getNL2025FertilizerApplicationFillingForStikstofGebruiksNorm } from "./nl/2025/filling/stikstofgebruiksnorm"
+import { getNL2025DierlijkeMestGebruiksNorm } from "./nl/2025/value/dierlijke-mest-gebruiksnorm"
+import { getNL2025FosfaatGebruiksNorm } from "./nl/2025/value/fosfaatgebruiksnorm"
+import { collectNL2025InputForNorms } from "./nl/2025/value/input"
+import { getNL2025StikstofGebruiksNorm } from "./nl/2025/value/stikstofgebruiksnorm"
describe("createFunctionsForNorms", () => {
it("should return the correct functions for NL region and year 2025", () => {
@@ -46,25 +53,20 @@ describe("createFunctionsForFertilizerApplicationFilling", () => {
"NL",
"2025",
)
- expect(
- functions.collectInputForFertilizerApplicationFilling,
- ).toThrowError(
- "collectInputForFertilizerApplicationFilling is not implemented yet",
+ expect(functions.collectInputForFertilizerApplicationFilling).toBe(
+ collectInputForFertilizerApplicationFilling,
)
- expect(
- functions.calculateFertilizerApplicationFillingForNitrogen,
- ).toThrowError(
- "calculateFertilizerApplicationFillingForNitrogen is not implemented yet",
+ expect(functions.calculateFertilizerApplicationFillingForNitrogen).toBe(
+ getNL2025FertilizerApplicationFillingForStikstofGebruiksNorm,
)
- expect(
- functions.calculateFertilizerApplicationFillingForManure,
- ).toThrowError(
- "calculateFertilizerApplicationFillingForManure is not implemented yet",
+ expect(functions.calculateFertilizerApplicationFillingForManure).toBe(
+ getNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm,
)
expect(
functions.calculateFertilizerApplicationFillingForPhosphate,
- ).toThrowError(
- "calculateFertilizerApplicationFillingForPhosphate is not implemented yet",
+ ).toBe(getNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm)
+ expect(functions.aggregateNormFillingsToFarmLevel).toBe(
+ aggregateNormFillingsToFarmLevel,
)
})
diff --git a/fdm-calculator/src/norms/index.ts b/fdm-calculator/src/norms/index.ts
index 5dfa708fb..76dff636a 100644
--- a/fdm-calculator/src/norms/index.ts
+++ b/fdm-calculator/src/norms/index.ts
@@ -1,8 +1,16 @@
-import { aggregateNormsToFarmLevel } from "./farm"
-import { getNL2025DierlijkeMestGebruiksNorm } from "./nl/2025/dierlijke-mest-gebruiksnorm"
-import { getNL2025FosfaatGebruiksNorm } from "./nl/2025/fosfaatgebruiksnorm"
-import { collectNL2025InputForNorms } from "./nl/2025/input"
-import { getNL2025StikstofGebruiksNorm } from "./nl/2025/stikstofgebruiksnorm"
+import {
+ aggregateNormFillingsToFarmLevel,
+ aggregateNormsToFarmLevel,
+} from "./farm"
+import { getNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm } from "./nl/2025/filling/dierlijke-mest-gebruiksnorm"
+import { getNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm } from "./nl/2025/filling/fosfaatgebruiksnorm"
+import { collectInputForFertilizerApplicationFilling } from "./nl/2025/filling/input"
+import { getNL2025FertilizerApplicationFillingForStikstofGebruiksNorm } from "./nl/2025/filling/stikstofgebruiksnorm"
+import type { NormFilling } from "./nl/2025/filling/types"
+import { getNL2025DierlijkeMestGebruiksNorm } from "./nl/2025/value/dierlijke-mest-gebruiksnorm"
+import { getNL2025FosfaatGebruiksNorm } from "./nl/2025/value/fosfaatgebruiksnorm"
+import { collectNL2025InputForNorms } from "./nl/2025/value/input"
+import { getNL2025StikstofGebruiksNorm } from "./nl/2025/value/stikstofgebruiksnorm"
export function createFunctionsForNorms(b_region: "NL", year: "2025") {
if (b_region === "NL") {
@@ -26,31 +34,21 @@ export function createFunctionsForFertilizerApplicationFilling(
) {
if (b_region === "NL") {
if (year === "2025") {
- // TODO: Implement fertilizer application filling functions for NL 2025
return {
- collectInputForFertilizerApplicationFilling: () => {
- throw new Error(
- "collectInputForFertilizerApplicationFilling is not implemented yet",
- )
- },
- calculateFertilizerApplicationFillingForNitrogen: () => {
- throw new Error(
- "calculateFertilizerApplicationFillingForNitrogen is not implemented yet",
- )
- },
- calculateFertilizerApplicationFillingForManure: () => {
- throw new Error(
- "calculateFertilizerApplicationFillingForManure is not implemented yet",
- )
- },
- calculateFertilizerApplicationFillingForPhosphate: () => {
- throw new Error(
- "calculateFertilizerApplicationFillingForPhosphate is not implemented yet",
- )
- },
+ collectInputForFertilizerApplicationFilling:
+ collectInputForFertilizerApplicationFilling,
+ calculateFertilizerApplicationFillingForNitrogen:
+ getNL2025FertilizerApplicationFillingForStikstofGebruiksNorm,
+ calculateFertilizerApplicationFillingForManure:
+ getNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm,
+ calculateFertilizerApplicationFillingForPhosphate:
+ getNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm,
+ aggregateNormFillingsToFarmLevel:
+ aggregateNormFillingsToFarmLevel,
}
}
throw new Error("Year not supported")
}
throw new Error("Region not supported")
}
+export type { NormFilling }
diff --git a/fdm-calculator/src/norms/nl/2025/filling/dierlijke-mest-gebruiksnorm.test.ts b/fdm-calculator/src/norms/nl/2025/filling/dierlijke-mest-gebruiksnorm.test.ts
new file mode 100644
index 000000000..050b69d5d
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/dierlijke-mest-gebruiksnorm.test.ts
@@ -0,0 +1,206 @@
+import type { Fertilizer, FertilizerApplication } from "@svenvw/fdm-core"
+import { describe, expect, it } from "vitest"
+import { calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm } from "./dierlijke-mest-gebruiksnorm"
+import type { NL2025NormsFillingInput } from "./types"
+
+describe("calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm", () => {
+ const mockFertilizers: Fertilizer[] = [
+ {
+ p_id_catalogue: "1",
+ p_type_rvo: "11",
+ p_n_rt: 0.5,
+ },
+ {
+ p_id_catalogue: "2",
+ p_type_rvo: "12",
+ },
+ {
+ p_id_catalogue: "3",
+ p_type_rvo: "200", // Not in table11Mestcodes
+ },
+ {
+ p_id_catalogue: "4",
+ // No p_type_rvo
+ },
+ {
+ p_id_catalogue: "5",
+ p_type_rvo: "115", // Not relevant for nitrates directive
+ },
+ ]
+
+ const mockApplications: FertilizerApplication[] = [
+ {
+ p_app_id: "app1",
+ p_id_catalogue: "1",
+ p_app_amount: 10000,
+ },
+ {
+ p_app_id: "app2",
+ p_id_catalogue: "2",
+ p_app_amount: 20000,
+ },
+ ]
+
+ it("should calculate the norm filling for a single application", () => {
+ const result =
+ calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm(
+ {
+ applications: [mockApplications[0]],
+ fertilizers: mockFertilizers,
+ cultivations: [],
+ has_organic_certification: false,
+ has_grazing_intention: false,
+ fosfaatgebruiksnorm: 0,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+
+ expect(result.normFilling).toBe(5)
+ expect(result.applicationFilling).toEqual([
+ {
+ p_app_id: "app1",
+ normFilling: 5,
+ },
+ ])
+ })
+
+ it("should calculate the norm filling for multiple applications", () => {
+ const result =
+ calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm(
+ {
+ applications: mockApplications,
+ fertilizers: mockFertilizers,
+ cultivations: [],
+ has_organic_certification: false,
+ has_grazing_intention: false,
+ fosfaatgebruiksnorm: 0,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+
+ expect(result.normFilling).toBe(85) // 5 + 80
+ expect(result.applicationFilling).toEqual([
+ {
+ p_app_id: "app1",
+ normFilling: 5,
+ },
+ {
+ p_app_id: "app2",
+ normFilling: 80,
+ },
+ ])
+ })
+
+ it("should return zero filling for fertilizers not relevant to the nitrates directive", () => {
+ const result =
+ calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm(
+ {
+ applications: [
+ {
+ p_app_id: "app3",
+ p_id_catalogue: "5",
+ p_app_amount: 10,
+ },
+ ],
+ fertilizers: mockFertilizers,
+ cultivations: [],
+ has_organic_certification: false,
+ has_grazing_intention: false,
+ fosfaatgebruiksnorm: 0,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+
+ expect(result.normFilling).toBe(0)
+ expect(result.applicationFilling).toEqual([
+ {
+ p_app_id: "app3",
+ normFilling: 0,
+ },
+ ])
+ })
+
+ it("should throw an error if a fertilizer is not found", () => {
+ expect(() =>
+ calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm(
+ {
+ applications: [
+ {
+ p_app_id: "app4",
+ p_id_catalogue: "999",
+ p_app_amount: 10,
+ },
+ ],
+ fertilizers: mockFertilizers,
+ cultivations: [],
+ has_organic_certification: false,
+ has_grazing_intention: false,
+ fosfaatgebruiksnorm: 0,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ ),
+ ).toThrow("Fertilizer 999 not found for application app4")
+ })
+
+ it("should throw an error if a fertilizer has no p_type_rvo", () => {
+ expect(() =>
+ calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm(
+ {
+ applications: [
+ {
+ p_app_id: "app5",
+ p_id_catalogue: "4",
+ p_app_amount: 10,
+ },
+ ],
+ fertilizers: mockFertilizers,
+ cultivations: [],
+ has_organic_certification: false,
+ has_grazing_intention: false,
+ fosfaatgebruiksnorm: 0,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ ),
+ ).toThrow("Fertilizer 4 has no p_type_rvo")
+ })
+
+ it("should throw an error if a fertilizer has an unknown p_type_rvo", () => {
+ expect(() =>
+ calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm(
+ {
+ applications: [
+ {
+ p_app_id: "app6",
+ p_id_catalogue: "3",
+ p_app_amount: 10,
+ },
+ ],
+ fertilizers: mockFertilizers,
+ cultivations: [],
+ has_organic_certification: false,
+ has_grazing_intention: false,
+ fosfaatgebruiksnorm: 0,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ ),
+ ).toThrow("Fertilizer 3 has unknown p_type_rvo 200")
+ })
+
+ it("should return zero filling when no applications are provided", () => {
+ const result =
+ calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm(
+ {
+ applications: [],
+ fertilizers: mockFertilizers,
+ cultivations: [],
+ has_organic_certification: false,
+ has_grazing_intention: false,
+ fosfaatgebruiksnorm: 0,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+
+ expect(result.normFilling).toBe(0)
+ expect(result.applicationFilling).toEqual([])
+ })
+})
diff --git a/fdm-calculator/src/norms/nl/2025/filling/dierlijke-mest-gebruiksnorm.ts b/fdm-calculator/src/norms/nl/2025/filling/dierlijke-mest-gebruiksnorm.ts
new file mode 100644
index 000000000..69766ac68
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/dierlijke-mest-gebruiksnorm.ts
@@ -0,0 +1,115 @@
+import { withCalculationCache } from "@svenvw/fdm-core"
+import Decimal from "decimal.js"
+import pkg from "../../../../package"
+import { table11Mestcodes } from "./table-11-mestcodes"
+import type { NL2025NormsFillingInput, NormFilling } from "./types"
+
+/**
+ * Calculates the nitrogen usage from animal manure for a list of fertilizer applications.
+ *
+ * This function determines the contribution of each fertilizer application to the nitrogen norm
+ * based on the type of manure used. It uses predefined values from `table11Mestcodes` to identify
+ * which fertilizers are considered animal manure and to find their nitrogen content.
+ *
+ * @param {NL2025NormsFillingInput} input - The standardized input object containing all necessary data.
+ * @returns {NormFilling} An object containing the total nitrogen usage (`normFilling`) and a detailed breakdown per application (`applicationFilling`).
+ * @throws {Error} Throws an error if a fertilizer or its RVO type is not found, ensuring data integrity.
+ */
+export function calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm(
+ input: NL2025NormsFillingInput,
+): NormFilling {
+ const { applications, fertilizers } = input
+
+ // Create maps for efficient lookups of fertilizers and RVO types.
+ // This avoids iterating over the arrays repeatedly in a loop.
+ const fertilizersMap = new Map(
+ fertilizers.map((fertilizer) => [
+ fertilizer.p_id_catalogue,
+ fertilizer,
+ ]),
+ )
+ const rvoTypeMap = new Map(
+ table11Mestcodes.map((rvoType) => [rvoType.p_type_rvo, rvoType]),
+ )
+
+ // Use reduce to iterate over applications and calculate the total norm filling.
+ const { totalFilling, applicationFilling } = applications.reduce(
+ (acc, application) => {
+ // Retrieve the fertilizer for the current application.
+ const fertilizer = fertilizersMap.get(application.p_id_catalogue)
+ if (!fertilizer) {
+ throw new Error(
+ `Fertilizer ${application.p_id_catalogue} not found for application ${application.p_app_id}`,
+ )
+ }
+
+ // Get the RVO type of the fertilizer.
+ const p_type_rvo = fertilizer.p_type_rvo
+ if (!p_type_rvo) {
+ throw new Error(
+ `Fertilizer ${application.p_id_catalogue} has no p_type_rvo`,
+ )
+ }
+
+ // Find the properties associated with the RVO type.
+ const rvoTypeProperties = rvoTypeMap.get(p_type_rvo)
+ if (!rvoTypeProperties) {
+ throw new Error(
+ `Fertilizer ${application.p_id_catalogue} has unknown p_type_rvo ${p_type_rvo}`,
+ )
+ }
+
+ let normFilling = new Decimal(0)
+ // Check if the fertilizer is relevant for the nitrates directive.
+ if (rvoTypeProperties.p_type_nitratesdirective) {
+ const amount = new Decimal(application.p_app_amount)
+ // Determine the nitrogen content, using specific values if available, otherwise fallback to default.
+ const p_n_rt = new Decimal(
+ fertilizer.p_n_rt ?? rvoTypeProperties.p_n_rt ?? 0,
+ )
+ // Calculate the norm filling for this application.
+ normFilling = amount.times(p_n_rt).dividedBy(1000)
+ }
+
+ // Add the filling of the current application to the total.
+ acc.totalFilling = acc.totalFilling.plus(normFilling)
+ // Add the detailed filling for this application to the list.
+ acc.applicationFilling.push({
+ p_app_id: application.p_app_id,
+ normFilling: normFilling.toNumber(),
+ })
+
+ return acc
+ },
+ // Initial value for the accumulator.
+ {
+ totalFilling: new Decimal(0),
+ applicationFilling: [] as {
+ p_app_id: string
+ normFilling: number
+ }[],
+ },
+ )
+
+ // Return the total norm filling and the breakdown per application.
+ return {
+ normFilling: totalFilling.toNumber(),
+ applicationFilling,
+ }
+}
+
+/**
+ * Memoized version of {@link calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm}.
+ *
+ * This function is wrapped with `withCalculationCache` to optimize performance by caching
+ * results based on the input and the current calculator version.
+ *
+ * @param {NL2025NormsFillingInput} input - The standardized input object containing all necessary data.
+ * @returns {NormFilling} An object containing the total nitrogen usage (`normFilling`) and a detailed breakdown per application (`applicationFilling`).
+ */
+export const getNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm =
+ withCalculationCache(
+ calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm,
+ "calculateNL2025FertilizerApplicationFillingForDierlijkeMestGebruiksNorm",
+ pkg.calculatorVersion,
+ )
diff --git a/fdm-calculator/src/norms/nl/2025/filling/fosfaatgebruiksnorm.test.ts b/fdm-calculator/src/norms/nl/2025/filling/fosfaatgebruiksnorm.test.ts
new file mode 100644
index 000000000..808cd8cbd
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/fosfaatgebruiksnorm.test.ts
@@ -0,0 +1,465 @@
+import type { Fertilizer, FertilizerApplication } from "@svenvw/fdm-core"
+import { describe, expect, it } from "vitest"
+import { calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm } from "./fosfaatgebruiksnorm"
+import type { NL2025NormsFillingInput } from "./types"
+
+// Mock data for fertilizers
+const mockFertilizers: Fertilizer[] = [
+ {
+ p_id_catalogue: "f1",
+ p_name_nl: "Drijfmest van rundvee",
+ p_type: "manure",
+ p_type_rvo: "14",
+ p_p_rt: 1.5, // Example 1: 30kg P / 20 = 1.5
+ },
+ {
+ p_id_catalogue: "f2",
+ p_name_nl: "Strorijke vaste mest van rundvee",
+ p_type: "manure",
+ p_type_rvo: "10",
+ p_p_rt: 0.75, // Example 1: 30kg P / 40 = 0.75
+ },
+ {
+ p_id_catalogue: "f3",
+ p_name_nl: "Groencompost",
+ p_type: "compost",
+ p_type_rvo: "111",
+ p_p_rt: 10, // Example 2: 1200 kg P / 120 = 10
+ },
+ {
+ p_id_catalogue: "f4",
+ p_name_nl: "Drijfmest",
+ p_type: "manure",
+ p_type_rvo: "14",
+ p_p_rt: 1.0, // Example 3: 60kg P / 60 = 1.0
+ },
+ {
+ p_id_catalogue: "f5",
+ p_name_nl: "GFT-compost",
+ p_type: "compost",
+ p_type_rvo: "112",
+ p_p_rt: 0.25, // Example 4: 10kg P / 40 = 0.25
+ },
+ {
+ p_id_catalogue: "f6",
+ p_name_nl: "Strorijke vaste mest van paarden",
+ p_type: "manure",
+ p_type_rvo: "25",
+ p_p_rt: 0.75, // Example 4: 10kg P / 13.3 = 0.75
+ },
+ {
+ p_id_catalogue: "f7",
+ p_name_nl: "Vaste mest varkens (biologisch)",
+ p_type: "manure",
+ p_type_rvo: "40",
+ p_p_rt: 0.75,
+ },
+ {
+ p_id_catalogue: "f8",
+ p_name_nl: "Kunstmest",
+ p_type: "mineral",
+ p_type_rvo: "115",
+ p_p_rt: 50,
+ },
+ {
+ p_id_catalogue: "f9",
+ p_name_nl: "Fertilizer with no p_p_rt",
+ p_type: "manure",
+ p_type_rvo: "108", // A type_rvo that has no p_p_rt in table11Mestcodes
+ p_p_rt: null,
+ },
+ {
+ p_id_catalogue: "f10",
+ p_name_nl: "Fertilizer with p_p_rt in table11Mestcodes",
+ p_type: "manure",
+ p_type_rvo: "107", // A type_rvo that has p_p_rt in table11Mestcodes (3.1)
+ p_p_rt: null,
+ },
+]
+
+describe("calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm", () => {
+ // Helper to create a FertilizerApplication
+ const createApplication = (
+ fertilizerId: string,
+ amount: number,
+ appId: string,
+ ): FertilizerApplication => ({
+ p_app_id: appId,
+ p_id_catalogue: fertilizerId,
+ p_name_nl: `Application for ${fertilizerId}`,
+ p_app_amount: amount,
+ p_app_method: "spreading",
+ p_app_date: new Date(),
+ })
+
+ describe("5 examples from Staatscourant 2023-5152", () => {
+ // Example 1: Strorijke vaste mest van rundvee
+ it("should correctly calculate for Example 1 (Strorijke vaste mest)", () => {
+ const applications = [
+ createApplication("f1", 20000, "app1"), // Drijfmest: 30kg P (20000 kg fertilizer * 1.5 P_RT / 1000)
+ createApplication("f2", 53333.33, "app2"), // Strorijke vaste mest: 40kg P (53333.33 kg fertilizer * 0.75 P_RT / 1000)
+ ]
+ const fosfaatgebruiksnorm = 60
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm(
+ {
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+
+ expect(result.normFilling).toBeCloseTo(60)
+ expect(result.applicationFilling).toHaveLength(2)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(30) // Standard
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(30) // OS-rich (40 * 0.75)
+ })
+
+ // Example 2a: Groencompost
+ it("should correctly calculate for Example 2 (Groencompost)", () => {
+ const applications = [
+ createApplication("f3", 12000, "app1"), // Groencompost: 120kg P (12000 kg fertilizer * 10 P_RT / 1000)
+ createApplication("f3", 9000, "app2"), // Groencompost: 90kg P (9000 kg fertilizer * 10 P_RT / 1000)
+ ]
+ const fosfaatgebruiksnorm = 120
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm(
+ {
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+ // console.log(result) // Keep for debugging if needed
+
+ expect(result.normFilling).toBeCloseTo(120)
+ expect(result.applicationFilling).toHaveLength(2)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(30) // OS-rich (120 * 0.25)
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(90) // OS-rich (90 * 1.00)
+ })
+
+ // Example 2b: Groencompost (This test case seems to be a duplicate or misinterpretation of Example 2 in the document. The document's Example 2 has only one OS-rich application of 120kg P, and then an additional 90kg P is mentioned as "extra space". The test here uses two applications of f3, which is fine, but the expected output for the first application is 120, which is the total norm. This needs to be adjusted to reflect the actual contribution of the first application.)
+ // Based on the document's Example 2, the total actual P from Groencompost is 120kg + 90kg = 210kg.
+ // 120kg is discounted at 25% -> 30kg.
+ // Remaining 90kg is counted at 100% -> 90kg.
+ // Total norm filling = 30 + 90 = 120kg.
+ // The test should reflect this breakdown.
+ it("should correctly calculate for Example 2 (Groencompost) - detailed breakdown", () => {
+ const applications = [
+ createApplication("f3", 12000, "app1"), // Groencompost: 120kg P
+ createApplication("f3", 9000, "app2"), // Groencompost: 90kg P
+ ]
+ const fosfaatgebruiksnorm = 120
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm(
+ {
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+ // console.log(result) // Keep for debugging if needed
+
+ expect(result.normFilling).toBeCloseTo(120)
+ expect(result.applicationFilling).toHaveLength(2)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(30) // 120kg * 0.25
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(90) // 90kg * 1.00 (beyond discounted limit)
+ })
+
+ // Example 3: Groencompost with Drijfmest
+ it("should correctly calculate for Example 3 (Groencompost with Drijfmest)", () => {
+ const applications = [
+ createApplication("f4", 60000, "app1"), // Drijfmest: 60kg P
+ createApplication("f3", 10500, "app2"), // Groencompost: 105kg P
+ ]
+ const fosfaatgebruiksnorm = 105
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm(
+ {
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+
+ expect(result.normFilling).toBeCloseTo(86.25) // 60 + (105 * 0.25)
+ expect(result.applicationFilling).toHaveLength(2)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(60) // Standard
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(26.25) // OS-rich (105 * 0.25)
+ })
+
+ // Example 4: GFT-compost and Strorijke mest van paarden with Drijfmest
+ it("should correctly calculate for Example 4 (Mixed OS-rich with Drijfmest)", () => {
+ const applications = [
+ createApplication("f4", 40000, "app1"), // Drijfmest: 40kg P
+ createApplication("f5", 160000, "app2"), // GFT-compost: 40kg P
+ createApplication("f6", 17733.33, "app3"), // Strorijke mest paarden: 13.3kg P
+ ]
+ const fosfaatgebruiksnorm = 60
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm(
+ {
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+
+ expect(result.normFilling).toBeCloseTo(59.975) // 40 + (40 * 0.25) + (13.3 * 0.75) = 40 + 10 + 9.975 = 59.975
+ expect(result.applicationFilling).toHaveLength(3)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(40) // Standard
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(10) // OS-rich (40 * 0.25)
+ expect(result.applicationFilling[2].normFilling).toBeCloseTo(9.975) // OS-rich (13.3 * 0.75)
+ })
+
+ // Example 5: Groencompost with Drijfmest, not filling the norm completely
+ it("should correctly calculate for Example 5 (Groencompost, Drijfmest, partial filling)", () => {
+ const applications = [
+ createApplication("f3", 12000, "app1"), // Groencompost: 120kg P
+ createApplication("f4", 40000, "app2"), // Drijfmest: 40kg P
+ ]
+ const fosfaatgebruiksnorm = 120
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm(
+ {
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput,
+ )
+
+ expect(result.normFilling).toBeCloseTo(70) // (120 * 0.25) + 40 = 30 + 40
+ expect(result.applicationFilling).toHaveLength(2)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(30) // OS-rich (120 * 0.25)
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(40) // Standard
+ })
+ })
+
+ // Additional Test Cases for coverage
+
+ it("should return 0 for no applications", () => {
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications: [],
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm: 100,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ expect(result.normFilling).toBe(0)
+ expect(result.applicationFilling).toHaveLength(0)
+ })
+
+ it("should handle applications with only standard fertilizers", () => {
+ const applications = [
+ createApplication("f1", 10000, "app1"), // Drijfmest: 10 * 1.5 = 15kg P
+ createApplication("f4", 20000, "app2"), // Drijfmest: 20 * 1.0 = 20kg P
+ ]
+ const fosfaatgebruiksnorm = 100
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ expect(result.normFilling).toBeCloseTo(35)
+ expect(result.applicationFilling).toHaveLength(2)
+ })
+
+ it("should count OS-rich fertilizers at 100% if total applied is below 20kg threshold", () => {
+ const applications = [
+ createApplication("f3", 1000, "app1"), // Groencompost: 10kg P (below 20kg threshold)
+ ]
+ const fosfaatgebruiksnorm = 100
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ expect(result.normFilling).toBeCloseTo(10) // 100% counted
+ expect(result.applicationFilling[0].normFillingDetails).toContain(
+ "OS-rijke meststof, minimumdrempel niet gehaald, 100% geteld.",
+ )
+ })
+
+ it("should correctly apply 75% discount for organic pig manure on an organic farm", () => {
+ const applications = [
+ createApplication("f7", 40000, "app1"), // Vaste mest varkens (biologisch): 30kg P (75% discounted)
+ ]
+ const fosfaatgebruiksnorm = 100
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: true,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ expect(result.normFilling).toBeCloseTo(22.5) // 30 * 0.75 = 22.5
+ expect(result.applicationFilling[0].normFillingDetails).toContain(
+ "75% korting",
+ )
+ })
+
+ it("should count organic pig manure at 100% on a non-organic farm", () => {
+ const applications = [
+ createApplication("f7", 40000, "app1"), // Vaste mest varkens (biologisch): 30kg P (100% counted)
+ ]
+ const fosfaatgebruiksnorm = 100
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ expect(result.normFilling).toBeCloseTo(30) // 100% counted
+ expect(result.applicationFilling[0].normFillingDetails).toBeUndefined()
+ })
+
+ it("should use p_p_rt from table11Mestcodes if not on fertilizer object", () => {
+ const applications = [
+ createApplication("f10", 10000, "app1"), // Fertilizer with p_p_rt in table11Mestcodes (3.1)
+ ]
+ const fosfaatgebruiksnorm = 100
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ expect(result.normFilling).toBeCloseTo(10 * 3.1) // 31
+ })
+
+ it("should use 0 if p_p_rt is not on fertilizer and not in table11Mestcodes", () => {
+ const applications = [
+ createApplication("f9", 10000, "app1"), // Fertilizer with no p_p_rt
+ ]
+ const fosfaatgebruiksnorm = 100
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ expect(result.normFilling).toBe(0)
+ })
+
+ it("should correctly handle OS-rich applications exceeding the norm", () => {
+ const applications = [
+ createApplication("f4", 10000, "app1"), // Drijfmest: 10 * 1.0 = 10kg P
+ createApplication("f3", 20000, "app2"), // Groencompost: 200 * 0.25 = 50kg P (25% discounted)
+ ]
+ const fosfaatgebruiksnorm = 30 // Small norm
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ // Standard: 10kg. Remaining norm: 20kg.
+ // Groencompost: 200kg actual P. Discounted: 50kg.
+ // To fill 20kg norm with 25% discounted: need 20 / 0.25 = 80kg actual P.
+ // So 80kg of Groencompost is discounted to 20kg.
+ // Remaining Groencompost: 200 - 80 = 120kg. This counts 100%.
+ // Standard: 10kg. Remaining norm: 20kg.
+ // Groencompost: 200kg actual P. Discounted: 50kg.
+ // To fill 20kg norm with 25% discounted: need 20 / 0.25 = 80kg actual P.
+ // So 80kg of Groencompost is discounted to 20kg.
+ // Remaining Groencompost: 200 - 80 = 120kg. This counts 100%.
+ // Total: 10 (standard) + 177.5 (Groencompost) = 187.5.
+ expect(result.normFilling).toBeCloseTo(187.5)
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(177.5) // 7.5 (discounted) + 170 (100% counted)
+ expect(result.applicationFilling[1].normFillingDetails).toContain(
+ "OS-rijke meststof (25% korting) draagt 7.50kg bij aan de norm. Plus 170.00kg (100% geteld) boven de kortingslimiet.",
+ )
+ })
+
+ it("should handle multiple OS-rich applications filling and exceeding the norm", () => {
+ const applications = [
+ createApplication("f4", 10000, "app1"), // Drijfmest: 10kg P
+ createApplication("f3", 4000, "app2"), // Groencompost: 40kg actual P (25% discounted)
+ createApplication("f2", 20000, "app3"), // Strorijke vaste mest: 20kg actual P (75% discounted)
+ ]
+ const fosfaatgebruiksnorm = 30
+ const result =
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm({
+ applications,
+ fertilizers: mockFertilizers,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm,
+ cultivations: [],
+ has_grazing_intention: false,
+ b_centroid: [0, 0],
+ } as NL2025NormsFillingInput)
+ // Standard: 10kg.
+ // App2 (Groencompost): 40kg actual P.
+ // Eligible for discount: min(40, 30 - 0) = 30kg. Discounted: 30 * 0.25 = 7.5kg.
+ // Remaining actual P: 40 - 30 = 10kg. This counts 100%.
+ // App2 contribution: 7.5 + 10 = 17.5kg.
+ // App3 (Strorijke mest): 20kg actual P.
+ // Eligible for discount: min(20, 30 - 30) = 0kg. Discounted: 0kg.
+ // Remaining actual P: 20 - 0 = 20kg. This counts 100%.
+ // App3 contribution: 0 + 20 = 20kg.
+ // Total: 10 (app1) + 17.5 (app2) + 15 (app3) = 42.5kg.
+ expect(result.normFilling).toBeCloseTo(42.5)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(10)
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(17.5)
+ expect(result.applicationFilling[2].normFilling).toBeCloseTo(15)
+ expect(result.applicationFilling[2].normFillingDetails).toContain(
+ "OS-rijke meststof, geen korting toegepast. Plus 15.00kg (100% geteld) boven de kortingslimiet.",
+ )
+ })
+})
diff --git a/fdm-calculator/src/norms/nl/2025/filling/fosfaatgebruiksnorm.ts b/fdm-calculator/src/norms/nl/2025/filling/fosfaatgebruiksnorm.ts
new file mode 100644
index 000000000..6f0881e3e
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/fosfaatgebruiksnorm.ts
@@ -0,0 +1,303 @@
+import {
+ type Fertilizer,
+ type FertilizerApplication,
+ withCalculationCache,
+} from "@svenvw/fdm-core"
+import Decimal from "decimal.js"
+import pkg from "../../../../package"
+import { table11Mestcodes } from "./table-11-mestcodes"
+import type { NL2025NormsFillingInput, NormFilling } from "./types"
+
+const rvoMestcodesOrganicRich25Percent = ["111", "112"] // Compost, Zeer schone compost
+const rvoMestcodesOrganicRich75Percent = ["110", "10", "61", "25", "56"] // Champost, Rundvee - Vaste mest, Geiten - Vaste mest, Paarden - Vaste mest, Schapen - Mest, alle systemen
+const rvoMestcodesOrganicRich75PercentOrganic = ["40"] // Varkens - Vaste mest (for organic certification)
+
+/**
+ * Calculates the norm filling for phosphate application, taking into account the
+ * "Stimuleren organische stofrijke meststoffen" (Stimulating organic-rich fertilizers) regulation.
+ *
+ * This regulation, detailed in Staatscourant 2023, nr. 5152, aims to encourage the use of
+ * organic-rich fertilizers by applying a differentiated percentage to their phosphate content
+ * when calculating against the phosphate usage norm.
+ *
+ * Key aspects of the regulation implemented:
+ * 1. **Minimum Threshold (Condition 1):** A discount is only applied if at least 20 kg/ha of
+ * phosphate from organic-rich fertilizers is applied.
+ * 2. **Iterative Discounting:** The differentiated percentage (25% or 75% mee) is applied
+ * iteratively. The discount is only valid for the portion of organic-rich phosphate
+ * that, when summed with other discounted organic-rich phosphate, does not exceed
+ * the `fosfaatgebruiksnorm`. Any organic-rich phosphate applied beyond this limit
+ * is counted at 100% towards the norm.
+ * 3. **Prioritization:** To maximize the benefit for the farmer, fertilizers with a 25%
+ * contribution factor (e.g., compost) are prioritized for the discount over those
+ * with a 75% contribution factor (e.g., strorijke vaste mest).
+ * This has been acknowledged by RVO to be possible in personal communication with Sven.
+ *
+ * @param {NL2025NormsFillingInput} input - The standardized input object containing all necessary data.
+ * @returns {NormFilling} An object containing the total norm filling and a breakdown per application.
+ */
+export function calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm(
+ input: NL2025NormsFillingInput,
+): NormFilling {
+ const {
+ applications,
+ fertilizers,
+ has_organic_certification,
+ fosfaatgebruiksnorm,
+ } = input
+
+ // Create maps for efficient lookups of fertilizers and RVO types.
+ // This avoids iterating over the arrays repeatedly in a loop.
+ const fertilizersMap = new Map(
+ fertilizers.map((fertilizer) => [
+ fertilizer.p_id_catalogue,
+ fertilizer,
+ ]),
+ )
+
+ // Determines if at least 20 kg P2O5 / ha is applied with organic-rich fertilizers
+ const condition1 =
+ determineCondition1StimuleringOrganischeStofrijkeMeststoffen(
+ applications,
+ fertilizersMap,
+ has_organic_certification,
+ )
+
+ let totalFilling = new Decimal(0)
+ const normLimit = new Decimal(fosfaatgebruiksnorm)
+ let remainingDiscountablePhosphate = normLimit // This tracks the remaining P that can be discounted
+
+ // Separate applications into standard and organic-rich
+ const standardApplications: {
+ application: FertilizerApplication
+ p_p_rt: Decimal
+ p_app_amount: Decimal
+ }[] = []
+ const organicRichApplications: {
+ application: FertilizerApplication
+ p_p_rt: Decimal
+ p_app_amount: Decimal
+ p_type_rvo: string
+ discountFactor: Decimal
+ originalIndex: number
+ }[] = []
+
+ applications.forEach((application, index) => {
+ const p_app_amount = new Decimal(application.p_app_amount ?? 0)
+ const p_p_rt = new Decimal(
+ fertilizersMap.get(application.p_id_catalogue)?.p_p_rt ??
+ table11Mestcodes.find(
+ (t) =>
+ t.p_type_rvo ===
+ fertilizersMap.get(application.p_id_catalogue)
+ ?.p_type_rvo,
+ )?.p_p_rt ??
+ 0,
+ )
+ const p_type_rvo =
+ fertilizersMap.get(application.p_id_catalogue)?.p_type_rvo ?? ""
+
+ if (
+ rvoMestcodesOrganicRich25Percent.includes(p_type_rvo) ||
+ rvoMestcodesOrganicRich75Percent.includes(p_type_rvo) ||
+ (rvoMestcodesOrganicRich75PercentOrganic.includes(p_type_rvo) &&
+ has_organic_certification)
+ ) {
+ let discountFactor: Decimal
+ if (rvoMestcodesOrganicRich25Percent.includes(p_type_rvo)) {
+ discountFactor = new Decimal(0.25)
+ } else {
+ discountFactor = new Decimal(0.75)
+ }
+ organicRichApplications.push({
+ application,
+ p_p_rt,
+ p_app_amount,
+ p_type_rvo,
+ discountFactor,
+ originalIndex: index,
+ })
+ } else {
+ standardApplications.push({ application, p_p_rt, p_app_amount })
+ }
+ })
+
+ // Sort organic-rich applications to prioritize 25% discount over 75% discount
+ organicRichApplications.sort((a, b) =>
+ a.discountFactor.cmp(b.discountFactor),
+ )
+
+ // Initialize applicationsFilling with placeholders to maintain original order
+ const orderedApplicationsFilling: {
+ p_app_id: string
+ normFilling: number
+ normFillingDetails?: string
+ }[] = new Array(applications.length)
+
+ // Process standard applications first
+ for (const { application, p_p_rt, p_app_amount } of standardApplications) {
+ const normFilling = p_app_amount.times(p_p_rt).dividedBy(1000)
+ totalFilling = totalFilling.plus(normFilling)
+ orderedApplicationsFilling[
+ applications.findIndex(
+ (app) => app.p_app_id === application.p_app_id,
+ )
+ ] = {
+ p_app_id: application.p_app_id,
+ normFilling: normFilling.toNumber(),
+ }
+ }
+
+ // Process organic-rich applications with iterative discounting
+ if (condition1) {
+ for (const {
+ application,
+ p_p_rt,
+ p_app_amount,
+ discountFactor,
+ originalIndex,
+ } of organicRichApplications) {
+ const actualPhosphateApplied = p_app_amount
+ .times(p_p_rt)
+ .dividedBy(1000)
+ let currentApplicationFilling = new Decimal(0)
+ let normFillingDetails: string
+
+ // Calculate how much of this application can be discounted
+ const phosphateToDiscount = Decimal.min(
+ actualPhosphateApplied,
+ remainingDiscountablePhosphate,
+ )
+
+ if (phosphateToDiscount.gt(0)) {
+ currentApplicationFilling = currentApplicationFilling.plus(
+ phosphateToDiscount.times(discountFactor),
+ )
+ remainingDiscountablePhosphate =
+ remainingDiscountablePhosphate.minus(phosphateToDiscount)
+ normFillingDetails = `OS-rijke meststof (${discountFactor.times(
+ 100,
+ )}% korting) draagt ${phosphateToDiscount
+ .times(discountFactor)
+ .toFixed(2)}kg bij aan de norm.`
+ } else {
+ normFillingDetails =
+ "OS-rijke meststof, geen korting toegepast."
+ }
+
+ // Add any remaining actual phosphate (beyond the discountable limit) at 100%
+ const phosphateBeyondDiscount =
+ actualPhosphateApplied.minus(phosphateToDiscount)
+ if (phosphateBeyondDiscount.gt(0)) {
+ currentApplicationFilling = currentApplicationFilling.plus(
+ phosphateBeyondDiscount,
+ )
+ normFillingDetails += ` Plus ${phosphateBeyondDiscount.toFixed(
+ 2,
+ )}kg (100% geteld) boven de kortingslimiet.`
+ }
+
+ totalFilling = totalFilling.plus(currentApplicationFilling)
+ orderedApplicationsFilling[originalIndex] = {
+ p_app_id: application.p_app_id,
+ normFilling: currentApplicationFilling.toNumber(),
+ normFillingDetails: normFillingDetails,
+ }
+ }
+ } else {
+ // If condition1 is not met, organic-rich fertilizers are counted at 100%
+ for (const {
+ application,
+ p_p_rt,
+ p_app_amount,
+ originalIndex,
+ } of organicRichApplications) {
+ const normFilling = p_app_amount.times(p_p_rt).dividedBy(1000)
+ totalFilling = totalFilling.plus(normFilling)
+ orderedApplicationsFilling[originalIndex] = {
+ p_app_id: application.p_app_id,
+ normFilling: normFilling.toNumber(),
+ normFillingDetails:
+ "OS-rijke meststof, minimumdrempel niet gehaald, 100% geteld.",
+ }
+ }
+ }
+
+ // Return the total norm filling and the breakdown per application.
+ return {
+ normFilling: totalFilling.toNumber(),
+ applicationFilling: orderedApplicationsFilling,
+ }
+}
+
+/**
+ * Determines if at least 20 kg P2O5 / ha is applied with organic-rich fertilizers.
+ * This is Condition 1 for the "Stimuleren organische stofrijke meststoffen" regulation.
+ *
+ * @param {FertilizerApplication[]} applications - An array of fertilizer applications.
+ * @param {Map} fertilizersMap - A map of fertilizers for efficient lookup.
+ * @param {boolean} has_organic_certification - Indicates if the farm has organic certification.
+ * @returns {boolean} True if the 20 kg/ha threshold is met, false otherwise.
+ */
+function determineCondition1StimuleringOrganischeStofrijkeMeststoffen(
+ applications: FertilizerApplication[],
+ fertilizersMap: Map,
+ has_organic_certification: boolean,
+): boolean {
+ // Set the RVO mestcodes for organic-rich fertilizers
+ const rvoMestcodesOrganicRich = [
+ ...rvoMestcodesOrganicRich25Percent,
+ ...rvoMestcodesOrganicRich75Percent,
+ ]
+ if (has_organic_certification) {
+ rvoMestcodesOrganicRich.push(...rvoMestcodesOrganicRich75PercentOrganic)
+ }
+
+ // Sum the phosphate dose of organic-rich fertilizers
+ const totalPhosphateDoseOrganicDose = applications.reduce(
+ (acc, application) => {
+ const fertilizer = fertilizersMap.get(application.p_id_catalogue)
+ if (!fertilizer) {
+ return acc
+ }
+
+ const p_p_rt = new Decimal(
+ fertilizer.p_p_rt ??
+ table11Mestcodes.find(
+ (t) => t.p_type_rvo === fertilizer.p_type_rvo,
+ )?.p_p_rt ??
+ 0,
+ )
+
+ if (p_p_rt.isZero()) {
+ return acc
+ }
+
+ const p_app_amount = new Decimal(application.p_app_amount ?? 0)
+ const actualPhosphate = p_app_amount.times(p_p_rt).dividedBy(1000)
+
+ if (rvoMestcodesOrganicRich.includes(fertilizer.p_type_rvo ?? "")) {
+ return acc.plus(actualPhosphate)
+ }
+ return acc
+ },
+ new Decimal(0),
+ )
+ return totalPhosphateDoseOrganicDose.gte(20)
+}
+
+/**
+ * Memoized version of {@link calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm}.
+ *
+ * This function is wrapped with `withCalculationCache` to optimize performance by caching
+ * results based on the input and the current calculator version.
+ *
+ * @param {NL2025NormsFillingInput} input - The standardized input object containing all necessary data.
+ * @returns {NormFilling} An object containing the total norm filling and a breakdown per application.
+ */
+export const getNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm =
+ withCalculationCache(
+ calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm,
+ "calculateNL2025FertilizerApplicationFillingForFosfaatGebruiksNorm",
+ pkg.calculatorVersion,
+ )
diff --git a/fdm-calculator/src/norms/nl/2025/filling/input.test.ts b/fdm-calculator/src/norms/nl/2025/filling/input.test.ts
new file mode 100644
index 000000000..86a65d0de
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/input.test.ts
@@ -0,0 +1,167 @@
+import type {
+ Cultivation,
+ FdmType,
+ Fertilizer,
+ FertilizerApplication,
+ Field,
+} from "@svenvw/fdm-core"
+import { beforeEach, describe, expect, it, vi } from "vitest"
+import { collectInputForFertilizerApplicationFilling } from "./input"
+import type { NL2025NormsFillingInput } from "./types"
+
+// Mock the entire @svenvw/fdm-core module
+vi.mock("@svenvw/fdm-core", () => ({
+ getField: vi.fn(),
+ getGrazingIntention: vi.fn(),
+ isOrganicCertificationValid: vi.fn(),
+ getCultivations: vi.fn(),
+ getFertilizerApplications: vi.fn(),
+ getFertilizers: vi.fn(),
+}))
+
+// Import the mocked functions
+import {
+ getCultivations,
+ getFertilizerApplications,
+ getFertilizers,
+ getField,
+ getGrazingIntention,
+ isOrganicCertificationValid,
+} from "@svenvw/fdm-core"
+
+describe("collectInputForFertilizerApplicationFilling", () => {
+ const mockFdm = {} as FdmType
+ const mockPrincipalId = "principal123"
+ const mockFieldId = "field456"
+ const mockFosfaatgebruiksnorm = 100
+
+ beforeEach(() => {
+ // Reset all mocks before each test
+ vi.clearAllMocks()
+
+ // Set up default mock implementations for a successful scenario
+ vi.mocked(getField).mockResolvedValue({
+ b_id: mockFieldId,
+ b_id_farm: "farm789",
+ b_centroid: [10, 20],
+ // Add other necessary Field properties
+ } as Field)
+ vi.mocked(getGrazingIntention).mockResolvedValue(true)
+ vi.mocked(isOrganicCertificationValid).mockResolvedValue(false)
+ vi.mocked(getCultivations).mockResolvedValue([
+ {
+ b_lu: "cult1",
+ b_lu_start: new Date(2025, 0, 1),
+ b_lu_end: new Date(2025, 5, 1),
+ b_lu_catalogue: "nl_2014",
+ },
+ ] as unknown as Cultivation[])
+ vi.mocked(getFertilizerApplications).mockResolvedValue([
+ { p_app_id: "app1", p_id_catalogue: "fert1", p_app_amount: 1000 },
+ ] as FertilizerApplication[])
+ vi.mocked(getFertilizers).mockResolvedValue([
+ { p_id_catalogue: "fert1", p_n_rt: 5, p_type_rvo: "115" },
+ ] as Fertilizer[])
+ })
+
+ it("should successfully collect all input data for a valid scenario", async () => {
+ const expectedB_centroid: [number, number] = [10, 20]
+ const expectedCultivations = [
+ {
+ b_lu: "cult1",
+ b_lu_start: new Date(2025, 0, 1),
+ b_lu_end: new Date(2025, 5, 1),
+ b_lu_catalogue: "nl_2014",
+ },
+ ]
+ const expectedApplications: FertilizerApplication[] = [
+ { p_app_id: "app1", p_id_catalogue: "fert1", p_app_amount: 1000 },
+ ]
+ const expectedFertilizers: Fertilizer[] = [
+ { p_id_catalogue: "fert1", p_n_rt: 5, p_type_rvo: "115" },
+ ]
+
+ const result = await collectInputForFertilizerApplicationFilling(
+ mockFdm,
+ mockPrincipalId,
+ mockFieldId,
+ mockFosfaatgebruiksnorm,
+ )
+
+ // Assert that all fdm-core functions were called with the correct arguments
+ expect(getField).toHaveBeenCalledWith(
+ mockFdm,
+ mockPrincipalId,
+ mockFieldId,
+ )
+ expect(getGrazingIntention).toHaveBeenCalledWith(
+ mockFdm,
+ mockPrincipalId,
+ "farm789",
+ 2025,
+ )
+ expect(isOrganicCertificationValid).toHaveBeenCalledWith(
+ mockFdm,
+ mockPrincipalId,
+ "farm789",
+ new Date(2025, 4, 15),
+ )
+ expect(getCultivations).toHaveBeenCalledWith(
+ mockFdm,
+ mockPrincipalId,
+ mockFieldId,
+ {
+ start: new Date(2025, 0, 1),
+ end: new Date(2025, 11, 31, 23, 59, 59, 999),
+ },
+ )
+ expect(getFertilizerApplications).toHaveBeenCalledWith(
+ mockFdm,
+ mockPrincipalId,
+ "field456",
+ {
+ start: new Date(2025, 0, 1),
+ end: new Date(2025, 11, 31, 23, 59, 59, 999),
+ },
+ )
+ expect(getFertilizers).toHaveBeenCalledWith(
+ mockFdm,
+ mockPrincipalId,
+ "farm789",
+ )
+
+ // Assert the structure and content of the returned NL2025NormsFillingInput object
+ expect(result).toEqual({
+ cultivations: expectedCultivations,
+ applications: expectedApplications,
+ fertilizers: expectedFertilizers,
+ has_organic_certification: false,
+ has_grazing_intention: true,
+ fosfaatgebruiksnorm: mockFosfaatgebruiksnorm,
+ b_centroid: expectedB_centroid,
+ } as NL2025NormsFillingInput)
+ })
+
+ it("should throw an error if the field is not found", async () => {
+ vi.mocked(getField).mockResolvedValue(null) // Simulate field not found
+
+ await expect(
+ collectInputForFertilizerApplicationFilling(
+ mockFdm,
+ mockPrincipalId,
+ mockFieldId,
+ mockFosfaatgebruiksnorm,
+ ),
+ ).rejects.toThrow(
+ `Field with id ${mockFieldId} not found for principal ${mockPrincipalId}`,
+ )
+ })
+
+ // Add more tests for edge cases and different scenarios as needed
+ // For example:
+ // - No cultivations
+ // - No applications
+ // - No fertilizers
+ // - Different grazing intention / organic certification status
+ // - Empty b_centroid (if getField returns a field without centroid, though current mock ensures it has one)
+})
diff --git a/fdm-calculator/src/norms/nl/2025/filling/input.ts b/fdm-calculator/src/norms/nl/2025/filling/input.ts
new file mode 100644
index 000000000..6d7113468
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/input.ts
@@ -0,0 +1,98 @@
+import type { FdmType, PrincipalId, Timeframe } from "@svenvw/fdm-core"
+import {
+ getCultivations,
+ getFertilizerApplications,
+ getFertilizers,
+ getField,
+ getGrazingIntention,
+ isOrganicCertificationValid,
+} from "@svenvw/fdm-core"
+import type { NL2025NormsFillingInput } from "./types"
+
+/**
+ * Collects all necessary input data from fdm-core functions for the NL 2025 norms filling calculations.
+ * This function standardizes the data collection process, ensuring all calculation functions
+ * receive a unified input object (NL2025NormsFillingInput).
+ *
+ * @param {FdmType} fdm - The FdmType instance for interacting with the Farm Data Model.
+ * @param {string} principal_id - The ID of the principal (user or organization) performing the calculation.
+ * @param {string} b_id - The ID of the field for which the norms are being calculated.
+ * @param {number} fosfaatgebruiksnorm - The phosphate usage norm in kg/ha for the current calculation.
+ * @returns {Promise} A promise that resolves to a standardized input object
+ * containing cultivations, fertilizer applications, fertilizers, organic certification status,
+ * grazing intention status, the phosphate usage norm, and the field's centroid.
+ * @throws {Error} Throws an error if the specified field cannot be found.
+ */
+export async function collectInputForFertilizerApplicationFilling(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id: string,
+ fosfaatgebruiksnorm: number,
+): Promise {
+ // Define the calendar year for the norms calculation.
+ const year = 2025
+ // Define the timeframe for data collection for the current year.
+ const startOfYear = new Date(year, 0, 1) // January 1st of the specified year
+ const endOfYear = new Date(year, 11, 31, 23, 59, 59, 999) // December 31st of the specified year, including December 31st
+ const timeframe2025: Timeframe = { start: startOfYear, end: endOfYear }
+
+ // 1. Retrieve field details using the field ID.
+ // This is crucial for obtaining the farm ID and the field's geographical centroid.
+ const field = await getField(fdm, principal_id, b_id)
+ if (!field) {
+ throw new Error(
+ `Field with id ${b_id} not found for principal ${principal_id}`,
+ )
+ }
+ const b_id_farm = field.b_id_farm
+ const b_centroid = field.b_centroid
+
+ // 2. Retrieve the grazing intention status for the farm for the specified year.
+ // This indicates whether grazing is intended on the farm, affecting certain norm calculations.
+ const has_grazing_intention = await getGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ year,
+ )
+
+ // 3. Check the organic certification status for the farm.
+ // This is relevant for specific organic-rich fertilizer regulations.
+ // The date is set to mid-year to ensure it falls within the certification period if applicable.
+ const has_organic_certification = await isOrganicCertificationValid(
+ fdm,
+ principal_id,
+ b_id_farm,
+ new Date(year, 4, 15), // May 15th of the specified year
+ )
+
+ // 4. Retrieve all cultivations associated with the field within the defined cultivation timeframe.
+ // This data is used to determine land use (e.g., bouwland/grasland).
+ const cultivations = await getCultivations(
+ fdm,
+ principal_id,
+ b_id,
+ timeframe2025,
+ )
+
+ // 5. Retrieve all fertilizer applications for the farm within the current year's timeframe.
+ const applications = await getFertilizerApplications(
+ fdm,
+ principal_id,
+ b_id,
+ timeframe2025,
+ )
+ // 6. Retrieve details of all fertilizers used on the farm.
+ const fertilizers = await getFertilizers(fdm, principal_id, b_id_farm)
+
+ // Assemble all collected data into the standardized NL2025NormsFillingInput object.
+ return {
+ cultivations: cultivations,
+ applications: applications,
+ fertilizers: fertilizers,
+ has_organic_certification: has_organic_certification,
+ has_grazing_intention: has_grazing_intention,
+ fosfaatgebruiksnorm: fosfaatgebruiksnorm,
+ b_centroid: b_centroid,
+ }
+}
diff --git a/fdm-calculator/src/norms/nl/2025/filling/stikstofgebruiksnorm.test.ts b/fdm-calculator/src/norms/nl/2025/filling/stikstofgebruiksnorm.test.ts
new file mode 100644
index 000000000..e1d2a701a
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/stikstofgebruiksnorm.test.ts
@@ -0,0 +1,776 @@
+import type {
+ Cultivation,
+ Fertilizer,
+ FertilizerApplication,
+} from "@svenvw/fdm-core"
+import { afterEach, describe, expect, it, vi } from "vitest"
+import { getRegion } from "../value/stikstofgebruiksnorm"
+import type { RegionKey } from "../value/types"
+import {
+ calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm,
+ getWorkingCoefficient,
+ isBouwland,
+} from "./stikstofgebruiksnorm"
+import type { NL2025NormsFillingInput } from "./types"
+
+// Mock getRegion
+vi.mock("../value/stikstofgebruiksnorm", () => ({
+ getRegion: vi.fn(),
+}))
+
+describe("isBouwland", () => {
+ it("should return true if cultivation is not in non-bouwland codes", () => {
+ const cultivations: Cultivation[] = [
+ {
+ b_lu: "cult1",
+ b_start: "2025-01-01",
+ b_lu_catalogue: "nl_2014", // A generic bouwland code
+ },
+ ]
+ const applicationDate = new Date("2025-06-15")
+ expect(isBouwland(cultivations, applicationDate)).toBe(true)
+ })
+
+ it("should return false if cultivation is in non-bouwland codes", () => {
+ const cultivations: Cultivation[] = [
+ {
+ b_lu: "cult1",
+ b_start: "2025-01-01",
+ b_lu_catalogue: "nl_265", // Grasland
+ },
+ ]
+ const applicationDate = new Date("2025-06-15")
+ expect(isBouwland(cultivations, applicationDate)).toBe(false)
+ })
+
+ it("should return false if no active cultivation exists", () => {
+ const cultivations: Cultivation[] = [
+ {
+ b_lu: "cult1",
+ b_start: "2024-01-01",
+ b_end: "2024-12-31",
+ b_lu_catalogue: "nl_2014",
+ },
+ ]
+ const applicationDate = new Date("2025-06-15")
+ expect(isBouwland(cultivations, applicationDate)).toBe(false)
+ })
+
+ it("should return true for a cultivation spanning the application date", () => {
+ const cultivations: Cultivation[] = [
+ {
+ b_lu: "cult1",
+ b_start: "2025-01-01",
+ b_end: "2025-12-31",
+ b_lu_catalogue: "nl_2014",
+ },
+ ]
+ const applicationDate = new Date("2025-07-01")
+ expect(isBouwland(cultivations, applicationDate)).toBe(true)
+ })
+
+ it("should return false for a cultivation ending before the application date", () => {
+ const cultivations: Cultivation[] = [
+ {
+ b_lu: "cult1",
+ b_start: "2025-01-01",
+ b_end: "2025-06-30",
+ b_lu_catalogue: "nl_2014",
+ },
+ ]
+ const applicationDate = new Date("2025-07-01")
+ expect(isBouwland(cultivations, applicationDate)).toBe(false)
+ })
+
+ it("should return false for a cultivation starting after the application date", () => {
+ const cultivations: Cultivation[] = [
+ {
+ b_lu: "cult1",
+ b_start: "2025-08-01",
+ b_end: "2025-12-31",
+ b_lu_catalogue: "nl_2014",
+ },
+ ]
+ const applicationDate = new Date("2025-07-01")
+ expect(isBouwland(cultivations, applicationDate)).toBe(false)
+ })
+})
+
+describe("getWorkingCoefficient", () => {
+ it("should return default details if p_type_rvo is null or undefined", () => {
+ const result = getWorkingCoefficient(
+ null,
+ "zand_nwc",
+ true,
+ true,
+ new Date(),
+ false,
+ )
+ expect(result.p_n_wcl).toBe(1.0)
+ expect(result.description).toBe("Kunstmest")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ it("should return default details if p_type_rvo is not found in table9", () => {
+ const result = getWorkingCoefficient(
+ "999",
+ "zand_nwc",
+ true,
+ true,
+ new Date(),
+ false,
+ )
+ expect(result.p_n_wcl).toBe(1.0)
+ expect(result.description).toBe("Kunstmest")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ // Drijfmest van graasdieren op het eigen bedrijf geproduceerd
+ describe("Drijfmest van graasdieren op het eigen bedrijf geproduceerd (onFarmProduced: true)", () => {
+ const p_type_rvo = "14" // Drijfmest rundvee
+ const soilType: RegionKey = "zand_nwc"
+ const isBouwland = false // Grasland
+ const fertilizerOnFarmProduced = true // Explicitly true for on-farm produced
+
+ it("should return 0.45 for on-farm produced drijfmest with grazing intention", () => {
+ const b_grazing_intention = true
+ const applicationDate = new Date("2025-06-15")
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.45)
+ expect(result.description).toBe(
+ "Drijfmest van graasdieren op het eigen bedrijf geproduceerd",
+ )
+ expect(result.subTypeDescription).toBe("Op bedrijf met beweiding")
+ })
+
+ it("should return 0.60 for on-farm produced drijfmest without grazing intention", () => {
+ const b_grazing_intention = false
+ const applicationDate = new Date("2025-06-15")
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.6)
+ expect(result.description).toBe(
+ "Drijfmest van graasdieren op het eigen bedrijf geproduceerd",
+ )
+ expect(result.subTypeDescription).toBe(
+ "Op bedrijf zonder beweiding",
+ )
+ })
+ })
+
+ // Drijfmest van graasdieren aangevoerd
+ it("should return 0.60 for aangevoerd drijfmest (onFarmProduced: false)", () => {
+ const p_type_rvo = "14" // Drijfmest rundvee
+ const soilType: RegionKey = "zand_nwc"
+ const b_grazing_intention = true
+ const isBouwland = false
+ const applicationDate = new Date("2025-06-15")
+ const fertilizerOnFarmProduced = false // Explicitly false for aangevoerd
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.6)
+ expect(result.description).toBe("Drijfmest van graasdieren aangevoerd")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ // Drijfmest van varkens
+ describe("Drijfmest van varkens", () => {
+ const p_type_rvo = "46" // Drijfmest fokzeugen
+ const b_grazing_intention = false
+ const isBouwland = true
+ const applicationDate = new Date("2025-06-15")
+ const fertilizerOnFarmProduced = false // Explicitly false for aangevoerd
+
+ it("should return 0.60 for klei en veen soil", () => {
+ const soilType: RegionKey = "klei"
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.6)
+ expect(result.description).toBe("Drijfmest van varkens")
+ expect(result.subTypeDescription).toBe("Op klei en veen")
+ })
+
+ it("should return 0.80 for zand en löss soil", () => {
+ const soilType: RegionKey = "zand_nwc"
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.8)
+ expect(result.description).toBe("Drijfmest van varkens")
+ expect(result.subTypeDescription).toBe("Op zand en löss")
+ })
+ })
+
+ // Dunnen fractie na mestbewerking en gier
+ it("should return 0.80 for dunne fractie", () => {
+ const p_type_rvo = "12" // Filtraat na mestscheiding
+ const soilType: RegionKey = "zand_nwc"
+ const b_grazing_intention = false
+ const isBouwland = true
+ const applicationDate = new Date("2025-06-15")
+ const fertilizerOnFarmProduced = false // Explicitly false for aangevoerd
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.8)
+ expect(result.description).toBe(
+ "Dunne fractie na mestbewerking en gier",
+ )
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ // Vaste mest van graasdieren op het eigen bedrijf geproduceerd
+ describe("Vaste mest van graasdieren op het eigen bedrijf geproduceerd (onFarmProduced: true)", () => {
+ const p_type_rvo = "10" // Vaste mest rundvee
+ const fertilizerOnFarmProduced = true
+ const b_grazing_intention = false
+ const isBouwland = true
+ const soilType: RegionKey = "klei"
+
+ it("should return 0.30 for bouwland on klei/veen from Sep 1 to Jan 31", () => {
+ const applicationDate = new Date("2025-10-15") // October
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.3)
+ expect(result.description).toBe(
+ "Vaste mest van graasdieren op het eigen bedrijf geproduceerd",
+ )
+ expect(result.subTypeDescription).toBe(
+ "Op bouwland op klei en veen, van 1 september t/m 31 januari",
+ )
+ })
+
+ it("should return 0.45 for overige toepassingen on bedrijf met beweiding (outside Sep-Jan period)", () => {
+ const applicationDate = new Date("2025-03-15") // March
+ const b_grazing_intention_true = true
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention_true,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.45)
+ expect(result.description).toBe(
+ "Vaste mest van graasdieren op het eigen bedrijf geproduceerd",
+ )
+ expect(result.subTypeDescription).toBe(
+ "Overige toepassingen op bedrijf met beweiding",
+ )
+ })
+
+ it("should return 0.60 for overige toepassingen on bedrijf zonder beweiding (outside Sep-Jan period)", () => {
+ const applicationDate = new Date("2025-03-15") // March
+ const b_grazing_intention_false = false
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention_false,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.6)
+ expect(result.description).toBe(
+ "Vaste mest van graasdieren op het eigen bedrijf geproduceerd",
+ )
+ expect(result.subTypeDescription).toBe(
+ "Overige toepassingen op bedrijf zonder beweiding",
+ )
+ })
+ })
+
+ // Vaste mest van graasdieren aangevoerd
+ it("should return 0.40 for aangevoerd vaste mest (onFarmProduced: false) overige toepassingen", () => {
+ const p_type_rvo = "10" // Vaste mest rundvee
+ const soilType: RegionKey = "zand_nwc"
+ const b_grazing_intention = false
+ const isBouwland = true
+ const applicationDate = new Date("2025-06-15")
+ const fertilizerOnFarmProduced = false // Explicitly false for aangevoerd
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.4)
+ expect(result.description).toBe("Vaste mest van graasdieren aangevoerd")
+ expect(result.subTypeDescription).toBe("Overige toepassingen")
+ })
+
+ // Vaste mest van varkens, pluimvee en nertsen
+ it("should return 0.55 for vaste mest van varkens, pluimvee en nertsen", () => {
+ const p_type_rvo = "40" // Varkens, vaste mest
+ const soilType: RegionKey = "zand_nwc"
+ const b_grazing_intention = false
+ const isBouwland = true
+ const applicationDate = new Date("2025-06-15")
+ const fertilizerOnFarmProduced = false // Explicitly false for aangevoerd
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.55)
+ expect(result.description).toBe(
+ "Vaste mest van varkens, pluimvee en nertsen",
+ )
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ // Vaste mest van overige diersoorten
+ describe("Vaste mest van overige diersoorten", () => {
+ const p_type_rvo = "104" // Cavia, vaste mest
+ const soilType: RegionKey = "klei"
+ const b_grazing_intention = false
+ const isBouwland = true
+ const fertilizerOnFarmProduced = false // Explicitly false for aangevoerd
+
+ it("should return 0.30 for bouwland on klei/veen from Sep 1 to Jan 31", () => {
+ const applicationDate = new Date("2025-11-01") // November
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.3)
+ expect(result.description).toBe(
+ "Vaste mest van overige diersoorten",
+ )
+ expect(result.subTypeDescription).toBe(
+ "Op bouwland op klei en veen, van 1 september t/m 31 januari",
+ )
+ })
+
+ it("should return 0.40 for overige toepassingen (outside Sep-Jan period)", () => {
+ const applicationDate = new Date("2025-04-01") // April
+ const result = getWorkingCoefficient(
+ p_type_rvo,
+ soilType,
+ b_grazing_intention,
+ isBouwland,
+ applicationDate,
+ fertilizerOnFarmProduced,
+ )
+ expect(result.p_n_wcl).toBe(0.4)
+ expect(result.description).toBe(
+ "Vaste mest van overige diersoorten",
+ )
+ expect(result.subTypeDescription).toBe("Overige toepassingen")
+ })
+ })
+
+ // Overig (top-level entries)
+ it("should return 0.10 for Compost", () => {
+ const result = getWorkingCoefficient(
+ "111",
+ "zand_nwc",
+ false,
+ true,
+ new Date(),
+ false,
+ )
+ expect(result.p_n_wcl).toBe(0.1)
+ expect(result.description).toBe("Compost")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ it("should return 0.25 for Champost", () => {
+ const result = getWorkingCoefficient(
+ "110",
+ "zand_nwc",
+ false,
+ true,
+ new Date(),
+ false,
+ )
+ expect(result.p_n_wcl).toBe(0.25)
+ expect(result.description).toBe("Champost")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ it("should return 0.40 for Zuiveringsslib", () => {
+ const result = getWorkingCoefficient(
+ "114",
+ "zand_nwc",
+ false,
+ true,
+ new Date(),
+ false,
+ )
+ expect(result.p_n_wcl).toBe(0.4)
+ expect(result.description).toBe("Zuiveringsslib")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ it("should return 0.50 for Overige organische meststoffen", () => {
+ const result = getWorkingCoefficient(
+ "116",
+ "zand_nwc",
+ false,
+ true,
+ new Date(),
+ false,
+ )
+ expect(result.p_n_wcl).toBe(0.5)
+ expect(result.description).toBe("Overige organische meststoffen")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ it("should return 1.0 for Kunstmest", () => {
+ const result = getWorkingCoefficient(
+ "115",
+ "zand_nwc",
+ false,
+ true,
+ new Date(),
+ false,
+ )
+ expect(result.p_n_wcl).toBe(1.0)
+ expect(result.description).toBe("Kunstmest")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+
+ it("should return 1.0 for Mineralenconcentraat", () => {
+ const result = getWorkingCoefficient(
+ "120",
+ "zand_nwc",
+ false,
+ true,
+ new Date(),
+ false,
+ )
+ expect(result.p_n_wcl).toBe(1.0)
+ expect(result.description).toBe("Mineralenconcentraat")
+ expect(result.subTypeDescription).toBeUndefined()
+ })
+})
+
+describe("calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm", () => {
+ afterEach(() => {
+ vi.clearAllMocks()
+ })
+
+ it("should calculate norm filling correctly for a single application with known nitrogen content", async () => {
+ const applications: FertilizerApplication[] = [
+ {
+ p_app_id: "app1",
+ b_id: "field1",
+ p_app_date: "2025-05-01",
+ p_app_amount: 1000,
+ p_id_catalogue: "fert1",
+ },
+ ]
+ const fertilizers: Fertilizer[] = [
+ {
+ p_id_catalogue: "fert1",
+ p_n_rt: 5, // 5 kg N per ton
+ p_type_rvo: "115", // Kunstmest (working coefficient 1.0)
+ },
+ ]
+ const b_centroid: [number, number] = [0, 0]
+ const has_grazing_intention = false
+ const cultivations: Cultivation[] = []
+
+ const result =
+ await calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm(
+ {
+ applications,
+ fertilizers,
+ b_centroid,
+ has_grazing_intention,
+ cultivations,
+ has_organic_certification: false, // Default value for tests
+ fosfaatgebruiksnorm: 0, // Default value for tests
+ } as NL2025NormsFillingInput,
+ )
+
+ // Expected: 1000 kg * 5 kg/ton * 1.0 (100%) / 1000 = 5
+ expect(result.normFilling).toBeCloseTo(5)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(5)
+ expect(result.applicationFilling[0].normFillingDetails).toBe(
+ "Werkingscoëfficiënt: 100% - Kunstmest",
+ )
+ })
+
+ it("should calculate norm filling correctly for multiple applications", async () => {
+ const applications: FertilizerApplication[] = [
+ {
+ p_app_id: "app1",
+ b_id: "field1",
+ p_app_date: "2025-05-01",
+ p_app_amount: 1000,
+ p_id_catalogue: "fert1",
+ },
+ {
+ p_app_id: "app2",
+ b_id: "field1",
+ p_app_date: "2025-03-15",
+ p_app_amount: 500,
+ p_id_catalogue: "fert2",
+ },
+ ]
+ const fertilizers: Fertilizer[] = [
+ {
+ p_id_catalogue: "fert1",
+ p_n_rt: 5, // 5 kg N per ton
+ p_type_rvo: "115", // Kunstmest (working coefficient 1.0)
+ },
+ {
+ p_id_catalogue: "fert2",
+ p_n_rt: 10, // 10 kg N per ton
+ p_type_rvo: "111", // Compost (working coefficient 0.1)
+ },
+ ]
+ const b_centroid: [number, number] = [0, 0]
+ const has_grazing_intention = false
+ const cultivations: Cultivation[] = []
+
+ const result =
+ await calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm(
+ {
+ applications,
+ fertilizers,
+ b_centroid,
+ has_grazing_intention,
+ cultivations,
+ has_organic_certification: false, // Default value for tests
+ fosfaatgebruiksnorm: 0, // Default value for tests
+ } as NL2025NormsFillingInput,
+ )
+
+ // App1: 1000 * 5 * 1.0 / 1000 = 5
+ // App2: 500 * 10 * 0.1 / 1000 = 0.5
+ // Total: 5.5
+ expect(result.normFilling).toBeCloseTo(5.5)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(5)
+ expect(result.applicationFilling[0].normFillingDetails).toBe(
+ "Werkingscoëfficiënt: 100% - Kunstmest",
+ )
+ expect(result.applicationFilling[1].normFilling).toBeCloseTo(0.5)
+ expect(result.applicationFilling[1].normFillingDetails).toBe(
+ "Werkingscoëfficiënt: 10% - Compost",
+ )
+ })
+
+ it("should use table11Mestcodes for nitrogen content if p_n_rt is 0", async () => {
+ const applications: FertilizerApplication[] = [
+ {
+ p_app_id: "app1",
+ b_id: "field1",
+ p_app_date: "2025-05-01",
+ p_app_amount: 1000,
+ p_id_catalogue: "fert1",
+ },
+ ]
+ const fertilizers: Fertilizer[] = [
+ {
+ p_id_catalogue: "fert1",
+ p_n_rt: 0, // Nitrogen content not directly known
+ p_type_rvo: "14", // Drijfmest rundvee (Table 11: 4.0 kg N/ton)
+ },
+ ]
+ const b_centroid: [number, number] = [0, 0]
+ const has_grazing_intention = true // Drijfmest graasdieren, met beweiding -> 0.45
+ const cultivations: Cultivation[] = []
+
+ const result =
+ await calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm(
+ {
+ applications,
+ fertilizers,
+ b_centroid,
+ has_grazing_intention,
+ cultivations,
+ has_organic_certification: false, // Default value for tests
+ fosfaatgebruiksnorm: 0, // Default value for tests
+ } as NL2025NormsFillingInput,
+ )
+
+ // Expected: 1000 * 4.0 (from Table 11) * 0.45 (from Table 9) / 1000 = 1.8
+ expect(result.normFilling).toBeCloseTo(1.8)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(1.8)
+ expect(result.applicationFilling[0].normFillingDetails).toBe(
+ "Werkingscoëfficiënt: 45% - Drijfmest van graasdieren op het eigen bedrijf geproduceerd - Op bedrijf met beweiding",
+ )
+ })
+
+ it("should throw an error if fertilizer cannot be found", async () => {
+ const applications: FertilizerApplication[] = [
+ {
+ p_app_id: "app1",
+ b_id: "field1",
+ p_app_date: "2025-05-01",
+ p_app_amount: 1000,
+ p_id_catalogue: "nonExistentFert",
+ },
+ ]
+ const fertilizers: Fertilizer[] = [] // Empty fertilizers array
+ const b_centroid: [number, number] = [0, 0]
+ const has_grazing_intention = false
+ const cultivations: Cultivation[] = []
+
+ await expect(
+ calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm({
+ applications,
+ fertilizers,
+ b_centroid,
+ has_grazing_intention,
+ cultivations,
+ has_organic_certification: false, // Default value for tests
+ fosfaatgebruiksnorm: 0, // Default value for tests
+ } as NL2025NormsFillingInput),
+ ).rejects.toThrow(
+ "Fertilizer nonExistentFert not found for application app1",
+ )
+ })
+
+ it("should treat onFarmProduced as false when has_grazing_intention is false for drijfmest", async () => {
+ vi.mocked(getRegion).mockResolvedValue("zand_nwc")
+ const applications: FertilizerApplication[] = [
+ {
+ p_app_id: "app1",
+ b_id: "field1",
+ p_app_date: "2025-05-01",
+ p_app_amount: 1000,
+ p_id_catalogue: "fert1",
+ },
+ ]
+ const fertilizers: Fertilizer[] = [
+ {
+ p_id_catalogue: "fert1",
+ p_n_rt: 0, // Nitrogen content not directly known
+ p_type_rvo: "14", // Drijfmest rundvee (Table 11: 4.0 kg N/ton)
+ },
+ ]
+ const b_centroid: [number, number] = [0, 0]
+ const has_grazing_intention = false // No grazing intention, so onFarmProduced should be false
+ const cultivations: Cultivation[] = []
+
+ const result =
+ await calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm(
+ {
+ applications,
+ fertilizers,
+ b_centroid,
+ has_grazing_intention,
+ cultivations,
+ has_organic_certification: false,
+ fosfaatgebruiksnorm: 0,
+ } as NL2025NormsFillingInput,
+ )
+
+ // For p_type_rvo "14" (Drijfmest rundvee), if onFarmProduced is false,
+ // it falls into "Drijfmest van graasdieren aangevoerd" which has p_n_wcl of 0.60.
+ // Expected: 1000 * 4.0 (from Table 11) * 0.60 (from Table 9) / 1000 = 2.4
+ expect(result.normFilling).toBeCloseTo(2.4)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(2.4)
+ expect(result.applicationFilling[0].normFillingDetails).toBe(
+ "Werkingscoëfficiënt: 60% - Drijfmest van graasdieren aangevoerd",
+ )
+ })
+
+ it("should correctly apply bouwland logic for working coefficient", async () => {
+ vi.mocked(getRegion).mockResolvedValue("klei") // Soil type for bouwland rule
+ const applications: FertilizerApplication[] = [
+ {
+ p_app_id: "app1",
+ b_id: "field1",
+ p_app_date: "2025-10-15", // Sep 1 to Jan 31 period
+ p_app_amount: 1000,
+ p_id_catalogue: "fert1",
+ },
+ ]
+ const fertilizers: Fertilizer[] = [
+ {
+ p_id_catalogue: "fert1",
+ p_n_rt: 10, // 10 kg N per ton
+ p_type_rvo: "10",
+ },
+ ]
+ const b_centroid: [number, number] = [0, 0]
+ const has_grazing_intention = false
+ const cultivations: Cultivation[] = [
+ {
+ b_lu: "cult1",
+ b_start: "2025-01-01",
+ b_end: "2025-12-31",
+ b_lu_catalogue: "nl_2014", // Bouwland
+ },
+ ]
+
+ const result =
+ await calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm(
+ {
+ applications,
+ fertilizers,
+ b_centroid,
+ has_grazing_intention,
+ cultivations,
+ has_organic_certification: false, // Default value for tests
+ fosfaatgebruiksnorm: 0, // Default value for tests
+ } as NL2025NormsFillingInput,
+ )
+
+ // For p_type_rvo "10" (Vaste mest rundvee), onFarmProduced: true in table9.
+ // Since has_grazing_intention is false, onFarmProduced will be false in the main function.
+ // For "bouwland op klei en veen, van 1 september t/m 31 januari", p_n_wcl is 0.3.
+ // Expected: 1000 * 10 * 0.3 / 1000 = 3
+ expect(result.normFilling).toBeCloseTo(3)
+ expect(result.applicationFilling[0].normFilling).toBeCloseTo(3)
+ expect(result.applicationFilling[0].normFillingDetails).toBe(
+ "Werkingscoëfficiënt: 30% - Vaste mest van graasdieren aangevoerd - Op bouwland op klei en veen, van 1 september t/m 31 januari",
+ )
+ })
+})
diff --git a/fdm-calculator/src/norms/nl/2025/filling/stikstofgebruiksnorm.ts b/fdm-calculator/src/norms/nl/2025/filling/stikstofgebruiksnorm.ts
new file mode 100644
index 000000000..8ef3310cd
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/stikstofgebruiksnorm.ts
@@ -0,0 +1,260 @@
+import { type Cultivation, withCalculationCache } from "@svenvw/fdm-core"
+import Decimal from "decimal.js"
+import pkg from "../../../../package"
+import { getRegion } from "../value/stikstofgebruiksnorm"
+import type { RegionKey } from "../value/types"
+import { table9 } from "./table-9"
+import { table11Mestcodes } from "./table-11-mestcodes"
+import type {
+ NL2025NormsFillingInput,
+ NormFilling,
+ WorkingCoefficientDetails,
+} from "./types"
+
+/**
+ * Calculates the nitrogen utilization norm filling for a set of fertilizer applications.
+ * This function determines the amount of effective nitrogen applied, taking into account
+ * fertilizer type, nitrogen content, working coefficients, soil type, grazing intention,
+ * and land use (bouwland/arable land).
+ *
+ * @param {NL2025NormsFillingInput} input - The standardized input object containing all necessary data.
+ * @returns {Promise} An object containing the total norm filling and details for each application.
+ */
+export async function calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm(
+ input: NL2025NormsFillingInput,
+): Promise {
+ const {
+ applications,
+ fertilizers,
+ b_centroid,
+ has_grazing_intention,
+ cultivations,
+ } = input
+
+ const applicationFillings: NormFilling["applicationFilling"] = []
+ let totalNormFilling = new Decimal(0)
+
+ const soilType = await getRegion(b_centroid)
+
+ for (const application of applications) {
+ const fertilizer = fertilizers.find(
+ (f) => f.p_id_catalogue === application.p_id_catalogue,
+ )
+ if (!fertilizer) {
+ throw new Error(
+ `Fertilizer ${application.p_id_catalogue} not found for application ${application.p_app_id}`,
+ )
+ }
+
+ // If nitrogen content is not known (explicitly 0 or undefined/null), use the value from Table 11 based on p_type_rvo
+ let nitrogenContentValue = fertilizer.p_n_rt
+ if (
+ nitrogenContentValue === 0 ||
+ nitrogenContentValue === undefined ||
+ nitrogenContentValue === null
+ ) {
+ const table11Entry = table11Mestcodes.find(
+ (entry) => entry.p_type_rvo === fertilizer.p_type_rvo,
+ )
+ nitrogenContentValue = table11Entry?.p_n_rt ?? 0
+ }
+ const p_n_rt = new Decimal(nitrogenContentValue)
+
+ const p_app_date = new Date(application.p_app_date)
+ const isCurrentBouwland = isBouwland(cultivations, p_app_date)
+
+ // Determine the onFarmProduced status of the *actual fertilizer* based on temporary logic.
+ // TODO: Implement proper determination of onFarmProduced based on actual farm data.
+ const onFarmProduced = has_grazing_intention // Assume that if farm performs grazing, drijfmest and vaste mest are from the farm itself, otherwise supplied.
+
+ const workingCoefficientDetails = getWorkingCoefficient(
+ fertilizer.p_type_rvo,
+ soilType,
+ has_grazing_intention,
+ isCurrentBouwland,
+ p_app_date,
+ onFarmProduced,
+ )
+
+ // Calculate norm filling: amount * nitrogen content * (working coefficient / 100) / 1000
+ const p_app_amount = new Decimal(application.p_app_amount)
+ const normFilling = p_app_amount
+ .times(p_n_rt)
+ .times(workingCoefficientDetails.p_n_wcl)
+ .dividedBy(1000)
+ totalNormFilling = totalNormFilling.plus(normFilling)
+
+ const descriptionParts = [workingCoefficientDetails.description]
+ if (workingCoefficientDetails.subTypeDescription) {
+ descriptionParts.push(workingCoefficientDetails.subTypeDescription)
+ }
+ const normFillingDetailString = `Werkingscoëfficiënt: ${workingCoefficientDetails.p_n_wcl * 100}% - ${descriptionParts.join(" - ")}`
+
+ applicationFillings.push({
+ p_app_id: application.p_app_id,
+ normFilling: normFilling.toNumber(),
+ normFillingDetails: normFillingDetailString,
+ })
+ }
+
+ return {
+ normFilling: totalNormFilling.toNumber(),
+ applicationFilling: applicationFillings,
+ }
+}
+
+/**
+ * Determines if a field is considered "Bouwland" (arable land) at a given application date.
+ * A field is not considered Bouwland if its active cultivation's `b_lu_catalogue` code
+ * is one of the specified non-bouwland codes.
+ *
+ * @param {Cultivation[]} cultivations - An array of cultivations for the farm.
+ * @param {Date} p_app_date - The date of the fertilizer application.
+ * @returns {boolean} True if the field is considered Bouwland, false otherwise.
+ */
+export function isBouwland(
+ cultivations: Cultivation[],
+ p_app_date: Date,
+): boolean {
+ const nonBouwlandCodes = ["nl_265", "nl_266", "nl_331", "nl_332"]
+
+ const activeCultivation = cultivations.find((c) => {
+ const startDate = new Date(c.b_start)
+ const endDate = c.b_end ? new Date(c.b_end) : undefined
+ return (
+ p_app_date >= startDate &&
+ (endDate === undefined || p_app_date <= endDate)
+ )
+ })
+
+ if (
+ !activeCultivation ||
+ nonBouwlandCodes.includes(activeCultivation.b_lu_catalogue)
+ ) {
+ return false
+ }
+
+ return true
+}
+
+/**
+ * Determines the working coefficient for a given fertilizer application based on various conditions.
+ * The working coefficient is retrieved from `table9` and depends on the fertilizer type,
+ * whether it's produced on-farm, soil type, grazing intention, land use, and application date.
+ *
+ * @param {string | null | undefined} p_type_rvo - The RVO fertilizer type code.
+ * @param {RegionKey | undefined} soilType - The soil type of the field.
+ * @param {boolean} b_grazing_intention - Indicates if there is a grazing intention for the farm.
+ * @param {boolean} isBouwland - True if the land is arable land (bouwland), false otherwise.
+ * @param {Date} p_app_date - The date of the fertilizer application.
+ * @param {boolean} fertilizerOnFarmProduced - True if the fertilizer is produced on the farm, false otherwise.
+ * @returns {WorkingCoefficientDetails} An object containing the working coefficient, its main description, and an optional subtype description.
+ */
+export function getWorkingCoefficient(
+ p_type_rvo: string | null | undefined,
+ soilType: RegionKey | undefined,
+ b_grazing_intention: boolean,
+ isBouwland: boolean,
+ p_app_date: Date,
+ fertilizerOnFarmProduced: boolean, // New parameter
+): WorkingCoefficientDetails {
+ const defaultDetails: WorkingCoefficientDetails = {
+ p_n_wcl: 1.0,
+ description: "Kunstmest",
+ }
+
+ if (!p_type_rvo) {
+ return defaultDetails
+ }
+
+ for (const entry of table9) {
+ if (entry.p_type_rvo.includes(p_type_rvo)) {
+ // If the table entry explicitly specifies an onFarmProduced requirement,
+ // the fertilizer's onFarmProduced status must match it.
+ if (
+ entry.onFarmProduced !== undefined &&
+ entry.onFarmProduced !== fertilizerOnFarmProduced
+ ) {
+ continue // Mismatch, try next entry
+ }
+
+ if (entry.subTypes) {
+ const matchingSubType = entry.subTypes.find((subType) => {
+ if (
+ subType.b_grazing_intention !== undefined &&
+ subType.b_grazing_intention !== b_grazing_intention
+ ) {
+ return false
+ }
+
+ if (
+ subType.grondsoortCode &&
+ !subType.grondsoortCode.includes(soilType as RegionKey)
+ ) {
+ return false
+ }
+
+ if (
+ subType.isBouwland !== undefined &&
+ subType.isBouwland !== isBouwland
+ ) {
+ return false
+ }
+
+ if (subType.applicationPeriod) {
+ const appMonth = p_app_date.getMonth() // 0-11 (Jan is 0, Dec is 11)
+ const appDay = p_app_date.getDate()
+
+ if (
+ subType.applicationPeriod ===
+ "1 september t/m 31 januari"
+ ) {
+ // September (month 8) to January (month 0)
+ if (
+ !(
+ (appMonth >= 8 && appMonth <= 11) ||
+ (appMonth === 0 && appDay <= 31)
+ )
+ ) {
+ return false
+ }
+ }
+ }
+ return true // All conditions for this subType match
+ })
+
+ if (matchingSubType) {
+ return {
+ p_n_wcl: matchingSubType.p_n_wcl,
+ description: entry.description,
+ subTypeDescription: matchingSubType.description,
+ }
+ }
+ } else if (entry.p_n_wcl !== undefined) {
+ // If no subTypes, use the main entry's p_n_wcl
+ return {
+ p_n_wcl: entry.p_n_wcl,
+ description: entry.description,
+ }
+ }
+ }
+ }
+
+ return defaultDetails // If no specific rule is found, return the default 100% (1.0)
+}
+
+/**
+ * Memoized version of {@link calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm}.
+ *
+ * This function is wrapped with `withCalculationCache` to optimize performance by caching
+ * results based on the input and the current calculator version.
+ *
+ * @param {NL2025NormsFillingInput} input - The standardized input object containing all necessary data.
+ * @returns {Promise} An object containing the total norm filling and details for each application.
+ */
+export const getNL2025FertilizerApplicationFillingForStikstofGebruiksNorm =
+ withCalculationCache(
+ calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm,
+ "calculateNL2025FertilizerApplicationFillingForStikstofGebruiksNorm",
+ pkg.calculatorVersion,
+ )
diff --git a/fdm-calculator/src/norms/nl/2025/filling/table-11-mestcodes.ts b/fdm-calculator/src/norms/nl/2025/filling/table-11-mestcodes.ts
new file mode 100644
index 000000000..34d5d38a2
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/table-11-mestcodes.ts
@@ -0,0 +1,336 @@
+import type { Table11Mestcodes } from "./types"
+
+export const table11Mestcodes: Table11Mestcodes = [
+ {
+ p_type_rvo: "10",
+ p_type_nitratesdirective: true,
+ p_n_rt: 6.4,
+ p_p_rt: 3.2,
+ },
+ {
+ p_type_rvo: "11",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.0,
+ p_p_rt: 1.3,
+ },
+ {
+ p_type_rvo: "12",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.0,
+ p_p_rt: 0.2,
+ },
+ {
+ p_type_rvo: "13",
+ p_type_nitratesdirective: true,
+ p_n_rt: 9.2,
+ p_p_rt: 9.2,
+ },
+ {
+ p_type_rvo: "14",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.0,
+ p_p_rt: 1.5,
+ },
+ {
+ p_type_rvo: "17",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.2,
+ p_p_rt: 5.0,
+ },
+ {
+ p_type_rvo: "18",
+ p_type_nitratesdirective: true,
+ p_n_rt: 3.2,
+ p_p_rt: 1.2,
+ },
+ {
+ p_type_rvo: "19",
+ p_type_nitratesdirective: true,
+ p_n_rt: 5.5,
+ p_p_rt: 2.2,
+ },
+ {
+ p_type_rvo: "23",
+ p_type_nitratesdirective: true,
+ p_n_rt: 30.1,
+ p_p_rt: 22.9,
+ },
+ {
+ p_type_rvo: "30",
+ p_type_nitratesdirective: true,
+ p_n_rt: 9.9,
+ p_p_rt: 6.2,
+ },
+ {
+ p_type_rvo: "31",
+ p_type_nitratesdirective: true,
+ p_n_rt: 24.3,
+ p_p_rt: 22.1,
+ },
+ {
+ p_type_rvo: "32",
+ p_type_nitratesdirective: true,
+ p_n_rt: 26.0,
+ p_p_rt: 20.9,
+ },
+ {
+ p_type_rvo: "33",
+ p_type_nitratesdirective: true,
+ p_n_rt: 32.6,
+ p_p_rt: 26.3,
+ },
+ {
+ p_type_rvo: "35",
+ p_type_nitratesdirective: true,
+ p_n_rt: 26.8,
+ p_p_rt: 24.9,
+ },
+ {
+ p_type_rvo: "39",
+ p_type_nitratesdirective: true,
+ p_n_rt: 31.1,
+ p_p_rt: 15.4,
+ },
+ {
+ p_type_rvo: "40",
+ p_type_nitratesdirective: true,
+ p_n_rt: 8.1,
+ p_p_rt: 8.0,
+ },
+ {
+ p_type_rvo: "41",
+ p_type_nitratesdirective: true,
+ p_n_rt: 6.8,
+ p_p_rt: 1.6,
+ },
+ {
+ p_type_rvo: "42",
+ p_type_nitratesdirective: true,
+ p_n_rt: 2.0,
+ p_p_rt: 0.9,
+ },
+ {
+ p_type_rvo: "43",
+ p_type_nitratesdirective: true,
+ p_n_rt: 11.0,
+ p_p_rt: 17.8,
+ },
+ {
+ p_type_rvo: "46",
+ p_type_nitratesdirective: true,
+ p_n_rt: 3.8,
+ p_p_rt: 2.4,
+ },
+ {
+ p_type_rvo: "50",
+ p_type_nitratesdirective: true,
+ p_n_rt: 6.4,
+ p_p_rt: 3.8,
+ },
+ {
+ p_type_rvo: "56",
+ p_type_nitratesdirective: true,
+ p_n_rt: 8.5,
+ p_p_rt: 4.7,
+ },
+ {
+ p_type_rvo: "60",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.8,
+ p_p_rt: 2.5,
+ },
+ {
+ p_type_rvo: "61",
+ p_type_nitratesdirective: true,
+ p_n_rt: 9.1,
+ p_p_rt: 4.8,
+ },
+ {
+ p_type_rvo: "75",
+ p_type_nitratesdirective: true,
+ p_n_rt: 27.7,
+ p_p_rt: 45.7,
+ },
+ {
+ p_type_rvo: "76",
+ p_type_nitratesdirective: true,
+ p_n_rt: 7.9,
+ p_p_rt: 3.1,
+ },
+ {
+ p_type_rvo: "80",
+ p_type_nitratesdirective: true,
+ p_n_rt: 9.7,
+ p_p_rt: 9.4,
+ },
+ {
+ p_type_rvo: "81",
+ p_type_nitratesdirective: true,
+ p_n_rt: 5.8,
+ p_p_rt: 3.8,
+ },
+ {
+ p_type_rvo: "90",
+ p_type_nitratesdirective: true,
+ p_n_rt: 11.3,
+ p_p_rt: 11.7,
+ },
+ {
+ p_type_rvo: "91",
+ p_type_nitratesdirective: true,
+ p_n_rt: 0.81,
+ p_p_rt: 0.14,
+ },
+ {
+ p_type_rvo: "92",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.4,
+ p_p_rt: 3.0,
+ },
+ {
+ p_type_rvo: "25",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.8,
+ p_p_rt: 2.5,
+ },
+ {
+ p_type_rvo: "26",
+ p_type_nitratesdirective: true,
+ p_n_rt: 5.0,
+ p_p_rt: 3.0,
+ },
+ {
+ p_type_rvo: "27",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.7,
+ p_p_rt: 3.2,
+ },
+ {
+ p_type_rvo: "95",
+ p_type_nitratesdirective: true,
+ p_n_rt: 7.1,
+ p_p_rt: 5.3,
+ },
+ {
+ p_type_rvo: "96",
+ p_type_nitratesdirective: true,
+ p_n_rt: 4.1,
+ p_p_rt: 2.1,
+ },
+ {
+ p_type_rvo: "97",
+ p_type_nitratesdirective: true,
+ p_n_rt: 8.9,
+ p_p_rt: 8.1,
+ },
+ {
+ p_type_rvo: "98",
+ p_type_nitratesdirective: true,
+ p_n_rt: 8.9,
+ p_p_rt: 8.1,
+ },
+ {
+ p_type_rvo: "99",
+ p_type_nitratesdirective: true,
+ p_n_rt: 32.6,
+ p_p_rt: 17.7,
+ },
+ {
+ p_type_rvo: "100",
+ p_type_nitratesdirective: true,
+ p_n_rt: 23.1,
+ p_p_rt: 18.7,
+ },
+ {
+ p_type_rvo: "101",
+ p_type_nitratesdirective: true,
+ p_n_rt: 23.1,
+ p_p_rt: 18.7,
+ },
+ {
+ p_type_rvo: "102",
+ p_type_nitratesdirective: true,
+ p_n_rt: 11.9,
+ p_p_rt: 11.7,
+ },
+ {
+ p_type_rvo: "103",
+ p_type_nitratesdirective: true,
+ p_n_rt: 11.9,
+ p_p_rt: 11.7,
+ },
+ {
+ p_type_rvo: "104",
+ p_type_nitratesdirective: true,
+ p_n_rt: 11.9,
+ p_p_rt: 11.7,
+ },
+ {
+ p_type_rvo: "105",
+ p_type_nitratesdirective: true,
+ p_n_rt: 11.9,
+ p_p_rt: 11.7,
+ },
+ {
+ p_type_rvo: "106",
+ p_type_nitratesdirective: true,
+ p_n_rt: 11.9,
+ p_p_rt: 11.7,
+ },
+ {
+ p_type_rvo: "107",
+ p_type_nitratesdirective: true,
+ p_n_rt: 5.5,
+ p_p_rt: 3.1,
+ },
+ {
+ p_type_rvo: "108",
+ p_type_nitratesdirective: true,
+ },
+ {
+ p_type_rvo: "109",
+ p_type_nitratesdirective: true,
+ p_n_rt: 8.0,
+ p_p_rt: 4.4,
+ },
+ {
+ p_type_rvo: "110",
+ p_type_nitratesdirective: true,
+ p_n_rt: 7.0,
+ p_p_rt: 3.9,
+ },
+ {
+ p_type_rvo: "111",
+ p_type_nitratesdirective: false,
+ },
+ {
+ p_type_rvo: "112",
+ p_type_nitratesdirective: false,
+ },
+ {
+ p_type_rvo: "113",
+ p_type_nitratesdirective: false,
+ },
+ {
+ p_type_rvo: "114",
+ p_type_nitratesdirective: false,
+ },
+ {
+ p_type_rvo: "115",
+ p_type_nitratesdirective: false,
+ },
+ {
+ p_type_rvo: "116",
+ p_type_nitratesdirective: false,
+ },
+ {
+ p_type_rvo: "117",
+ p_type_nitratesdirective: true,
+ p_n_rt: 7.1,
+ p_p_rt: 4.1,
+ },
+ {
+ p_type_rvo: "120",
+ p_type_nitratesdirective: true,
+ },
+]
diff --git a/fdm-calculator/src/norms/nl/2025/filling/table-9.ts b/fdm-calculator/src/norms/nl/2025/filling/table-9.ts
new file mode 100644
index 000000000..37d311509
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/table-9.ts
@@ -0,0 +1,178 @@
+import type { Table9 } from "./types"
+
+export const table9: Table9 = [
+ {
+ description:
+ "Drijfmest van graasdieren op het eigen bedrijf geproduceerd",
+ p_type_rvo: ["14", "60", "18", "19"],
+ onFarmProduced: true,
+ subTypes: [
+ {
+ description: "Op bedrijf met beweiding",
+ b_grazing_intention: true,
+ p_n_wcl: 0.45,
+ },
+ {
+ description: "Op bedrijf zonder beweiding",
+ b_grazing_intention: false,
+ p_n_wcl: 0.6,
+ },
+ ],
+ },
+ {
+ description: "Drijfmest van graasdieren aangevoerd",
+ p_type_rvo: ["14", "60", "18", "19"],
+ onFarmProduced: false,
+ p_n_wcl: 0.6,
+ },
+ {
+ description: "Drijfmest van varkens",
+ p_type_rvo: ["46", "50"],
+ subTypes: [
+ {
+ description: "Op klei en veen",
+ grondsoortCode: ["klei", "veen"],
+ p_n_wcl: 0.6,
+ },
+ {
+ description: "Op zand en löss",
+ grondsoortCode: ["zand_nwc", "zand_zuid", "loess"],
+ p_n_wcl: 0.8,
+ },
+ ],
+ },
+ {
+ description: "Drijfmest van overige diersoorten",
+ p_type_rvo: ["30", "76", "81", "91", "92"],
+ p_n_wcl: 0.6,
+ },
+ {
+ description: "Dunne fractie na mestbewerking en gier",
+ p_type_rvo: ["12", "17", "41", "42"],
+ p_n_wcl: 0.8,
+ },
+ {
+ description:
+ "Vaste mest van graasdieren op het eigen bedrijf geproduceerd",
+ p_type_rvo: ["10", "56", "61", "25", "26", "27", "95", "96"],
+ onFarmProduced: true,
+ subTypes: [
+ {
+ description:
+ "Op bouwland op klei en veen, van 1 september t/m 31 januari",
+ grondsoortCode: ["klei", "veen"],
+ isBouwland: true,
+ applicationPeriod: "1 september t/m 31 januari",
+ p_n_wcl: 0.3,
+ },
+ {
+ description: "Overige toepassingen op bedrijf met beweiding",
+ b_grazing_intention: true,
+ p_n_wcl: 0.45,
+ },
+ {
+ description: "Overige toepassingen op bedrijf zonder beweiding",
+ b_grazing_intention: false,
+ p_n_wcl: 0.6,
+ },
+ ],
+ },
+ {
+ description: "Vaste mest van graasdieren aangevoerd",
+ p_type_rvo: ["10", "56", "61", "25", "26", "27", "95", "96"],
+ onFarmProduced: false,
+ subTypes: [
+ {
+ description:
+ "Op bouwland op klei en veen, van 1 september t/m 31 januari",
+ grondsoortCode: ["klei", "veen"],
+ isBouwland: true,
+ applicationPeriod: "1 september t/m 31 januari",
+ p_n_wcl: 0.3,
+ },
+ {
+ description: "Overige toepassingen",
+ p_n_wcl: 0.4,
+ },
+ ],
+ },
+ {
+ description: "Vaste mest van varkens, pluimvee en nertsen",
+ p_type_rvo: [
+ "23",
+ "31",
+ "32",
+ "33",
+ "35",
+ "39",
+ "40",
+ "43",
+ "75",
+ "80",
+ "97",
+ "98",
+ "99",
+ "100",
+ "101",
+ ],
+ p_n_wcl: 0.55,
+ },
+ {
+ description: "Vaste mest van overige diersoorten",
+ p_type_rvo: [
+ "11",
+ "13",
+ "24",
+ "30",
+ "76",
+ "81",
+ "90",
+ "91",
+ "92",
+ "102",
+ "103",
+ "104",
+ "105",
+ "106",
+ ],
+ subTypes: [
+ {
+ description:
+ "Op bouwland op klei en veen, van 1 september t/m 31 januari",
+ grondsoortCode: ["klei", "veen"],
+ isBouwland: true,
+ applicationPeriod: "1 september t/m 31 januari",
+ p_n_wcl: 0.3,
+ },
+ {
+ description: "Overige toepassingen",
+ p_n_wcl: 0.4,
+ },
+ ],
+ },
+ {
+ description: "Compost",
+ p_type_rvo: ["111", "112"],
+ p_n_wcl: 0.1,
+ },
+ {
+ description: "Champost",
+ p_type_rvo: ["110", "117"],
+ p_n_wcl: 0.25,
+ },
+ {
+ description: "Zuiveringsslib",
+ p_type_rvo: ["113", "114"],
+ p_n_wcl: 0.4,
+ },
+ {
+ description: "Overige organische meststoffen",
+ p_type_rvo: ["116"],
+ p_n_wcl: 0.5,
+ },
+ {
+ description: "Mineralenconcentraat",
+ p_type_rvo: ["120"],
+ p_n_wcl: 1,
+ },
+]
diff --git a/fdm-calculator/src/norms/nl/2025/filling/types.d.ts b/fdm-calculator/src/norms/nl/2025/filling/types.d.ts
new file mode 100644
index 000000000..d8e783b8e
--- /dev/null
+++ b/fdm-calculator/src/norms/nl/2025/filling/types.d.ts
@@ -0,0 +1,55 @@
+import type * as schema from "@svenvw/fdm-core"
+import type {
+ Cultivation,
+ Fertilizer,
+ FertilizerApplication,
+ Field,
+} from "@svenvw/fdm-core"
+import type { RegionKey } from "../value/types"
+
+export type NormFilling = {
+ normFilling: number
+ applicationFilling: {
+ p_app_id: string
+ normFilling: number
+ normFillingDetails?: string
+ }[]
+}
+
+export type Table11Mestcodes = {
+ p_type_rvo: schema.fertilizersCatalogueTypeSelect["p_type_rvo"]
+ p_type_nitratesdirective: boolean
+ p_n_rt?: number
+ p_p_rt?: number
+}[]
+
+export type Table9 = {
+ description: string
+ p_type_rvo: schema.fertilizersCatalogueTypeSelect["p_type_rvo"][]
+ onFarmProduced?: boolean
+ subTypes?: {
+ description: string
+ b_grazing_intention?: boolean
+ grondsoortCode?: RegionKey[]
+ applicationPeriod?: "1 september t/m 31 januari" | "hele jaar"
+ isBouwland?: boolean
+ p_n_wcl: number
+ }[]
+ p_n_wcl?: number
+}[]
+
+export type WorkingCoefficientDetails = {
+ p_n_wcl: number
+ description: string
+ subTypeDescription?: string
+}
+
+export type NL2025NormsFillingInput = {
+ cultivations: Cultivation[]
+ applications: FertilizerApplication[]
+ fertilizers: Fertilizer[]
+ has_organic_certification: boolean
+ has_grazing_intention: boolean
+ fosfaatgebruiksnorm: number
+ b_centroid: Field["b_centroid"]
+}
diff --git a/fdm-calculator/src/norms/nl/2025/dierlijke-mest-gebruiksnorm.test.ts b/fdm-calculator/src/norms/nl/2025/value/dierlijke-mest-gebruiksnorm.test.ts
similarity index 78%
rename from fdm-calculator/src/norms/nl/2025/dierlijke-mest-gebruiksnorm.test.ts
rename to fdm-calculator/src/norms/nl/2025/value/dierlijke-mest-gebruiksnorm.test.ts
index 29fe14606..5cc52cb10 100644
--- a/fdm-calculator/src/norms/nl/2025/dierlijke-mest-gebruiksnorm.test.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/dierlijke-mest-gebruiksnorm.test.ts
@@ -1,14 +1,14 @@
import { describe, expect, it } from "vitest"
import {
- getNL2025DierlijkeMestGebruiksNorm,
+ calculateNL2025DierlijkeMestGebruiksNorm,
isFieldInDerogatieVrijeZone,
} from "./dierlijke-mest-gebruiksnorm"
import type { NL2025NormsInput } from "./types"
-describe("getNL2025DierlijkeMestGebruiksNorm", () => {
+describe("calculateNL2025DierlijkeMestGebruiksNorm", () => {
it("should return the default norm value", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.641351453912945, 51.97755938887036],
@@ -16,14 +16,14 @@ describe("getNL2025DierlijkeMestGebruiksNorm", () => {
cultivations: [],
soilAnalysis: { a_p_cc: 0, a_p_al: 0 },
}
- const result = await getNL2025DierlijkeMestGebruiksNorm(mockInput)
+ const result = await calculateNL2025DierlijkeMestGebruiksNorm(mockInput)
expect(result.normValue).toBe(170)
expect(result.normSource).toBe("Standaard - geen derogatie")
})
it("should return the default norm value with derogation", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: true },
+ farm: { is_derogatie_bedrijf: true, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.641351453912945, 51.97755938887036],
@@ -31,14 +31,14 @@ describe("getNL2025DierlijkeMestGebruiksNorm", () => {
cultivations: [],
soilAnalysis: { a_p_cc: 0, a_p_al: 0 },
}
- const result = await getNL2025DierlijkeMestGebruiksNorm(mockInput)
+ const result = await calculateNL2025DierlijkeMestGebruiksNorm(mockInput)
expect(result.normValue).toBe(200)
expect(result.normSource).toBe("Derogatie")
})
it("should return the adjusted norm value for derogation in NV-gebied", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: true },
+ farm: { is_derogatie_bedrijf: true, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.654759168118452, 51.987887874110555],
@@ -46,14 +46,14 @@ describe("getNL2025DierlijkeMestGebruiksNorm", () => {
cultivations: [],
soilAnalysis: { a_p_cc: 0, a_p_al: 0 },
}
- const result = await getNL2025DierlijkeMestGebruiksNorm(mockInput)
+ const result = await calculateNL2025DierlijkeMestGebruiksNorm(mockInput)
expect(result.normValue).toBe(190)
expect(result.normSource).toBe("Derogatie - NV Gebied")
})
it("should return the default norm value without derogation in NV-gebied", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.654759168118452, 51.987887874110555],
@@ -61,14 +61,14 @@ describe("getNL2025DierlijkeMestGebruiksNorm", () => {
cultivations: [],
soilAnalysis: { a_p_cc: 0, a_p_al: 0 },
}
- const result = await getNL2025DierlijkeMestGebruiksNorm(mockInput)
+ const result = await calculateNL2025DierlijkeMestGebruiksNorm(mockInput)
expect(result.normValue).toBe(170)
expect(result.normSource).toBe("Standaard - geen derogatie")
})
it("should return the adjusted norm value for derogation in Grondwaterbeschermingsgebied", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: true },
+ farm: { is_derogatie_bedrijf: true, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [6.397701151566514, 52.56657210653102],
@@ -76,7 +76,7 @@ describe("getNL2025DierlijkeMestGebruiksNorm", () => {
cultivations: [],
soilAnalysis: { a_p_cc: 0, a_p_al: 0 },
}
- const result = await getNL2025DierlijkeMestGebruiksNorm(mockInput)
+ const result = await calculateNL2025DierlijkeMestGebruiksNorm(mockInput)
expect(result.normValue).toBe(170)
expect(result.normSource).toBe(
"Derogatie - Grondwaterbeschermingsgebied",
@@ -85,7 +85,7 @@ describe("getNL2025DierlijkeMestGebruiksNorm", () => {
it("should return the default norm value for derogation outside Grondwaterbeschermingsgebied and inside NV-gebied, but with single array response (see #205)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: true },
+ farm: { is_derogatie_bedrijf: true, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.058131582583726, 52.50733333508596],
@@ -93,14 +93,14 @@ describe("getNL2025DierlijkeMestGebruiksNorm", () => {
cultivations: [],
soilAnalysis: { a_p_cc: 0, a_p_al: 0 },
}
- const result = await getNL2025DierlijkeMestGebruiksNorm(mockInput)
+ const result = await calculateNL2025DierlijkeMestGebruiksNorm(mockInput)
expect(result.normValue).toBe(190)
expect(result.normSource).toBe("Derogatie - NV Gebied")
})
it("should return the adjusted norm value for derogation in Natura 2000 gebied", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: true },
+ farm: { is_derogatie_bedrijf: true, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.804910408558418, 52.04532099948795], // Coordinates within a Natura 2000 area (Veluwe)
@@ -108,7 +108,7 @@ describe("getNL2025DierlijkeMestGebruiksNorm", () => {
cultivations: [],
soilAnalysis: { a_p_cc: 0, a_p_al: 0 },
}
- const result = await getNL2025DierlijkeMestGebruiksNorm(mockInput)
+ const result = await calculateNL2025DierlijkeMestGebruiksNorm(mockInput)
expect(result.normValue).toBe(170)
expect(result.normSource).toBe("Derogatie - Natura2000 Gebied")
})
diff --git a/fdm-calculator/src/norms/nl/2025/dierlijke-mest-gebruiksnorm.ts b/fdm-calculator/src/norms/nl/2025/value/dierlijke-mest-gebruiksnorm.ts
similarity index 87%
rename from fdm-calculator/src/norms/nl/2025/dierlijke-mest-gebruiksnorm.ts
rename to fdm-calculator/src/norms/nl/2025/value/dierlijke-mest-gebruiksnorm.ts
index c6046ec16..89ca4a443 100644
--- a/fdm-calculator/src/norms/nl/2025/dierlijke-mest-gebruiksnorm.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/dierlijke-mest-gebruiksnorm.ts
@@ -1,6 +1,7 @@
-import type { Field } from "@svenvw/fdm-core"
-import { getGeoTiffValue } from "../../../shared/geotiff"
-import { getFdmPublicDataUrl } from "../../../shared/public-data-url"
+import { type Field, withCalculationCache } from "@svenvw/fdm-core"
+import pkg from "../../../../package"
+import { getGeoTiffValue } from "../../../../shared/geotiff"
+import { getFdmPublicDataUrl } from "../../../../shared/public-data-url"
import { isFieldInNVGebied } from "./stikstofgebruiksnorm"
import type {
DierlijkeMestGebruiksnormResult,
@@ -146,7 +147,7 @@ export async function isFieldInDerogatieVrijeZone(
* @see {@link https://www.rvo.nl/onderwerpen/mest/derogatie | RVO Derogatie (official page)}
* @see {@link https://www.rvo.nl/onderwerpen/mest/met-nutrienten-verontreinigde-gebieden-nv-gebieden | RVO Met nutriënten verontreinigde gebieden (NV-gebieden) (official page)}
*/
-export async function getNL2025DierlijkeMestGebruiksNorm(
+export async function calculateNL2025DierlijkeMestGebruiksNorm(
input: NL2025NormsInput,
): Promise {
const is_derogatie_bedrijf = input.farm.is_derogatie_bedrijf || false
@@ -191,3 +192,19 @@ export async function getNL2025DierlijkeMestGebruiksNorm(
return { normValue, normSource }
}
+
+/**
+ * Memoized version of {@link calculateNL2025DierlijkeMestGebruiksNorm}.
+ *
+ * This function is wrapped with `withCalculationCache` to optimize performance by caching
+ * results based on the input and the current calculator version.
+ *
+ * @param {NL2025NormsInput} input - An object containing all necessary parameters for the calculation.
+ * @returns {Promise} An object of type `DierlijkeMestGebruiksnormResult` containing the determined
+ * nitrogen usage standard (`normValue`) and a `normSource` string explaining the rule applied.
+ */
+export const getNL2025DierlijkeMestGebruiksNorm = withCalculationCache(
+ calculateNL2025DierlijkeMestGebruiksNorm,
+ "calculateNL2025DierlijkeMestGebruiksNorm",
+ pkg.calculatorVersion,
+)
diff --git a/fdm-calculator/src/norms/nl/2025/fosfaatgebruiksnorm-data.ts b/fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm-data.ts
similarity index 100%
rename from fdm-calculator/src/norms/nl/2025/fosfaatgebruiksnorm-data.ts
rename to fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm-data.ts
diff --git a/fdm-calculator/src/norms/nl/2025/fosfaatgebruiksnorm.test.ts b/fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm.test.ts
similarity index 75%
rename from fdm-calculator/src/norms/nl/2025/fosfaatgebruiksnorm.test.ts
rename to fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm.test.ts
index d230c9bf2..14747307e 100644
--- a/fdm-calculator/src/norms/nl/2025/fosfaatgebruiksnorm.test.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm.test.ts
@@ -1,11 +1,11 @@
import { describe, expect, it } from "vitest"
-import { getNL2025FosfaatGebruiksNorm } from "./fosfaatgebruiksnorm"
+import { calculateNL2025FosfaatGebruiksNorm } from "./fosfaatgebruiksnorm"
import type { NL2025NormsInput, NL2025NormsInputForCultivation } from "./types"
-describe("getNL2025FosfaatGebruiksNorm", () => {
+describe("calculateNL2025FosfaatGebruiksNorm", () => {
it("should return the correct norm for grasland", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: true },
field: {
b_id: "1",
b_centroid: { type: "Point", coordinates: [5.0, 52.0] },
@@ -17,14 +17,14 @@ describe("getNL2025FosfaatGebruiksNorm", () => {
] as NL2025NormsInputForCultivation[],
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025FosfaatGebruiksNorm(mockInput)
+ const result = await calculateNL2025FosfaatGebruiksNorm(mockInput)
expect(result.normValue).toBe(120)
expect(result.normSource).toContain("Grasland")
})
it("should return the correct norm for bouwland", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: true },
field: {
b_id: "1",
b_centroid: { type: "Point", coordinates: [5.0, 52.0] },
@@ -36,7 +36,7 @@ describe("getNL2025FosfaatGebruiksNorm", () => {
] as NL2025NormsInputForCultivation[],
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025FosfaatGebruiksNorm(mockInput)
+ const result = await calculateNL2025FosfaatGebruiksNorm(mockInput)
expect(result.normValue).toBe(120)
expect(result.normSource).toContain("Bouwland")
})
diff --git a/fdm-calculator/src/norms/nl/2025/fosfaatgebruiksnorm.ts b/fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm.ts
similarity index 88%
rename from fdm-calculator/src/norms/nl/2025/fosfaatgebruiksnorm.ts
rename to fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm.ts
index 09eeb32aa..bb592b341 100644
--- a/fdm-calculator/src/norms/nl/2025/fosfaatgebruiksnorm.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm.ts
@@ -1,4 +1,6 @@
+import { withCalculationCache } from "@svenvw/fdm-core"
import Decimal from "decimal.js"
+import pkg from "../../../../package"
import { fosfaatNormsData } from "./fosfaatgebruiksnorm-data"
import { determineNL2025Hoofdteelt } from "./hoofdteelt"
import type {
@@ -135,7 +137,7 @@ function getFosfaatKlasse(
* @see {@link https://www.rvo.nl/onderwerpen/mest/gebruiken-en-uitrijden/fosfaat-landbouwgrond | RVO Fosfaat landbouwgrond (official page)}
* @see {@link https://www.rvo.nl/onderwerpen/mest/gebruiken-en-uitrijden/fosfaat-landbouwgrond/differentiatie | RVO Fosfaatdifferentiatie (official page, including tables for 2025)}
*/
-export async function getNL2025FosfaatGebruiksNorm(
+export async function calculateNL2025FosfaatGebruiksNorm(
input: NL2025NormsInput,
): Promise {
const cultivations = input.cultivations
@@ -171,3 +173,20 @@ export async function getNL2025FosfaatGebruiksNorm(
return { normValue, normSource }
}
+
+/**
+ * Memoized version of {@link calculateNL2025FosfaatGebruiksNorm}.
+ *
+ * This function is wrapped with `withCalculationCache` to optimize performance by caching
+ * results based on the input and the current calculator version.
+ *
+ * @param {NL2025NormsInput} input - An object containing all necessary parameters for the calculation.
+ * @returns {Promise} An object of type `FosfaatGebruiksnormResult` containing the determined
+ * phosphate usage standard (`normValue`) and the `fosfaatKlasse` (the phosphate
+ * class determined from the soil analysis). Returns `null` if a norm cannot be determined.
+ */
+export const getNL2025FosfaatGebruiksNorm = withCalculationCache(
+ calculateNL2025FosfaatGebruiksNorm,
+ "calculateNL2025FosfaatGebruiksNorm",
+ pkg.calculatorVersion,
+)
diff --git a/fdm-calculator/src/norms/nl/2025/hoofdteelt.test.ts b/fdm-calculator/src/norms/nl/2025/value/hoofdteelt.test.ts
similarity index 100%
rename from fdm-calculator/src/norms/nl/2025/hoofdteelt.test.ts
rename to fdm-calculator/src/norms/nl/2025/value/hoofdteelt.test.ts
diff --git a/fdm-calculator/src/norms/nl/2025/hoofdteelt.ts b/fdm-calculator/src/norms/nl/2025/value/hoofdteelt.ts
similarity index 100%
rename from fdm-calculator/src/norms/nl/2025/hoofdteelt.ts
rename to fdm-calculator/src/norms/nl/2025/value/hoofdteelt.ts
diff --git a/fdm-calculator/src/norms/nl/2025/input.test.ts b/fdm-calculator/src/norms/nl/2025/value/input.test.ts
similarity index 89%
rename from fdm-calculator/src/norms/nl/2025/input.test.ts
rename to fdm-calculator/src/norms/nl/2025/value/input.test.ts
index b729d3523..b2f84053a 100644
--- a/fdm-calculator/src/norms/nl/2025/input.test.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/input.test.ts
@@ -16,6 +16,7 @@ vi.mock("@svenvw/fdm-core", async () => {
getCultivations: vi.fn(),
getCurrentSoilData: vi.fn(),
isDerogationGrantedForYear: vi.fn(),
+ getGrazingIntention: vi.fn(),
}
})
@@ -52,6 +53,7 @@ describe("collectNL2025InputForNorms", () => {
mockSoilAnalysis as unknown as SoilAnalysis[],
)
vi.mocked(fdmCore.isDerogationGrantedForYear).mockResolvedValue(false)
+ vi.mocked(fdmCore.getGrazingIntention).mockResolvedValue(false)
const result = await collectNL2025InputForNorms(
mockFdm,
@@ -60,6 +62,7 @@ describe("collectNL2025InputForNorms", () => {
)
expect(result.farm.is_derogatie_bedrijf).toBe(false)
+ expect(result.farm.has_grazing_intention).toBe(false)
expect(result.field).toBe(mockField)
expect(result.cultivations).toBe(mockCultivations)
expect(result.soilAnalysis).toEqual({ a_p_cc: 1.0, a_p_al: 20 })
@@ -68,6 +71,18 @@ describe("collectNL2025InputForNorms", () => {
mockPrincipalId,
mockFieldId,
)
+ expect(fdmCore.isDerogationGrantedForYear).toHaveBeenCalledWith(
+ mockFdm,
+ mockPrincipalId,
+ "farm-1",
+ 2025,
+ )
+ expect(fdmCore.getGrazingIntention).toHaveBeenCalledWith(
+ mockFdm,
+ mockPrincipalId,
+ "farm-1",
+ 2025,
+ )
expect(fdmCore.getCultivations).toHaveBeenCalledWith(
mockFdm,
mockPrincipalId,
@@ -80,11 +95,5 @@ describe("collectNL2025InputForNorms", () => {
mockFieldId,
timeframe,
)
- expect(fdmCore.isDerogationGrantedForYear).toHaveBeenCalledWith(
- mockFdm,
- mockPrincipalId,
- "farm-1",
- 2025,
- )
})
})
diff --git a/fdm-calculator/src/norms/nl/2025/input.ts b/fdm-calculator/src/norms/nl/2025/value/input.ts
similarity index 87%
rename from fdm-calculator/src/norms/nl/2025/input.ts
rename to fdm-calculator/src/norms/nl/2025/value/input.ts
index 9e3853e04..c4d6c9e75 100644
--- a/fdm-calculator/src/norms/nl/2025/input.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/input.ts
@@ -3,7 +3,9 @@ import {
getCultivations,
getCurrentSoilData,
getField,
+ getGrazingIntention,
isDerogationGrantedForYear,
+ type PrincipalId,
type Timeframe,
} from "@svenvw/fdm-core"
import type { NL2025NormsInput } from "./types.d"
@@ -22,7 +24,7 @@ import type { NL2025NormsInput } from "./types.d"
*/
export async function collectNL2025InputForNorms(
fdm: FdmType,
- principal_id: string,
+ principal_id: PrincipalId,
b_id: string,
): Promise {
// Create timeframe for 2025
@@ -46,7 +48,15 @@ export async function collectNL2025InputForNorms(
2025,
)
- // 3. Get the details of the cultivations
+ // 3. Get the grazing intention for the farm
+ const has_grazing_intention = await getGrazingIntention(
+ fdm,
+ principal_id,
+ field.b_id_farm,
+ 2025,
+ )
+
+ // 4. Get the details of the cultivations
const cultivations = await getCultivations(
fdm,
principal_id,
@@ -75,6 +85,7 @@ export async function collectNL2025InputForNorms(
return {
farm: {
is_derogatie_bedrijf,
+ has_grazing_intention,
},
field: field,
cultivations: cultivations,
diff --git a/fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm-data.ts b/fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm-data.ts
similarity index 99%
rename from fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm-data.ts
rename to fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm-data.ts
index 29a93b63d..1bd4182dc 100644
--- a/fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm-data.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm-data.ts
@@ -5,27 +5,28 @@ export const nitrogenStandardsData = [
type: "grasland",
is_winterteelt: true,
is_vanggewas: false,
- norms: {
- klei: { standard: 345, nv_area: 276 },
- zand_nwc: { standard: 250, nv_area: 200 },
- zand_zuid: { standard: 250, nv_area: 200 },
- loess: { standard: 250, nv_area: 200 },
- veen: { standard: 265, nv_area: 212 },
- },
- },
- {
- cultivation_rvo_table2: "Grasland met volledig maaien",
- b_lu_catalogue_match: ["nl_265", "nl_331"],
- type: "grasland",
- is_winterteelt: true,
- is_vanggewas: false,
- norms: {
- klei: { standard: 385, nv_area: 308 },
- zand_nwc: { standard: 320, nv_area: 256 },
- zand_zuid: { standard: 320, nv_area: 256 },
- loess: { standard: 320, nv_area: 256 },
- veen: { standard: 300, nv_area: 240 },
- },
+ sub_types: [
+ {
+ omschrijving: "beweiden",
+ norms: {
+ klei: { standard: 345, nv_area: 276 },
+ zand_nwc: { standard: 250, nv_area: 200 },
+ zand_zuid: { standard: 250, nv_area: 200 },
+ loess: { standard: 250, nv_area: 200 },
+ veen: { standard: 265, nv_area: 212 },
+ },
+ },
+ {
+ omschrijving: "volledig maaien",
+ norms: {
+ klei: { standard: 385, nv_area: 308 },
+ zand_nwc: { standard: 320, nv_area: 256 },
+ zand_zuid: { standard: 320, nv_area: 256 },
+ loess: { standard: 320, nv_area: 256 },
+ veen: { standard: 300, nv_area: 240 },
+ },
+ },
+ ],
},
{
cultivation_rvo_table2: "Tijdelijk grasland",
diff --git a/fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm.test.ts b/fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm.test.ts
similarity index 83%
rename from fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm.test.ts
rename to fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm.test.ts
index 8c6d13366..e14f2ebb8 100644
--- a/fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm.test.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm.test.ts
@@ -1,7 +1,7 @@
import type { Field } from "@svenvw/fdm-core"
import { describe, expect, it } from "vitest"
import {
- getNL2025StikstofGebruiksNorm,
+ calculateNL2025StikstofGebruiksNorm,
getRegion,
isFieldInNVGebied,
} from "./stikstofgebruiksnorm"
@@ -34,10 +34,10 @@ describe("stikstofgebruiksnorm helpers", () => {
})
})
-describe("getNL2025StikstofGebruiksNorm", () => {
- it("should return the correct norm for grasland", async () => {
+describe(" calculateNL2025StikstofGebruiksNorm", () => {
+ it("should return the correct norm for grasland (beweiden)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: true },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571],
@@ -52,14 +52,36 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(345)
- expect(result.normSource).toEqual("Grasland.")
+ expect(result.normSource).toEqual("Grasland (beweiden).")
+ })
+
+ it("should return the correct norm for grasland (volledig maaien)", async () => {
+ const mockInput: NL2025NormsInput = {
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
+ field: {
+ b_id: "1",
+ b_centroid: [5.6279889, 51.975571],
+ } as Field,
+ cultivations: [
+ {
+ b_lu_catalogue: "nl_265",
+ b_lu_start: new Date(2025, 0, 1), // Current year cultivation
+ b_lu_end: new Date(2025, 5, 1),
+ } as Partial,
+ ] as NL2025NormsInputForCultivation[],
+ soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
+ }
+
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
+ expect(result.normValue).toBe(385)
+ expect(result.normSource).toEqual("Grasland (volledig maaien).")
})
it("should return the correct norm for potatoes", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571],
@@ -75,7 +97,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(140)
expect(result.normSource).toEqual(
"Akkerbouwgewas, pootaardappelen (hoge norm).",
@@ -84,7 +106,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should apply 0 korting if winterteelt is present in zand_nwc region (hoofdteelt 2025)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: true },
field: {
b_id: "1",
b_centroid: [5.656346970245633, 51.987872886419524], // This centroid is in 'zand_nwc'
@@ -99,18 +121,18 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
// The base norm for Grasland in zand_nwc is 200 in nv-gebied. With winterteelt, korting should be 0.
expect(result.normValue).toBe(200)
expect(result.normSource).toEqual(
- "Grasland. Geen korting: winterteelt aanwezig",
+ "Grasland (beweiden). Geen korting: winterteelt aanwezig",
)
})
it("should apply 0 korting if vanggewas is present (sown <= Oct 1st)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.656346970245633, 51.987872886419524], // This centroid is in 'zand_nwc'
@@ -130,7 +152,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
// The base norm for Vruchtgewassen in zand_nwc is 108. With vanggewas sown <= Oct 1st, korting should be 0.
expect(result.normValue).toBe(108)
expect(result.normSource).toEqual(
@@ -140,7 +162,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should apply 5 korting if vanggewas is present (sown Oct 2nd - Oct 14th)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.656346970245633, 51.987872886419524], // This centroid is in 'zand_nwc'
@@ -160,7 +182,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
// The base norm for Vruchtgewassen in zand_nwc in nv-gebied is 108. With vanggewas sown Oct 2-14, korting should be 5.
expect(result.normValue).toBe(103) // 108 - 5
expect(result.normSource).toEqual(
@@ -170,7 +192,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should apply 10 korting if vanggewas is present (sown Oct 15th - Oct 31st)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.656346970245633, 51.987872886419524], // This centroid is in 'zand_nwc'
@@ -190,7 +212,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
// The base norm for Vruchtgewassen in zand_nwc in nv-gebied is 108. With vanggewas sown Oct 15-31, korting should be 10.
expect(result.normValue).toBe(98) // 108 - 10
expect(result.normSource).toEqual(
@@ -200,7 +222,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should apply 20 korting if vanggewas is present (sown Nov 1st or later)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.656346970245633, 51.987872886419524], // This centroid is in 'zand_nwc'
@@ -220,7 +242,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
// The base norm for Vruchtgewassen in zand_nwc in nv-gebied is 108. With vanggewas sown Nov 1st+, korting should be 20.
expect(result.normValue).toBe(88) // 108 - 20
expect(result.normSource).toEqual(
@@ -230,7 +252,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should apply 20 korting if no winterteelt or vanggewas is present in zand_nwc region", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.656346970245633, 51.987872886419524], // This centroid is in 'zand_nwc'
@@ -250,7 +272,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
// The base norm for Vruchtgewassen in zand_nwc in nv-gebied is 108. With no exception, korting should be 20.
expect(result.normValue).toBe(88) // 108 - 20
expect(result.normSource).toEqual(
@@ -260,7 +282,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should not apply korting if region is not sandy or loess, even without winterteelt/vanggewas", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.648307588666836, 51.96484772224782], // This centroid is in 'klei'
@@ -280,7 +302,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
// The base norm for Vruchtgewassen in klei is 135. Korting should not apply in non-sandy/loess regions.
expect(result.normValue).toBe(135)
expect(result.normSource).toEqual(
@@ -290,7 +312,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Gras voor industriële verwerking (eerste jaar)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -305,7 +327,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(30)
expect(result.normSource).toEqual(
"Akkerbouwgewassen, Gras voor industriële verwerking (inzaai in september en eerste jaar).",
@@ -314,7 +336,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Gras voor industriële verwerking (volgende jaren)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -334,7 +356,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(310)
expect(result.normSource).toEqual(
"Akkerbouwgewassen, Gras voor industriële verwerking (inzaai voor 15 mei en volgende jaren).",
@@ -343,7 +365,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Graszaad, Engels raaigras (1e jaars)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -358,7 +380,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(165)
expect(result.normSource).toEqual(
"Akkerbouwgewassen, Graszaad, Engels raaigras (1e jaars).",
@@ -367,7 +389,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Graszaad, Engels raaigras (overjarig)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -387,7 +409,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(200)
expect(result.normSource).toEqual(
"Akkerbouwgewassen, Graszaad, Engels raaigras (overjarig).",
@@ -396,7 +418,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Akkerbouwgewassen, Roodzwenkgras (1e jaars)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -411,7 +433,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(85)
expect(result.normSource).toEqual(
"Akkerbouwgewassen, Roodzwenkgras (1e jaars).",
@@ -420,7 +442,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Akkerbouwgewassen, Roodzwenkgras (overjarig)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -440,7 +462,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(115)
expect(result.normSource).toEqual(
"Akkerbouwgewassen, Roodzwenkgras (overjarig).",
@@ -449,7 +471,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Winterui (1e jaars)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -464,7 +486,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(170)
expect(result.normSource).toEqual(
"Akkerbouwgewassen, Ui overig, zaaiui of winterui. (1e jaars).",
@@ -473,7 +495,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Winterui (2e jaars)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -488,7 +510,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(170)
expect(result.normSource).toEqual(
"Akkerbouwgewassen, Ui overig, zaaiui of winterui. (2e jaars).",
@@ -497,7 +519,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Bladgewassen, Spinazie (1e teelt)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -512,14 +534,14 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(260)
expect(result.normSource).toEqual("Bladgewassen, Spinazie (1e teelt).")
})
it("should return the correct norm for Bladgewassen, Slasoorten (1e teelt)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -534,7 +556,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(180)
expect(result.normSource).toEqual(
"Bladgewassen, Slasoorten (1e teelt).",
@@ -543,7 +565,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
it("should return the correct norm for Bladgewassen, Andijvie eerste teelt volgteelt (1e teelt)", async () => {
const mockInput: NL2025NormsInput = {
- farm: { is_derogatie_bedrijf: false },
+ farm: { is_derogatie_bedrijf: false, has_grazing_intention: false },
field: {
b_id: "1",
b_centroid: [5.6279889, 51.975571], // Klei region
@@ -558,7 +580,7 @@ describe("getNL2025StikstofGebruiksNorm", () => {
soilAnalysis: { a_p_al: 20, a_p_cc: 0.9 },
}
- const result = await getNL2025StikstofGebruiksNorm(mockInput)
+ const result = await calculateNL2025StikstofGebruiksNorm(mockInput)
expect(result.normValue).toBe(180)
expect(result.normSource).toEqual(
"Bladgewassen, Andijvie eerste teelt volgteelt (1e teelt).",
diff --git a/fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm.ts b/fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm.ts
similarity index 93%
rename from fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm.ts
rename to fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm.ts
index 6025078b0..8fa38ff5f 100644
--- a/fdm-calculator/src/norms/nl/2025/stikstofgebruiksnorm.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm.ts
@@ -1,7 +1,8 @@
-import type { Field } from "@svenvw/fdm-core"
+import { type Field, withCalculationCache } from "@svenvw/fdm-core"
import Decimal from "decimal.js"
-import { getGeoTiffValue } from "../../../shared/geotiff"
-import { getFdmPublicDataUrl } from "../../../shared/public-data-url"
+import pkg from "../../../../package"
+import { getGeoTiffValue } from "../../../../shared/geotiff"
+import { getFdmPublicDataUrl } from "../../../../shared/public-data-url"
import { determineNL2025Hoofdteelt } from "./hoofdteelt"
import { nitrogenStandardsData } from "./stikstofgebruiksnorm-data"
import type {
@@ -147,7 +148,7 @@ export async function getRegion(
function getNormsForCultivation(
selectedStandard: NitrogenStandard,
b_lu_end: Date,
- subTypeOmschrijving?: string, // New parameter
+ subTypeOmschrijving?: string,
): NormsByRegion | undefined {
if (selectedStandard.sub_types) {
type SubType = NonNullable[number]
@@ -207,7 +208,13 @@ function determineSubTypeOmschrijving(
standard: NitrogenStandard,
is_derogatie_bedrijf: boolean | undefined,
cultivations: NL2025NormsInputForCultivation[],
+ has_grazing_intention: boolean | undefined,
): string | undefined {
+ // Grasland logic based on grazing intention
+ if (standard.type === "grasland") {
+ return has_grazing_intention ? "beweiden" : "volledig maaien"
+ }
+
// Potato logic based on variety
if (standard.type === "aardappel") {
if (cultivation.b_lu_variety) {
@@ -399,6 +406,7 @@ function calculateKorting(
const vanggewassenCompleted2024 = vanggewassen2024.filter(
(prevCultivation) => {
return (
+ prevCultivation.b_lu_end === null ||
prevCultivation.b_lu_end.getTime() >= new Date(currentYear, 1) // Month 1 is February
)
},
@@ -523,10 +531,11 @@ function calculateKorting(
* @see {@link https://www.rvo.nl/sites/default/files/2024-12/Tabel-2-Stikstof-landbouwgrond-2025_0.pdf | RVO Tabel 2 Stikstof landbouwgrond 2025} - Official document for nitrogen norms.
* @see {@link https://www.rvo.nl/onderwerpen/mest/gebruiken-en-uitrijden/stikstof-en-fosfaat/gebruiksnormen-stikstof | RVO Gebruiksnormen stikstof (official page)} - General information on nitrogen and phosphate norms.
*/
-export async function getNL2025StikstofGebruiksNorm(
+export async function calculateNL2025StikstofGebruiksNorm(
input: NL2025NormsInput,
): Promise {
const is_derogatie_bedrijf = input.farm.is_derogatie_bedrijf
+ const has_grazing_intention = input.farm.has_grazing_intention
const field = input.field
const cultivations = input.cultivations
@@ -596,12 +605,13 @@ export async function getNL2025StikstofGebruiksNorm(
selectedStandard,
is_derogatie_bedrijf,
cultivations,
+ has_grazing_intention,
)
const applicableNorms = getNormsForCultivation(
selectedStandard,
cultivation.b_lu_end,
- subTypeOmschrijving, // Pass the determined subTypeOmschrijving
+ subTypeOmschrijving,
)
if (!applicableNorms) {
@@ -619,18 +629,41 @@ export async function getNL2025StikstofGebruiksNorm(
)
}
- let normValue = is_nv_area
- ? normsForRegion.nv_area
- : normsForRegion.standard
+ let normValue = new Decimal(
+ is_nv_area ? normsForRegion.nv_area : normsForRegion.standard,
+ )
// Apply korting
const { amount: kortingAmount, description: kortingDescription } =
calculateKorting(cultivations, region)
- normValue = new Decimal(normValue).minus(kortingAmount).toNumber()
+ normValue = new Decimal(normValue).minus(kortingAmount)
+
+ // If normvalue is negative, e.g. Geen plaatsingsruimte plus korting, set it to 0
+ if (normValue.isNegative()) {
+ normValue = new Decimal(0)
+ }
const subTypeText = subTypeOmschrijving ? ` (${subTypeOmschrijving})` : ""
return {
- normValue: normValue,
+ normValue: normValue.toNumber(),
normSource: `${selectedStandard.cultivation_rvo_table2}${subTypeText}${kortingDescription}`,
}
}
+
+/**
+ * Memoized version of {@link calculateNL2025StikstofGebruiksNorm}.
+ *
+ * This function is wrapped with `withCalculationCache` to optimize performance by caching
+ * results based on the input and the current calculator version.
+ *
+ * @param {NL2025NormsInput} input - An object of type `NL2025NormsInput` containing all necessary data.
+ * @returns {Promise} A promise that resolves to an object of type `GebruiksnormResult` containing:
+ * - `normValue`: The determined nitrogen usage standard in kilograms per hectare (kg/ha).
+ * - `normSource`: The descriptive name from RVO Table 2 used for the calculation.
+ * - `kortingDescription`: A description of any korting (reduction) applied to the norm.
+ */
+export const getNL2025StikstofGebruiksNorm = withCalculationCache(
+ calculateNL2025StikstofGebruiksNorm,
+ "calculateNL2025StikstofGebruiksNorm",
+ pkg.calculatorVersion,
+)
diff --git a/fdm-calculator/src/norms/nl/2025/types.d.ts b/fdm-calculator/src/norms/nl/2025/value/types.d.ts
similarity index 99%
rename from fdm-calculator/src/norms/nl/2025/types.d.ts
rename to fdm-calculator/src/norms/nl/2025/value/types.d.ts
index 68062b107..d7e2cce05 100644
--- a/fdm-calculator/src/norms/nl/2025/types.d.ts
+++ b/fdm-calculator/src/norms/nl/2025/value/types.d.ts
@@ -15,6 +15,7 @@ export type NL2025NormsInput = {
/** Farm-level properties, such as derogation status. */
farm: {
is_derogatie_bedrijf: boolean
+ has_grazing_intention: boolean
}
/** The field record from fdm-core, including its ID and centroid for location-based checks. */
field: Pick
diff --git a/fdm-calculator/src/nutrient-advice/index.test.ts b/fdm-calculator/src/nutrient-advice/index.test.ts
new file mode 100644
index 000000000..2c43d45cf
--- /dev/null
+++ b/fdm-calculator/src/nutrient-advice/index.test.ts
@@ -0,0 +1,134 @@
+import type { CurrentSoilData } from "@svenvw/fdm-core"
+import {
+ afterAll,
+ afterEach,
+ beforeAll,
+ describe,
+ expect,
+ it,
+ vi,
+} from "vitest"
+import { requestNutrientAdvice } from "./index"
+import type { NutrientAdviceInputs, NutrientAdviceResponse } from "./types"
+
+// Mock data for CurrentSoilData
+const mockCurrentSoilData: CurrentSoilData = [
+ { parameter: "a_nmin_cc", a_depth_lower: 30, value: 50 },
+ { parameter: "a_nmin_cc", a_depth_lower: 60, value: 70 },
+ { parameter: "a_som_loi", a_depth_lower: 0, value: 10 },
+]
+
+// Mock response from the NMI API
+const mockNutrientAdviceResponse: NutrientAdviceResponse = {
+ request_id: "test-uuid",
+ success: true,
+ status: 200,
+ message: null,
+ data: {
+ year: {
+ d_n_req: 120,
+ d_n_norm: 120,
+ d_n_norm_man: 170,
+ d_p_norm: 80,
+ d_p_req: 80,
+ d_k_req: 0,
+ d_c_req: 2340,
+ d_ca_req: 2180,
+ d_s_req: 10,
+ d_mg_req: 0,
+ d_cu_req: 0,
+ d_zn_req: 0,
+ d_co_req: 0,
+ d_mn_req: 0,
+ d_mo_req: 0,
+ d_na_req: 0,
+ d_b_req: 0,
+ },
+ },
+}
+
+describe("requestNutrientAdvice", () => {
+ // Mock the global fetch function
+ beforeAll(() => {
+ vi.stubGlobal("fetch", vi.fn())
+ })
+
+ afterEach(() => {
+ vi.mocked(fetch).mockClear()
+ })
+
+ afterAll(() => {
+ vi.restoreAllMocks()
+ })
+
+ it("should throw an error if nmiApiKey is not provided", async () => {
+ const inputs: NutrientAdviceInputs = {
+ b_lu_catalogue: "nl_2014",
+ b_centroid: [4.3, 52.4],
+ currentSoilData: mockCurrentSoilData,
+ nmiApiKey: undefined,
+ }
+
+ await expect(requestNutrientAdvice(inputs)).rejects.toThrow(
+ "NMI API key not provided",
+ )
+ expect(fetch).not.toHaveBeenCalled()
+ })
+
+ it("should successfully fetch nutrient advice from NMI API", async () => {
+ vi.mocked(fetch).mockResolvedValueOnce({
+ ok: true,
+ json: async () => mockNutrientAdviceResponse,
+ } as Response)
+
+ const inputs: NutrientAdviceInputs = {
+ b_lu_catalogue: "nl_2014",
+ b_centroid: [4.3, 52.4],
+ currentSoilData: mockCurrentSoilData,
+ nmiApiKey: "mock-api-key",
+ }
+
+ const result = await requestNutrientAdvice(inputs)
+
+ expect(fetch).toHaveBeenCalledTimes(1)
+ expect(fetch).toHaveBeenCalledWith(
+ "https://api.nmi-agro.nl/bemestingsplan/nutrients",
+ expect.objectContaining({
+ method: "POST",
+ headers: {
+ Authorization: "Bearer mock-api-key",
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ a_lon: 4.3,
+ a_lat: 52.4,
+ b_lu_brp: ["2014"],
+ a_nmin_cc_d30: 50,
+ a_nmin_cc_d60: 70,
+ a_som_loi: 10,
+ }),
+ }),
+ )
+ expect(result).toEqual(mockNutrientAdviceResponse.data.year)
+ })
+
+ it("should throw an error if NMI API request fails", async () => {
+ vi.mocked(fetch).mockResolvedValueOnce({
+ ok: false,
+ status: 500,
+ statusText: "Internal Server Error",
+ } as Response)
+
+ const inputs: NutrientAdviceInputs = {
+ b_lu_catalogue: "nl_2014",
+ b_centroid: [4.3, 52.4],
+ currentSoilData: mockCurrentSoilData,
+ nmiApiKey: "mock-api-key",
+ }
+
+ await expect(requestNutrientAdvice(inputs)).rejects.toThrow(
+ "Request to NMI API failed",
+ )
+ expect(fetch).toHaveBeenCalledTimes(1)
+ })
+})
diff --git a/fdm-calculator/src/nutrient-advice/index.ts b/fdm-calculator/src/nutrient-advice/index.ts
new file mode 100644
index 000000000..8dfd1bc01
--- /dev/null
+++ b/fdm-calculator/src/nutrient-advice/index.ts
@@ -0,0 +1,102 @@
+import { withCalculationCache } from "@svenvw/fdm-core"
+import pkg from "../package"
+import type {
+ NutrientAdvice,
+ NutrientAdviceInputs,
+ NutrientAdviceResponse,
+} from "./types"
+
+/**
+ * Requests nutrient advice from the NMI API based on provided field and soil data.
+ *
+ * @param {NutrientAdviceInputs} inputs - An object containing all necessary inputs for the nutrient advice calculation.
+ * @param {string} inputs.b_lu_catalogue - The BRP cultivation catalogue identifier (e.g., "nl_2014").
+ * @param {[number, number]} inputs.b_centroid - The centroid coordinates of the field [longitude, latitude].
+ * @param {CurrentSoilData} inputs.currentSoilData - Current soil data for the field, used to extract Nmin values and other soil parameters.
+ * @param {string | undefined} inputs.nmiApiKey - The NMI API key for authentication.
+ * @returns {Promise} A promise that resolves to an object containing the nutrient advice for the year.
+ * @throws {Error} If the NMI API key is not provided or if the request to the NMI API fails.
+ */
+export async function requestNutrientAdvice({
+ b_lu_catalogue,
+ b_centroid,
+ currentSoilData,
+ nmiApiKey,
+}: NutrientAdviceInputs): Promise {
+ try {
+ if (!nmiApiKey) {
+ throw new Error("NMI API key not provided")
+ }
+
+ let a_nmin_cc_d30: number | undefined
+ let a_nmin_cc_d60: number | undefined
+ const soilData: Record = {}
+ // Extract Nmin values and other soil parameters from currentSoilData
+ for (const item of currentSoilData) {
+ // Exclude 'a_nmin_cc' from soilData as it's handled separately
+ if (item.parameter === "a_nmin_cc") {
+ if (item.a_depth_lower <= 30) {
+ a_nmin_cc_d30 = item.value
+ } else if (item.a_depth_lower <= 60) {
+ a_nmin_cc_d60 = item.value
+ }
+ continue // Skip adding a_nmin_cc to soilData
+ }
+ soilData[item.parameter] = item.value
+ }
+
+ // Create request body for the NMI API
+ const brpSegments = b_lu_catalogue.split("_")
+ const brpCode = brpSegments[brpSegments.length - 1]
+ if (!brpCode) {
+ throw new Error("Invalid b_lu_catalogue provided")
+ }
+ const body = {
+ a_lon: b_centroid[0],
+ a_lat: b_centroid[1],
+ b_lu_brp: [brpCode],
+ a_nmin_cc_d30: a_nmin_cc_d30,
+ a_nmin_cc_d60: a_nmin_cc_d60,
+ ...soilData, // Include all other soil data parameters
+ }
+
+ // Send request to NMI API
+ const responseApi = await fetch(
+ "https://api.nmi-agro.nl/bemestingsplan/nutrients",
+ {
+ method: "POST",
+ headers: {
+ Authorization: `Bearer ${nmiApiKey}`,
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify(body),
+ },
+ )
+
+ if (!responseApi.ok) {
+ throw new Error(
+ `Request to NMI API failed with status ${responseApi.status}: ${responseApi.statusText}`,
+ )
+ }
+
+ const result: NutrientAdviceResponse = await responseApi.json()
+ const response: NutrientAdvice = result.data.year
+
+ return response
+ } catch (error) {
+ console.error("Error fetching nutrient advice:", error)
+ throw error
+ }
+}
+
+/**
+ * Cached version of `requestNutrientAdvice`.
+ * This function uses `withCalculationCache` to store and retrieve results,
+ * improving performance for repeated calls with the same inputs.
+ * The cache key is based on the inputs and the calculator version.
+ */
+export const getNutrientAdvice = withCalculationCache(
+ requestNutrientAdvice,
+ "requestNutrientAdvice",
+ pkg.calculatorVersion,
+)
diff --git a/fdm-calculator/src/nutrient-advice/types.d.ts b/fdm-calculator/src/nutrient-advice/types.d.ts
new file mode 100644
index 000000000..b73d7e9d8
--- /dev/null
+++ b/fdm-calculator/src/nutrient-advice/types.d.ts
@@ -0,0 +1,87 @@
+import type { CurrentSoilData } from "@svenvw/fdm-core"
+
+/**
+ * Represents the nutrient advice for a given year, as returned by the NMI API.
+ * Each property corresponds to a specific nutrient requirement or norm.
+ */
+export type NutrientAdvice = {
+ /** Nitrogen requirement (kg N/ha) */
+ d_n_req: number
+ /** Nitrogen norm (kg N/ha) */
+ d_n_norm: number
+ /** Nitrogen norm for manure (kg N/ha) */
+ d_n_norm_man: number
+ /** Phosphate norm (kg P2O5/ha) */
+ d_p_norm: number
+ /** Phosphate requirement (kg P2O5/ha) */
+ d_p_req: number
+ /** Potassium requirement (kg K2O/ha) */
+ d_k_req: number
+ /** Carbon requirement (kg C/ha) */
+ d_c_req: number
+ /** Calcium requirement (kg Ca/ha) */
+ d_ca_req: number
+ /** Sulfur requirement (kg S/ha) */
+ d_s_req: number
+ /** Magnesium requirement (kg Mg/ha) */
+ d_mg_req: number
+ /** Copper requirement (g Cu/ha) */
+ d_cu_req: number
+ /** Zinc requirement (g Zn/ha) */
+ d_zn_req: number
+ /** Cobalt requirement (g Co/ha) */
+ d_co_req: number
+ /** Manganese requirement (g Mn/ha) */
+ d_mn_req: number
+ /** Molybdenum requirement (g Mo/ha) */
+ d_mo_req: number
+ /** Sodium requirement (kg Na/ha) */
+ d_na_req: number
+ /** Boron requirement (g B/ha) */
+ d_b_req: number
+}
+
+/**
+ * Represents the full response structure from the NMI Nutrient Advice API.
+ */
+export type NutrientAdviceResponse = {
+ /** Unique identifier for the request */
+ request_id: string
+ /** Indicates if the request was successful */
+ success: boolean
+ /** HTTP status code of the response */
+ status: number
+ /** Optional message providing more details about the response or errors */
+ message: string | null
+ /** Contains the actual nutrient advice data */
+ data: {
+ /** Nutrient advice values for the entire year */
+ year: NutrientAdvice
+ /**
+ * Optional: Nutrient advice values per cut for grassland.
+ * Only available if the most recent `b_lu_brp` crop code is `265`.
+ */
+ cut?: {
+ yieldclass: "G" | "HM" | "LG" | "LM" | "M" | "VLG"
+ cut: 1 | 2 | 3 | 4 | 5 | 6
+ d_n_req: number
+ d_p_req: number
+ d_k_req: number
+ d_s_req: number
+ }[]
+ }
+}
+
+/**
+ * Defines the input parameters for the `requestNutrientAdvice` function.
+ */
+export type NutrientAdviceInputs = {
+ /** The BRP cultivation catalogue identifier (e.g., "b_lu_1010") */
+ b_lu_catalogue: string
+ /** The centroid coordinates of the field [longitude, latitude] */
+ b_centroid: [number, number]
+ /** Current soil data for the field */
+ currentSoilData: CurrentSoilData
+ /** NMI API key for authentication */
+ nmiApiKey: string | undefined
+}
diff --git a/fdm-calculator/src/package.ts b/fdm-calculator/src/package.ts
new file mode 100644
index 000000000..bebc4d04d
--- /dev/null
+++ b/fdm-calculator/src/package.ts
@@ -0,0 +1,3 @@
+export default {
+ calculatorVersion: "fdm-calculator:{FDM_CALCULATOR_VERSION}",
+}
diff --git a/fdm-core/CHANGELOG.md b/fdm-core/CHANGELOG.md
index 240cb8f98..013d60434 100644
--- a/fdm-core/CHANGELOG.md
+++ b/fdm-core/CHANGELOG.md
@@ -1,5 +1,26 @@
# Changelog fdm-core
+## 0.26.0
+
+### Minor Changes
+
+- a226f7e: Adds `b_lu_start_default` and `b_date_harvest_default` to cultivations catalogue as the default start and harvest dates of a cultivation
+- a00a331: Add the functions `setGrazingIntention`, `removeGrazingIntention`, `getGrazingIntention` and `getGrazingIntentions` to manage if a farm is planning to do grazing
+- 8f9d4ff: Improve check for `b_isproductive` by checking if name contains 'buffer'
+- 2f7b281: Adds getDefaultDatesOfCultivation as helper function to determine default dates for cultivations
+- c939de9: Add the table `intending_grazing` to store if the farm is planning to perform grazing
+- b58cd07: Add the functions `addOrganicCertification`, `isOrganicCertificationValid`, `listOrganicCertifications`, `getOrganicCertification`, and `removeOrganicCertification` to manage organic certifications of a farm.
+- b58cd07: Add tables `organic_certifications` and `organic_certifications_holding`to store information of farm if they have organic certificates
+- ac5d94f: Add `p_type_rvo` as new parameter to fertilizersCatalogue. It describes the 'Mestcode' according to RVO (Dutch government)
+- 91d4103: Add new db schema `fdm-calculator` to cache calculation results and store calculation errors. The decorator function `withCalculationCache` enables adds the functionality to add caching to calculator functions
+
+### Patch Changes
+
+- 6bcb528: Add the missing options for b_acquiring_method: "In gebruik van een terreinbeherende organisatie" (nl_03), "Tijdelijk gebruik in het kader van landinrichting" (nl_04), "Pacht van geringe oppervlakten" (nl_10) and "Natuurpacht" (nl_11)
+- Updated dependencies [97083dd]
+- Updated dependencies [d6b8900]
+ - @svenvw/fdm-data@0.18.0
+
## 0.25.1
### Patch Changes
diff --git a/fdm-core/drizzle.config.ts b/fdm-core/drizzle.config.ts
index 34142997b..8b0e491fd 100644
--- a/fdm-core/drizzle.config.ts
+++ b/fdm-core/drizzle.config.ts
@@ -7,6 +7,7 @@ export default defineConfig({
"./src/db/schema.ts",
"./src/db/schema-authn.ts",
"./src/db/schema-authz.ts",
+ "./src/db/schema-calculator.ts",
],
out: "./src/db/migrations",
migrations: {
diff --git a/fdm-core/package.json b/fdm-core/package.json
index 2422765bc..cd7c7874d 100644
--- a/fdm-core/package.json
+++ b/fdm-core/package.json
@@ -1,7 +1,7 @@
{
"name": "@svenvw/fdm-core",
"private": false,
- "version": "0.25.1",
+ "version": "0.26.0",
"description": "Interface for the Farm Data Model",
"license": "MIT",
"homepage": "https://svenvw.github.io/fdm/",
@@ -50,8 +50,8 @@
"@rollup/plugin-node-resolve": "catalog:",
"@rollup/plugin-terser": "catalog:",
"@rollup/plugin-typescript": "catalog:",
- "@svenvw/fdm-data": "workspace:^0.17.1",
- "@types/node": "^24.5.2",
+ "@svenvw/fdm-data": "workspace:^0.18.0",
+ "@types/node": "^24.7.2",
"@vitest/coverage-v8": "catalog:",
"drizzle-kit": "catalog:",
"fs-extra": "^11.3.2",
@@ -64,16 +64,17 @@
"vitest": "catalog:"
},
"dependencies": {
- "@electric-sql/pglite": "^0.3.8",
+ "@electric-sql/pglite": "^0.3.11",
"@svenvw/fdm-data": "workspace:*",
"@types/geojson": "^7946.0.16",
"better-auth": "catalog:",
"drizzle-orm": "catalog:",
- "nanoid": "^5.1.5",
+ "nanoid": "^5.1.6",
"postgres": "^3.4.7",
+ "safe-stable-stringify": "^2.5.0",
"unique-username-generator": "^1.5.1"
},
- "packageManager": "pnpm@10.17.0",
+ "packageManager": "pnpm@10.18.3",
"publishConfig": {
"registry": "https://npm.pkg.github.com"
}
diff --git a/fdm-core/src/calculator.test.ts b/fdm-core/src/calculator.test.ts
new file mode 100644
index 000000000..bfff8e057
--- /dev/null
+++ b/fdm-core/src/calculator.test.ts
@@ -0,0 +1,278 @@
+import { and, eq } from "drizzle-orm"
+import { beforeEach, describe, expect, inject, it, vi } from "vitest"
+import {
+ generateCalculationHash,
+ setCachedCalculation,
+ withCalculationCache,
+} from "./calculator"
+import { calculationCache, calculationErrors } from "./db/schema-calculator"
+import type { FdmType } from "./fdm"
+import { createFdmServer } from "./fdm-server"
+
+describe("generateCalculationHash", () => {
+ it("should produce the same hash for identical inputs regardless of object key order", () => {
+ const functionName = "testFunction"
+ const packageVersion = "1.0.0"
+ const input1 = { a: 1, b: "test", c: true }
+ const input2 = { b: "test", c: true, a: 1 } // Same content, different key order
+ const input3 = { a: 1, b: "test", c: false } // Different content
+
+ const hash1 = generateCalculationHash(
+ functionName,
+ packageVersion,
+ input1,
+ )
+ const hash2 = generateCalculationHash(
+ functionName,
+ packageVersion,
+ input2,
+ )
+ const hash3 = generateCalculationHash(
+ functionName,
+ packageVersion,
+ input3,
+ )
+
+ expect(hash1).toBe(hash2)
+ expect(hash1).not.toBe(hash3)
+ })
+
+ it("should produce different hashes for different function names", () => {
+ const packageVersion = "1.0.0"
+ const input = { a: 1 }
+
+ const hash1 = generateCalculationHash(
+ "functionA",
+ packageVersion,
+ input,
+ )
+ const hash2 = generateCalculationHash(
+ "functionB",
+ packageVersion,
+ input,
+ )
+
+ expect(hash1).not.toBe(hash2)
+ })
+
+ it("should produce different hashes for different package versions", () => {
+ const functionName = "testFunction"
+ const input = { a: 1 }
+
+ const hash1 = generateCalculationHash(functionName, "1.0.0", input)
+ const hash2 = generateCalculationHash(functionName, "1.0.1", input)
+
+ expect(hash1).not.toBe(hash2)
+ })
+
+ it("should handle empty objects and strings", () => {
+ const hash1 = generateCalculationHash("func", "1.0", {})
+ const hash2 = generateCalculationHash("func", "1.0", {})
+ const hash3 = generateCalculationHash("func2", "1.0", {})
+
+ expect(hash1).toBe(hash2)
+ expect(hash1).not.toBe(hash3)
+ })
+})
+
+describe("withCalculationCache", () => {
+ let fdm: FdmType
+
+ beforeEach(async () => {
+ const host = inject("host")
+ const port = inject("port")
+ const user = inject("user")
+ const password = inject("password")
+ const database = inject("database")
+ fdm = createFdmServer(host, port, user, password, database)
+
+ // Clear tables before each test
+ await fdm.delete(calculationCache)
+ await fdm.delete(calculationErrors)
+ })
+
+ it("should calculate if no cached result is present and cache the result", async () => {
+ const calculate = vi.fn(async (inputs: { a: string }) => {
+ return `correct result for ${inputs.a}`
+ })
+ const calculatorVersion = "1.0.0"
+ const input = { a: "my value" }
+ const getCalculation = withCalculationCache(
+ calculate,
+ "calculate",
+ calculatorVersion,
+ )
+
+ // First call: should calculate and cache
+ await expect(getCalculation(fdm, input)).resolves.toBe(
+ "correct result for my value",
+ )
+ expect(calculate).toHaveBeenCalledTimes(1)
+
+ const expectedHash = generateCalculationHash(
+ "calculate",
+ calculatorVersion,
+ input,
+ )
+ const cached = await fdm
+ .select()
+ .from(calculationCache)
+ .where(eq(calculationCache.calculation_hash, expectedHash))
+ expect(cached).toHaveLength(1)
+ expect(cached[0].result).toBe("correct result for my value")
+ })
+
+ it("should return cached result if present for the same input", async () => {
+ const calculate = vi.fn(async (inputs: { a: string }) => {
+ return `correct result for ${inputs.a}`
+ })
+ const calculatorVersion = "1.0.0"
+ const input = { a: "same value" }
+ const getCalculation = withCalculationCache(
+ calculate,
+ "calculate",
+ calculatorVersion,
+ )
+
+ // Manually set a cached result
+ const expectedHash = generateCalculationHash(
+ "calculate",
+ calculatorVersion,
+ input,
+ )
+ await setCachedCalculation(
+ fdm,
+ expectedHash,
+ "calculate",
+ calculatorVersion,
+ input,
+ "pre-cached result",
+ )
+
+ // Second call: should use cache, not calculate
+ await expect(getCalculation(fdm, input)).resolves.toBe(
+ "pre-cached result",
+ )
+ expect(calculate).not.toHaveBeenCalled() // Should not call the original function
+ })
+
+ it("should record errors when calculation fails and re-throw", async () => {
+ const calculate = vi.fn(async () => {
+ throw new Error("calculation error occurred")
+ })
+ const calculatorVersion = "1.0.0"
+ const input = { data: 123 }
+ const getCalculation = withCalculationCache(
+ calculate,
+ "calculate",
+ calculatorVersion,
+ )
+
+ await expect(getCalculation(fdm, input)).rejects.toThrow(
+ "calculation error occurred",
+ )
+ expect(calculate).toHaveBeenCalledTimes(1)
+
+ const expectedHash = generateCalculationHash(
+ "calculate",
+ calculatorVersion,
+ input,
+ )
+ const cached = await fdm
+ .select()
+ .from(calculationCache)
+ .where(eq(calculationCache.calculation_hash, expectedHash))
+ expect(cached).toHaveLength(0) // Should not cache errors
+
+ const errors = await fdm
+ .select()
+ .from(calculationErrors)
+ .where(
+ and(
+ eq(calculationErrors.calculation_function, "calculate"),
+ eq(
+ calculationErrors.error_message,
+ "calculation error occurred",
+ ),
+ ),
+ )
+ expect(errors).toHaveLength(1)
+ expect(errors[0].stack_trace).toBeDefined()
+ })
+
+ it("should record errors when calculation throws a non-Error object", async () => {
+ const calculate = vi.fn(async () => {
+ throw "a simple string error" // Throwing a string
+ })
+ const calculatorVersion = "1.0.0"
+ const input = { data: 456 }
+ const getCalculation = withCalculationCache(
+ calculate,
+ "calculate",
+ calculatorVersion,
+ )
+
+ await expect(getCalculation(fdm, input)).rejects.toBe(
+ "a simple string error",
+ )
+ expect(calculate).toHaveBeenCalledTimes(1)
+
+ const expectedHash = generateCalculationHash(
+ "calculate",
+ calculatorVersion,
+ input,
+ )
+ const cached = await fdm
+ .select()
+ .from(calculationCache)
+ .where(eq(calculationCache.calculation_hash, expectedHash))
+ expect(cached).toHaveLength(0) // Should not cache errors
+
+ const errors = await fdm
+ .select()
+ .from(calculationErrors)
+ .where(
+ and(
+ eq(calculationErrors.calculation_function, "calculate"),
+ eq(
+ calculationErrors.error_message,
+ "a simple string error",
+ ),
+ ),
+ )
+ expect(errors).toHaveLength(1)
+ expect(errors[0].stack_trace).toBeNull() // Stack trace should be null for non-Error objects
+ })
+
+ it("should handle cache read failure and proceed with calculation without caching", async () => {
+ const calculate = vi.fn(async (inputs: { val: number }) => {
+ return inputs.val * 10
+ })
+ const calculatorVersion = "1.0.0"
+ const input = { val: 5 }
+ const getCalculation = withCalculationCache(
+ calculate,
+ "calculate",
+ calculatorVersion,
+ )
+
+ // Mock getCachedCalculation to throw an error
+ vi.spyOn(fdm, "select").mockImplementationOnce(() => {
+ throw new Error("Database connection lost during cache read")
+ })
+
+ await expect(getCalculation(fdm, input)).resolves.toBe(50)
+ expect(calculate).toHaveBeenCalledTimes(1) // Original calculation should still run
+
+ const expectedHash = generateCalculationHash(
+ "calculate",
+ calculatorVersion,
+ input,
+ )
+ const cached = await fdm
+ .select()
+ .from(calculationCache)
+ .where(eq(calculationCache.calculation_hash, expectedHash))
+ expect(cached).toHaveLength(0) // Should NOT cache the result if cache read failed
+ })
+})
diff --git a/fdm-core/src/calculator.ts b/fdm-core/src/calculator.ts
new file mode 100644
index 000000000..fb0a28e14
--- /dev/null
+++ b/fdm-core/src/calculator.ts
@@ -0,0 +1,284 @@
+import { createHash } from "node:crypto"
+import { eq } from "drizzle-orm"
+import stableStringify from "safe-stable-stringify"
+import {
+ calculationCache as calculationCacheTable,
+ calculationErrors as calculationErrorsTable,
+} from "./db/schema-calculator"
+import type { FdmType } from "./fdm"
+import { createId } from "./id"
+
+/**
+ * Generates a reliable and quick hash for caching calculation results.
+ * This hash is used as a unique identifier for a given calculation function, its version, and its input.
+ * It ensures that the same calculation with the same inputs always produces the same cache key.
+ *
+ * @template T_Input - The type of the input object for the calculation function.
+ * @param {string} functionName - The name of the calculation function.
+ * @param {string} packageVersion - The version of the package/module containing the function.
+ * @param {T_Input} functionInput - The input object for the function.
+ * @returns {string} A SHA-256 hash as a hex string.
+ */
+export function generateCalculationHash(
+ functionName: string,
+ packageVersion: string,
+ functionInput: T_Input,
+): string {
+ // 1. Deterministically serialize the input object to ensure consistent hashing.
+ // `safe-stable-stringify` is used to handle various JavaScript object types reliably.
+ const serializedInput = stableStringify(functionInput)
+
+ // 2. Combine all components (function name, package version, and serialized input)
+ // into a single string. This ensures that changes to any of these components
+ // will result in a different hash, effectively invalidating the cache for that specific calculation.
+ const dataToHash = `${functionName}:${packageVersion}:${serializedInput}`
+
+ // 3. Compute the SHA-256 hash of the combined string.
+ return createHash("sha256").update(dataToHash).digest("hex")
+}
+
+/**
+ * Retrieves a cached calculation result from the database.
+ *
+ * @template T_Output - The expected type of the calculation result.
+ * @param {FdmType} fdm - The FDM instance, providing database access.
+ * @param {string} calculation_hash - The unique hash identifying the cached calculation.
+ * @returns {Promise} A promise that resolves to the cached result if found, otherwise `null`.
+ */
+export function getCachedCalculation(
+ fdm: FdmType,
+ calculation_hash: string,
+): Promise {
+ // Query the calculation cache table for a record matching the provided hash.
+ // Limits to 1 result as the hash is a primary key.
+ const result = fdm
+ .select({
+ result: calculationCacheTable.result,
+ })
+ .from(calculationCacheTable)
+ .where(eq(calculationCacheTable.calculation_hash, calculation_hash))
+ .limit(1)
+
+ // Process the query result: if a row is found, return its 'result' field, otherwise return null.
+ return result.then((rows: { result: T_Output }[]) =>
+ rows?.length ? (rows[0].result as T_Output) : null,
+ )
+}
+
+/**
+ * Stores a calculation result in the cache.
+ *
+ * @template T_Input - The type of the input object for the calculation function.
+ * @template T_Output - The type of the calculation result.
+ * @param {FdmType} fdm - The FDM instance, providing database access.
+ * @param {string} calculationHash - The unique hash of the calculation.
+ * @param {string} calculationFunctionName - The name of the calculation function.
+ * @param {string} calculatorVersion - The version of the calculator.
+ * @param {T_Input} input - The input object used for the calculation.
+ * @param {T_Output} result - The computed result of the calculation.
+ * @returns {Promise} A promise that resolves when the cache operation is complete.
+ */
+export async function setCachedCalculation(
+ fdm: FdmType,
+ calculationHash: string,
+ calculationFunctionName: string,
+ calculatorVersion: string,
+ input: T_Input,
+ result: T_Output,
+) {
+ // Inserts a new cache record. If a record with the same calculation_hash already exists,
+ // this operation will likely cause a unique constraint violation error, as upsert was removed.
+ await fdm.insert(calculationCacheTable).values({
+ calculation_hash: calculationHash,
+ calculation_function: calculationFunctionName,
+ calculator_version: calculatorVersion,
+ input: input,
+ result: result,
+ })
+}
+
+/**
+ * Records an error that occurred during a calculation in the database.
+ *
+ * @template T_Input - The type of the input object that caused the error.
+ * @param {FdmType} fdm - The FDM instance, providing database access.
+ * @param {string} calculationFunctionName - The name of the calculation function where the error occurred.
+ * @param {string} calculatorVersion - The version of the calculator.
+ * @param {T_Input} input - The input object that was being processed when the error occurred.
+ * @param {string} error_message - The error message.
+ * @param {string | undefined} stack_trace - The stack trace of the error, if available.
+ * @returns {Promise} A promise that resolves when the error record is inserted.
+ */
+export async function setCalculationError(
+ fdm: FdmType,
+ calculationFunctionName: string,
+ calculatorVersion: string,
+ input: T_Input,
+ error_message: string,
+ stack_trace: string | undefined,
+) {
+ return fdm.insert(calculationErrorsTable).values({
+ calculation_error_id: createId(), // Generate a unique ID for each error record
+ calculation_function: calculationFunctionName,
+ calculator_version: calculatorVersion,
+ input: input,
+ error_message: error_message,
+ stack_trace: stack_trace ?? null, // Store stack trace, or null if not provided
+ })
+}
+
+/**
+ * A decorator function that adds caching capabilities to any asynchronous calculation function.
+ * It first attempts to retrieve a result from the cache. If a cached result is found, it's returned immediately.
+ * If not, the original calculation function is executed, its result is cached (if cache read was successful),
+ * and then returned. Errors during calculation are logged and re-thrown.
+ *
+ * @template T_Input - The type of the input object for the calculation function.
+ * @template T_Output - The expected type of the calculation result.
+ * @param {(inputs: T_Input) => T_Output | Promise} calculationFunction - The original function to compute the result.
+ * @param {string} calculationFunctionName - The name of the calculation function, used for caching.
+ * @param {string} calculatorVersion - A version string tied to the current calculation function.
+ * Changing this version will invalidate old cache entries.
+ * @returns {(fdm: FdmType, input: T_Input) => Promise} A new function that wraps the original
+ * calculation with caching logic.
+ *
+ * @example
+ * ```typescript
+ * // Define a calculation function
+ * async function myExpensiveCalculation(data: { value: number }): Promise {
+ * // Simulate an expensive operation
+ * await new Promise(resolve => setTimeout(resolve, 1000));
+ * return data.value * 2;
+ * }
+ *
+ * // Decorate it with caching
+ * const cachedCalculation = withCalculationCache(myExpensiveCalculation, 'myExpensiveCalculation', 'v1.0.0');
+ *
+ * // Use the decorated function
+ * // Assuming 'fdm' is an initialized FdmType instance
+ * const result1 = await cachedCalculation(fdm, { value: 10 }); // Cache MISS, performs calculation
+ * const result2 = await cachedCalculation(fdm, { value: 10 }); // Cache HIT, returns cached result instantly
+ * ```
+ */
+export function withCalculationCache(
+ calculationFunction: (inputs: T_Input) => T_Output | Promise,
+ calculationFunctionName: string,
+ calculatorVersion: string,
+) {
+ return async (fdm: FdmType, input: T_Input) => {
+ if (!calculationFunctionName) {
+ throw new Error(
+ "Calculation function name not provided for caching. Please provide a valid function name.",
+ )
+ }
+
+ if (!calculatorVersion) {
+ throw new Error(
+ "Calculator version not provided for caching. Please provide a valid version string.",
+ )
+ }
+
+ // Generate a unique hash for the current calculation based on function name, version, and input.
+ const calculationHash = generateCalculationHash(
+ calculationFunctionName,
+ calculatorVersion,
+ input,
+ )
+
+ let cachedResult: T_Output | null = null
+ // Flag to determine if the result of the current calculation should be cached.
+ // This is set to false if reading from cache fails.
+ let cacheResultOfCalculation = true
+
+ // Attempt to retrieve the result from cache.
+ try {
+ cachedResult = await getCachedCalculation(fdm, calculationHash)
+ } catch (e: unknown) {
+ // If reading from cache fails, log the error and mark that the result should not be cached.
+ // This makes the caching mechanism resilient to temporary database issues.
+ cacheResultOfCalculation = false
+ const errorMessage = e instanceof Error ? e.message : String(e)
+ console.error(
+ `Failed to read from calculation cache for ${calculationFunctionName} (hash: ${calculationHash}): ${errorMessage}`,
+ )
+ // Treat as a cache miss and proceed with calculation, but do not attempt to set a new cache entry
+ // as the cache might be in an unhealthy state.
+ }
+
+ // If a cached result was successfully retrieved, return it immediately.
+ if (cachedResult) {
+ // console.log(
+ // `Cache HIT for ${calculationFunctionName} (hash: ${calculationHash})`,
+ // )
+ return cachedResult
+ }
+
+ // If no cached result was found (either genuinely a miss or cache read failed),
+ // perform the actual calculation.
+ try {
+ // console.log(
+ // `Cache MISS for ${calculationFunctionName} (hash: ${calculationHash}). Performing calculation...`,
+ // )
+ const result = await calculationFunction(input)
+
+ // If the initial cache read was successful (meaning the cache is healthy),
+ // then attempt to store the new calculation result in the cache.
+ if (cacheResultOfCalculation) {
+ try {
+ await setCachedCalculation(
+ fdm,
+ calculationHash,
+ calculationFunctionName,
+ calculatorVersion,
+ input,
+ result,
+ )
+ } catch (e: unknown) {
+ const errorMessage =
+ e instanceof Error ? e.message : String(e)
+ console.error(
+ `Failed to write to calculation cache for ${calculationFunctionName} (hash: ${calculationHash}): ${errorMessage}`,
+ )
+ // Continue execution - the calculation succeeded, only caching failed
+ }
+ // console.log(
+ // `Calculation for ${calculationFunctionName} (hash: ${calculationHash}) completed and cached.`,
+ // )
+ } else {
+ // If cache read failed, log that the result is not being cached.
+ // console.log(
+ // `Calculation for ${calculationFunctionName} (hash: ${calculationHash}) completed and not cached due to prior cache read failure.`,
+ // )
+ }
+
+ return result
+ } catch (e: unknown) {
+ // If the calculation itself fails, record the error in the database
+ // and re-throw it to propagate the failure to the caller.
+ const errorMessage = e instanceof Error ? e.message : String(e)
+ const stackTrace = e instanceof Error ? e.stack : undefined
+
+ try {
+ await setCalculationError(
+ fdm,
+ calculationFunctionName,
+ calculatorVersion,
+ input,
+ errorMessage,
+ stackTrace,
+ )
+ } catch (loggingError: unknown) {
+ const loggingErrorMessage =
+ loggingError instanceof Error
+ ? loggingError.message
+ : String(loggingError)
+ console.error(
+ `Failed to log calculation error for ${calculationFunctionName}: ${loggingErrorMessage}`,
+ )
+ // Continue to re-throw the original calculation error
+ }
+
+ throw e
+ }
+ }
+}
diff --git a/fdm-core/src/cultivation.d.ts b/fdm-core/src/cultivation.d.ts
index 99cc414f7..9f9f27bb2 100644
--- a/fdm-core/src/cultivation.d.ts
+++ b/fdm-core/src/cultivation.d.ts
@@ -58,3 +58,8 @@ export interface CultivationPlan {
}
export type CultivationCatalogue = schema.cultivationsCatalogueTypeSelect
+
+export type CultivationDefaultDates = {
+ b_lu_start: Date
+ b_lu_end: Date | undefined
+}
diff --git a/fdm-core/src/cultivation.test.ts b/fdm-core/src/cultivation.test.ts
index d13af0213..888275d37 100644
--- a/fdm-core/src/cultivation.test.ts
+++ b/fdm-core/src/cultivation.test.ts
@@ -11,6 +11,7 @@ import {
getCultivationPlan,
getCultivations,
getCultivationsFromCatalogue,
+ getDefaultDatesOfCultivation,
removeCultivation,
updateCultivation,
} from "./cultivation"
@@ -116,6 +117,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: ["variety1", "variety2"],
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
b_lu_start = new Date("2024-01-01")
@@ -162,6 +165,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: ["variety1", "variety2"],
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
const cultivations = await getCultivationsFromCatalogue(
@@ -217,6 +222,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
}),
).rejects.toThrow()
})
@@ -433,6 +440,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
await updateCultivation(
@@ -505,6 +514,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
const newSowingDate = new Date("2024-02-01")
@@ -549,6 +560,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
await updateCultivation(fdm, principal_id, b_lu, newCatalogueId)
@@ -795,6 +808,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: b_lu_variety_options,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
const cultivations = await getCultivationsFromCatalogue(
@@ -811,6 +826,284 @@ describe("Cultivation Data Model", () => {
b_lu_variety_options,
)
})
+
+ it("should throw an error for invalid b_lu_start_default format", async () => {
+ const b_lu_catalogue = createId()
+
+ await expect(
+ addCultivationToCatalogue(fdm, {
+ b_lu_catalogue,
+ b_lu_source: b_lu_source,
+ b_lu_name: "Test Cultivation",
+ b_lu_name_en: "Test Cultivation (EN)",
+ b_lu_harvestable: "once" as const,
+ b_lu_hcat3: "test-hcat3",
+ b_lu_hcat3_name: "Test HCAT3 Name",
+ b_lu_croprotation: "cereal",
+ b_lu_yield: 6000,
+ b_lu_hi: 0.4,
+ b_lu_n_harvestable: 4,
+ b_lu_n_residue: 2,
+ b_n_fixation: 0,
+ b_lu_rest_oravib: false,
+ b_lu_variety_options: ["v1", "v2"],
+ b_lu_start_default: "2024-03-01", // Invalid format
+ b_date_harvest_default: "09-15",
+ }),
+ ).rejects.toThrow("Exception for addCultivationToCatalogue")
+ })
+
+ it("should throw an error for invalid b_date_harvest_default format", async () => {
+ const b_lu_catalogue = createId()
+ await expect(
+ addCultivationToCatalogue(fdm, {
+ b_lu_catalogue,
+ b_lu_source: b_lu_source,
+ b_lu_name: "Test Cultivation",
+ b_lu_name_en: "Test Cultivation (EN)",
+ b_lu_harvestable: "once" as const,
+ b_lu_hcat3: "test-hcat3",
+ b_lu_hcat3_name: "Test HCAT3 Name",
+ b_lu_croprotation: "cereal",
+ b_lu_yield: 6000,
+ b_lu_hi: 0.4,
+ b_lu_n_harvestable: 4,
+ b_lu_n_residue: 2,
+ b_n_fixation: 0,
+ b_lu_rest_oravib: false,
+ b_lu_variety_options: ["v1", "v2"],
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "2024-09-15", // Invalid format
+ }),
+ ).rejects.toThrow("Exception for addCultivationToCatalogue")
+ })
+
+ it("should not throw an error for valid date formats", async () => {
+ const b_lu_catalogue = createId()
+
+ await expect(
+ addCultivationToCatalogue(fdm, {
+ b_lu_catalogue,
+ b_lu_source: b_lu_source,
+ b_lu_name: "Test Cultivation",
+ b_lu_name_en: "Test Cultivation (EN)",
+ b_lu_harvestable: "once" as const,
+ b_lu_hcat3: "test-hcat3",
+ b_lu_hcat3_name: "Test HCAT3 Name",
+ b_lu_croprotation: "cereal",
+ b_lu_yield: 6000,
+ b_lu_hi: 0.4,
+ b_lu_n_harvestable: 4,
+ b_lu_n_residue: 2,
+ b_n_fixation: 0,
+ b_lu_rest_oravib: false,
+ b_lu_variety_options: ["v1", "v2"],
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
+ }),
+ ).resolves.not.toThrow()
+ })
+
+ it("should not throw an error when date fields are null", async () => {
+ const b_lu_catalogue = createId()
+
+ await expect(
+ addCultivationToCatalogue(fdm, {
+ b_lu_catalogue,
+ b_lu_source: b_lu_source,
+ b_lu_name: "Test Cultivation",
+ b_lu_name_en: "Test Cultivation (EN)",
+ b_lu_harvestable: "once" as const,
+ b_lu_hcat3: "test-hcat3",
+ b_lu_hcat3_name: "Test HCAT3 Name",
+ b_lu_croprotation: "maize",
+ b_lu_yield: 6000,
+ b_lu_hi: 0.4,
+ b_lu_n_harvestable: 4,
+ b_lu_n_residue: 2,
+ b_n_fixation: 0,
+ b_lu_rest_oravib: false,
+ b_lu_variety_options: ["v1", "v2"],
+ b_lu_start_default: null,
+ b_date_harvest_default: null,
+ }),
+ ).resolves.not.toThrow()
+ })
+ describe("getDefaultDatesOfCultivation", () => {
+ it("should return default start and end dates for a single-harvest cultivation", async () => {
+ const year = 2024
+ const defaultDates = await getDefaultDatesOfCultivation(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_lu_catalogue,
+ year,
+ )
+
+ expect(defaultDates).toBeDefined()
+ expect(defaultDates.b_lu_start).toEqual(new Date("2024-03-01"))
+ expect(defaultDates.b_lu_end).toEqual(new Date("2024-09-15"))
+ })
+
+ it("should handle harvest in the next year", async () => {
+ const winterCropCatalogue = createId()
+ await addCultivationToCatalogue(fdm, {
+ b_lu_catalogue: winterCropCatalogue,
+ b_lu_source: b_lu_source,
+ b_lu_name: "winter-wheat",
+ b_lu_name_en: "Winter Wheat",
+ b_lu_harvestable: "once",
+ b_lu_hcat3: "test-hcat3",
+ b_lu_hcat3_name: "test-hcat3-name",
+ b_lu_croprotation: "cereal",
+ b_lu_yield: 7000,
+ b_lu_hi: 0.5,
+ b_lu_n_harvestable: 5,
+ b_lu_n_residue: 3,
+ b_n_fixation: 0,
+ b_lu_rest_oravib: false,
+ b_lu_variety_options: null,
+ b_lu_start_default: "10-15", // October 15th
+ b_date_harvest_default: "07-20", // July 20th
+ })
+
+ const year = 2024
+ const defaultDates = await getDefaultDatesOfCultivation(
+ fdm,
+ principal_id,
+ b_id_farm,
+ winterCropCatalogue,
+ year,
+ )
+
+ expect(defaultDates).toBeDefined()
+ expect(defaultDates.b_lu_start).toEqual(new Date("2023-10-15"))
+ expect(defaultDates.b_lu_end).toEqual(new Date("2024-07-20"))
+ })
+
+ it("should return only start date for multi-harvest cultivations", async () => {
+ const multiHarvestCatalogue = createId()
+ await addCultivationToCatalogue(fdm, {
+ b_lu_catalogue: multiHarvestCatalogue,
+ b_lu_source: b_lu_source,
+ b_lu_name: "grass",
+ b_lu_name_en: "Grass",
+ b_lu_harvestable: "multiple",
+ b_lu_hcat3: "test-hcat3",
+ b_lu_hcat3_name: "test-hcat3-name",
+ b_lu_croprotation: "grass",
+ b_lu_yield: 10000,
+ b_lu_hi: 0.8,
+ b_lu_n_harvestable: 6,
+ b_lu_n_residue: 4,
+ b_n_fixation: 0,
+ b_lu_rest_oravib: false,
+ b_lu_variety_options: null,
+ b_lu_start_default: "04-01",
+ b_date_harvest_default: null,
+ })
+
+ const year = 2024
+ const defaultDates = await getDefaultDatesOfCultivation(
+ fdm,
+ principal_id,
+ b_id_farm,
+ multiHarvestCatalogue,
+ year,
+ )
+
+ expect(defaultDates).toBeDefined()
+ expect(defaultDates.b_lu_start).toEqual(new Date("2024-04-01"))
+ expect(defaultDates.b_lu_end).toBeUndefined()
+ })
+
+ it("should return only start date when harvestable is 'none'", async () => {
+ const noneHarvestableCatalogue = createId()
+ await addCultivationToCatalogue(fdm, {
+ b_lu_catalogue: noneHarvestableCatalogue,
+ b_lu_source: b_lu_source,
+ b_lu_name: "cover-crop",
+ b_lu_name_en: "Cover Crop",
+ b_lu_harvestable: "none",
+ b_lu_hcat3: "test-hcat3",
+ b_lu_hcat3_name: "test-hcat3-name",
+ b_lu_croprotation: "other",
+ b_lu_yield: 0,
+ b_lu_hi: 0,
+ b_lu_n_harvestable: 0,
+ b_lu_n_residue: 0,
+ b_n_fixation: 0,
+ b_lu_rest_oravib: false,
+ b_lu_variety_options: null,
+ b_lu_start_default: "04-01",
+ b_date_harvest_default: null,
+ })
+
+ const year = 2024
+ const defaultDates = await getDefaultDatesOfCultivation(
+ fdm,
+ principal_id,
+ b_id_farm,
+ noneHarvestableCatalogue,
+ year,
+ )
+
+ expect(defaultDates).toBeDefined()
+ expect(defaultDates.b_lu_start).toEqual(new Date("2024-04-01"))
+ expect(defaultDates.b_lu_end).toBeUndefined()
+ })
+
+ it("should return default start date of '03-15' when b_lu_start_default is null", async () => {
+ const nullStartDefaultCatalogue = createId()
+ await addCultivationToCatalogue(fdm, {
+ b_lu_catalogue: nullStartDefaultCatalogue,
+ b_lu_source: b_lu_source,
+ b_lu_name: "null-start-default",
+ b_lu_name_en: "Null Start Default",
+ b_lu_harvestable: "once",
+ b_lu_hcat3: "test-hcat3",
+ b_lu_hcat3_name: "test-hcat3-name",
+ b_lu_croprotation: "cereal",
+ b_lu_yield: 6000,
+ b_lu_hi: 0.4,
+ b_lu_n_harvestable: 4,
+ b_lu_n_residue: 2,
+ b_n_fixation: 0,
+ b_lu_rest_oravib: false,
+ b_lu_variety_options: null,
+ b_lu_start_default: null,
+ b_date_harvest_default: "09-15",
+ })
+
+ const year = 2024
+ const defaultDates = await getDefaultDatesOfCultivation(
+ fdm,
+ principal_id,
+ b_id_farm,
+ nullStartDefaultCatalogue,
+ year,
+ )
+
+ expect(defaultDates).toBeDefined()
+ expect(defaultDates.b_lu_start).toEqual(new Date("2024-03-15"))
+ expect(defaultDates.b_lu_end).toEqual(new Date("2024-09-15"))
+ })
+
+ it("should throw an error if cultivation is not found", async () => {
+ const nonExistentCatalogueId = createId()
+ const year = 2024
+
+ await expect(
+ getDefaultDatesOfCultivation(
+ fdm,
+ principal_id,
+ b_id_farm,
+ nonExistentCatalogueId,
+ year,
+ ),
+ ).rejects.toThrow("Exception for getDefaultDatesOfCultivation")
+ })
+ })
})
describe("Cultivation Plan", () => {
@@ -899,6 +1192,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
await addCultivation(
@@ -1068,6 +1363,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
// Add a second field
@@ -1213,6 +1510,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
// Add a cultivation 'Wheat' within the timeframe
@@ -1277,6 +1576,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
// Add a cultivation 'Wheat'
@@ -1432,6 +1733,8 @@ describe("Cultivation Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
// Add a cultivation 'Wheat' - outside timeframe
@@ -1576,6 +1879,8 @@ describe("buildCultivationTimeframeCondition", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-01",
+ b_date_harvest_default: "09-15",
})
})
diff --git a/fdm-core/src/cultivation.ts b/fdm-core/src/cultivation.ts
index c4a55baf9..76326f65e 100644
--- a/fdm-core/src/cultivation.ts
+++ b/fdm-core/src/cultivation.ts
@@ -17,12 +17,13 @@ import type { PrincipalId } from "./authorization.d"
import type {
Cultivation,
CultivationCatalogue,
+ CultivationDefaultDates,
CultivationPlan,
} from "./cultivation.d"
import * as schema from "./db/schema"
import { handleError } from "./error"
import type { FdmType } from "./fdm"
-import { determineIfFieldIsProductiveByShape } from "./field"
+import { determineIfFieldIsProductive } from "./field"
import {
addHarvest,
getHarvestableTypeOfCultivation,
@@ -119,6 +120,8 @@ export async function addCultivationToCatalogue(
b_n_fixation: schema.cultivationsCatalogueTypeInsert["b_n_fixation"]
b_lu_rest_oravib: schema.cultivationsCatalogueTypeInsert["b_lu_rest_oravib"]
b_lu_variety_options: schema.cultivationsCatalogueTypeInsert["b_lu_variety_options"]
+ b_lu_start_default: schema.cultivationsCatalogueTypeInsert["b_lu_start_default"]
+ b_date_harvest_default: schema.cultivationsCatalogueTypeInsert["b_date_harvest_default"]
},
): Promise {
try {
@@ -139,6 +142,25 @@ export async function addCultivationToCatalogue(
throw new Error("Cultivation already exists in catalogue")
}
+ // Validate if b_lu_start_default and b_date_harvest_default follows format MM-dd
+ const dateRegex = /^(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/
+ if (
+ properties.b_lu_start_default &&
+ !dateRegex.test(properties.b_lu_start_default)
+ ) {
+ throw new Error(
+ "Invalid b_lu_start_default format. Expected MM-dd.",
+ )
+ }
+ if (
+ properties.b_date_harvest_default &&
+ !dateRegex.test(properties.b_date_harvest_default)
+ ) {
+ throw new Error(
+ "Invalid b_date_harvest_default format. Expected MM-dd.",
+ )
+ }
+
// Insert the cultivation in the db
await tx.insert(schema.cultivationsCatalogue).values(properties)
})
@@ -149,6 +171,130 @@ export async function addCultivationToCatalogue(
}
}
+/**
+ * Retrieves the default start and end dates for a given cultivation in a specific year.
+ *
+ * This function checks for read permissions on the farm, then queries the cultivation catalogue
+ * to find the default sowing and harvest dates for the specified cultivation. It constructs
+ * Date objects for the given year. For single-harvest crops, it calculates the default end
+ * date and adjusts the year if the sowing date felt into the previous calendar year.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The ID of the principal making the request.
+ * @param b_id_farm The ID of the farm.
+ * @param b_lu_catalogue The catalogue ID of the cultivation.
+ * @param year The year for which to determine the default dates.
+ * @returns A Promise that resolves with an object containing the default start and end dates.
+ * @throws {Error} If the cultivation is not found in the enabled catalogues for the farm.
+ * @alpha
+ */
+export async function getDefaultDatesOfCultivation(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_farm: schema.farmsTypeSelect["b_id_farm"],
+ b_lu_catalogue: schema.cultivationsCatalogueTypeSelect["b_lu_catalogue"],
+ year: number,
+): Promise {
+ try {
+ await checkPermission(
+ fdm,
+ "farm",
+ "read",
+ b_id_farm,
+ principal_id,
+ "getDefaultDatesOfCultivation",
+ )
+
+ // Validate year
+ if (!year || !Number.isInteger(year) || year < 1970 || year >= 2100) {
+ throw new Error("Invalid year")
+ }
+
+ // Retrieve the enabled cultivation catalogues for the specified farm.
+ const enabledCatalogues = await fdm
+ .select({
+ b_lu_source: schema.cultivationCatalogueSelecting.b_lu_source,
+ })
+ .from(schema.cultivationCatalogueSelecting)
+ .where(
+ eq(schema.cultivationCatalogueSelecting.b_id_farm, b_id_farm),
+ )
+
+ if (enabledCatalogues.length === 0) {
+ throw new Error("Cultivation not found in catalogue")
+ }
+
+ // Fetch the specified cultivation's default date information from the enabled catalogues.
+ const cultivationsCatalogue = await fdm
+ .select({
+ b_lu_catalogue: schema.cultivationsCatalogue.b_lu_catalogue,
+ b_lu_harvestable: schema.cultivationsCatalogue.b_lu_harvestable,
+ b_lu_start_default:
+ schema.cultivationsCatalogue.b_lu_start_default,
+ b_date_harvest_default:
+ schema.cultivationsCatalogue.b_date_harvest_default,
+ })
+ .from(schema.cultivationsCatalogue)
+ .where(
+ and(
+ inArray(
+ schema.cultivationsCatalogue.b_lu_source,
+ enabledCatalogues.map(
+ (c: { b_lu_source: string }) => c.b_lu_source,
+ ),
+ ),
+ eq(
+ schema.cultivationsCatalogue.b_lu_catalogue,
+ b_lu_catalogue,
+ ),
+ ),
+ )
+ .limit(1)
+
+ if (cultivationsCatalogue.length === 0) {
+ throw new Error("Cultivation not found in catalogue")
+ }
+
+ // Set default dates of March 15th to September 15th if not provided
+ const defaultStart =
+ cultivationsCatalogue[0].b_lu_start_default ?? "03-15"
+ const defaultEnd =
+ cultivationsCatalogue[0].b_date_harvest_default ?? "09-15"
+
+ // Construct the default start date using the provided year.
+ const cultivationDefaultDates: CultivationDefaultDates = {
+ b_lu_start: new Date(`${year}-${defaultStart}`),
+ b_lu_end: new Date(`${year}-${defaultEnd}`),
+ }
+
+ // If the calculated end date is earlier than the start date, it implies the sowing
+ // occurred in the previous year, so we use the previous year for the start date.
+ if (
+ cultivationDefaultDates.b_lu_end &&
+ cultivationDefaultDates.b_lu_end.getTime() <=
+ cultivationDefaultDates.b_lu_start.getTime()
+ ) {
+ cultivationDefaultDates.b_lu_start = new Date(
+ `${year - 1}-${defaultStart}`,
+ )
+ }
+
+ // For cultivations that can be harvested multiple times or not at all, set b_lu_end to undefined
+ if (cultivationsCatalogue[0].b_lu_harvestable !== "once") {
+ cultivationDefaultDates.b_lu_end = undefined
+ }
+
+ return cultivationDefaultDates
+ } catch (err) {
+ throw handleError(err, "Exception for getDefaultDatesOfCultivation", {
+ principal_id,
+ b_id_farm,
+ b_lu_catalogue,
+ year,
+ })
+ }
+}
+
/**
* Adds a new cultivation to a specific field.
*
@@ -772,9 +918,10 @@ export async function getCultivationPlan(
b_id: curr.b_id,
b_area: curr.b_area,
b_name: curr.b_name,
- b_isproductive: determineIfFieldIsProductiveByShape(
+ b_isproductive: determineIfFieldIsProductive(
curr.b_area,
curr.b_perimeter,
+ curr.b_name,
),
fertilizer_applications: [],
harvests: [],
diff --git a/fdm-core/src/db/migrations/0014_v0-26-0-1.sql b/fdm-core/src/db/migrations/0014_v0-26-0-1.sql
new file mode 100644
index 000000000..83ec7aee3
--- /dev/null
+++ b/fdm-core/src/db/migrations/0014_v0-26-0-1.sql
@@ -0,0 +1,4 @@
+ALTER TYPE fdm.b_acquiring_method ADD VALUE IF NOT EXISTS 'nl_03';--> statement-breakpoint
+ALTER TYPE fdm.b_acquiring_method ADD VALUE IF NOT EXISTS 'nl_04';--> statement-breakpoint
+ALTER TYPE fdm.b_acquiring_method ADD VALUE IF NOT EXISTS 'nl_10';--> statement-breakpoint
+ALTER TYPE fdm.b_acquiring_method ADD VALUE IF NOT EXISTS 'nl_11';
\ No newline at end of file
diff --git a/fdm-core/src/db/migrations/0015_v0-26-0-2.sql b/fdm-core/src/db/migrations/0015_v0-26-0-2.sql
new file mode 100644
index 000000000..6d904c5e6
--- /dev/null
+++ b/fdm-core/src/db/migrations/0015_v0-26-0-2.sql
@@ -0,0 +1,4 @@
+ALTER TABLE "fdm"."cultivations_catalogue" ADD COLUMN "b_lu_start_default" text;--> statement-breakpoint
+ALTER TABLE "fdm"."cultivations_catalogue" ADD COLUMN "b_date_harvest_default" text;--> statement-breakpoint
+ALTER TABLE "fdm"."cultivations_catalogue" ADD CONSTRAINT "b_lu_start_default_format" CHECK (b_lu_start_default IS NULL OR b_lu_start_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$');--> statement-breakpoint
+ALTER TABLE "fdm"."cultivations_catalogue" ADD CONSTRAINT "b_date_harvest_default_format" CHECK (b_date_harvest_default IS NULL OR b_date_harvest_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$');
\ No newline at end of file
diff --git a/fdm-core/src/db/migrations/0016_v0-26-0-3.sql b/fdm-core/src/db/migrations/0016_v0-26-0-3.sql
new file mode 100644
index 000000000..5d661b01e
--- /dev/null
+++ b/fdm-core/src/db/migrations/0016_v0-26-0-3.sql
@@ -0,0 +1,33 @@
+CREATE TYPE "fdm"."p_type_rvo" AS ENUM('10', '11', '12', '13', '14', '17', '18', '19', '23', '30', '31', '32', '33', '35', '39', '40', '41', '42', '43', '46', '50', '56', '60', '61', '75', '76', '80', '81', '90', '91', '92', '25', '26', '27', '95', '96', '97', '98', '99', '100', '101', '102', '103', '104', '105', '106', '107', '108', '109', '110', '111', '112', '113', '114', '115', '116', '117', '120');--> statement-breakpoint
+CREATE TABLE "fdm"."intending_grazing" (
+ "b_id_farm" text NOT NULL,
+ "b_grazing_intention" boolean,
+ "b_grazing_intention_year" integer NOT NULL,
+ "created" timestamp with time zone DEFAULT now() NOT NULL,
+ "updated" timestamp with time zone,
+ CONSTRAINT "intending_grazing_b_id_farm_b_grazing_intention_year_pk" PRIMARY KEY("b_id_farm","b_grazing_intention_year")
+);
+--> statement-breakpoint
+CREATE TABLE "fdm"."organic_certifications" (
+ "b_id_organic" text PRIMARY KEY NOT NULL,
+ "b_organic_traces" text,
+ "b_organic_skal" text,
+ "b_organic_issued" timestamp with time zone,
+ "b_organic_expires" timestamp with time zone,
+ "created" timestamp with time zone DEFAULT now() NOT NULL,
+ "updated" timestamp with time zone
+);
+--> statement-breakpoint
+CREATE TABLE "fdm"."organic_certifications_holding" (
+ "b_id_farm" text NOT NULL,
+ "b_id_organic" text NOT NULL,
+ "created" timestamp with time zone DEFAULT now() NOT NULL,
+ "updated" timestamp with time zone
+);
+--> statement-breakpoint
+ALTER TABLE "fdm"."fertilizers_catalogue" ADD COLUMN "p_type_rvo" "fdm"."p_type_rvo";--> statement-breakpoint
+ALTER TABLE "fdm"."intending_grazing" ADD CONSTRAINT "intending_grazing_b_id_farm_farms_b_id_farm_fk" FOREIGN KEY ("b_id_farm") REFERENCES "fdm"."farms"("b_id_farm") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "fdm"."organic_certifications_holding" ADD CONSTRAINT "organic_certifications_holding_b_id_farm_farms_b_id_farm_fk" FOREIGN KEY ("b_id_farm") REFERENCES "fdm"."farms"("b_id_farm") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+ALTER TABLE "fdm"."organic_certifications_holding" ADD CONSTRAINT "organic_certifications_holding_b_id_organic_organic_certifications_b_id_organic_fk" FOREIGN KEY ("b_id_organic") REFERENCES "fdm"."organic_certifications"("b_id_organic") ON DELETE no action ON UPDATE no action;--> statement-breakpoint
+CREATE UNIQUE INDEX "organic_one_farm_per_cert" ON "fdm"."organic_certifications_holding" USING btree ("b_id_organic");--> statement-breakpoint
+CREATE UNIQUE INDEX "derogation_one_per_farm_per" ON "fdm"."derogation_applying" USING btree ("b_id_derogation");
\ No newline at end of file
diff --git a/fdm-core/src/db/migrations/0017_v0-26-0-4.sql b/fdm-core/src/db/migrations/0017_v0-26-0-4.sql
new file mode 100644
index 000000000..9387089f5
--- /dev/null
+++ b/fdm-core/src/db/migrations/0017_v0-26-0-4.sql
@@ -0,0 +1,20 @@
+CREATE SCHEMA "fdm-calculator";
+--> statement-breakpoint
+CREATE TABLE "fdm-calculator"."calculation_cache" (
+ "calculation_hash" text PRIMARY KEY NOT NULL,
+ "calculation_function" text NOT NULL,
+ "calculator_version" text,
+ "input" jsonb NOT NULL,
+ "result" jsonb NOT NULL,
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
+);
+--> statement-breakpoint
+CREATE TABLE "fdm-calculator"."calculation_errors" (
+ "calculation_error_id" text PRIMARY KEY NOT NULL,
+ "calculation_function" text,
+ "calculator_version" text,
+ "input" jsonb,
+ "error_message" text,
+ "stack_trace" text,
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL
+);
diff --git a/fdm-core/src/db/migrations/meta/0014_snapshot.json b/fdm-core/src/db/migrations/meta/0014_snapshot.json
new file mode 100644
index 000000000..63fb5d80e
--- /dev/null
+++ b/fdm-core/src/db/migrations/meta/0014_snapshot.json
@@ -0,0 +1,2987 @@
+{
+ "id": "45dcb87d-89c8-4cf7-a504-0db74ba68640",
+ "prevId": "c953a71f-8431-4aea-94b9-e49a5a96cf0c",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "fdm.cultivation_catalogue_selecting": {
+ "name": "cultivation_catalogue_selecting",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_source": {
+ "name": "b_lu_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_catalogue_selecting_b_id_farm_farms_b_id_farm_fk": {
+ "name": "cultivation_catalogue_selecting_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "cultivation_catalogue_selecting",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_ending": {
+ "name": "cultivation_ending",
+ "schema": "fdm",
+ "columns": {
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_end": {
+ "name": "b_lu_end",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "m_cropresidue": {
+ "name": "m_cropresidue",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_ending_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_ending_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_ending",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_harvesting": {
+ "name": "cultivation_harvesting",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvesting": {
+ "name": "b_id_harvesting",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_harvest_date": {
+ "name": "b_lu_harvest_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_harvesting_b_id_harvestable_harvestables_b_id_harvestable_fk": {
+ "name": "cultivation_harvesting_b_id_harvestable_harvestables_b_id_harvestable_fk",
+ "tableFrom": "cultivation_harvesting",
+ "tableTo": "harvestables",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable"],
+ "columnsTo": ["b_id_harvestable"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cultivation_harvesting_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_harvesting_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_harvesting",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_starting": {
+ "name": "cultivation_starting",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_start": {
+ "name": "b_lu_start",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sowing_amount": {
+ "name": "b_sowing_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sowing_method": {
+ "name": "b_sowing_method",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_starting_b_id_fields_b_id_fk": {
+ "name": "cultivation_starting_b_id_fields_b_id_fk",
+ "tableFrom": "cultivation_starting",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cultivation_starting_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_starting_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_starting",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivations": {
+ "name": "cultivations",
+ "schema": "fdm",
+ "columns": {
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_catalogue": {
+ "name": "b_lu_catalogue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_variety": {
+ "name": "b_lu_variety",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_lu_idx": {
+ "name": "b_lu_idx",
+ "columns": [
+ {
+ "expression": "b_lu",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "cultivations_b_lu_catalogue_cultivations_catalogue_b_lu_catalogue_fk": {
+ "name": "cultivations_b_lu_catalogue_cultivations_catalogue_b_lu_catalogue_fk",
+ "tableFrom": "cultivations",
+ "tableTo": "cultivations_catalogue",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu_catalogue"],
+ "columnsTo": ["b_lu_catalogue"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivations_catalogue": {
+ "name": "cultivations_catalogue",
+ "schema": "fdm",
+ "columns": {
+ "b_lu_catalogue": {
+ "name": "b_lu_catalogue",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_source": {
+ "name": "b_lu_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_name": {
+ "name": "b_lu_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_name_en": {
+ "name": "b_lu_name_en",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_harvestable": {
+ "name": "b_lu_harvestable",
+ "type": "b_lu_harvestable",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_hcat3": {
+ "name": "b_lu_hcat3",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_hcat3_name": {
+ "name": "b_lu_hcat3_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_croprotation": {
+ "name": "b_lu_croprotation",
+ "type": "b_lu_croprotation",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_yield": {
+ "name": "b_lu_yield",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_hi": {
+ "name": "b_lu_hi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_harvestable": {
+ "name": "b_lu_n_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_residue": {
+ "name": "b_lu_n_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_n_fixation": {
+ "name": "b_n_fixation",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_rest_oravib": {
+ "name": "b_lu_rest_oravib",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_variety_options": {
+ "name": "b_lu_variety_options",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hash": {
+ "name": "hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_lu_catalogue_idx": {
+ "name": "b_lu_catalogue_idx",
+ "columns": [
+ {
+ "expression": "b_lu_catalogue",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.derogation_applying": {
+ "name": "derogation_applying",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_derogation": {
+ "name": "b_id_derogation",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "derogation_applying_b_id_farm_farms_b_id_farm_fk": {
+ "name": "derogation_applying_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "derogation_applying",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "derogation_applying_b_id_derogation_derogations_b_id_derogation_fk": {
+ "name": "derogation_applying_b_id_derogation_derogations_b_id_derogation_fk",
+ "tableFrom": "derogation_applying",
+ "tableTo": "derogations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_derogation"],
+ "columnsTo": ["b_id_derogation"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.derogations": {
+ "name": "derogations",
+ "schema": "fdm",
+ "columns": {
+ "b_id_derogation": {
+ "name": "b_id_derogation",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_derogation_year": {
+ "name": "b_derogation_year",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.farms": {
+ "name": "farms",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_name_farm": {
+ "name": "b_name_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_businessid_farm": {
+ "name": "b_businessid_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_address_farm": {
+ "name": "b_address_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_postalcode_farm": {
+ "name": "b_postalcode_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_farm_idx": {
+ "name": "b_id_farm_idx",
+ "columns": [
+ {
+ "expression": "b_id_farm",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_acquiring": {
+ "name": "fertilizer_acquiring",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_acquiring_amount": {
+ "name": "p_acquiring_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_acquiring_date": {
+ "name": "p_acquiring_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_acquiring_b_id_farm_farms_b_id_farm_fk": {
+ "name": "fertilizer_acquiring_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "fertilizer_acquiring",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_acquiring_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_acquiring_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_acquiring",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_applying": {
+ "name": "fertilizer_applying",
+ "schema": "fdm",
+ "columns": {
+ "p_app_id": {
+ "name": "p_app_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_app_amount": {
+ "name": "p_app_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_method": {
+ "name": "p_app_method",
+ "type": "p_app_method",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_date": {
+ "name": "p_app_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_app_idx": {
+ "name": "p_app_idx",
+ "columns": [
+ {
+ "expression": "p_app_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "fertilizer_applying_b_id_fields_b_id_fk": {
+ "name": "fertilizer_applying_b_id_fields_b_id_fk",
+ "tableFrom": "fertilizer_applying",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_applying_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_applying_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_applying",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_catalogue_enabling": {
+ "name": "fertilizer_catalogue_enabling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_source": {
+ "name": "p_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_catalogue_enabling_b_id_farm_farms_b_id_farm_fk": {
+ "name": "fertilizer_catalogue_enabling_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "fertilizer_catalogue_enabling",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_picking": {
+ "name": "fertilizer_picking",
+ "schema": "fdm",
+ "columns": {
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id_catalogue": {
+ "name": "p_id_catalogue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_picking_date": {
+ "name": "p_picking_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_picking_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_picking_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_picking",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_picking_p_id_catalogue_fertilizers_catalogue_p_id_catalogue_fk": {
+ "name": "fertilizer_picking_p_id_catalogue_fertilizers_catalogue_p_id_catalogue_fk",
+ "tableFrom": "fertilizer_picking",
+ "tableTo": "fertilizers_catalogue",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id_catalogue"],
+ "columnsTo": ["p_id_catalogue"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizers": {
+ "name": "fertilizers",
+ "schema": "fdm",
+ "columns": {
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_id_idx": {
+ "name": "p_id_idx",
+ "columns": [
+ {
+ "expression": "p_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizers_catalogue": {
+ "name": "fertilizers_catalogue",
+ "schema": "fdm",
+ "columns": {
+ "p_id_catalogue": {
+ "name": "p_id_catalogue",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "p_source": {
+ "name": "p_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_name_nl": {
+ "name": "p_name_nl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_name_en": {
+ "name": "p_name_en",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_description": {
+ "name": "p_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_method_options": {
+ "name": "p_app_method_options",
+ "type": "p_app_method[]",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_dm": {
+ "name": "p_dm",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_density": {
+ "name": "p_density",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_om": {
+ "name": "p_om",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_a": {
+ "name": "p_a",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_hc": {
+ "name": "p_hc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_eom": {
+ "name": "p_eom",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_eoc": {
+ "name": "p_eoc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_rt": {
+ "name": "p_c_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_of": {
+ "name": "p_c_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_if": {
+ "name": "p_c_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_fr": {
+ "name": "p_c_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cn_of": {
+ "name": "p_cn_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_rt": {
+ "name": "p_n_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_if": {
+ "name": "p_n_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_of": {
+ "name": "p_n_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_wc": {
+ "name": "p_n_wc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_no3_rt": {
+ "name": "p_no3_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_nh4_rt": {
+ "name": "p_nh4_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_p_rt": {
+ "name": "p_p_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_k_rt": {
+ "name": "p_k_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mg_rt": {
+ "name": "p_mg_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ca_rt": {
+ "name": "p_ca_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ne": {
+ "name": "p_ne",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_s_rt": {
+ "name": "p_s_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_s_wc": {
+ "name": "p_s_wc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cu_rt": {
+ "name": "p_cu_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_zn_rt": {
+ "name": "p_zn_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_na_rt": {
+ "name": "p_na_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_si_rt": {
+ "name": "p_si_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_b_rt": {
+ "name": "p_b_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mn_rt": {
+ "name": "p_mn_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ni_rt": {
+ "name": "p_ni_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_fe_rt": {
+ "name": "p_fe_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mo_rt": {
+ "name": "p_mo_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_co_rt": {
+ "name": "p_co_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_as_rt": {
+ "name": "p_as_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cd_rt": {
+ "name": "p_cd_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cr_rt": {
+ "name": "p_cr_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cr_vi": {
+ "name": "p_cr_vi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_pb_rt": {
+ "name": "p_pb_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_hg_rt": {
+ "name": "p_hg_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cl_rt": {
+ "name": "p_cl_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ef_nh3": {
+ "name": "p_ef_nh3",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_manure": {
+ "name": "p_type_manure",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_mineral": {
+ "name": "p_type_mineral",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_compost": {
+ "name": "p_type_compost",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hash": {
+ "name": "hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_id_catalogue_idx": {
+ "name": "p_id_catalogue_idx",
+ "columns": [
+ {
+ "expression": "p_id_catalogue",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.field_acquiring": {
+ "name": "field_acquiring",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_start": {
+ "name": "b_start",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_acquiring_method": {
+ "name": "b_acquiring_method",
+ "type": "b_acquiring_method",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'unknown'"
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "field_acquiring_b_id_fields_b_id_fk": {
+ "name": "field_acquiring_b_id_fields_b_id_fk",
+ "tableFrom": "field_acquiring",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "field_acquiring_b_id_farm_farms_b_id_farm_fk": {
+ "name": "field_acquiring_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "field_acquiring",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.field_discarding": {
+ "name": "field_discarding",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_end": {
+ "name": "b_end",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "field_discarding_b_id_fields_b_id_fk": {
+ "name": "field_discarding_b_id_fields_b_id_fk",
+ "tableFrom": "field_discarding",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fields": {
+ "name": "fields",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_name": {
+ "name": "b_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_geometry": {
+ "name": "b_geometry",
+ "type": "geometry(Polygon,4326)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_id_source": {
+ "name": "b_id_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_idx": {
+ "name": "b_id_idx",
+ "columns": [
+ {
+ "expression": "b_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "b_geom_idx": {
+ "name": "b_geom_idx",
+ "columns": [
+ {
+ "expression": "b_geometry",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "gist",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestable_analyses": {
+ "name": "harvestable_analyses",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable_analysis": {
+ "name": "b_id_harvestable_analysis",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_yield": {
+ "name": "b_lu_yield",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_harvestable": {
+ "name": "b_lu_n_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_residue": {
+ "name": "b_lu_n_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_p_harvestable": {
+ "name": "b_lu_p_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_p_residue": {
+ "name": "b_lu_p_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_k_harvestable": {
+ "name": "b_lu_k_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_k_residue": {
+ "name": "b_lu_k_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_harvestable_analyses_idx": {
+ "name": "b_id_harvestable_analyses_idx",
+ "columns": [
+ {
+ "expression": "b_id_harvestable_analysis",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestable_sampling": {
+ "name": "harvestable_sampling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_harvestable_analysis": {
+ "name": "b_id_harvestable_analysis",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_sampling_date": {
+ "name": "b_sampling_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "harvestable_sampling_b_id_harvestable_harvestables_b_id_harvestable_fk": {
+ "name": "harvestable_sampling_b_id_harvestable_harvestables_b_id_harvestable_fk",
+ "tableFrom": "harvestable_sampling",
+ "tableTo": "harvestables",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable"],
+ "columnsTo": ["b_id_harvestable"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "harvestable_sampling_b_id_harvestable_analysis_harvestable_analyses_b_id_harvestable_analysis_fk": {
+ "name": "harvestable_sampling_b_id_harvestable_analysis_harvestable_analyses_b_id_harvestable_analysis_fk",
+ "tableFrom": "harvestable_sampling",
+ "tableTo": "harvestable_analyses",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable_analysis"],
+ "columnsTo": ["b_id_harvestable_analysis"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestables": {
+ "name": "harvestables",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_harvestable_idx": {
+ "name": "b_id_harvestable_idx",
+ "columns": [
+ {
+ "expression": "b_id_harvestable",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.soil_analysis": {
+ "name": "soil_analysis",
+ "schema": "fdm",
+ "columns": {
+ "a_id": {
+ "name": "a_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "a_date": {
+ "name": "a_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_source": {
+ "name": "a_source",
+ "type": "a_source",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'other'"
+ },
+ "a_al_ox": {
+ "name": "a_al_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_c_of": {
+ "name": "a_c_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ca_co": {
+ "name": "a_ca_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ca_co_po": {
+ "name": "a_ca_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_caco3_if": {
+ "name": "a_caco3_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cec_co": {
+ "name": "a_cec_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_clay_mi": {
+ "name": "a_clay_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cn_fr": {
+ "name": "a_cn_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_com_fr": {
+ "name": "a_com_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cu_cc": {
+ "name": "a_cu_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_density_sa": {
+ "name": "a_density_sa",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_fe_ox": {
+ "name": "a_fe_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_cc": {
+ "name": "a_k_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_co": {
+ "name": "a_k_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_co_po": {
+ "name": "a_k_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_cc": {
+ "name": "a_mg_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_co": {
+ "name": "a_mg_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_co_po": {
+ "name": "a_mg_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_n_pmn": {
+ "name": "a_n_pmn",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_n_rt": {
+ "name": "a_n_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_nh4_cc": {
+ "name": "a_nh4_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_nmin_cc": {
+ "name": "a_nmin_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_no3_cc": {
+ "name": "a_no3_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_al": {
+ "name": "a_p_al",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_cc": {
+ "name": "a_p_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_ox": {
+ "name": "a_p_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_rt": {
+ "name": "a_p_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_sg": {
+ "name": "a_p_sg",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_wa": {
+ "name": "a_p_wa",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ph_cc": {
+ "name": "a_ph_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_s_rt": {
+ "name": "a_s_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_sand_mi": {
+ "name": "a_sand_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_silt_mi": {
+ "name": "a_silt_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_som_loi": {
+ "name": "a_som_loi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_zn_cc": {
+ "name": "a_zn_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_gwl_class": {
+ "name": "b_gwl_class",
+ "type": "b_gwl_class",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_soiltype_agr": {
+ "name": "b_soiltype_agr",
+ "type": "b_soiltype_agr",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.soil_sampling": {
+ "name": "soil_sampling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_sampling": {
+ "name": "b_id_sampling",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "a_id": {
+ "name": "a_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "a_depth_upper": {
+ "name": "a_depth_upper",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "a_depth_lower": {
+ "name": "a_depth_lower",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sampling_date": {
+ "name": "b_sampling_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sampling_geometry": {
+ "name": "b_sampling_geometry",
+ "type": "geometry(MultiPoint,4326)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "soil_sampling_b_id_fields_b_id_fk": {
+ "name": "soil_sampling_b_id_fields_b_id_fk",
+ "tableFrom": "soil_sampling",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "soil_sampling_a_id_soil_analysis_a_id_fk": {
+ "name": "soil_sampling_a_id_soil_analysis_a_id_fk",
+ "tableFrom": "soil_sampling",
+ "tableTo": "soil_analysis",
+ "schemaTo": "fdm",
+ "columnsFrom": ["a_id"],
+ "columnsTo": ["a_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.account": {
+ "name": "account",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "account_id": {
+ "name": "account_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "access_token_expires_at": {
+ "name": "access_token_expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token_expires_at": {
+ "name": "refresh_token_expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "account_user_id_user_id_fk": {
+ "name": "account_user_id_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.invitation": {
+ "name": "invitation",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "organization_id": {
+ "name": "organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "inviter_id": {
+ "name": "inviter_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "invitation_organization_id_organization_id_fk": {
+ "name": "invitation_organization_id_organization_id_fk",
+ "tableFrom": "invitation",
+ "tableTo": "organization",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["organization_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "invitation_inviter_id_user_id_fk": {
+ "name": "invitation_inviter_id_user_id_fk",
+ "tableFrom": "invitation",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["inviter_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.member": {
+ "name": "member",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "organization_id": {
+ "name": "organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "member_organization_id_organization_id_fk": {
+ "name": "member_organization_id_organization_id_fk",
+ "tableFrom": "member",
+ "tableTo": "organization",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["organization_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "member_user_id_user_id_fk": {
+ "name": "member_user_id_user_id_fk",
+ "tableFrom": "member",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.organization": {
+ "name": "organization",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "slug": {
+ "name": "slug",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "logo": {
+ "name": "logo",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "organization_slug_unique": {
+ "name": "organization_slug_unique",
+ "nullsNotDistinct": false,
+ "columns": ["slug"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.rate_limit": {
+ "name": "rate_limit",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "count": {
+ "name": "count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_request": {
+ "name": "last_request",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.session": {
+ "name": "session",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "ip_address": {
+ "name": "ip_address",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_agent": {
+ "name": "user_agent",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "active_organization_id": {
+ "name": "active_organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "session_user_id_user_id_fk": {
+ "name": "session_user_id_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "session_token_unique": {
+ "name": "session_token_unique",
+ "nullsNotDistinct": false,
+ "columns": ["token"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.user": {
+ "name": "user",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email_verified": {
+ "name": "email_verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "display_username": {
+ "name": "display_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "firstname": {
+ "name": "firstname",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "surname": {
+ "name": "surname",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "lang": {
+ "name": "lang",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "farm_active": {
+ "name": "farm_active",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "user_email_unique": {
+ "name": "user_email_unique",
+ "nullsNotDistinct": false,
+ "columns": ["email"]
+ },
+ "user_username_unique": {
+ "name": "user_username_unique",
+ "nullsNotDistinct": false,
+ "columns": ["username"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.verification": {
+ "name": "verification",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authz.audit": {
+ "name": "audit",
+ "schema": "fdm-authz",
+ "columns": {
+ "audit_id": {
+ "name": "audit_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "audit_timestamp": {
+ "name": "audit_timestamp",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "audit_origin": {
+ "name": "audit_origin",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "principal_id": {
+ "name": "principal_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_resource": {
+ "name": "target_resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_resource_id": {
+ "name": "target_resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "granting_resource": {
+ "name": "granting_resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "granting_resource_id": {
+ "name": "granting_resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "action": {
+ "name": "action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allowed": {
+ "name": "allowed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "duration": {
+ "name": "duration",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authz.role": {
+ "name": "role",
+ "schema": "fdm-authz",
+ "columns": {
+ "role_id": {
+ "name": "role_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "resource": {
+ "name": "resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "principal_id": {
+ "name": "principal_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted": {
+ "name": "deleted",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "role_idx": {
+ "name": "role_idx",
+ "columns": [
+ {
+ "expression": "resource",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "principal_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "role",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deleted",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "fdm.b_acquiring_method": {
+ "name": "b_acquiring_method",
+ "schema": "fdm",
+ "values": [
+ "nl_01",
+ "nl_02",
+ "nl_03",
+ "nl_04",
+ "nl_07",
+ "nl_09",
+ "nl_10",
+ "nl_11",
+ "nl_12",
+ "nl_13",
+ "nl_61",
+ "nl_63",
+ "unknown"
+ ]
+ },
+ "fdm.p_app_method": {
+ "name": "p_app_method",
+ "schema": "fdm",
+ "values": [
+ "slotted coulter",
+ "incorporation",
+ "incorporation 2 tracks",
+ "injection",
+ "shallow injection",
+ "spraying",
+ "broadcasting",
+ "spoke wheel",
+ "pocket placement",
+ "narrowband"
+ ]
+ },
+ "fdm.b_gwl_class": {
+ "name": "b_gwl_class",
+ "schema": "fdm",
+ "values": [
+ "I",
+ "Ia",
+ "Ic",
+ "II",
+ "IIa",
+ "IIb",
+ "IIc",
+ "III",
+ "IIIa",
+ "IIIb",
+ "IV",
+ "IVu",
+ "IVc",
+ "V",
+ "Va",
+ "Vao",
+ "Vad",
+ "Vb",
+ "Vbo",
+ "Vbd",
+ "sV",
+ "sVb",
+ "VI",
+ "VIo",
+ "VId",
+ "VII",
+ "VIIo",
+ "VIId",
+ "VIII",
+ "VIIIo",
+ "VIIId"
+ ]
+ },
+ "fdm.b_lu_harvestable": {
+ "name": "b_lu_harvestable",
+ "schema": "fdm",
+ "values": ["none", "once", "multiple"]
+ },
+ "fdm.b_lu_croprotation": {
+ "name": "b_lu_croprotation",
+ "schema": "fdm",
+ "values": [
+ "other",
+ "clover",
+ "nature",
+ "potato",
+ "grass",
+ "rapeseed",
+ "starch",
+ "maize",
+ "cereal",
+ "sugarbeet",
+ "alfalfa",
+ "catchcrop"
+ ]
+ },
+ "fdm.a_source": {
+ "name": "a_source",
+ "schema": "fdm",
+ "values": [
+ "nl-rva-l122",
+ "nl-rva-l136",
+ "nl-rva-l264",
+ "nl-rva-l320",
+ "nl-rva-l335",
+ "nl-rva-l610",
+ "nl-rva-l648",
+ "nl-rva-l697",
+ "nl-other-nmi",
+ "other"
+ ]
+ },
+ "fdm.b_soiltype_agr": {
+ "name": "b_soiltype_agr",
+ "schema": "fdm",
+ "values": [
+ "moerige_klei",
+ "rivierklei",
+ "dekzand",
+ "zeeklei",
+ "dalgrond",
+ "veen",
+ "loess",
+ "duinzand",
+ "maasklei"
+ ]
+ }
+ },
+ "schemas": {
+ "fdm": "fdm",
+ "fdm-authn": "fdm-authn",
+ "fdm-authz": "fdm-authz"
+ },
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/fdm-core/src/db/migrations/meta/0015_snapshot.json b/fdm-core/src/db/migrations/meta/0015_snapshot.json
new file mode 100644
index 000000000..9034a86ce
--- /dev/null
+++ b/fdm-core/src/db/migrations/meta/0015_snapshot.json
@@ -0,0 +1,3008 @@
+{
+ "id": "60e262a4-309d-4384-ae3d-130a6e208f05",
+ "prevId": "45dcb87d-89c8-4cf7-a504-0db74ba68640",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "fdm.cultivation_catalogue_selecting": {
+ "name": "cultivation_catalogue_selecting",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_source": {
+ "name": "b_lu_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_catalogue_selecting_b_id_farm_farms_b_id_farm_fk": {
+ "name": "cultivation_catalogue_selecting_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "cultivation_catalogue_selecting",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_ending": {
+ "name": "cultivation_ending",
+ "schema": "fdm",
+ "columns": {
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_end": {
+ "name": "b_lu_end",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "m_cropresidue": {
+ "name": "m_cropresidue",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_ending_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_ending_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_ending",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_harvesting": {
+ "name": "cultivation_harvesting",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvesting": {
+ "name": "b_id_harvesting",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_harvest_date": {
+ "name": "b_lu_harvest_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_harvesting_b_id_harvestable_harvestables_b_id_harvestable_fk": {
+ "name": "cultivation_harvesting_b_id_harvestable_harvestables_b_id_harvestable_fk",
+ "tableFrom": "cultivation_harvesting",
+ "tableTo": "harvestables",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable"],
+ "columnsTo": ["b_id_harvestable"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cultivation_harvesting_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_harvesting_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_harvesting",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_starting": {
+ "name": "cultivation_starting",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_start": {
+ "name": "b_lu_start",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sowing_amount": {
+ "name": "b_sowing_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sowing_method": {
+ "name": "b_sowing_method",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_starting_b_id_fields_b_id_fk": {
+ "name": "cultivation_starting_b_id_fields_b_id_fk",
+ "tableFrom": "cultivation_starting",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cultivation_starting_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_starting_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_starting",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivations": {
+ "name": "cultivations",
+ "schema": "fdm",
+ "columns": {
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_catalogue": {
+ "name": "b_lu_catalogue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_variety": {
+ "name": "b_lu_variety",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_lu_idx": {
+ "name": "b_lu_idx",
+ "columns": [
+ {
+ "expression": "b_lu",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "cultivations_b_lu_catalogue_cultivations_catalogue_b_lu_catalogue_fk": {
+ "name": "cultivations_b_lu_catalogue_cultivations_catalogue_b_lu_catalogue_fk",
+ "tableFrom": "cultivations",
+ "tableTo": "cultivations_catalogue",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu_catalogue"],
+ "columnsTo": ["b_lu_catalogue"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivations_catalogue": {
+ "name": "cultivations_catalogue",
+ "schema": "fdm",
+ "columns": {
+ "b_lu_catalogue": {
+ "name": "b_lu_catalogue",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_source": {
+ "name": "b_lu_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_name": {
+ "name": "b_lu_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_name_en": {
+ "name": "b_lu_name_en",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_harvestable": {
+ "name": "b_lu_harvestable",
+ "type": "b_lu_harvestable",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_hcat3": {
+ "name": "b_lu_hcat3",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_hcat3_name": {
+ "name": "b_lu_hcat3_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_croprotation": {
+ "name": "b_lu_croprotation",
+ "type": "b_lu_croprotation",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_yield": {
+ "name": "b_lu_yield",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_hi": {
+ "name": "b_lu_hi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_harvestable": {
+ "name": "b_lu_n_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_residue": {
+ "name": "b_lu_n_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_n_fixation": {
+ "name": "b_n_fixation",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_rest_oravib": {
+ "name": "b_lu_rest_oravib",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_variety_options": {
+ "name": "b_lu_variety_options",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_start_default": {
+ "name": "b_lu_start_default",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_date_harvest_default": {
+ "name": "b_date_harvest_default",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hash": {
+ "name": "hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_lu_catalogue_idx": {
+ "name": "b_lu_catalogue_idx",
+ "columns": [
+ {
+ "expression": "b_lu_catalogue",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {
+ "b_lu_start_default_format": {
+ "name": "b_lu_start_default_format",
+ "value": "b_lu_start_default IS NULL OR b_lu_start_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$'"
+ },
+ "b_date_harvest_default_format": {
+ "name": "b_date_harvest_default_format",
+ "value": "b_date_harvest_default IS NULL OR b_date_harvest_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$'"
+ }
+ },
+ "isRLSEnabled": false
+ },
+ "fdm.derogation_applying": {
+ "name": "derogation_applying",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_derogation": {
+ "name": "b_id_derogation",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "derogation_applying_b_id_farm_farms_b_id_farm_fk": {
+ "name": "derogation_applying_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "derogation_applying",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "derogation_applying_b_id_derogation_derogations_b_id_derogation_fk": {
+ "name": "derogation_applying_b_id_derogation_derogations_b_id_derogation_fk",
+ "tableFrom": "derogation_applying",
+ "tableTo": "derogations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_derogation"],
+ "columnsTo": ["b_id_derogation"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.derogations": {
+ "name": "derogations",
+ "schema": "fdm",
+ "columns": {
+ "b_id_derogation": {
+ "name": "b_id_derogation",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_derogation_year": {
+ "name": "b_derogation_year",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.farms": {
+ "name": "farms",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_name_farm": {
+ "name": "b_name_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_businessid_farm": {
+ "name": "b_businessid_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_address_farm": {
+ "name": "b_address_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_postalcode_farm": {
+ "name": "b_postalcode_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_farm_idx": {
+ "name": "b_id_farm_idx",
+ "columns": [
+ {
+ "expression": "b_id_farm",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_acquiring": {
+ "name": "fertilizer_acquiring",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_acquiring_amount": {
+ "name": "p_acquiring_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_acquiring_date": {
+ "name": "p_acquiring_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_acquiring_b_id_farm_farms_b_id_farm_fk": {
+ "name": "fertilizer_acquiring_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "fertilizer_acquiring",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_acquiring_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_acquiring_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_acquiring",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_applying": {
+ "name": "fertilizer_applying",
+ "schema": "fdm",
+ "columns": {
+ "p_app_id": {
+ "name": "p_app_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_app_amount": {
+ "name": "p_app_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_method": {
+ "name": "p_app_method",
+ "type": "p_app_method",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_date": {
+ "name": "p_app_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_app_idx": {
+ "name": "p_app_idx",
+ "columns": [
+ {
+ "expression": "p_app_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "fertilizer_applying_b_id_fields_b_id_fk": {
+ "name": "fertilizer_applying_b_id_fields_b_id_fk",
+ "tableFrom": "fertilizer_applying",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_applying_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_applying_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_applying",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_catalogue_enabling": {
+ "name": "fertilizer_catalogue_enabling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_source": {
+ "name": "p_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_catalogue_enabling_b_id_farm_farms_b_id_farm_fk": {
+ "name": "fertilizer_catalogue_enabling_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "fertilizer_catalogue_enabling",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_picking": {
+ "name": "fertilizer_picking",
+ "schema": "fdm",
+ "columns": {
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id_catalogue": {
+ "name": "p_id_catalogue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_picking_date": {
+ "name": "p_picking_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_picking_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_picking_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_picking",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_picking_p_id_catalogue_fertilizers_catalogue_p_id_catalogue_fk": {
+ "name": "fertilizer_picking_p_id_catalogue_fertilizers_catalogue_p_id_catalogue_fk",
+ "tableFrom": "fertilizer_picking",
+ "tableTo": "fertilizers_catalogue",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id_catalogue"],
+ "columnsTo": ["p_id_catalogue"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizers": {
+ "name": "fertilizers",
+ "schema": "fdm",
+ "columns": {
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_id_idx": {
+ "name": "p_id_idx",
+ "columns": [
+ {
+ "expression": "p_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizers_catalogue": {
+ "name": "fertilizers_catalogue",
+ "schema": "fdm",
+ "columns": {
+ "p_id_catalogue": {
+ "name": "p_id_catalogue",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "p_source": {
+ "name": "p_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_name_nl": {
+ "name": "p_name_nl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_name_en": {
+ "name": "p_name_en",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_description": {
+ "name": "p_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_method_options": {
+ "name": "p_app_method_options",
+ "type": "p_app_method[]",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_dm": {
+ "name": "p_dm",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_density": {
+ "name": "p_density",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_om": {
+ "name": "p_om",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_a": {
+ "name": "p_a",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_hc": {
+ "name": "p_hc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_eom": {
+ "name": "p_eom",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_eoc": {
+ "name": "p_eoc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_rt": {
+ "name": "p_c_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_of": {
+ "name": "p_c_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_if": {
+ "name": "p_c_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_fr": {
+ "name": "p_c_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cn_of": {
+ "name": "p_cn_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_rt": {
+ "name": "p_n_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_if": {
+ "name": "p_n_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_of": {
+ "name": "p_n_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_wc": {
+ "name": "p_n_wc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_no3_rt": {
+ "name": "p_no3_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_nh4_rt": {
+ "name": "p_nh4_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_p_rt": {
+ "name": "p_p_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_k_rt": {
+ "name": "p_k_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mg_rt": {
+ "name": "p_mg_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ca_rt": {
+ "name": "p_ca_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ne": {
+ "name": "p_ne",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_s_rt": {
+ "name": "p_s_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_s_wc": {
+ "name": "p_s_wc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cu_rt": {
+ "name": "p_cu_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_zn_rt": {
+ "name": "p_zn_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_na_rt": {
+ "name": "p_na_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_si_rt": {
+ "name": "p_si_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_b_rt": {
+ "name": "p_b_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mn_rt": {
+ "name": "p_mn_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ni_rt": {
+ "name": "p_ni_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_fe_rt": {
+ "name": "p_fe_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mo_rt": {
+ "name": "p_mo_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_co_rt": {
+ "name": "p_co_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_as_rt": {
+ "name": "p_as_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cd_rt": {
+ "name": "p_cd_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cr_rt": {
+ "name": "p_cr_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cr_vi": {
+ "name": "p_cr_vi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_pb_rt": {
+ "name": "p_pb_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_hg_rt": {
+ "name": "p_hg_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cl_rt": {
+ "name": "p_cl_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ef_nh3": {
+ "name": "p_ef_nh3",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_manure": {
+ "name": "p_type_manure",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_mineral": {
+ "name": "p_type_mineral",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_compost": {
+ "name": "p_type_compost",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hash": {
+ "name": "hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_id_catalogue_idx": {
+ "name": "p_id_catalogue_idx",
+ "columns": [
+ {
+ "expression": "p_id_catalogue",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.field_acquiring": {
+ "name": "field_acquiring",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_start": {
+ "name": "b_start",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_acquiring_method": {
+ "name": "b_acquiring_method",
+ "type": "b_acquiring_method",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'unknown'"
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "field_acquiring_b_id_fields_b_id_fk": {
+ "name": "field_acquiring_b_id_fields_b_id_fk",
+ "tableFrom": "field_acquiring",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "field_acquiring_b_id_farm_farms_b_id_farm_fk": {
+ "name": "field_acquiring_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "field_acquiring",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.field_discarding": {
+ "name": "field_discarding",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_end": {
+ "name": "b_end",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "field_discarding_b_id_fields_b_id_fk": {
+ "name": "field_discarding_b_id_fields_b_id_fk",
+ "tableFrom": "field_discarding",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fields": {
+ "name": "fields",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_name": {
+ "name": "b_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_geometry": {
+ "name": "b_geometry",
+ "type": "geometry(Polygon,4326)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_id_source": {
+ "name": "b_id_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_idx": {
+ "name": "b_id_idx",
+ "columns": [
+ {
+ "expression": "b_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "b_geom_idx": {
+ "name": "b_geom_idx",
+ "columns": [
+ {
+ "expression": "b_geometry",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "gist",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestable_analyses": {
+ "name": "harvestable_analyses",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable_analysis": {
+ "name": "b_id_harvestable_analysis",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_yield": {
+ "name": "b_lu_yield",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_harvestable": {
+ "name": "b_lu_n_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_residue": {
+ "name": "b_lu_n_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_p_harvestable": {
+ "name": "b_lu_p_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_p_residue": {
+ "name": "b_lu_p_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_k_harvestable": {
+ "name": "b_lu_k_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_k_residue": {
+ "name": "b_lu_k_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_harvestable_analyses_idx": {
+ "name": "b_id_harvestable_analyses_idx",
+ "columns": [
+ {
+ "expression": "b_id_harvestable_analysis",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestable_sampling": {
+ "name": "harvestable_sampling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_harvestable_analysis": {
+ "name": "b_id_harvestable_analysis",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_sampling_date": {
+ "name": "b_sampling_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "harvestable_sampling_b_id_harvestable_harvestables_b_id_harvestable_fk": {
+ "name": "harvestable_sampling_b_id_harvestable_harvestables_b_id_harvestable_fk",
+ "tableFrom": "harvestable_sampling",
+ "tableTo": "harvestables",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable"],
+ "columnsTo": ["b_id_harvestable"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "harvestable_sampling_b_id_harvestable_analysis_harvestable_analyses_b_id_harvestable_analysis_fk": {
+ "name": "harvestable_sampling_b_id_harvestable_analysis_harvestable_analyses_b_id_harvestable_analysis_fk",
+ "tableFrom": "harvestable_sampling",
+ "tableTo": "harvestable_analyses",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable_analysis"],
+ "columnsTo": ["b_id_harvestable_analysis"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestables": {
+ "name": "harvestables",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_harvestable_idx": {
+ "name": "b_id_harvestable_idx",
+ "columns": [
+ {
+ "expression": "b_id_harvestable",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.soil_analysis": {
+ "name": "soil_analysis",
+ "schema": "fdm",
+ "columns": {
+ "a_id": {
+ "name": "a_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "a_date": {
+ "name": "a_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_source": {
+ "name": "a_source",
+ "type": "a_source",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'other'"
+ },
+ "a_al_ox": {
+ "name": "a_al_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_c_of": {
+ "name": "a_c_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ca_co": {
+ "name": "a_ca_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ca_co_po": {
+ "name": "a_ca_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_caco3_if": {
+ "name": "a_caco3_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cec_co": {
+ "name": "a_cec_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_clay_mi": {
+ "name": "a_clay_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cn_fr": {
+ "name": "a_cn_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_com_fr": {
+ "name": "a_com_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cu_cc": {
+ "name": "a_cu_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_density_sa": {
+ "name": "a_density_sa",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_fe_ox": {
+ "name": "a_fe_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_cc": {
+ "name": "a_k_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_co": {
+ "name": "a_k_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_co_po": {
+ "name": "a_k_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_cc": {
+ "name": "a_mg_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_co": {
+ "name": "a_mg_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_co_po": {
+ "name": "a_mg_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_n_pmn": {
+ "name": "a_n_pmn",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_n_rt": {
+ "name": "a_n_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_nh4_cc": {
+ "name": "a_nh4_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_nmin_cc": {
+ "name": "a_nmin_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_no3_cc": {
+ "name": "a_no3_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_al": {
+ "name": "a_p_al",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_cc": {
+ "name": "a_p_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_ox": {
+ "name": "a_p_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_rt": {
+ "name": "a_p_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_sg": {
+ "name": "a_p_sg",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_wa": {
+ "name": "a_p_wa",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ph_cc": {
+ "name": "a_ph_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_s_rt": {
+ "name": "a_s_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_sand_mi": {
+ "name": "a_sand_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_silt_mi": {
+ "name": "a_silt_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_som_loi": {
+ "name": "a_som_loi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_zn_cc": {
+ "name": "a_zn_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_gwl_class": {
+ "name": "b_gwl_class",
+ "type": "b_gwl_class",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_soiltype_agr": {
+ "name": "b_soiltype_agr",
+ "type": "b_soiltype_agr",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.soil_sampling": {
+ "name": "soil_sampling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_sampling": {
+ "name": "b_id_sampling",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "a_id": {
+ "name": "a_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "a_depth_upper": {
+ "name": "a_depth_upper",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "a_depth_lower": {
+ "name": "a_depth_lower",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sampling_date": {
+ "name": "b_sampling_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sampling_geometry": {
+ "name": "b_sampling_geometry",
+ "type": "geometry(MultiPoint,4326)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "soil_sampling_b_id_fields_b_id_fk": {
+ "name": "soil_sampling_b_id_fields_b_id_fk",
+ "tableFrom": "soil_sampling",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "soil_sampling_a_id_soil_analysis_a_id_fk": {
+ "name": "soil_sampling_a_id_soil_analysis_a_id_fk",
+ "tableFrom": "soil_sampling",
+ "tableTo": "soil_analysis",
+ "schemaTo": "fdm",
+ "columnsFrom": ["a_id"],
+ "columnsTo": ["a_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.account": {
+ "name": "account",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "account_id": {
+ "name": "account_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "access_token_expires_at": {
+ "name": "access_token_expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token_expires_at": {
+ "name": "refresh_token_expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "account_user_id_user_id_fk": {
+ "name": "account_user_id_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.invitation": {
+ "name": "invitation",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "organization_id": {
+ "name": "organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "inviter_id": {
+ "name": "inviter_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "invitation_organization_id_organization_id_fk": {
+ "name": "invitation_organization_id_organization_id_fk",
+ "tableFrom": "invitation",
+ "tableTo": "organization",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["organization_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "invitation_inviter_id_user_id_fk": {
+ "name": "invitation_inviter_id_user_id_fk",
+ "tableFrom": "invitation",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["inviter_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.member": {
+ "name": "member",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "organization_id": {
+ "name": "organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "member_organization_id_organization_id_fk": {
+ "name": "member_organization_id_organization_id_fk",
+ "tableFrom": "member",
+ "tableTo": "organization",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["organization_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "member_user_id_user_id_fk": {
+ "name": "member_user_id_user_id_fk",
+ "tableFrom": "member",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.organization": {
+ "name": "organization",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "slug": {
+ "name": "slug",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "logo": {
+ "name": "logo",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "organization_slug_unique": {
+ "name": "organization_slug_unique",
+ "nullsNotDistinct": false,
+ "columns": ["slug"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.rate_limit": {
+ "name": "rate_limit",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "count": {
+ "name": "count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_request": {
+ "name": "last_request",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.session": {
+ "name": "session",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "ip_address": {
+ "name": "ip_address",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_agent": {
+ "name": "user_agent",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "active_organization_id": {
+ "name": "active_organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "session_user_id_user_id_fk": {
+ "name": "session_user_id_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "session_token_unique": {
+ "name": "session_token_unique",
+ "nullsNotDistinct": false,
+ "columns": ["token"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.user": {
+ "name": "user",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email_verified": {
+ "name": "email_verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "display_username": {
+ "name": "display_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "firstname": {
+ "name": "firstname",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "surname": {
+ "name": "surname",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "lang": {
+ "name": "lang",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "farm_active": {
+ "name": "farm_active",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "user_email_unique": {
+ "name": "user_email_unique",
+ "nullsNotDistinct": false,
+ "columns": ["email"]
+ },
+ "user_username_unique": {
+ "name": "user_username_unique",
+ "nullsNotDistinct": false,
+ "columns": ["username"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.verification": {
+ "name": "verification",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authz.audit": {
+ "name": "audit",
+ "schema": "fdm-authz",
+ "columns": {
+ "audit_id": {
+ "name": "audit_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "audit_timestamp": {
+ "name": "audit_timestamp",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "audit_origin": {
+ "name": "audit_origin",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "principal_id": {
+ "name": "principal_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_resource": {
+ "name": "target_resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_resource_id": {
+ "name": "target_resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "granting_resource": {
+ "name": "granting_resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "granting_resource_id": {
+ "name": "granting_resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "action": {
+ "name": "action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allowed": {
+ "name": "allowed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "duration": {
+ "name": "duration",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authz.role": {
+ "name": "role",
+ "schema": "fdm-authz",
+ "columns": {
+ "role_id": {
+ "name": "role_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "resource": {
+ "name": "resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "principal_id": {
+ "name": "principal_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted": {
+ "name": "deleted",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "role_idx": {
+ "name": "role_idx",
+ "columns": [
+ {
+ "expression": "resource",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "principal_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "role",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deleted",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "fdm.b_acquiring_method": {
+ "name": "b_acquiring_method",
+ "schema": "fdm",
+ "values": [
+ "nl_01",
+ "nl_02",
+ "nl_03",
+ "nl_04",
+ "nl_07",
+ "nl_09",
+ "nl_10",
+ "nl_11",
+ "nl_12",
+ "nl_13",
+ "nl_61",
+ "nl_63",
+ "unknown"
+ ]
+ },
+ "fdm.p_app_method": {
+ "name": "p_app_method",
+ "schema": "fdm",
+ "values": [
+ "slotted coulter",
+ "incorporation",
+ "incorporation 2 tracks",
+ "injection",
+ "shallow injection",
+ "spraying",
+ "broadcasting",
+ "spoke wheel",
+ "pocket placement",
+ "narrowband"
+ ]
+ },
+ "fdm.b_gwl_class": {
+ "name": "b_gwl_class",
+ "schema": "fdm",
+ "values": [
+ "I",
+ "Ia",
+ "Ic",
+ "II",
+ "IIa",
+ "IIb",
+ "IIc",
+ "III",
+ "IIIa",
+ "IIIb",
+ "IV",
+ "IVu",
+ "IVc",
+ "V",
+ "Va",
+ "Vao",
+ "Vad",
+ "Vb",
+ "Vbo",
+ "Vbd",
+ "sV",
+ "sVb",
+ "VI",
+ "VIo",
+ "VId",
+ "VII",
+ "VIIo",
+ "VIId",
+ "VIII",
+ "VIIIo",
+ "VIIId"
+ ]
+ },
+ "fdm.b_lu_harvestable": {
+ "name": "b_lu_harvestable",
+ "schema": "fdm",
+ "values": ["none", "once", "multiple"]
+ },
+ "fdm.b_lu_croprotation": {
+ "name": "b_lu_croprotation",
+ "schema": "fdm",
+ "values": [
+ "other",
+ "clover",
+ "nature",
+ "potato",
+ "grass",
+ "rapeseed",
+ "starch",
+ "maize",
+ "cereal",
+ "sugarbeet",
+ "alfalfa",
+ "catchcrop"
+ ]
+ },
+ "fdm.a_source": {
+ "name": "a_source",
+ "schema": "fdm",
+ "values": [
+ "nl-rva-l122",
+ "nl-rva-l136",
+ "nl-rva-l264",
+ "nl-rva-l320",
+ "nl-rva-l335",
+ "nl-rva-l610",
+ "nl-rva-l648",
+ "nl-rva-l697",
+ "nl-other-nmi",
+ "other"
+ ]
+ },
+ "fdm.b_soiltype_agr": {
+ "name": "b_soiltype_agr",
+ "schema": "fdm",
+ "values": [
+ "moerige_klei",
+ "rivierklei",
+ "dekzand",
+ "zeeklei",
+ "dalgrond",
+ "veen",
+ "loess",
+ "duinzand",
+ "maasklei"
+ ]
+ }
+ },
+ "schemas": {
+ "fdm": "fdm",
+ "fdm-authn": "fdm-authn",
+ "fdm-authz": "fdm-authz"
+ },
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/fdm-core/src/db/migrations/meta/0016_snapshot.json b/fdm-core/src/db/migrations/meta/0016_snapshot.json
new file mode 100644
index 000000000..379338718
--- /dev/null
+++ b/fdm-core/src/db/migrations/meta/0016_snapshot.json
@@ -0,0 +1,3286 @@
+{
+ "id": "f52147c0-1fd4-4bde-9190-be18a24ccaf5",
+ "prevId": "60e262a4-309d-4384-ae3d-130a6e208f05",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "fdm.cultivation_catalogue_selecting": {
+ "name": "cultivation_catalogue_selecting",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_source": {
+ "name": "b_lu_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_catalogue_selecting_b_id_farm_farms_b_id_farm_fk": {
+ "name": "cultivation_catalogue_selecting_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "cultivation_catalogue_selecting",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_ending": {
+ "name": "cultivation_ending",
+ "schema": "fdm",
+ "columns": {
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_end": {
+ "name": "b_lu_end",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "m_cropresidue": {
+ "name": "m_cropresidue",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_ending_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_ending_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_ending",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_harvesting": {
+ "name": "cultivation_harvesting",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvesting": {
+ "name": "b_id_harvesting",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_harvest_date": {
+ "name": "b_lu_harvest_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_harvesting_b_id_harvestable_harvestables_b_id_harvestable_fk": {
+ "name": "cultivation_harvesting_b_id_harvestable_harvestables_b_id_harvestable_fk",
+ "tableFrom": "cultivation_harvesting",
+ "tableTo": "harvestables",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable"],
+ "columnsTo": ["b_id_harvestable"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cultivation_harvesting_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_harvesting_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_harvesting",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_starting": {
+ "name": "cultivation_starting",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_start": {
+ "name": "b_lu_start",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sowing_amount": {
+ "name": "b_sowing_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sowing_method": {
+ "name": "b_sowing_method",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_starting_b_id_fields_b_id_fk": {
+ "name": "cultivation_starting_b_id_fields_b_id_fk",
+ "tableFrom": "cultivation_starting",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cultivation_starting_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_starting_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_starting",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivations": {
+ "name": "cultivations",
+ "schema": "fdm",
+ "columns": {
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_catalogue": {
+ "name": "b_lu_catalogue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_variety": {
+ "name": "b_lu_variety",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_lu_idx": {
+ "name": "b_lu_idx",
+ "columns": [
+ {
+ "expression": "b_lu",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "cultivations_b_lu_catalogue_cultivations_catalogue_b_lu_catalogue_fk": {
+ "name": "cultivations_b_lu_catalogue_cultivations_catalogue_b_lu_catalogue_fk",
+ "tableFrom": "cultivations",
+ "tableTo": "cultivations_catalogue",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu_catalogue"],
+ "columnsTo": ["b_lu_catalogue"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivations_catalogue": {
+ "name": "cultivations_catalogue",
+ "schema": "fdm",
+ "columns": {
+ "b_lu_catalogue": {
+ "name": "b_lu_catalogue",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_source": {
+ "name": "b_lu_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_name": {
+ "name": "b_lu_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_name_en": {
+ "name": "b_lu_name_en",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_harvestable": {
+ "name": "b_lu_harvestable",
+ "type": "b_lu_harvestable",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_hcat3": {
+ "name": "b_lu_hcat3",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_hcat3_name": {
+ "name": "b_lu_hcat3_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_croprotation": {
+ "name": "b_lu_croprotation",
+ "type": "b_lu_croprotation",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_yield": {
+ "name": "b_lu_yield",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_hi": {
+ "name": "b_lu_hi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_harvestable": {
+ "name": "b_lu_n_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_residue": {
+ "name": "b_lu_n_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_n_fixation": {
+ "name": "b_n_fixation",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_rest_oravib": {
+ "name": "b_lu_rest_oravib",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_variety_options": {
+ "name": "b_lu_variety_options",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_start_default": {
+ "name": "b_lu_start_default",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_date_harvest_default": {
+ "name": "b_date_harvest_default",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hash": {
+ "name": "hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_lu_catalogue_idx": {
+ "name": "b_lu_catalogue_idx",
+ "columns": [
+ {
+ "expression": "b_lu_catalogue",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {
+ "b_lu_start_default_format": {
+ "name": "b_lu_start_default_format",
+ "value": "b_lu_start_default IS NULL OR b_lu_start_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$'"
+ },
+ "b_date_harvest_default_format": {
+ "name": "b_date_harvest_default_format",
+ "value": "b_date_harvest_default IS NULL OR b_date_harvest_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$'"
+ }
+ },
+ "isRLSEnabled": false
+ },
+ "fdm.derogation_applying": {
+ "name": "derogation_applying",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_derogation": {
+ "name": "b_id_derogation",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "derogation_one_per_farm_per": {
+ "name": "derogation_one_per_farm_per",
+ "columns": [
+ {
+ "expression": "b_id_derogation",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "derogation_applying_b_id_farm_farms_b_id_farm_fk": {
+ "name": "derogation_applying_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "derogation_applying",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "derogation_applying_b_id_derogation_derogations_b_id_derogation_fk": {
+ "name": "derogation_applying_b_id_derogation_derogations_b_id_derogation_fk",
+ "tableFrom": "derogation_applying",
+ "tableTo": "derogations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_derogation"],
+ "columnsTo": ["b_id_derogation"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.derogations": {
+ "name": "derogations",
+ "schema": "fdm",
+ "columns": {
+ "b_id_derogation": {
+ "name": "b_id_derogation",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_derogation_year": {
+ "name": "b_derogation_year",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.farms": {
+ "name": "farms",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_name_farm": {
+ "name": "b_name_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_businessid_farm": {
+ "name": "b_businessid_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_address_farm": {
+ "name": "b_address_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_postalcode_farm": {
+ "name": "b_postalcode_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_farm_idx": {
+ "name": "b_id_farm_idx",
+ "columns": [
+ {
+ "expression": "b_id_farm",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_acquiring": {
+ "name": "fertilizer_acquiring",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_acquiring_amount": {
+ "name": "p_acquiring_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_acquiring_date": {
+ "name": "p_acquiring_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_acquiring_b_id_farm_farms_b_id_farm_fk": {
+ "name": "fertilizer_acquiring_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "fertilizer_acquiring",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_acquiring_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_acquiring_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_acquiring",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_applying": {
+ "name": "fertilizer_applying",
+ "schema": "fdm",
+ "columns": {
+ "p_app_id": {
+ "name": "p_app_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_app_amount": {
+ "name": "p_app_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_method": {
+ "name": "p_app_method",
+ "type": "p_app_method",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_date": {
+ "name": "p_app_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_app_idx": {
+ "name": "p_app_idx",
+ "columns": [
+ {
+ "expression": "p_app_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "fertilizer_applying_b_id_fields_b_id_fk": {
+ "name": "fertilizer_applying_b_id_fields_b_id_fk",
+ "tableFrom": "fertilizer_applying",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_applying_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_applying_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_applying",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_catalogue_enabling": {
+ "name": "fertilizer_catalogue_enabling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_source": {
+ "name": "p_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_catalogue_enabling_b_id_farm_farms_b_id_farm_fk": {
+ "name": "fertilizer_catalogue_enabling_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "fertilizer_catalogue_enabling",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_picking": {
+ "name": "fertilizer_picking",
+ "schema": "fdm",
+ "columns": {
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id_catalogue": {
+ "name": "p_id_catalogue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_picking_date": {
+ "name": "p_picking_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_picking_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_picking_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_picking",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_picking_p_id_catalogue_fertilizers_catalogue_p_id_catalogue_fk": {
+ "name": "fertilizer_picking_p_id_catalogue_fertilizers_catalogue_p_id_catalogue_fk",
+ "tableFrom": "fertilizer_picking",
+ "tableTo": "fertilizers_catalogue",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id_catalogue"],
+ "columnsTo": ["p_id_catalogue"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizers": {
+ "name": "fertilizers",
+ "schema": "fdm",
+ "columns": {
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_id_idx": {
+ "name": "p_id_idx",
+ "columns": [
+ {
+ "expression": "p_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizers_catalogue": {
+ "name": "fertilizers_catalogue",
+ "schema": "fdm",
+ "columns": {
+ "p_id_catalogue": {
+ "name": "p_id_catalogue",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "p_source": {
+ "name": "p_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_name_nl": {
+ "name": "p_name_nl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_name_en": {
+ "name": "p_name_en",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_description": {
+ "name": "p_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_method_options": {
+ "name": "p_app_method_options",
+ "type": "p_app_method[]",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_dm": {
+ "name": "p_dm",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_density": {
+ "name": "p_density",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_om": {
+ "name": "p_om",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_a": {
+ "name": "p_a",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_hc": {
+ "name": "p_hc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_eom": {
+ "name": "p_eom",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_eoc": {
+ "name": "p_eoc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_rt": {
+ "name": "p_c_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_of": {
+ "name": "p_c_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_if": {
+ "name": "p_c_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_fr": {
+ "name": "p_c_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cn_of": {
+ "name": "p_cn_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_rt": {
+ "name": "p_n_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_if": {
+ "name": "p_n_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_of": {
+ "name": "p_n_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_wc": {
+ "name": "p_n_wc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_no3_rt": {
+ "name": "p_no3_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_nh4_rt": {
+ "name": "p_nh4_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_p_rt": {
+ "name": "p_p_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_k_rt": {
+ "name": "p_k_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mg_rt": {
+ "name": "p_mg_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ca_rt": {
+ "name": "p_ca_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ne": {
+ "name": "p_ne",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_s_rt": {
+ "name": "p_s_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_s_wc": {
+ "name": "p_s_wc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cu_rt": {
+ "name": "p_cu_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_zn_rt": {
+ "name": "p_zn_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_na_rt": {
+ "name": "p_na_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_si_rt": {
+ "name": "p_si_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_b_rt": {
+ "name": "p_b_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mn_rt": {
+ "name": "p_mn_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ni_rt": {
+ "name": "p_ni_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_fe_rt": {
+ "name": "p_fe_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mo_rt": {
+ "name": "p_mo_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_co_rt": {
+ "name": "p_co_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_as_rt": {
+ "name": "p_as_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cd_rt": {
+ "name": "p_cd_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cr_rt": {
+ "name": "p_cr_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cr_vi": {
+ "name": "p_cr_vi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_pb_rt": {
+ "name": "p_pb_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_hg_rt": {
+ "name": "p_hg_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cl_rt": {
+ "name": "p_cl_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ef_nh3": {
+ "name": "p_ef_nh3",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_manure": {
+ "name": "p_type_manure",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_mineral": {
+ "name": "p_type_mineral",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_compost": {
+ "name": "p_type_compost",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_rvo": {
+ "name": "p_type_rvo",
+ "type": "p_type_rvo",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hash": {
+ "name": "hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_id_catalogue_idx": {
+ "name": "p_id_catalogue_idx",
+ "columns": [
+ {
+ "expression": "p_id_catalogue",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.field_acquiring": {
+ "name": "field_acquiring",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_start": {
+ "name": "b_start",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_acquiring_method": {
+ "name": "b_acquiring_method",
+ "type": "b_acquiring_method",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'unknown'"
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "field_acquiring_b_id_fields_b_id_fk": {
+ "name": "field_acquiring_b_id_fields_b_id_fk",
+ "tableFrom": "field_acquiring",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "field_acquiring_b_id_farm_farms_b_id_farm_fk": {
+ "name": "field_acquiring_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "field_acquiring",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.field_discarding": {
+ "name": "field_discarding",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_end": {
+ "name": "b_end",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "field_discarding_b_id_fields_b_id_fk": {
+ "name": "field_discarding_b_id_fields_b_id_fk",
+ "tableFrom": "field_discarding",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fields": {
+ "name": "fields",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_name": {
+ "name": "b_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_geometry": {
+ "name": "b_geometry",
+ "type": "geometry(Polygon,4326)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_id_source": {
+ "name": "b_id_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_idx": {
+ "name": "b_id_idx",
+ "columns": [
+ {
+ "expression": "b_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "b_geom_idx": {
+ "name": "b_geom_idx",
+ "columns": [
+ {
+ "expression": "b_geometry",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "gist",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestable_analyses": {
+ "name": "harvestable_analyses",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable_analysis": {
+ "name": "b_id_harvestable_analysis",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_yield": {
+ "name": "b_lu_yield",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_harvestable": {
+ "name": "b_lu_n_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_residue": {
+ "name": "b_lu_n_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_p_harvestable": {
+ "name": "b_lu_p_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_p_residue": {
+ "name": "b_lu_p_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_k_harvestable": {
+ "name": "b_lu_k_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_k_residue": {
+ "name": "b_lu_k_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_harvestable_analyses_idx": {
+ "name": "b_id_harvestable_analyses_idx",
+ "columns": [
+ {
+ "expression": "b_id_harvestable_analysis",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestable_sampling": {
+ "name": "harvestable_sampling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_harvestable_analysis": {
+ "name": "b_id_harvestable_analysis",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_sampling_date": {
+ "name": "b_sampling_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "harvestable_sampling_b_id_harvestable_harvestables_b_id_harvestable_fk": {
+ "name": "harvestable_sampling_b_id_harvestable_harvestables_b_id_harvestable_fk",
+ "tableFrom": "harvestable_sampling",
+ "tableTo": "harvestables",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable"],
+ "columnsTo": ["b_id_harvestable"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "harvestable_sampling_b_id_harvestable_analysis_harvestable_analyses_b_id_harvestable_analysis_fk": {
+ "name": "harvestable_sampling_b_id_harvestable_analysis_harvestable_analyses_b_id_harvestable_analysis_fk",
+ "tableFrom": "harvestable_sampling",
+ "tableTo": "harvestable_analyses",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable_analysis"],
+ "columnsTo": ["b_id_harvestable_analysis"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestables": {
+ "name": "harvestables",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_harvestable_idx": {
+ "name": "b_id_harvestable_idx",
+ "columns": [
+ {
+ "expression": "b_id_harvestable",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.intending_grazing": {
+ "name": "intending_grazing",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_grazing_intention": {
+ "name": "b_grazing_intention",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_grazing_intention_year": {
+ "name": "b_grazing_intention_year",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "intending_grazing_b_id_farm_farms_b_id_farm_fk": {
+ "name": "intending_grazing_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "intending_grazing",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "intending_grazing_b_id_farm_b_grazing_intention_year_pk": {
+ "name": "intending_grazing_b_id_farm_b_grazing_intention_year_pk",
+ "columns": ["b_id_farm", "b_grazing_intention_year"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.organic_certifications": {
+ "name": "organic_certifications",
+ "schema": "fdm",
+ "columns": {
+ "b_id_organic": {
+ "name": "b_id_organic",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_organic_traces": {
+ "name": "b_organic_traces",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_organic_skal": {
+ "name": "b_organic_skal",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_organic_issued": {
+ "name": "b_organic_issued",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_organic_expires": {
+ "name": "b_organic_expires",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.organic_certifications_holding": {
+ "name": "organic_certifications_holding",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_organic": {
+ "name": "b_id_organic",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "organic_one_farm_per_cert": {
+ "name": "organic_one_farm_per_cert",
+ "columns": [
+ {
+ "expression": "b_id_organic",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "organic_certifications_holding_b_id_farm_farms_b_id_farm_fk": {
+ "name": "organic_certifications_holding_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "organic_certifications_holding",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "organic_certifications_holding_b_id_organic_organic_certifications_b_id_organic_fk": {
+ "name": "organic_certifications_holding_b_id_organic_organic_certifications_b_id_organic_fk",
+ "tableFrom": "organic_certifications_holding",
+ "tableTo": "organic_certifications",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_organic"],
+ "columnsTo": ["b_id_organic"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.soil_analysis": {
+ "name": "soil_analysis",
+ "schema": "fdm",
+ "columns": {
+ "a_id": {
+ "name": "a_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "a_date": {
+ "name": "a_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_source": {
+ "name": "a_source",
+ "type": "a_source",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'other'"
+ },
+ "a_al_ox": {
+ "name": "a_al_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_c_of": {
+ "name": "a_c_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ca_co": {
+ "name": "a_ca_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ca_co_po": {
+ "name": "a_ca_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_caco3_if": {
+ "name": "a_caco3_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cec_co": {
+ "name": "a_cec_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_clay_mi": {
+ "name": "a_clay_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cn_fr": {
+ "name": "a_cn_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_com_fr": {
+ "name": "a_com_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cu_cc": {
+ "name": "a_cu_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_density_sa": {
+ "name": "a_density_sa",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_fe_ox": {
+ "name": "a_fe_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_cc": {
+ "name": "a_k_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_co": {
+ "name": "a_k_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_co_po": {
+ "name": "a_k_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_cc": {
+ "name": "a_mg_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_co": {
+ "name": "a_mg_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_co_po": {
+ "name": "a_mg_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_n_pmn": {
+ "name": "a_n_pmn",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_n_rt": {
+ "name": "a_n_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_nh4_cc": {
+ "name": "a_nh4_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_nmin_cc": {
+ "name": "a_nmin_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_no3_cc": {
+ "name": "a_no3_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_al": {
+ "name": "a_p_al",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_cc": {
+ "name": "a_p_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_ox": {
+ "name": "a_p_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_rt": {
+ "name": "a_p_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_sg": {
+ "name": "a_p_sg",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_wa": {
+ "name": "a_p_wa",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ph_cc": {
+ "name": "a_ph_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_s_rt": {
+ "name": "a_s_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_sand_mi": {
+ "name": "a_sand_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_silt_mi": {
+ "name": "a_silt_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_som_loi": {
+ "name": "a_som_loi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_zn_cc": {
+ "name": "a_zn_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_gwl_class": {
+ "name": "b_gwl_class",
+ "type": "b_gwl_class",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_soiltype_agr": {
+ "name": "b_soiltype_agr",
+ "type": "b_soiltype_agr",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.soil_sampling": {
+ "name": "soil_sampling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_sampling": {
+ "name": "b_id_sampling",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "a_id": {
+ "name": "a_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "a_depth_upper": {
+ "name": "a_depth_upper",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "a_depth_lower": {
+ "name": "a_depth_lower",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sampling_date": {
+ "name": "b_sampling_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sampling_geometry": {
+ "name": "b_sampling_geometry",
+ "type": "geometry(MultiPoint,4326)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "soil_sampling_b_id_fields_b_id_fk": {
+ "name": "soil_sampling_b_id_fields_b_id_fk",
+ "tableFrom": "soil_sampling",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "soil_sampling_a_id_soil_analysis_a_id_fk": {
+ "name": "soil_sampling_a_id_soil_analysis_a_id_fk",
+ "tableFrom": "soil_sampling",
+ "tableTo": "soil_analysis",
+ "schemaTo": "fdm",
+ "columnsFrom": ["a_id"],
+ "columnsTo": ["a_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.account": {
+ "name": "account",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "account_id": {
+ "name": "account_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "access_token_expires_at": {
+ "name": "access_token_expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token_expires_at": {
+ "name": "refresh_token_expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "account_user_id_user_id_fk": {
+ "name": "account_user_id_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.invitation": {
+ "name": "invitation",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "organization_id": {
+ "name": "organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "inviter_id": {
+ "name": "inviter_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "invitation_organization_id_organization_id_fk": {
+ "name": "invitation_organization_id_organization_id_fk",
+ "tableFrom": "invitation",
+ "tableTo": "organization",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["organization_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "invitation_inviter_id_user_id_fk": {
+ "name": "invitation_inviter_id_user_id_fk",
+ "tableFrom": "invitation",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["inviter_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.member": {
+ "name": "member",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "organization_id": {
+ "name": "organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "member_organization_id_organization_id_fk": {
+ "name": "member_organization_id_organization_id_fk",
+ "tableFrom": "member",
+ "tableTo": "organization",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["organization_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "member_user_id_user_id_fk": {
+ "name": "member_user_id_user_id_fk",
+ "tableFrom": "member",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.organization": {
+ "name": "organization",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "slug": {
+ "name": "slug",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "logo": {
+ "name": "logo",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "organization_slug_unique": {
+ "name": "organization_slug_unique",
+ "nullsNotDistinct": false,
+ "columns": ["slug"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.rate_limit": {
+ "name": "rate_limit",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "count": {
+ "name": "count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_request": {
+ "name": "last_request",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.session": {
+ "name": "session",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "ip_address": {
+ "name": "ip_address",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_agent": {
+ "name": "user_agent",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "active_organization_id": {
+ "name": "active_organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "session_user_id_user_id_fk": {
+ "name": "session_user_id_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "session_token_unique": {
+ "name": "session_token_unique",
+ "nullsNotDistinct": false,
+ "columns": ["token"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.user": {
+ "name": "user",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email_verified": {
+ "name": "email_verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "display_username": {
+ "name": "display_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "firstname": {
+ "name": "firstname",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "surname": {
+ "name": "surname",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "lang": {
+ "name": "lang",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "farm_active": {
+ "name": "farm_active",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "user_email_unique": {
+ "name": "user_email_unique",
+ "nullsNotDistinct": false,
+ "columns": ["email"]
+ },
+ "user_username_unique": {
+ "name": "user_username_unique",
+ "nullsNotDistinct": false,
+ "columns": ["username"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.verification": {
+ "name": "verification",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authz.audit": {
+ "name": "audit",
+ "schema": "fdm-authz",
+ "columns": {
+ "audit_id": {
+ "name": "audit_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "audit_timestamp": {
+ "name": "audit_timestamp",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "audit_origin": {
+ "name": "audit_origin",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "principal_id": {
+ "name": "principal_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_resource": {
+ "name": "target_resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_resource_id": {
+ "name": "target_resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "granting_resource": {
+ "name": "granting_resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "granting_resource_id": {
+ "name": "granting_resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "action": {
+ "name": "action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allowed": {
+ "name": "allowed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "duration": {
+ "name": "duration",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authz.role": {
+ "name": "role",
+ "schema": "fdm-authz",
+ "columns": {
+ "role_id": {
+ "name": "role_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "resource": {
+ "name": "resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "principal_id": {
+ "name": "principal_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted": {
+ "name": "deleted",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "role_idx": {
+ "name": "role_idx",
+ "columns": [
+ {
+ "expression": "resource",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "principal_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "role",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deleted",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "fdm.b_acquiring_method": {
+ "name": "b_acquiring_method",
+ "schema": "fdm",
+ "values": [
+ "nl_01",
+ "nl_02",
+ "nl_03",
+ "nl_04",
+ "nl_07",
+ "nl_09",
+ "nl_10",
+ "nl_11",
+ "nl_12",
+ "nl_13",
+ "nl_61",
+ "nl_63",
+ "unknown"
+ ]
+ },
+ "fdm.p_app_method": {
+ "name": "p_app_method",
+ "schema": "fdm",
+ "values": [
+ "slotted coulter",
+ "incorporation",
+ "incorporation 2 tracks",
+ "injection",
+ "shallow injection",
+ "spraying",
+ "broadcasting",
+ "spoke wheel",
+ "pocket placement",
+ "narrowband"
+ ]
+ },
+ "fdm.b_gwl_class": {
+ "name": "b_gwl_class",
+ "schema": "fdm",
+ "values": [
+ "I",
+ "Ia",
+ "Ic",
+ "II",
+ "IIa",
+ "IIb",
+ "IIc",
+ "III",
+ "IIIa",
+ "IIIb",
+ "IV",
+ "IVu",
+ "IVc",
+ "V",
+ "Va",
+ "Vao",
+ "Vad",
+ "Vb",
+ "Vbo",
+ "Vbd",
+ "sV",
+ "sVb",
+ "VI",
+ "VIo",
+ "VId",
+ "VII",
+ "VIIo",
+ "VIId",
+ "VIII",
+ "VIIIo",
+ "VIIId"
+ ]
+ },
+ "fdm.b_lu_harvestable": {
+ "name": "b_lu_harvestable",
+ "schema": "fdm",
+ "values": ["none", "once", "multiple"]
+ },
+ "fdm.b_lu_croprotation": {
+ "name": "b_lu_croprotation",
+ "schema": "fdm",
+ "values": [
+ "other",
+ "clover",
+ "nature",
+ "potato",
+ "grass",
+ "rapeseed",
+ "starch",
+ "maize",
+ "cereal",
+ "sugarbeet",
+ "alfalfa",
+ "catchcrop"
+ ]
+ },
+ "fdm.a_source": {
+ "name": "a_source",
+ "schema": "fdm",
+ "values": [
+ "nl-rva-l122",
+ "nl-rva-l136",
+ "nl-rva-l264",
+ "nl-rva-l320",
+ "nl-rva-l335",
+ "nl-rva-l610",
+ "nl-rva-l648",
+ "nl-rva-l697",
+ "nl-other-nmi",
+ "other"
+ ]
+ },
+ "fdm.b_soiltype_agr": {
+ "name": "b_soiltype_agr",
+ "schema": "fdm",
+ "values": [
+ "moerige_klei",
+ "rivierklei",
+ "dekzand",
+ "zeeklei",
+ "dalgrond",
+ "veen",
+ "loess",
+ "duinzand",
+ "maasklei"
+ ]
+ },
+ "fdm.p_type_rvo": {
+ "name": "p_type_rvo",
+ "schema": "fdm",
+ "values": [
+ "10",
+ "11",
+ "12",
+ "13",
+ "14",
+ "17",
+ "18",
+ "19",
+ "23",
+ "30",
+ "31",
+ "32",
+ "33",
+ "35",
+ "39",
+ "40",
+ "41",
+ "42",
+ "43",
+ "46",
+ "50",
+ "56",
+ "60",
+ "61",
+ "75",
+ "76",
+ "80",
+ "81",
+ "90",
+ "91",
+ "92",
+ "25",
+ "26",
+ "27",
+ "95",
+ "96",
+ "97",
+ "98",
+ "99",
+ "100",
+ "101",
+ "102",
+ "103",
+ "104",
+ "105",
+ "106",
+ "107",
+ "108",
+ "109",
+ "110",
+ "111",
+ "112",
+ "113",
+ "114",
+ "115",
+ "116",
+ "117",
+ "120"
+ ]
+ }
+ },
+ "schemas": {
+ "fdm": "fdm",
+ "fdm-authn": "fdm-authn",
+ "fdm-authz": "fdm-authz"
+ },
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/fdm-core/src/db/migrations/meta/0017_snapshot.json b/fdm-core/src/db/migrations/meta/0017_snapshot.json
new file mode 100644
index 000000000..3dcf01435
--- /dev/null
+++ b/fdm-core/src/db/migrations/meta/0017_snapshot.json
@@ -0,0 +1,3393 @@
+{
+ "id": "a869127f-3bc4-48ac-aeaa-90e78bd04932",
+ "prevId": "f52147c0-1fd4-4bde-9190-be18a24ccaf5",
+ "version": "7",
+ "dialect": "postgresql",
+ "tables": {
+ "fdm.cultivation_catalogue_selecting": {
+ "name": "cultivation_catalogue_selecting",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_source": {
+ "name": "b_lu_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_catalogue_selecting_b_id_farm_farms_b_id_farm_fk": {
+ "name": "cultivation_catalogue_selecting_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "cultivation_catalogue_selecting",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_ending": {
+ "name": "cultivation_ending",
+ "schema": "fdm",
+ "columns": {
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_end": {
+ "name": "b_lu_end",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "m_cropresidue": {
+ "name": "m_cropresidue",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_ending_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_ending_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_ending",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_harvesting": {
+ "name": "cultivation_harvesting",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvesting": {
+ "name": "b_id_harvesting",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_harvest_date": {
+ "name": "b_lu_harvest_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_harvesting_b_id_harvestable_harvestables_b_id_harvestable_fk": {
+ "name": "cultivation_harvesting_b_id_harvestable_harvestables_b_id_harvestable_fk",
+ "tableFrom": "cultivation_harvesting",
+ "tableTo": "harvestables",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable"],
+ "columnsTo": ["b_id_harvestable"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cultivation_harvesting_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_harvesting_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_harvesting",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivation_starting": {
+ "name": "cultivation_starting",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_start": {
+ "name": "b_lu_start",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sowing_amount": {
+ "name": "b_sowing_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sowing_method": {
+ "name": "b_sowing_method",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "cultivation_starting_b_id_fields_b_id_fk": {
+ "name": "cultivation_starting_b_id_fields_b_id_fk",
+ "tableFrom": "cultivation_starting",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "cultivation_starting_b_lu_cultivations_b_lu_fk": {
+ "name": "cultivation_starting_b_lu_cultivations_b_lu_fk",
+ "tableFrom": "cultivation_starting",
+ "tableTo": "cultivations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu"],
+ "columnsTo": ["b_lu"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivations": {
+ "name": "cultivations",
+ "schema": "fdm",
+ "columns": {
+ "b_lu": {
+ "name": "b_lu",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_catalogue": {
+ "name": "b_lu_catalogue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_variety": {
+ "name": "b_lu_variety",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_lu_idx": {
+ "name": "b_lu_idx",
+ "columns": [
+ {
+ "expression": "b_lu",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "cultivations_b_lu_catalogue_cultivations_catalogue_b_lu_catalogue_fk": {
+ "name": "cultivations_b_lu_catalogue_cultivations_catalogue_b_lu_catalogue_fk",
+ "tableFrom": "cultivations",
+ "tableTo": "cultivations_catalogue",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_lu_catalogue"],
+ "columnsTo": ["b_lu_catalogue"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.cultivations_catalogue": {
+ "name": "cultivations_catalogue",
+ "schema": "fdm",
+ "columns": {
+ "b_lu_catalogue": {
+ "name": "b_lu_catalogue",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_source": {
+ "name": "b_lu_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_name": {
+ "name": "b_lu_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_name_en": {
+ "name": "b_lu_name_en",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_harvestable": {
+ "name": "b_lu_harvestable",
+ "type": "b_lu_harvestable",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_lu_hcat3": {
+ "name": "b_lu_hcat3",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_hcat3_name": {
+ "name": "b_lu_hcat3_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_croprotation": {
+ "name": "b_lu_croprotation",
+ "type": "b_lu_croprotation",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_yield": {
+ "name": "b_lu_yield",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_hi": {
+ "name": "b_lu_hi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_harvestable": {
+ "name": "b_lu_n_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_residue": {
+ "name": "b_lu_n_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_n_fixation": {
+ "name": "b_n_fixation",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_rest_oravib": {
+ "name": "b_lu_rest_oravib",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_variety_options": {
+ "name": "b_lu_variety_options",
+ "type": "text[]",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_start_default": {
+ "name": "b_lu_start_default",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_date_harvest_default": {
+ "name": "b_date_harvest_default",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hash": {
+ "name": "hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_lu_catalogue_idx": {
+ "name": "b_lu_catalogue_idx",
+ "columns": [
+ {
+ "expression": "b_lu_catalogue",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {
+ "b_lu_start_default_format": {
+ "name": "b_lu_start_default_format",
+ "value": "b_lu_start_default IS NULL OR b_lu_start_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$'"
+ },
+ "b_date_harvest_default_format": {
+ "name": "b_date_harvest_default_format",
+ "value": "b_date_harvest_default IS NULL OR b_date_harvest_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$'"
+ }
+ },
+ "isRLSEnabled": false
+ },
+ "fdm.derogation_applying": {
+ "name": "derogation_applying",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_derogation": {
+ "name": "b_id_derogation",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "derogation_one_per_farm_per": {
+ "name": "derogation_one_per_farm_per",
+ "columns": [
+ {
+ "expression": "b_id_derogation",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "derogation_applying_b_id_farm_farms_b_id_farm_fk": {
+ "name": "derogation_applying_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "derogation_applying",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "derogation_applying_b_id_derogation_derogations_b_id_derogation_fk": {
+ "name": "derogation_applying_b_id_derogation_derogations_b_id_derogation_fk",
+ "tableFrom": "derogation_applying",
+ "tableTo": "derogations",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_derogation"],
+ "columnsTo": ["b_id_derogation"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.derogations": {
+ "name": "derogations",
+ "schema": "fdm",
+ "columns": {
+ "b_id_derogation": {
+ "name": "b_id_derogation",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_derogation_year": {
+ "name": "b_derogation_year",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.farms": {
+ "name": "farms",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_name_farm": {
+ "name": "b_name_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_businessid_farm": {
+ "name": "b_businessid_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_address_farm": {
+ "name": "b_address_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_postalcode_farm": {
+ "name": "b_postalcode_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_farm_idx": {
+ "name": "b_id_farm_idx",
+ "columns": [
+ {
+ "expression": "b_id_farm",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_acquiring": {
+ "name": "fertilizer_acquiring",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_acquiring_amount": {
+ "name": "p_acquiring_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_acquiring_date": {
+ "name": "p_acquiring_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_acquiring_b_id_farm_farms_b_id_farm_fk": {
+ "name": "fertilizer_acquiring_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "fertilizer_acquiring",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_acquiring_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_acquiring_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_acquiring",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_applying": {
+ "name": "fertilizer_applying",
+ "schema": "fdm",
+ "columns": {
+ "p_app_id": {
+ "name": "p_app_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_app_amount": {
+ "name": "p_app_amount",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_method": {
+ "name": "p_app_method",
+ "type": "p_app_method",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_date": {
+ "name": "p_app_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_app_idx": {
+ "name": "p_app_idx",
+ "columns": [
+ {
+ "expression": "p_app_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "fertilizer_applying_b_id_fields_b_id_fk": {
+ "name": "fertilizer_applying_b_id_fields_b_id_fk",
+ "tableFrom": "fertilizer_applying",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_applying_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_applying_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_applying",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_catalogue_enabling": {
+ "name": "fertilizer_catalogue_enabling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_source": {
+ "name": "p_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_catalogue_enabling_b_id_farm_farms_b_id_farm_fk": {
+ "name": "fertilizer_catalogue_enabling_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "fertilizer_catalogue_enabling",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizer_picking": {
+ "name": "fertilizer_picking",
+ "schema": "fdm",
+ "columns": {
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_id_catalogue": {
+ "name": "p_id_catalogue",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_picking_date": {
+ "name": "p_picking_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "fertilizer_picking_p_id_fertilizers_p_id_fk": {
+ "name": "fertilizer_picking_p_id_fertilizers_p_id_fk",
+ "tableFrom": "fertilizer_picking",
+ "tableTo": "fertilizers",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id"],
+ "columnsTo": ["p_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "fertilizer_picking_p_id_catalogue_fertilizers_catalogue_p_id_catalogue_fk": {
+ "name": "fertilizer_picking_p_id_catalogue_fertilizers_catalogue_p_id_catalogue_fk",
+ "tableFrom": "fertilizer_picking",
+ "tableTo": "fertilizers_catalogue",
+ "schemaTo": "fdm",
+ "columnsFrom": ["p_id_catalogue"],
+ "columnsTo": ["p_id_catalogue"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizers": {
+ "name": "fertilizers",
+ "schema": "fdm",
+ "columns": {
+ "p_id": {
+ "name": "p_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_id_idx": {
+ "name": "p_id_idx",
+ "columns": [
+ {
+ "expression": "p_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fertilizers_catalogue": {
+ "name": "fertilizers_catalogue",
+ "schema": "fdm",
+ "columns": {
+ "p_id_catalogue": {
+ "name": "p_id_catalogue",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "p_source": {
+ "name": "p_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_name_nl": {
+ "name": "p_name_nl",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "p_name_en": {
+ "name": "p_name_en",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_description": {
+ "name": "p_description",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_app_method_options": {
+ "name": "p_app_method_options",
+ "type": "p_app_method[]",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_dm": {
+ "name": "p_dm",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_density": {
+ "name": "p_density",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_om": {
+ "name": "p_om",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_a": {
+ "name": "p_a",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_hc": {
+ "name": "p_hc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_eom": {
+ "name": "p_eom",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_eoc": {
+ "name": "p_eoc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_rt": {
+ "name": "p_c_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_of": {
+ "name": "p_c_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_if": {
+ "name": "p_c_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_c_fr": {
+ "name": "p_c_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cn_of": {
+ "name": "p_cn_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_rt": {
+ "name": "p_n_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_if": {
+ "name": "p_n_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_of": {
+ "name": "p_n_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_n_wc": {
+ "name": "p_n_wc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_no3_rt": {
+ "name": "p_no3_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_nh4_rt": {
+ "name": "p_nh4_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_p_rt": {
+ "name": "p_p_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_k_rt": {
+ "name": "p_k_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mg_rt": {
+ "name": "p_mg_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ca_rt": {
+ "name": "p_ca_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ne": {
+ "name": "p_ne",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_s_rt": {
+ "name": "p_s_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_s_wc": {
+ "name": "p_s_wc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cu_rt": {
+ "name": "p_cu_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_zn_rt": {
+ "name": "p_zn_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_na_rt": {
+ "name": "p_na_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_si_rt": {
+ "name": "p_si_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_b_rt": {
+ "name": "p_b_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mn_rt": {
+ "name": "p_mn_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ni_rt": {
+ "name": "p_ni_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_fe_rt": {
+ "name": "p_fe_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_mo_rt": {
+ "name": "p_mo_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_co_rt": {
+ "name": "p_co_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_as_rt": {
+ "name": "p_as_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cd_rt": {
+ "name": "p_cd_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cr_rt": {
+ "name": "p_cr_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cr_vi": {
+ "name": "p_cr_vi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_pb_rt": {
+ "name": "p_pb_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_hg_rt": {
+ "name": "p_hg_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_cl_rt": {
+ "name": "p_cl_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_ef_nh3": {
+ "name": "p_ef_nh3",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_manure": {
+ "name": "p_type_manure",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_mineral": {
+ "name": "p_type_mineral",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_compost": {
+ "name": "p_type_compost",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "p_type_rvo": {
+ "name": "p_type_rvo",
+ "type": "p_type_rvo",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "hash": {
+ "name": "hash",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "p_id_catalogue_idx": {
+ "name": "p_id_catalogue_idx",
+ "columns": [
+ {
+ "expression": "p_id_catalogue",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.field_acquiring": {
+ "name": "field_acquiring",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_start": {
+ "name": "b_start",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_acquiring_method": {
+ "name": "b_acquiring_method",
+ "type": "b_acquiring_method",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "'unknown'"
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "field_acquiring_b_id_fields_b_id_fk": {
+ "name": "field_acquiring_b_id_fields_b_id_fk",
+ "tableFrom": "field_acquiring",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "field_acquiring_b_id_farm_farms_b_id_farm_fk": {
+ "name": "field_acquiring_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "field_acquiring",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.field_discarding": {
+ "name": "field_discarding",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_end": {
+ "name": "b_end",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "field_discarding_b_id_fields_b_id_fk": {
+ "name": "field_discarding_b_id_fields_b_id_fk",
+ "tableFrom": "field_discarding",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.fields": {
+ "name": "fields",
+ "schema": "fdm",
+ "columns": {
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_name": {
+ "name": "b_name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_geometry": {
+ "name": "b_geometry",
+ "type": "geometry(Polygon,4326)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_id_source": {
+ "name": "b_id_source",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_idx": {
+ "name": "b_id_idx",
+ "columns": [
+ {
+ "expression": "b_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ },
+ "b_geom_idx": {
+ "name": "b_geom_idx",
+ "columns": [
+ {
+ "expression": "b_geometry",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "gist",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestable_analyses": {
+ "name": "harvestable_analyses",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable_analysis": {
+ "name": "b_id_harvestable_analysis",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_lu_yield": {
+ "name": "b_lu_yield",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_harvestable": {
+ "name": "b_lu_n_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_n_residue": {
+ "name": "b_lu_n_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_p_harvestable": {
+ "name": "b_lu_p_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_p_residue": {
+ "name": "b_lu_p_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_k_harvestable": {
+ "name": "b_lu_k_harvestable",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_lu_k_residue": {
+ "name": "b_lu_k_residue",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_harvestable_analyses_idx": {
+ "name": "b_id_harvestable_analyses_idx",
+ "columns": [
+ {
+ "expression": "b_id_harvestable_analysis",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestable_sampling": {
+ "name": "harvestable_sampling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_harvestable_analysis": {
+ "name": "b_id_harvestable_analysis",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_sampling_date": {
+ "name": "b_sampling_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "harvestable_sampling_b_id_harvestable_harvestables_b_id_harvestable_fk": {
+ "name": "harvestable_sampling_b_id_harvestable_harvestables_b_id_harvestable_fk",
+ "tableFrom": "harvestable_sampling",
+ "tableTo": "harvestables",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable"],
+ "columnsTo": ["b_id_harvestable"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "harvestable_sampling_b_id_harvestable_analysis_harvestable_analyses_b_id_harvestable_analysis_fk": {
+ "name": "harvestable_sampling_b_id_harvestable_analysis_harvestable_analyses_b_id_harvestable_analysis_fk",
+ "tableFrom": "harvestable_sampling",
+ "tableTo": "harvestable_analyses",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_harvestable_analysis"],
+ "columnsTo": ["b_id_harvestable_analysis"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.harvestables": {
+ "name": "harvestables",
+ "schema": "fdm",
+ "columns": {
+ "b_id_harvestable": {
+ "name": "b_id_harvestable",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "b_id_harvestable_idx": {
+ "name": "b_id_harvestable_idx",
+ "columns": [
+ {
+ "expression": "b_id_harvestable",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.intending_grazing": {
+ "name": "intending_grazing",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_grazing_intention": {
+ "name": "b_grazing_intention",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_grazing_intention_year": {
+ "name": "b_grazing_intention_year",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "intending_grazing_b_id_farm_farms_b_id_farm_fk": {
+ "name": "intending_grazing_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "intending_grazing",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {
+ "intending_grazing_b_id_farm_b_grazing_intention_year_pk": {
+ "name": "intending_grazing_b_id_farm_b_grazing_intention_year_pk",
+ "columns": ["b_id_farm", "b_grazing_intention_year"]
+ }
+ },
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.organic_certifications": {
+ "name": "organic_certifications",
+ "schema": "fdm",
+ "columns": {
+ "b_id_organic": {
+ "name": "b_id_organic",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_organic_traces": {
+ "name": "b_organic_traces",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_organic_skal": {
+ "name": "b_organic_skal",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_organic_issued": {
+ "name": "b_organic_issued",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_organic_expires": {
+ "name": "b_organic_expires",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.organic_certifications_holding": {
+ "name": "organic_certifications_holding",
+ "schema": "fdm",
+ "columns": {
+ "b_id_farm": {
+ "name": "b_id_farm",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "b_id_organic": {
+ "name": "b_id_organic",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "organic_one_farm_per_cert": {
+ "name": "organic_one_farm_per_cert",
+ "columns": [
+ {
+ "expression": "b_id_organic",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": true,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {
+ "organic_certifications_holding_b_id_farm_farms_b_id_farm_fk": {
+ "name": "organic_certifications_holding_b_id_farm_farms_b_id_farm_fk",
+ "tableFrom": "organic_certifications_holding",
+ "tableTo": "farms",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_farm"],
+ "columnsTo": ["b_id_farm"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "organic_certifications_holding_b_id_organic_organic_certifications_b_id_organic_fk": {
+ "name": "organic_certifications_holding_b_id_organic_organic_certifications_b_id_organic_fk",
+ "tableFrom": "organic_certifications_holding",
+ "tableTo": "organic_certifications",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id_organic"],
+ "columnsTo": ["b_id_organic"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.soil_analysis": {
+ "name": "soil_analysis",
+ "schema": "fdm",
+ "columns": {
+ "a_id": {
+ "name": "a_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "a_date": {
+ "name": "a_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_source": {
+ "name": "a_source",
+ "type": "a_source",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false,
+ "default": "'other'"
+ },
+ "a_al_ox": {
+ "name": "a_al_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_c_of": {
+ "name": "a_c_of",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ca_co": {
+ "name": "a_ca_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ca_co_po": {
+ "name": "a_ca_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_caco3_if": {
+ "name": "a_caco3_if",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cec_co": {
+ "name": "a_cec_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_clay_mi": {
+ "name": "a_clay_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cn_fr": {
+ "name": "a_cn_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_com_fr": {
+ "name": "a_com_fr",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_cu_cc": {
+ "name": "a_cu_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_density_sa": {
+ "name": "a_density_sa",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_fe_ox": {
+ "name": "a_fe_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_cc": {
+ "name": "a_k_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_co": {
+ "name": "a_k_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_k_co_po": {
+ "name": "a_k_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_cc": {
+ "name": "a_mg_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_co": {
+ "name": "a_mg_co",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_mg_co_po": {
+ "name": "a_mg_co_po",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_n_pmn": {
+ "name": "a_n_pmn",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_n_rt": {
+ "name": "a_n_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_nh4_cc": {
+ "name": "a_nh4_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_nmin_cc": {
+ "name": "a_nmin_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_no3_cc": {
+ "name": "a_no3_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_al": {
+ "name": "a_p_al",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_cc": {
+ "name": "a_p_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_ox": {
+ "name": "a_p_ox",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_rt": {
+ "name": "a_p_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_sg": {
+ "name": "a_p_sg",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_p_wa": {
+ "name": "a_p_wa",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_ph_cc": {
+ "name": "a_ph_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_s_rt": {
+ "name": "a_s_rt",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_sand_mi": {
+ "name": "a_sand_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_silt_mi": {
+ "name": "a_silt_mi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_som_loi": {
+ "name": "a_som_loi",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "a_zn_cc": {
+ "name": "a_zn_cc",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_gwl_class": {
+ "name": "b_gwl_class",
+ "type": "b_gwl_class",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_soiltype_agr": {
+ "name": "b_soiltype_agr",
+ "type": "b_soiltype_agr",
+ "typeSchema": "fdm",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm.soil_sampling": {
+ "name": "soil_sampling",
+ "schema": "fdm",
+ "columns": {
+ "b_id_sampling": {
+ "name": "b_id_sampling",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "b_id": {
+ "name": "b_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "a_id": {
+ "name": "a_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "a_depth_upper": {
+ "name": "a_depth_upper",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": true,
+ "default": 0
+ },
+ "a_depth_lower": {
+ "name": "a_depth_lower",
+ "type": "numeric",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sampling_date": {
+ "name": "b_sampling_date",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "b_sampling_geometry": {
+ "name": "b_sampling_geometry",
+ "type": "geometry(MultiPoint,4326)",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "updated": {
+ "name": "updated",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "soil_sampling_b_id_fields_b_id_fk": {
+ "name": "soil_sampling_b_id_fields_b_id_fk",
+ "tableFrom": "soil_sampling",
+ "tableTo": "fields",
+ "schemaTo": "fdm",
+ "columnsFrom": ["b_id"],
+ "columnsTo": ["b_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ },
+ "soil_sampling_a_id_soil_analysis_a_id_fk": {
+ "name": "soil_sampling_a_id_soil_analysis_a_id_fk",
+ "tableFrom": "soil_sampling",
+ "tableTo": "soil_analysis",
+ "schemaTo": "fdm",
+ "columnsFrom": ["a_id"],
+ "columnsTo": ["a_id"],
+ "onDelete": "no action",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.account": {
+ "name": "account",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "account_id": {
+ "name": "account_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "provider_id": {
+ "name": "provider_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "access_token": {
+ "name": "access_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token": {
+ "name": "refresh_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "id_token": {
+ "name": "id_token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "access_token_expires_at": {
+ "name": "access_token_expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "refresh_token_expires_at": {
+ "name": "refresh_token_expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "scope": {
+ "name": "scope",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "password": {
+ "name": "password",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "account_user_id_user_id_fk": {
+ "name": "account_user_id_user_id_fk",
+ "tableFrom": "account",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.invitation": {
+ "name": "invitation",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "organization_id": {
+ "name": "organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "status": {
+ "name": "status",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "inviter_id": {
+ "name": "inviter_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "invitation_organization_id_organization_id_fk": {
+ "name": "invitation_organization_id_organization_id_fk",
+ "tableFrom": "invitation",
+ "tableTo": "organization",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["organization_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "invitation_inviter_id_user_id_fk": {
+ "name": "invitation_inviter_id_user_id_fk",
+ "tableFrom": "invitation",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["inviter_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.member": {
+ "name": "member",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "organization_id": {
+ "name": "organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "member_organization_id_organization_id_fk": {
+ "name": "member_organization_id_organization_id_fk",
+ "tableFrom": "member",
+ "tableTo": "organization",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["organization_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ },
+ "member_user_id_user_id_fk": {
+ "name": "member_user_id_user_id_fk",
+ "tableFrom": "member",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.organization": {
+ "name": "organization",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "slug": {
+ "name": "slug",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "logo": {
+ "name": "logo",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "metadata": {
+ "name": "metadata",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "organization_slug_unique": {
+ "name": "organization_slug_unique",
+ "nullsNotDistinct": false,
+ "columns": ["slug"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.rate_limit": {
+ "name": "rate_limit",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "key": {
+ "name": "key",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "count": {
+ "name": "count",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "last_request": {
+ "name": "last_request",
+ "type": "bigint",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.session": {
+ "name": "session",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "token": {
+ "name": "token",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "ip_address": {
+ "name": "ip_address",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_agent": {
+ "name": "user_agent",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "user_id": {
+ "name": "user_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "active_organization_id": {
+ "name": "active_organization_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {
+ "session_user_id_user_id_fk": {
+ "name": "session_user_id_user_id_fk",
+ "tableFrom": "session",
+ "tableTo": "user",
+ "schemaTo": "fdm-authn",
+ "columnsFrom": ["user_id"],
+ "columnsTo": ["id"],
+ "onDelete": "cascade",
+ "onUpdate": "no action"
+ }
+ },
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "session_token_unique": {
+ "name": "session_token_unique",
+ "nullsNotDistinct": false,
+ "columns": ["token"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.user": {
+ "name": "user",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "name": {
+ "name": "name",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email": {
+ "name": "email",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "email_verified": {
+ "name": "email_verified",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "image": {
+ "name": "image",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "username": {
+ "name": "username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "display_username": {
+ "name": "display_username",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "firstname": {
+ "name": "firstname",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "surname": {
+ "name": "surname",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "lang": {
+ "name": "lang",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "farm_active": {
+ "name": "farm_active",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {
+ "user_email_unique": {
+ "name": "user_email_unique",
+ "nullsNotDistinct": false,
+ "columns": ["email"]
+ },
+ "user_username_unique": {
+ "name": "user_username_unique",
+ "nullsNotDistinct": false,
+ "columns": ["username"]
+ }
+ },
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authn.verification": {
+ "name": "verification",
+ "schema": "fdm-authn",
+ "columns": {
+ "id": {
+ "name": "id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "identifier": {
+ "name": "identifier",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "value": {
+ "name": "value",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "expires_at": {
+ "name": "expires_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "updated_at": {
+ "name": "updated_at",
+ "type": "timestamp",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authz.audit": {
+ "name": "audit",
+ "schema": "fdm-authz",
+ "columns": {
+ "audit_id": {
+ "name": "audit_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "audit_timestamp": {
+ "name": "audit_timestamp",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "audit_origin": {
+ "name": "audit_origin",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "principal_id": {
+ "name": "principal_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_resource": {
+ "name": "target_resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "target_resource_id": {
+ "name": "target_resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "granting_resource": {
+ "name": "granting_resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "granting_resource_id": {
+ "name": "granting_resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "action": {
+ "name": "action",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "allowed": {
+ "name": "allowed",
+ "type": "boolean",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "duration": {
+ "name": "duration",
+ "type": "integer",
+ "primaryKey": false,
+ "notNull": true
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-authz.role": {
+ "name": "role",
+ "schema": "fdm-authz",
+ "columns": {
+ "role_id": {
+ "name": "role_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "resource": {
+ "name": "resource",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "resource_id": {
+ "name": "resource_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "principal_id": {
+ "name": "principal_id",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "role": {
+ "name": "role",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created": {
+ "name": "created",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ },
+ "deleted": {
+ "name": "deleted",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": false
+ }
+ },
+ "indexes": {
+ "role_idx": {
+ "name": "role_idx",
+ "columns": [
+ {
+ "expression": "resource",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "resource_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "principal_id",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "role",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ },
+ {
+ "expression": "deleted",
+ "isExpression": false,
+ "asc": true,
+ "nulls": "last"
+ }
+ ],
+ "isUnique": false,
+ "concurrently": false,
+ "method": "btree",
+ "with": {}
+ }
+ },
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-calculator.calculation_cache": {
+ "name": "calculation_cache",
+ "schema": "fdm-calculator",
+ "columns": {
+ "calculation_hash": {
+ "name": "calculation_hash",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "calculation_function": {
+ "name": "calculation_function",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "calculator_version": {
+ "name": "calculator_version",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "input": {
+ "name": "input",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "result": {
+ "name": "result",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": true
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ },
+ "fdm-calculator.calculation_errors": {
+ "name": "calculation_errors",
+ "schema": "fdm-calculator",
+ "columns": {
+ "calculation_error_id": {
+ "name": "calculation_error_id",
+ "type": "text",
+ "primaryKey": true,
+ "notNull": true
+ },
+ "calculation_function": {
+ "name": "calculation_function",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "calculator_version": {
+ "name": "calculator_version",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "input": {
+ "name": "input",
+ "type": "jsonb",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "error_message": {
+ "name": "error_message",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "stack_trace": {
+ "name": "stack_trace",
+ "type": "text",
+ "primaryKey": false,
+ "notNull": false
+ },
+ "created_at": {
+ "name": "created_at",
+ "type": "timestamp with time zone",
+ "primaryKey": false,
+ "notNull": true,
+ "default": "now()"
+ }
+ },
+ "indexes": {},
+ "foreignKeys": {},
+ "compositePrimaryKeys": {},
+ "uniqueConstraints": {},
+ "policies": {},
+ "checkConstraints": {},
+ "isRLSEnabled": false
+ }
+ },
+ "enums": {
+ "fdm.b_acquiring_method": {
+ "name": "b_acquiring_method",
+ "schema": "fdm",
+ "values": [
+ "nl_01",
+ "nl_02",
+ "nl_03",
+ "nl_04",
+ "nl_07",
+ "nl_09",
+ "nl_10",
+ "nl_11",
+ "nl_12",
+ "nl_13",
+ "nl_61",
+ "nl_63",
+ "unknown"
+ ]
+ },
+ "fdm.p_app_method": {
+ "name": "p_app_method",
+ "schema": "fdm",
+ "values": [
+ "slotted coulter",
+ "incorporation",
+ "incorporation 2 tracks",
+ "injection",
+ "shallow injection",
+ "spraying",
+ "broadcasting",
+ "spoke wheel",
+ "pocket placement",
+ "narrowband"
+ ]
+ },
+ "fdm.b_gwl_class": {
+ "name": "b_gwl_class",
+ "schema": "fdm",
+ "values": [
+ "I",
+ "Ia",
+ "Ic",
+ "II",
+ "IIa",
+ "IIb",
+ "IIc",
+ "III",
+ "IIIa",
+ "IIIb",
+ "IV",
+ "IVu",
+ "IVc",
+ "V",
+ "Va",
+ "Vao",
+ "Vad",
+ "Vb",
+ "Vbo",
+ "Vbd",
+ "sV",
+ "sVb",
+ "VI",
+ "VIo",
+ "VId",
+ "VII",
+ "VIIo",
+ "VIId",
+ "VIII",
+ "VIIIo",
+ "VIIId"
+ ]
+ },
+ "fdm.b_lu_harvestable": {
+ "name": "b_lu_harvestable",
+ "schema": "fdm",
+ "values": ["none", "once", "multiple"]
+ },
+ "fdm.b_lu_croprotation": {
+ "name": "b_lu_croprotation",
+ "schema": "fdm",
+ "values": [
+ "other",
+ "clover",
+ "nature",
+ "potato",
+ "grass",
+ "rapeseed",
+ "starch",
+ "maize",
+ "cereal",
+ "sugarbeet",
+ "alfalfa",
+ "catchcrop"
+ ]
+ },
+ "fdm.a_source": {
+ "name": "a_source",
+ "schema": "fdm",
+ "values": [
+ "nl-rva-l122",
+ "nl-rva-l136",
+ "nl-rva-l264",
+ "nl-rva-l320",
+ "nl-rva-l335",
+ "nl-rva-l610",
+ "nl-rva-l648",
+ "nl-rva-l697",
+ "nl-other-nmi",
+ "other"
+ ]
+ },
+ "fdm.b_soiltype_agr": {
+ "name": "b_soiltype_agr",
+ "schema": "fdm",
+ "values": [
+ "moerige_klei",
+ "rivierklei",
+ "dekzand",
+ "zeeklei",
+ "dalgrond",
+ "veen",
+ "loess",
+ "duinzand",
+ "maasklei"
+ ]
+ },
+ "fdm.p_type_rvo": {
+ "name": "p_type_rvo",
+ "schema": "fdm",
+ "values": [
+ "10",
+ "11",
+ "12",
+ "13",
+ "14",
+ "17",
+ "18",
+ "19",
+ "23",
+ "30",
+ "31",
+ "32",
+ "33",
+ "35",
+ "39",
+ "40",
+ "41",
+ "42",
+ "43",
+ "46",
+ "50",
+ "56",
+ "60",
+ "61",
+ "75",
+ "76",
+ "80",
+ "81",
+ "90",
+ "91",
+ "92",
+ "25",
+ "26",
+ "27",
+ "95",
+ "96",
+ "97",
+ "98",
+ "99",
+ "100",
+ "101",
+ "102",
+ "103",
+ "104",
+ "105",
+ "106",
+ "107",
+ "108",
+ "109",
+ "110",
+ "111",
+ "112",
+ "113",
+ "114",
+ "115",
+ "116",
+ "117",
+ "120"
+ ]
+ }
+ },
+ "schemas": {
+ "fdm": "fdm",
+ "fdm-authn": "fdm-authn",
+ "fdm-authz": "fdm-authz",
+ "fdm-calculator": "fdm-calculator"
+ },
+ "sequences": {},
+ "roles": {},
+ "policies": {},
+ "views": {},
+ "_meta": {
+ "columns": {},
+ "schemas": {},
+ "tables": {}
+ }
+}
diff --git a/fdm-core/src/db/migrations/meta/_journal.json b/fdm-core/src/db/migrations/meta/_journal.json
index 7d4a6b8e7..70ed0426a 100644
--- a/fdm-core/src/db/migrations/meta/_journal.json
+++ b/fdm-core/src/db/migrations/meta/_journal.json
@@ -99,6 +99,34 @@
"when": 1755074095394,
"tag": "0013_v0-24-0-2",
"breakpoints": true
+ },
+ {
+ "idx": 14,
+ "version": "7",
+ "when": 1760450273146,
+ "tag": "0014_v0-26-0-1",
+ "breakpoints": true
+ },
+ {
+ "idx": 15,
+ "version": "7",
+ "when": 1760621691069,
+ "tag": "0015_v0-26-0-2",
+ "breakpoints": true
+ },
+ {
+ "idx": 16,
+ "version": "7",
+ "when": 1761121611245,
+ "tag": "0016_v0-26-0-3",
+ "breakpoints": true
+ },
+ {
+ "idx": 17,
+ "version": "7",
+ "when": 1761909360538,
+ "tag": "0017_v0-26-0-4",
+ "breakpoints": true
}
]
}
diff --git a/fdm-core/src/db/schema-calculator.ts b/fdm-core/src/db/schema-calculator.ts
new file mode 100644
index 000000000..c36e78c08
--- /dev/null
+++ b/fdm-core/src/db/schema-calculator.ts
@@ -0,0 +1,32 @@
+import { jsonb, pgSchema, text, timestamp } from "drizzle-orm/pg-core"
+
+export const fdmCalculatorSchema = pgSchema("fdm-calculator")
+export type fdmSchemaCalculatorTypeSelect = typeof fdmCalculatorSchema.table
+
+export const calculationCache = fdmCalculatorSchema.table("calculation_cache", {
+ calculation_hash: text().notNull().primaryKey(),
+ calculation_function: text().notNull(),
+ calculator_version: text(),
+ input: jsonb().notNull(),
+ result: jsonb().notNull(),
+ created_at: timestamp({ withTimezone: true }).notNull().defaultNow(),
+})
+
+export type CalculationCacheTypeSelect = typeof calculationCache.$inferSelect
+export type CalculationCacheTypeInsert = typeof calculationCache.$inferInsert
+
+export const calculationErrors = fdmCalculatorSchema.table(
+ "calculation_errors",
+ {
+ calculation_error_id: text().primaryKey(),
+ calculation_function: text(),
+ calculator_version: text(),
+ input: jsonb(),
+ error_message: text(),
+ stack_trace: text(),
+ created_at: timestamp({ withTimezone: true }).notNull().defaultNow(),
+ },
+)
+
+export type CalculationErrorsTypeSelect = typeof calculationErrors.$inferSelect
+export type CalculationErrorsTypeInsert = typeof calculationErrors.$inferInsert
diff --git a/fdm-core/src/db/schema.ts b/fdm-core/src/db/schema.ts
index b505daccf..3bd9d0d8b 100644
--- a/fdm-core/src/db/schema.ts
+++ b/fdm-core/src/db/schema.ts
@@ -1,6 +1,8 @@
import type { ApplicationMethods } from "@svenvw/fdm-data"
+import { sql } from "drizzle-orm"
import {
boolean,
+ check,
index,
integer,
pgSchema,
@@ -37,22 +39,25 @@ export type farmsTypeInsert = typeof farms.$inferInsert
export const acquiringMethodOptions = [
{ value: "nl_01", label: "Eigendom" },
{ value: "nl_02", label: "Reguliere pacht" },
+ {
+ value: "nl_03",
+ label: "In gebruik van een terreinbeherende organisatie",
+ },
+ {
+ value: "nl_04",
+ label: "Tijdelijk gebruik in het kader van landinrichting",
+ },
{ value: "nl_07", label: "Overige exploitatievormen" },
{ value: "nl_09", label: "Erfpacht" },
+ { value: "nl_10", label: "Pacht van geringe oppervlakten" },
+ { value: "nl_11", label: "Natuurpacht" },
{ value: "nl_12", label: "Geliberaliseerde pacht, langer dan 6 jaar" },
{ value: "nl_13", label: "Geliberaliseerde pacht, 6 jaar of korter" },
{ value: "nl_61", label: "Reguliere pacht kortlopend" },
{ value: "nl_63", label: "Teeltpacht" },
- // { value: "nl_xx", label: "Pacht van geringe oppervlakten" },
- // { value: "nl_xx", label: "Natuurpacht" },
- // { value: "nl_xx", label: "In gebuik van een terreinbeherende organisatie" },
- // {
- // value: "nl_xx",
- // label: "Tijdelijk gebuik in het kader van landinrichting",
- // },
{ value: "unknown", label: "Onbekend" },
]
-const acquiringMethodEnum = fdmSchema.enum(
+export const acquiringMethodEnum = fdmSchema.enum(
"b_acquiring_method",
acquiringMethodOptions.map((x) => x.value) as [string, ...string[]],
)
@@ -201,6 +206,84 @@ export type fertilizerApplicationTypeSelect =
export type fertilizerApplicationTypeInsert =
typeof fertilizerApplication.$inferInsert
+// Define farm_managing table
+export const typeRvoOptions = [
+ { value: "10", label: "Rundvee - Vaste mest" },
+ { value: "11", label: "Rundvee - Filtraat na mestscheiding" },
+ { value: "12", label: "Rundvee - Gier" },
+ { value: "13", label: "Rundvee - Koek na mestscheiding" },
+ { value: "14", label: "Rundvee - Drijfmest behalve van vleeskalveren" },
+ { value: "17", label: "Rundvee - Bewerkte kalvergier" },
+ { value: "18", label: "Rundvee - Vleeskalveren, witvlees" },
+ { value: "19", label: "Rundvee - Vleeskalveren, rosevlees" },
+ { value: "23", label: "Kalkoenen - Mest, alle systemen" },
+ { value: "30", label: "Kippen - Drijfmest" },
+ { value: "31", label: "Kippen - Deeppitstal, kanalenstal" },
+ { value: "32", label: "Kippen - Mestband" },
+ { value: "33", label: "Kippen - Mestband + nadroog" },
+ {
+ value: "35",
+ label: "Kippen - Geheel of gedeeltelijk strooiselstal (incl. volièrestal/scharrelstal)",
+ },
+ {
+ value: "39",
+ label: "Vleeskuikens en parelhoenders - Mest, alle systemen",
+ },
+ { value: "40", label: "Varkens - Vaste mest" },
+ { value: "41", label: "Varkens - Filtraat na mestscheiding" },
+ { value: "42", label: "Varkens - Gier" },
+ { value: "43", label: "Varkens - Koek na mestscheiding" },
+ {
+ value: "46",
+ label: "Varkens - Drijfmest fokzeugen, incl. biggen, opfokzeugen/-beren, dekberen",
+ },
+ { value: "50", label: "Varkens - Drijfmest vleesvarkens" },
+ { value: "56", label: "Schapen - Mest, alle systemen" },
+ { value: "60", label: "Geiten - Drijfmest" },
+ { value: "61", label: "Geiten - Vaste mest" },
+ { value: "75", label: "Nertsen - Vaste mest" },
+ { value: "76", label: "Nertsen - Drijfmest" },
+ { value: "80", label: "Eenden - Vaste mest" },
+ { value: "81", label: "Eenden - Drijfmest" },
+ { value: "90", label: "Konijnen - Vaste mest" },
+ {
+ value: "91",
+ label: "Konijnen - Drijfmest met percentage droge stof < 2,5%",
+ },
+ { value: "92", label: "Konijnen - Drijfmest" },
+ { value: "25", label: "Paarden - Vaste mest" },
+ { value: "26", label: "Ezels - Vaste mest" },
+ { value: "27", label: "Pony’s - Vaste mest" },
+ { value: "95", label: "Herten - Vaste mest" },
+ { value: "96", label: "Waterbuffels - Mest, alle systemen" },
+ { value: "97", label: "Knobbelgans - Vaste mest" },
+ { value: "98", label: "Grauwe gans - Vaste mest" },
+ { value: "99", label: "Fazanten en patrijzen - Vaste mest" },
+ { value: "100", label: "Struisvogels, emoes en nandoes - Vaste mest" },
+ { value: "101", label: "Vleesduif - Vaste mest" },
+ { value: "102", label: "Bruine rat - Vaste mest" },
+ { value: "103", label: "Tamme muis - Vaste mest" },
+ { value: "104", label: "Cavia - Vaste mest" },
+ { value: "105", label: "Goudhamster - Vaste mest" },
+ { value: "106", label: "Gerbil - Vaste mest" },
+ { value: "107", label: "Fase 1 substraat" },
+ { value: "108", label: "Fase 2 substraat" },
+ { value: "109", label: "Fase 3 substraat" },
+ { value: "110", label: "Champost" },
+ { value: "111", label: "Compost" },
+ { value: "112", label: "Zeer schone compost" },
+ { value: "113", label: "Zuiveringsslib vloeibaar" },
+ { value: "114", label: "Zuiveringsslib steekvast" },
+ { value: "115", label: "Kunstmest" },
+ { value: "116", label: "Overige mestsoorten" },
+ { value: "117", label: "Gescheiden champost" },
+ { value: "120", label: "Mineralenconcentraat" },
+]
+export const typeRvoEnum = fdmSchema.enum(
+ "p_type_rvo",
+ typeRvoOptions.map((x) => x.value) as [string, ...string[]],
+)
+
// Define fertilizers_catalogue table
export const fertilizersCatalogue = fdmSchema.table(
"fertilizers_catalogue",
@@ -257,6 +340,7 @@ export const fertilizersCatalogue = fdmSchema.table(
p_type_manure: boolean(),
p_type_mineral: boolean(),
p_type_compost: boolean(),
+ p_type_rvo: typeRvoEnum(),
hash: text(),
created: timestamp({ withTimezone: true }).notNull().defaultNow(),
updated: timestamp({ withTimezone: true }),
@@ -371,11 +455,23 @@ export const cultivationsCatalogue = fdmSchema.table(
b_n_fixation: numericCasted(),
b_lu_rest_oravib: boolean(),
b_lu_variety_options: text().array(),
+ b_lu_start_default: text(), // MM-dd
+ b_date_harvest_default: text(), // MM-dd
hash: text(),
created: timestamp({ withTimezone: true }).notNull().defaultNow(),
updated: timestamp({ withTimezone: true }),
},
- (table) => [uniqueIndex("b_lu_catalogue_idx").on(table.b_lu_catalogue)],
+ (table) => [
+ uniqueIndex("b_lu_catalogue_idx").on(table.b_lu_catalogue),
+ check(
+ "b_lu_start_default_format",
+ sql`b_lu_start_default IS NULL OR b_lu_start_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$'`,
+ ),
+ check(
+ "b_date_harvest_default_format",
+ sql`b_date_harvest_default IS NULL OR b_date_harvest_default ~ '^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$'`,
+ ),
+ ],
)
export type cultivationsCatalogueTypeSelect =
@@ -703,6 +799,9 @@ export const derogationApplying = fdmSchema.table(
columns: [table.b_id_farm, table.b_id_derogation],
}),
},
+ uniqueIndex("derogation_one_per_farm_per").on(
+ table.b_id_derogation,
+ ),
]
},
)
@@ -712,6 +811,74 @@ export type derogationApplyingTypeSelect =
export type derogationApplyingTypeInsert =
typeof derogationApplying.$inferInsert
+// Define organics table
+export const organicCertifications = fdmSchema.table("organic_certifications", {
+ b_id_organic: text().primaryKey(),
+ b_organic_traces: text(),
+ b_organic_skal: text(),
+ b_organic_issued: timestamp({ withTimezone: true }),
+ b_organic_expires: timestamp({ withTimezone: true }),
+ created: timestamp({ withTimezone: true }).notNull().defaultNow(),
+ updated: timestamp({ withTimezone: true }),
+})
+
+export type organicCertificationsTypeSelect =
+ typeof organicCertifications.$inferSelect
+export type organicCertificationsTypeInsert =
+ typeof organicCertifications.$inferInsert
+
+// Define organic_certifications_holding table
+export const organicCertificationsHolding = fdmSchema.table(
+ "organic_certifications_holding",
+ {
+ b_id_farm: text()
+ .notNull()
+ .references(() => farms.b_id_farm),
+ b_id_organic: text()
+ .notNull()
+ .references(() => organicCertifications.b_id_organic),
+ created: timestamp({ withTimezone: true }).notNull().defaultNow(),
+ updated: timestamp({ withTimezone: true }),
+ },
+ (table) => {
+ return [
+ {
+ pk: primaryKey({
+ columns: [table.b_id_farm, table.b_id_organic],
+ }),
+ },
+ uniqueIndex("organic_one_farm_per_cert").on(table.b_id_organic),
+ ]
+ },
+)
+
+export type organicCertificationsHoldingTypeSelect =
+ typeof organicCertificationsHolding.$inferSelect
+export type organicCertificationsHoldingTypeInsert =
+ typeof organicCertificationsHolding.$inferInsert
+
+// Define intending_grazing table
+export const intendingGrazing = fdmSchema.table(
+ "intending_grazing",
+ {
+ b_id_farm: text()
+ .notNull()
+ .references(() => farms.b_id_farm),
+ b_grazing_intention: boolean(),
+ b_grazing_intention_year: integer().notNull(),
+ created: timestamp({ withTimezone: true }).notNull().defaultNow(),
+ updated: timestamp({ withTimezone: true }),
+ },
+ (table) => ({
+ pk: primaryKey({
+ columns: [table.b_id_farm, table.b_grazing_intention_year],
+ }),
+ }),
+)
+
+export type intendingGrazingTypeSelect = typeof intendingGrazing.$inferSelect
+export type intendingGrazingTypeInsert = typeof intendingGrazing.$inferInsert
+
// Define fertilizer_catalogue_enabling table
export const fertilizerCatalogueEnabling = fdmSchema.table(
"fertilizer_catalogue_enabling",
diff --git a/fdm-core/src/farm.ts b/fdm-core/src/farm.ts
index 488972464..e924de5a5 100644
--- a/fdm-core/src/farm.ts
+++ b/fdm-core/src/farm.ts
@@ -663,9 +663,80 @@ export async function removeFarm(
.where(inArray(schema.fertilizerPicking.p_id, pIds))
}
+ // Get all derogation IDs associated with this farm
+ const derogationIdsToDelete = await tx
+ .select({
+ b_id_derogation: schema.derogationApplying.b_id_derogation,
+ })
+ .from(schema.derogationApplying)
+ .where(eq(schema.derogationApplying.b_id_farm, b_id_farm))
+
+ // Delete derogation applying records
await tx
.delete(schema.derogationApplying)
.where(eq(schema.derogationApplying.b_id_farm, b_id_farm))
+
+ // Delete derogations that were associated with this farm
+ if (derogationIdsToDelete.length > 0) {
+ const bIdsDerogation = derogationIdsToDelete.map(
+ (d: {
+ b_id_derogation: schema.derogationsTypeSelect["b_id_derogation"]
+ }) => d.b_id_derogation,
+ )
+ await tx
+ .delete(schema.derogations)
+ .where(
+ inArray(
+ schema.derogations.b_id_derogation,
+ bIdsDerogation,
+ ),
+ )
+ }
+
+ // Get all organic certification IDs associated with this farm
+ const organicCertificationIdsToDelete = await tx
+ .select({
+ b_id_organic:
+ schema.organicCertificationsHolding.b_id_organic,
+ })
+ .from(schema.organicCertificationsHolding)
+ .where(
+ eq(
+ schema.organicCertificationsHolding.b_id_farm,
+ b_id_farm,
+ ),
+ )
+
+ // Delete organic certifications holding records
+ await tx
+ .delete(schema.organicCertificationsHolding)
+ .where(
+ eq(
+ schema.organicCertificationsHolding.b_id_farm,
+ b_id_farm,
+ ),
+ )
+
+ // Delete organic certifications that were associated with this farm
+ if (organicCertificationIdsToDelete.length > 0) {
+ const bIdsOrganic = organicCertificationIdsToDelete.map(
+ (o: {
+ b_id_organic: schema.organicCertificationsTypeSelect["b_id_organic"]
+ }) => o.b_id_organic,
+ )
+ await tx
+ .delete(schema.organicCertifications)
+ .where(
+ inArray(
+ schema.organicCertifications.b_id_organic,
+ bIdsOrganic,
+ ),
+ )
+ }
+
+ await tx
+ .delete(schema.intendingGrazing)
+ .where(eq(schema.intendingGrazing.b_id_farm, b_id_farm))
await tx
.delete(schema.fertilizerCatalogueEnabling)
.where(
diff --git a/fdm-core/src/fertilizer.d.ts b/fdm-core/src/fertilizer.d.ts
index 8f49ee459..e49103288 100644
--- a/fdm-core/src/fertilizer.d.ts
+++ b/fdm-core/src/fertilizer.d.ts
@@ -1,4 +1,5 @@
import type { ApplicationMethods } from "@svenvw/fdm-data"
+import type * as schema from "./db/schema"
export interface Fertilizer {
p_id: string
@@ -41,6 +42,7 @@ export interface Fertilizer {
p_cl_rt: number | null
p_ef_nh3: number | null
p_type: FertilizerType | null
+ p_type_rvo: schema.fertilizersCatalogueTypeSelect["p_type_rvo"]
}
type FertilizerType = "manure" | "mineral" | "compost"
@@ -105,6 +107,7 @@ export type FertilizerParameters =
| "p_cl_rt"
| "p_ef_nh3"
| "p_type"
+ | "p_type_rvo"
export interface FertilizerParameterDescriptionItem {
parameter: FertilizerParameters
@@ -121,7 +124,13 @@ export interface FertilizerParameterDescriptionItem {
| "physical"
min?: number
max?: number
- options?: { value: FertilizerType | ApplicationMethods; label: string }[]
+ options?: {
+ value:
+ | FertilizerType
+ | ApplicationMethods
+ | schema.fertilizersCatalogueTypeSelect["p_type_rvo"]
+ label: string
+ }[]
}
export type FertilizerParameterDescription =
diff --git a/fdm-core/src/fertilizer.test.ts b/fdm-core/src/fertilizer.test.ts
index f3aa65da0..c3b495941 100644
--- a/fdm-core/src/fertilizer.test.ts
+++ b/fdm-core/src/fertilizer.test.ts
@@ -131,6 +131,7 @@ describe("Fertilizer Data Model", () => {
p_cl_rt: 390,
p_ef_nh3: null,
p_type: "manure",
+ p_type_rvo: "10",
},
)
@@ -210,6 +211,7 @@ describe("Fertilizer Data Model", () => {
p_cl_rt: 390,
p_ef_nh3: null,
p_type: "manure",
+ p_type_rvo: "10",
},
)
@@ -287,6 +289,7 @@ describe("Fertilizer Data Model", () => {
p_cl_rt: 390,
p_ef_nh3: null,
p_type: "manure",
+ p_type_rvo: "10",
},
)
@@ -377,6 +380,7 @@ describe("Fertilizer Data Model", () => {
p_cl_rt: 390,
p_ef_nh3: null,
p_type: "manure",
+ p_type_rvo: "10",
},
)
@@ -476,6 +480,7 @@ describe("Fertilizer Data Model", () => {
p_cl_rt: 390,
p_ef_nh3: null,
p_type: "manure",
+ p_type_rvo: "10",
},
)
})
@@ -692,6 +697,7 @@ describe("Fertilizer Data Model", () => {
p_cl_rt: 390,
p_ef_nh3: null,
p_type: "manure",
+ p_type_rvo: "10",
},
)
const updatedProperties = {
@@ -707,6 +713,94 @@ describe("Fertilizer Data Model", () => {
),
).rejects.toThrow("Exception for updateFertilizerFromCatalogue")
})
+
+ it("should correctly derive p_type from p_type_rvo", async () => {
+ // 1. Add a fertilizer with p_type_rvo that maps to "mineral" and p_type as "manure".
+ const p_id_catalogue = await addFertilizerToCatalogue(
+ fdm,
+ principal_id,
+ b_id_farm,
+ {
+ p_name_nl: "RVO-mapped fertilizer",
+ p_name_en: "RVO-mapped fertilizer (EN)",
+ p_description: "This is a test fertilizer for RVO mapping",
+ p_app_method_options: [],
+ p_dm: 100,
+ p_density: 1,
+ p_om: 0,
+ p_a: 0,
+ p_hc: 0,
+ p_eom: 0,
+ p_eoc: 0,
+ p_c_rt: 0,
+ p_c_of: 0,
+ p_c_if: 0,
+ p_c_fr: 0,
+ p_cn_of: 0,
+ p_n_rt: 10,
+ p_n_if: 0,
+ p_n_of: 0,
+ p_n_wc: 1,
+ p_no3_rt: 0,
+ p_nh4_rt: 0,
+ p_p_rt: 0,
+ p_k_rt: 0,
+ p_mg_rt: 0,
+ p_ca_rt: 0,
+ p_ne: 0,
+ p_s_rt: 0,
+ p_s_wc: 0,
+ p_cu_rt: 0,
+ p_zn_rt: 0,
+ p_na_rt: 0,
+ p_si_rt: 0,
+ p_b_rt: 0,
+ p_mn_rt: 0,
+ p_ni_rt: 0,
+ p_fe_rt: 0,
+ p_mo_rt: 0,
+ p_co_rt: 0,
+ p_as_rt: 0,
+ p_cd_rt: 0,
+ p_cr_rt: 0,
+ p_cr_vi: 0,
+ p_pb_rt: 0,
+ p_hg_rt: 0,
+ p_cl_rt: 0,
+ p_ef_nh3: null,
+ p_type: "manure", // This should be overridden
+ p_type_rvo: "115", // Maps to "mineral"
+ },
+ )
+
+ const p_id = await addFertilizer(
+ fdm,
+ principal_id,
+ p_id_catalogue,
+ b_id_farm,
+ 100,
+ new Date(),
+ )
+
+ // 2. Get the fertilizer and assert that p_type is "mineral".
+ let fertilizer = await getFertilizer(fdm, p_id)
+ expect(fertilizer.p_type).toBe("mineral")
+
+ // 3. Update the fertilizer with a p_type_rvo that maps to "compost".
+ await updateFertilizerFromCatalogue(
+ fdm,
+ principal_id,
+ b_id_farm,
+ p_id_catalogue,
+ {
+ p_type_rvo: "111", // Maps to "compost"
+ },
+ )
+
+ // 4. Get the fertilizer and assert that p_type is "compost".
+ fertilizer = await getFertilizer(fdm, p_id)
+ expect(fertilizer.p_type).toBe("compost")
+ })
})
describe("Fertilizer Application", () => {
@@ -807,6 +901,7 @@ describe("Fertilizer Data Model", () => {
p_cl_rt: 390,
p_ef_nh3: 0.8,
p_type: "mineral",
+ p_type_rvo: "115",
},
)
@@ -992,7 +1087,7 @@ describe("Fertilizer Data Model", () => {
b_id,
timeframe,
)
- fertilizerApplications.map((application) => {
+ fertilizerApplications.forEach((application) => {
expect(
application.p_app_date?.getTime(),
).toBeGreaterThanOrEqual(timeframe.start.getTime())
diff --git a/fdm-core/src/fertilizer.ts b/fdm-core/src/fertilizer.ts
index 901dc9410..9c57880dc 100644
--- a/fdm-core/src/fertilizer.ts
+++ b/fdm-core/src/fertilizer.ts
@@ -137,6 +137,7 @@ export async function addFertilizerToCatalogue(
p_cl_rt: schema.fertilizersCatalogueTypeInsert["p_cl_rt"]
p_ef_nh3: schema.fertilizersCatalogueTypeInsert["p_ef_nh3"]
p_type: "manure" | "mineral" | "compost" | null
+ p_type_rvo: schema.fertilizersCatalogueTypeInsert["p_type_rvo"]
},
): Promise {
try {
@@ -326,6 +327,7 @@ export async function getFertilizer(
p_type_manure: schema.fertilizersCatalogue.p_type_manure,
p_type_mineral: schema.fertilizersCatalogue.p_type_mineral,
p_type_compost: schema.fertilizersCatalogue.p_type_compost,
+ p_type_rvo: schema.fertilizersCatalogue.p_type_rvo,
})
.from(schema.fertilizers)
.leftJoin(
@@ -352,17 +354,21 @@ export async function getFertilizer(
}
let p_type: "manure" | "mineral" | "compost" | null = null
- if (result.p_type_manure) {
- p_type = "manure"
- } else if (result.p_type_mineral) {
- p_type = "mineral"
- } else if (result.p_type_compost) {
- p_type = "compost"
+ if (result.p_type_rvo) {
+ p_type = convertRvoTypeToFertilizerType(result.p_type_rvo)
+ } else {
+ if (result.p_type_manure) {
+ p_type = "manure"
+ } else if (result.p_type_mineral) {
+ p_type = "mineral"
+ } else if (result.p_type_compost) {
+ p_type = "compost"
+ }
}
return {
...result,
- p_type,
+ p_type: p_type,
}
} catch (err) {
throw handleError(err, "Exception for getFertilizer", {
@@ -437,6 +443,7 @@ export async function updateFertilizerFromCatalogue(
p_cl_rt: schema.fertilizersCatalogueTypeInsert["p_cl_rt"]
p_ef_nh3: schema.fertilizersCatalogueTypeInsert["p_ef_nh3"]
p_type: "manure" | "mineral" | "compost" | null
+ p_type_rvo: schema.fertilizersCatalogueTypeInsert["p_type_rvo"]
}>,
): Promise {
try {
@@ -597,6 +604,7 @@ export async function getFertilizers(
p_type_manure: schema.fertilizersCatalogue.p_type_manure,
p_type_mineral: schema.fertilizersCatalogue.p_type_mineral,
p_type_compost: schema.fertilizersCatalogue.p_type_compost,
+ p_type_rvo: schema.fertilizersCatalogue.p_type_rvo,
})
.from(schema.fertilizers)
.leftJoin(
@@ -619,16 +627,21 @@ export async function getFertilizers(
return fertilizers.map((f: (typeof fertilizers)[number]) => {
let p_type: "manure" | "mineral" | "compost" | null = null
- if (f.p_type_manure) {
- p_type = "manure"
- } else if (f.p_type_mineral) {
- p_type = "mineral"
- } else if (f.p_type_compost) {
- p_type = "compost"
+ if (f.p_type_rvo) {
+ p_type = convertRvoTypeToFertilizerType(f.p_type_rvo)
+ } else {
+ if (f.p_type_manure) {
+ p_type = "manure"
+ } else if (f.p_type_mineral) {
+ p_type = "mineral"
+ } else if (f.p_type_compost) {
+ p_type = "compost"
+ }
}
+
return {
...f,
- p_type,
+ p_type: p_type,
}
})
} catch (err) {
@@ -1034,18 +1047,27 @@ export function getFertilizerParametersDescription(
// category: "general",
// description: "Beschrijvingen en/of opmerkingen over de meststof",
// },
+ // {
+ // parameter: "p_type",
+ // unit: "",
+ // name: "Type",
+ // type: "enum",
+ // category: "general",
+ // description: "Typering van de meststof",
+ // options: [
+ // { value: "manure", label: "Dierlijke mest" },
+ // { value: "mineral", label: "Kunstmest" },
+ // { value: "compost", label: "Compost" },
+ // ],
+ // },
{
- parameter: "p_type",
+ parameter: "p_type_rvo",
unit: "",
- name: "Type",
+ name: "Mestcode (RVO)",
type: "enum",
category: "general",
- description: "Typering van de meststof",
- options: [
- { value: "manure", label: "Dierlijke mest" },
- { value: "mineral", label: "Kunstmest" },
- { value: "compost", label: "Compost" },
- ],
+ description: "Mestcode volgens RVO",
+ options: schema.typeRvoOptions,
},
{
parameter: "p_app_method_options",
@@ -1250,3 +1272,98 @@ export function getFertilizerParametersDescription(
return fertilizerParameterDescription
}
+
+/**
+ * Determines the fertilizer type based on the RVO code.
+ *
+ * @param p_type_rvo The RVO code for the fertilizer type.
+ * @returns The fertilizer type ("manure", "mineral", "compost") or null if not classified.
+ * @internal
+ */
+function convertRvoTypeToFertilizerType(
+ p_type_rvo?: schema.fertilizersCatalogueTypeSelect["p_type_rvo"],
+): "manure" | "mineral" | "compost" | null {
+ if (!p_type_rvo) {
+ return null
+ }
+
+ // Manure codes
+ const manureCodes = [
+ "10",
+ "11",
+ "12",
+ "13",
+ "14",
+ "17",
+ "18",
+ "19",
+ "23",
+ "30",
+ "31",
+ "32",
+ "33",
+ "35",
+ "39",
+ "40",
+ "41",
+ "42",
+ "43",
+ "46",
+ "50",
+ "56",
+ "60",
+ "61",
+ "75",
+ "76",
+ "80",
+ "81",
+ "90",
+ "91",
+ "92",
+ "25",
+ "26",
+ "27",
+ "95",
+ "96",
+ "97",
+ "98",
+ "99",
+ "100",
+ "101",
+ "102",
+ "103",
+ "104",
+ "105",
+ "106",
+ "110",
+ "117",
+ "120",
+ ]
+
+ // Compost codes
+ const compostCodes = ["107", "108", "109", "111", "112"]
+
+ // Mineral codes
+ const mineralCodes = ["115"]
+
+ // "Other" codes
+ const otherCodes = ["113", "114", "116"]
+
+ if (manureCodes.includes(p_type_rvo)) {
+ return "manure"
+ }
+
+ if (compostCodes.includes(p_type_rvo)) {
+ return "compost"
+ }
+
+ if (mineralCodes.includes(p_type_rvo)) {
+ return "mineral"
+ }
+
+ if (otherCodes.includes(p_type_rvo)) {
+ return null
+ }
+
+ return null
+}
diff --git a/fdm-core/src/field.test.ts b/fdm-core/src/field.test.ts
index 6e8024d9e..24704a479 100644
--- a/fdm-core/src/field.test.ts
+++ b/fdm-core/src/field.test.ts
@@ -9,6 +9,7 @@ import { createFdmServer } from "./fdm-server"
import type { FdmServerType } from "./fdm-server.d"
import {
addField,
+ determineIfFieldIsProductive,
getField,
getFields,
listAvailableAcquiringMethods,
@@ -36,12 +37,25 @@ describe("Farm Data Model", () => {
})
describe("Field CRUD", () => {
- it("should add a new field", async () => {
+ let fdm: FdmType
+ let principal_id: string
+ let b_id_farm: string
+
+ beforeEach(async () => {
+ const host = inject("host")
+ const port = inject("port")
+ const user = inject("user")
+ const password = inject("password")
+ const database = inject("database")
+ fdm = createFdmServer(host, port, user, password, database)
+ principal_id = "test_principal"
+
+ // Create a test farm
const farmName = "Test Farm"
const farmBusinessId = "123456"
const farmAddress = "123 Farm Lane"
const farmPostalCode = "12345"
- const b_id_farm = await addFarm(
+ b_id_farm = await addFarm(
fdm,
principal_id,
farmName,
@@ -49,7 +63,9 @@ describe("Farm Data Model", () => {
farmAddress,
farmPostalCode,
)
+ })
+ it("should add a new field", async () => {
const fieldName = "Test Field"
const fieldIDSource = "test-field-id"
const fieldGeometry: Polygon = {
@@ -96,6 +112,41 @@ describe("Farm Data Model", () => {
expect(field.b_acquiring_method).toBe(AcquiringMethod)
})
+ it("should add a new field with a later added option for b_acquiring_method", async () => {
+ const fieldName = "Test Field"
+ const fieldIDSource = "test-field-id"
+ const fieldGeometry: Polygon = {
+ type: "Polygon",
+ coordinates: [
+ [
+ [0, 0],
+ [0, 1],
+ [1, 1],
+ [1, 0],
+ [0, 0],
+ ],
+ ],
+ }
+ const AcquireDate = new Date("2023-01-01")
+ const discardingDate = new Date("2023-12-31")
+ const AcquiringMethod = "nl_11"
+ const b_id = await addField(
+ fdm,
+ principal_id,
+ b_id_farm,
+ fieldName,
+ fieldIDSource,
+ fieldGeometry,
+ AcquireDate,
+ AcquiringMethod,
+ discardingDate,
+ )
+ expect(b_id).toBeDefined()
+
+ const field = await getField(fdm, principal_id, b_id)
+ expect(field.b_acquiring_method).toBe(AcquiringMethod)
+ })
+
describe("getFields", () => {
let fdm: FdmType
let principal_id: string
@@ -714,6 +765,8 @@ describe("Farm Data Model", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false, // Changed to boolean
b_lu_variety_options: [], // Added missing property
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "10-15",
})
})
@@ -899,6 +952,50 @@ describe("Farm Data Model", () => {
})
})
+ describe("determineIfFieldIsProductive", () => {
+ it("should determine if a field is productive by checking name", async () => {
+ const b_isproductive = determineIfFieldIsProductive(
+ 1.0,
+ 100.0,
+ "Bufferstrip",
+ )
+ expect(b_isproductive).toBe(false)
+ })
+ it("should determine if a field is productive by checking shape", async () => {
+ const b_isproductive = determineIfFieldIsProductive(
+ 1.0,
+ 10000.0,
+ "Field",
+ )
+ expect(b_isproductive).toBe(false)
+ })
+
+ it("should determine if a field is productive by checking shape (area is large enough)", async () => {
+ const b_isproductive = determineIfFieldIsProductive(
+ 2.5,
+ 10000.0,
+ "Field",
+ )
+ expect(b_isproductive).toBe(true)
+ })
+ it("should determine if a field is productive by checking shape and name", async () => {
+ const b_isproductive = determineIfFieldIsProductive(
+ 1.0,
+ 1000.0,
+ "Bufferstrip",
+ )
+ expect(b_isproductive).toBe(false)
+ })
+ it("should determine if a field is productive by checking shape and name (productive)", async () => {
+ const b_isproductive = determineIfFieldIsProductive(
+ 10.0,
+ 100.0,
+ "Field",
+ )
+ expect(b_isproductive).toBe(true)
+ })
+ })
+
describe("listAvailableAcquiringMethods", () => {
it("should list available acquiring methods", () => {
const methods = listAvailableAcquiringMethods()
diff --git a/fdm-core/src/field.ts b/fdm-core/src/field.ts
index 30a7f01c8..805758028 100644
--- a/fdm-core/src/field.ts
+++ b/fdm-core/src/field.ts
@@ -187,9 +187,10 @@ export async function getField(
field[0].b_centroid = [field[0].b_centroid_x, field[0].b_centroid_y]
field[0].b_centroid_x = undefined
field[0].b_centroid_y = undefined
- field[0].b_isproductive = determineIfFieldIsProductiveByShape(
+ field[0].b_isproductive = determineIfFieldIsProductive(
field[0].b_area,
field[0].b_perimeter,
+ field[0].b_name,
)
return field[0]
@@ -300,9 +301,10 @@ export async function getFields(
field.b_centroid = [field.b_centroid_x, field.b_centroid_y]
field.b_centroid_x = undefined
field.b_centroid_y = undefined
- field.b_isproductive = determineIfFieldIsProductiveByShape(
+ field.b_isproductive = determineIfFieldIsProductive(
field.b_area,
field.b_perimeter,
+ field.b_name,
)
}
@@ -640,26 +642,34 @@ export function listAvailableAcquiringMethods(): {
}
/**
- * Determines if a field is considered productive based on its area and perimeter.
+ * Determines if a field is considered productive based on its area, perimeter, and name.
*
- * This function uses a heuristic to differentiate between productive fields and non-productive areas like buffer strips.
- * A field is classified as non-productive if its area is less than 2.5 hectares and the ratio of its perimeter
- * to the square root of its area (in square meters) is greater than or equal to a predefined constant (20).
+ * This function uses two heuristics to differentiate between productive fields and non-productive areas like buffer strips:
+ * 1. Shape-based: A field is classified as non-productive if its area is less than 2.5 hectares and the ratio of its perimeter
+ * to the square root of its area (in square meters) is greater than or equal to a predefined constant (20).
+ * 2. Name-based: A field is classified as non-productive if its name contains "buffer" (case-insensitive).
+ *
+ * A field is considered productive only if both checks pass.
*
* @param b_area The area of the field in hectares.
* @param b_perimeter The perimeter of the field in meters.
+ * @param b_name The name of the field.
* @returns `true` if the field is determined to be productive, `false` otherwise.
* @alpha
*/
-export function determineIfFieldIsProductiveByShape(
+export function determineIfFieldIsProductive(
b_area: number,
b_perimeter: number,
+ b_name: schema.fieldsTypeSelect["b_name"],
) {
// Sven found that a ratio for a field with Perimeter (m) / SQRT(Area (m^2)) usually differentiates buffferstrips from "normal" fields when the ratio is larger than 20 and area smaller than 2.5 ha
const BUFFERSTROKEN_CONSTANT = 20
-
- return (
+ const productiveAssumedByShape =
b_perimeter / Math.sqrt(b_area * 10000) < BUFFERSTROKEN_CONSTANT ||
b_area >= 2.5
- )
+
+ // Check if name contains 'buffer'
+ const productiveAssumedByName = !b_name.toLowerCase().includes("buffer")
+
+ return productiveAssumedByShape && productiveAssumedByName
}
diff --git a/fdm-core/src/grazing_intention.test.ts b/fdm-core/src/grazing_intention.test.ts
new file mode 100644
index 000000000..9dc92d1a9
--- /dev/null
+++ b/fdm-core/src/grazing_intention.test.ts
@@ -0,0 +1,255 @@
+import { beforeEach, describe, expect, inject, it } from "vitest"
+import { addFarm } from "./farm"
+import type { FdmType } from "./fdm"
+import { createFdmServer } from "./fdm-server"
+import {
+ getGrazingIntention,
+ getGrazingIntentions,
+ removeGrazingIntention,
+ setGrazingIntention,
+} from "./grazing_intention"
+
+describe("Grazing Intention", () => {
+ let fdm: FdmType
+ let principal_id: string
+ let b_id_farm: string
+
+ beforeEach(async () => {
+ const host = inject("host")
+ const port = inject("port")
+ const user = inject("user")
+ const password = inject("password")
+ const database = inject("database")
+ fdm = createFdmServer(host, port, user, password, database)
+ principal_id = "test_principal"
+
+ // Create a test farm
+ b_id_farm = await addFarm(
+ fdm,
+ principal_id,
+ "Test Farm for Grazing",
+ "654321",
+ "321 Farm Road",
+ "54321",
+ )
+ })
+
+ describe("setGrazingIntention", () => {
+ it("should add a new grazing intention", async () => {
+ const b_grazing_intention_year = 2025
+ const intention = true
+
+ await setGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ intention,
+ )
+
+ const result = await getGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ )
+ expect(result).toBe(intention)
+ })
+
+ it("should update an existing grazing intention", async () => {
+ const b_grazing_intention_year = 2026
+ await setGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ true,
+ )
+ await setGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ false,
+ )
+
+ const result = await getGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ )
+ expect(result).toBe(false)
+ })
+
+ it("should throw an error if principal does not have permission", async () => {
+ const invalidPrincipal = "invalid_user"
+ await expect(
+ setGrazingIntention(
+ fdm,
+ invalidPrincipal,
+ b_id_farm,
+ 2027,
+ true,
+ ),
+ ).rejects.toThrowError(
+ "Principal does not have permission to perform this action",
+ )
+ })
+ })
+
+ describe("getGrazingIntention", () => {
+ it("should return the correct intention for a given b_grazing_intention_year", async () => {
+ const b_grazing_intention_year = 2028
+ await setGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ true,
+ )
+
+ const result = await getGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ )
+ expect(result).toBe(true)
+ })
+
+ it("should return false if no intention is set for the b_grazing_intention_year", async () => {
+ const b_grazing_intention_year = 2029
+ const result = await getGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ )
+ expect(result).toBe(false)
+ })
+
+ it("should throw an error if principal does not have permission", async () => {
+ const invalidPrincipal = "invalid_user"
+ await expect(
+ getGrazingIntention(fdm, invalidPrincipal, b_id_farm, 2030),
+ ).rejects.toThrowError(
+ "Principal does not have permission to perform this action",
+ )
+ })
+ })
+
+ describe("getGrazingIntentions", () => {
+ it("should return all grazing intentions for a farm", async () => {
+ await setGrazingIntention(fdm, principal_id, b_id_farm, 2031, true)
+ await setGrazingIntention(fdm, principal_id, b_id_farm, 2032, false)
+
+ const intentions = await getGrazingIntentions(
+ fdm,
+ principal_id,
+ b_id_farm,
+ )
+ expect(intentions.length).toBe(2)
+ expect(intentions.map((i) => i.b_grazing_intention_year)).toEqual(
+ expect.arrayContaining([2031, 2032]),
+ )
+ })
+
+ it("should return an empty array if no intentions are set", async () => {
+ const new_b_id_farm = await addFarm(
+ fdm,
+ principal_id,
+ "Farm Without Intentions",
+ undefined,
+ undefined,
+ undefined,
+ )
+ const intentions = await getGrazingIntentions(
+ fdm,
+ principal_id,
+ new_b_id_farm,
+ )
+ expect(intentions.length).toBe(0)
+ })
+
+ it("should throw an error if principal does not have permission", async () => {
+ const invalidPrincipal = "invalid_user"
+ await expect(
+ getGrazingIntentions(fdm, invalidPrincipal, b_id_farm),
+ ).rejects.toThrowError(
+ "Principal does not have permission to perform this action",
+ )
+ })
+ })
+
+ describe("removeGrazingIntention", () => {
+ it("should remove an existing grazing intention", async () => {
+ const b_grazing_intention_year = 2033
+ await setGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ true,
+ )
+
+ let result = await getGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ )
+ expect(result).toBe(true)
+
+ await removeGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ )
+
+ result = await getGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ )
+ expect(result).toBe(false)
+ })
+
+ it("should not throw an error when removing a non-existent intention", async () => {
+ const b_grazing_intention_year = 2034
+ await expect(
+ removeGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ ),
+ ).resolves.not.toThrow()
+ })
+
+ it("should throw an error if principal does not have permission", async () => {
+ const b_grazing_intention_year = 2035
+ await setGrazingIntention(
+ fdm,
+ principal_id,
+ b_id_farm,
+ b_grazing_intention_year,
+ true,
+ )
+ const invalidPrincipal = "invalid_user"
+
+ await expect(
+ removeGrazingIntention(
+ fdm,
+ invalidPrincipal,
+ b_id_farm,
+ b_grazing_intention_year,
+ ),
+ ).rejects.toThrowError(
+ "Principal does not have permission to perform this action",
+ )
+ })
+ })
+})
diff --git a/fdm-core/src/grazing_intention.ts b/fdm-core/src/grazing_intention.ts
new file mode 100644
index 000000000..a1c05c702
--- /dev/null
+++ b/fdm-core/src/grazing_intention.ts
@@ -0,0 +1,190 @@
+import { and, eq } from "drizzle-orm"
+import { checkPermission } from "./authorization"
+import type { PrincipalId } from "./authorization.d"
+import * as schema from "./db/schema"
+import { handleError } from "./error"
+import type { FdmType } from "./fdm"
+
+/**
+ * Sets a grazing intention for a farm for a specific year.
+ * This will create a new record if one does not exist, or update the existing one.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The unique identifier of the principal performing the operation.
+ * @param b_id_farm Identifier of the farm.
+ * @param b_grazing_intention_year The year of the grazing intention.
+ * @param b_grazing_intention The grazing intention (true or false).
+ * @returns A promise that resolves when the operation is complete.
+ * @alpha
+ */
+export async function setGrazingIntention(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_farm: schema.intendingGrazingTypeInsert["b_id_farm"],
+ b_grazing_intention_year: schema.intendingGrazingTypeInsert["b_grazing_intention_year"],
+ b_grazing_intention: schema.intendingGrazingTypeInsert["b_grazing_intention"],
+): Promise {
+ try {
+ await checkPermission(
+ fdm,
+ "farm",
+ "write",
+ b_id_farm,
+ principal_id,
+ "setGrazingIntention",
+ )
+
+ await fdm
+ .insert(schema.intendingGrazing)
+ .values({
+ b_id_farm,
+ b_grazing_intention_year: b_grazing_intention_year,
+ b_grazing_intention: b_grazing_intention,
+ })
+ .onConflictDoUpdate({
+ target: [
+ schema.intendingGrazing.b_id_farm,
+ schema.intendingGrazing.b_grazing_intention_year,
+ ],
+ set: {
+ b_grazing_intention: b_grazing_intention,
+ updated: new Date(),
+ },
+ })
+ } catch (err) {
+ throw handleError(err, "Exception for setGrazingIntention", {
+ b_id_farm,
+ b_grazing_intention_year,
+ b_grazing_intention,
+ })
+ }
+}
+
+/**
+ * Removes a grazing intention for a specific farm and year.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The unique identifier of the principal performing the operation.
+ * @param b_id_farm The unique identifier of the farm.
+ * @param b_grazing_intention_year The year of the grazing intention to remove.
+ * @returns A promise that resolves when the grazing intention has been successfully removed.
+ * @alpha
+ */
+export async function removeGrazingIntention(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_farm: schema.intendingGrazingTypeSelect["b_id_farm"],
+ b_grazing_intention_year: schema.intendingGrazingTypeSelect["b_grazing_intention_year"],
+): Promise {
+ try {
+ await checkPermission(
+ fdm,
+ "farm",
+ "write",
+ b_id_farm,
+ principal_id,
+ "removeGrazingIntention",
+ )
+
+ await fdm
+ .delete(schema.intendingGrazing)
+ .where(
+ and(
+ eq(schema.intendingGrazing.b_id_farm, b_id_farm),
+ eq(
+ schema.intendingGrazing.b_grazing_intention_year,
+ b_grazing_intention_year,
+ ),
+ ),
+ )
+ } catch (err) {
+ throw handleError(err, "Exception for removeGrazingIntention", {
+ b_id_farm,
+ b_grazing_intention_year,
+ })
+ }
+}
+
+/**
+ * Retrieves all grazing intentions for a specified farm.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The ID of the principal making the request.
+ * @param b_id_farm The unique identifier of the farm.
+ * @returns A Promise resolving to an array of grazing intention objects.
+ * @alpha
+ */
+export async function getGrazingIntentions(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_farm: schema.farmsTypeSelect["b_id_farm"],
+): Promise {
+ try {
+ await checkPermission(
+ fdm,
+ "farm",
+ "read",
+ b_id_farm,
+ principal_id,
+ "getGrazingIntentions",
+ )
+
+ return await fdm
+ .select()
+ .from(schema.intendingGrazing)
+ .where(eq(schema.intendingGrazing.b_id_farm, b_id_farm))
+ } catch (err) {
+ throw handleError(err, "Exception for getGrazingIntentions", {
+ b_id_farm,
+ })
+ }
+}
+
+/**
+ * Retrieves the grazing intention for a specific farm and year.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The ID of the principal making the request.
+ * @param b_id_farm The unique identifier of the farm.
+ * @param b_grazing_intention_year The year to retrieve the grazing intention for.
+ * @returns A Promise resolving to a boolean representing the grazing intention. Returns `false` if no intention is found.
+ * @alpha
+ */
+export async function getGrazingIntention(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_farm: schema.farmsTypeSelect["b_id_farm"],
+ b_grazing_intention_year: schema.intendingGrazingTypeSelect["b_grazing_intention_year"],
+): Promise {
+ try {
+ await checkPermission(
+ fdm,
+ "farm",
+ "read",
+ b_id_farm,
+ principal_id,
+ "getGrazingIntention",
+ )
+
+ const result = await fdm
+ .select({ intention: schema.intendingGrazing.b_grazing_intention })
+ .from(schema.intendingGrazing)
+ .where(
+ and(
+ eq(schema.intendingGrazing.b_id_farm, b_id_farm),
+ eq(
+ schema.intendingGrazing.b_grazing_intention_year,
+ b_grazing_intention_year,
+ ),
+ ),
+ )
+ .limit(1)
+
+ return result[0]?.intention ?? false
+ } catch (err) {
+ throw handleError(err, "Exception for getGrazingIntention", {
+ b_id_farm,
+ b_grazing_intention_year,
+ })
+ }
+}
diff --git a/fdm-core/src/index.ts b/fdm-core/src/index.ts
index 3f8138505..5092d3dfb 100644
--- a/fdm-core/src/index.ts
+++ b/fdm-core/src/index.ts
@@ -23,6 +23,12 @@ export {
} from "./authentication"
export type { FdmAuth } from "./authentication.d"
export type { PrincipalId } from "./authorization.d"
+export {
+ getCachedCalculation,
+ setCachedCalculation,
+ setCalculationError,
+ withCalculationCache,
+} from "./calculator"
export {
disableCultivationCatalogue,
disableFertilizerCatalogue,
@@ -41,6 +47,7 @@ export {
getCultivationPlan,
getCultivations,
getCultivationsFromCatalogue,
+ getDefaultDatesOfCultivation,
removeCultivation,
updateCultivation,
} from "./cultivation"
@@ -102,6 +109,12 @@ export {
updateField,
} from "./field"
export type { Field } from "./field.d"
+export {
+ getGrazingIntention,
+ getGrazingIntentions,
+ removeGrazingIntention,
+ setGrazingIntention,
+} from "./grazing_intention"
export {
addHarvest,
getHarvest,
@@ -115,6 +128,16 @@ export type {
HarvestableAnalysis,
} from "./harvest.d"
export { runMigration } from "./migrate"
+export {
+ addOrganicCertification,
+ getOrganicCertification,
+ isOrganicCertificationValid,
+ isValidSkalNumber,
+ isValidTracesNumber,
+ listOrganicCertifications,
+ removeOrganicCertification,
+} from "./organic"
+export type { OrganicCertification } from "./organic.d"
export {
acceptInvitation,
cancelPendingInvitation,
diff --git a/fdm-core/src/organic.d.ts b/fdm-core/src/organic.d.ts
new file mode 100644
index 000000000..710fedde5
--- /dev/null
+++ b/fdm-core/src/organic.d.ts
@@ -0,0 +1,9 @@
+import type * as schema from "./db/schema"
+
+export type OrganicCertification = {
+ b_id_organic: schema.organicCertificationsTypeSelect["b_id_organic"]
+ b_organic_traces: schema.organicCertificationsTypeSelect["b_organic_traces"]
+ b_organic_skal: schema.organicCertificationsTypeSelect["b_organic_skal"]
+ b_organic_issued: schema.organicCertificationsTypeSelect["b_organic_issued"]
+ b_organic_expires: schema.organicCertificationsTypeSelect["b_organic_expires"]
+}
diff --git a/fdm-core/src/organic.test.ts b/fdm-core/src/organic.test.ts
new file mode 100644
index 000000000..ad62d6206
--- /dev/null
+++ b/fdm-core/src/organic.test.ts
@@ -0,0 +1,258 @@
+import { eq } from "drizzle-orm"
+import { beforeEach, describe, expect, inject, it } from "vitest"
+import * as schema from "./db/schema"
+import { addFarm } from "./farm"
+import { createFdmServer } from "./fdm-server"
+import type { FdmServerType } from "./fdm-server.d"
+import { createId } from "./id"
+import {
+ addOrganicCertification,
+ getOrganicCertification,
+ isOrganicCertificationValid,
+ listOrganicCertifications,
+ removeOrganicCertification,
+} from "./organic"
+
+describe("Organic Certifications", () => {
+ let fdm: FdmServerType
+ let farmId: string
+ let principalId: string
+
+ beforeEach(async () => {
+ const host = inject("host")
+ const port = inject("port")
+ const user = inject("user")
+ const password = inject("password")
+ const database = inject("database")
+ fdm = createFdmServer(host, port, user, password, database)
+
+ // Create test field and analyses before each test
+ const farmName = "Test Farm"
+ const farmBusinessId = "123456"
+ const farmAddress = "123 Farm Lane"
+ const farmPostalCode = "12345"
+ principalId = createId()
+ farmId = await addFarm(
+ fdm,
+ principalId,
+ farmName,
+ farmBusinessId,
+ farmAddress,
+ farmPostalCode,
+ )
+ })
+
+ it("should add a new organic certification", async () => {
+ const traces = "NL-BIO-01.528-0002967.2025.001"
+ const skal = "026281"
+ const issued = new Date("2024-01-01T00:00:00Z")
+ const expires = new Date("2025-12-31T23:59:59Z")
+
+ const certificationId = await addOrganicCertification(
+ fdm,
+ principalId,
+ farmId,
+ traces,
+ skal,
+ issued,
+ expires,
+ )
+
+ expect(certificationId).toBeDefined()
+
+ const certifications = await fdm
+ .select()
+ .from(schema.organicCertifications)
+ .where(
+ eq(schema.organicCertifications.b_id_organic, certificationId),
+ )
+
+ expect(certifications.length).toBe(1)
+ expect(certifications[0].b_organic_traces).toBe(traces)
+ expect(certifications[0].b_organic_skal).toBe(skal)
+ expect(certifications[0].b_organic_issued?.toISOString()).toBe(
+ issued.toISOString(),
+ )
+ expect(certifications[0].b_organic_expires?.toISOString()).toBe(
+ expires.toISOString(),
+ )
+
+ const fetchedCertification = await getOrganicCertification(
+ fdm,
+ principalId,
+ certificationId,
+ )
+ expect(fetchedCertification).toBeDefined()
+ expect(fetchedCertification?.b_id_organic).toBe(certificationId)
+ expect(fetchedCertification?.b_organic_traces).toBe(traces)
+ })
+
+ it("should throw an error for invalid TRACES format", async () => {
+ const traces = "INVALID-TRACES"
+ const skal = "026281"
+ const issued = new Date("2024-01-01T00:00:00Z")
+ const expires = new Date("2025-12-31T23:59:59Z")
+
+ await expect(
+ addOrganicCertification(
+ fdm,
+ principalId,
+ farmId,
+ traces,
+ skal,
+ issued,
+ expires,
+ ),
+ ).rejects.toThrow("Invalid TRACES document number format.")
+ })
+
+ it("should throw an error for invalid SKAL format", async () => {
+ const traces = "NL-BIO-01.528-0002967.2025.001"
+ const skal = "INVALID"
+ const issued = new Date("2024-01-01T00:00:00Z")
+ const expires = new Date("2025-12-31T23:59:59Z")
+
+ await expect(
+ addOrganicCertification(
+ fdm,
+ principalId,
+ farmId,
+ traces,
+ skal,
+ issued,
+ expires,
+ ),
+ ).rejects.toThrow("Invalid SKAL number format.")
+ })
+
+ it("should throw an error if issue date is after expiry date", async () => {
+ const traces = "NL-BIO-01.528-0002967.2025.001"
+ const skal = "026281"
+ const issued = new Date("2025-01-01T00:00:00Z")
+ const expires = new Date("2024-12-31T23:59:59Z")
+
+ await expect(
+ addOrganicCertification(
+ fdm,
+ principalId,
+ farmId,
+ traces,
+ skal,
+ issued,
+ expires,
+ ),
+ ).rejects.toThrow("Issue date must be before expiry date.")
+ })
+
+ it("should list organic certifications for a farm", async () => {
+ const traces1 = "NL-BIO-01.528-0002967.2025.001"
+ const skal1 = "026281"
+ const issued1 = new Date("2024-01-01T00:00:00Z")
+ const expires1 = new Date("2025-12-31T23:59:59Z")
+ await addOrganicCertification(
+ fdm,
+ principalId,
+ farmId,
+ traces1,
+ skal1,
+ issued1,
+ expires1,
+ )
+
+ const traces2 = "NL-BIO-01.528-0005471.2025.001"
+ const skal2 = "024295"
+ const issued2 = new Date("2023-06-01T00:00:00Z")
+ const expires2 = new Date("2026-05-31T23:59:59Z")
+ await addOrganicCertification(
+ fdm,
+ principalId,
+ farmId,
+ traces2,
+ skal2,
+ issued2,
+ expires2,
+ )
+
+ const certifications = await listOrganicCertifications(
+ fdm,
+ principalId,
+ farmId,
+ )
+
+ expect(certifications.length).toBe(2)
+ expect(certifications[0].b_organic_traces).toBe(traces1)
+ expect(certifications[1].b_organic_traces).toBe(traces2)
+ })
+
+ it("should remove an organic certification", async () => {
+ const traces = "NL-BIO-01.528-0002967.2025.001"
+ const skal = "026281"
+ const issued = new Date("2024-01-01T00:00:00Z")
+ const expires = new Date("2025-12-31T23:59:59Z")
+
+ const certificationId = await addOrganicCertification(
+ fdm,
+ principalId,
+ farmId,
+ traces,
+ skal,
+ issued,
+ expires,
+ )
+
+ await removeOrganicCertification(fdm, principalId, certificationId)
+
+ const certifications = await fdm
+ .select()
+ .from(schema.organicCertifications)
+ .where(
+ eq(schema.organicCertifications.b_id_organic, certificationId),
+ )
+
+ expect(certifications.length).toBe(0)
+ })
+
+ it("should check if an organic certification is valid for a given date", async () => {
+ const traces = "NL-BIO-01.528-0002967.2025.001"
+ const skal = "026281"
+ const issued = new Date("2024-01-01T00:00:00Z")
+ const expires = new Date("2025-12-31T23:59:59Z")
+
+ await addOrganicCertification(
+ fdm,
+ principalId,
+ farmId,
+ traces,
+ skal,
+ issued,
+ expires,
+ )
+
+ const validDate = new Date("2025-06-15T12:00:00Z")
+ const isValid = await isOrganicCertificationValid(
+ fdm,
+ principalId,
+ farmId,
+ validDate,
+ )
+ expect(isValid).toBe(true)
+
+ const expiredDate = new Date("2026-01-01T00:00:00Z")
+ const isExpired = await isOrganicCertificationValid(
+ fdm,
+ principalId,
+ farmId,
+ expiredDate,
+ )
+ expect(isExpired).toBe(false)
+
+ const futureDate = new Date("2023-12-31T23:59:59Z")
+ const isFuture = await isOrganicCertificationValid(
+ fdm,
+ principalId,
+ farmId,
+ futureDate,
+ )
+ expect(isFuture).toBe(false)
+ })
+})
diff --git a/fdm-core/src/organic.ts b/fdm-core/src/organic.ts
new file mode 100644
index 000000000..a2ef7599d
--- /dev/null
+++ b/fdm-core/src/organic.ts
@@ -0,0 +1,410 @@
+import { and, eq, gte, inArray, lte } from "drizzle-orm"
+import { checkPermission } from "./authorization"
+import type { PrincipalId } from "./authorization.d"
+import * as schema from "./db/schema"
+import { handleError } from "./error"
+import type { FdmType } from "./fdm"
+import { createId } from "./id"
+import type { OrganicCertification } from "./organic.d"
+
+/**
+ * Regular expression for validating EU TRACES document numbers for Organic Operator Certificates.
+ * Examples: NL-BIO-01.528-0002967.2025.001, NL-BIO-01.528-0005471.2025.001
+ */
+const TRACES_REGEX = /^NL-BIO-\d{2}\.\d{3}-\d{7}\.\d{4}\.\d{3}$/
+
+/**
+ * Regular expression for validating SKAL numbers.
+ * Examples: 026281, 024295
+ */
+const SKAL_REGEX = /^\d{6}$/
+
+/**
+ * Validates an EU TRACES document number.
+ * @param tracesNumber The TRACES document number to validate.
+ * @returns True if the TRACES number is valid, false otherwise.
+ */
+export function isValidTracesNumber(tracesNumber: string): boolean {
+ return TRACES_REGEX.test(tracesNumber)
+}
+
+/**
+ * Validates a SKAL number.
+ * @param skalNumber The SKAL number to validate.
+ * @returns True if the SKAL number is valid, false otherwise.
+ */
+export function isValidSkalNumber(skalNumber: string): boolean {
+ return SKAL_REGEX.test(skalNumber)
+}
+
+/**
+ * Adds a new organic certification for a specific farm.
+ *
+ * This function checks if the principal has 'write' permission on the farm,
+ * then creates a new organic certification and links it to the farm.
+ * It also validates the TRACES and SKAL numbers, and the issue/expiry dates.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The identifier of the principal creating the certification.
+ * @param b_id_farm The identifier of the farm receiving the certification.
+ * @param b_organic_traces The document number according to the EU Traces database.
+ * @param b_organic_skal The SKAL number.
+ * @param b_organic_issued The timestamp the certificate is valid from.
+ * @param b_organic_expires The timestamp the certificate expires.
+ * @returns The unique identifier for the new organic certification.
+ * @throws {Error} If the principal does not have permission, validation fails, or the database transaction fails.
+ */
+export async function addOrganicCertification(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_farm: schema.farmsTypeInsert["b_id_farm"],
+ b_organic_traces: schema.organicCertificationsTypeInsert["b_organic_traces"],
+ b_organic_skal: schema.organicCertificationsTypeInsert["b_organic_skal"],
+ b_organic_issued: schema.organicCertificationsTypeInsert["b_organic_issued"],
+ b_organic_expires: schema.organicCertificationsTypeInsert["b_organic_expires"],
+): Promise {
+ if (b_organic_traces && !isValidTracesNumber(b_organic_traces)) {
+ throw new Error("Invalid TRACES document number format.")
+ }
+ if (b_organic_skal && !isValidSkalNumber(b_organic_skal)) {
+ throw new Error("Invalid SKAL number format.")
+ }
+ if (
+ b_organic_issued &&
+ b_organic_expires &&
+ b_organic_issued.getTime() >= b_organic_expires.getTime()
+ ) {
+ throw new Error("Issue date must be before expiry date.")
+ }
+
+ try {
+ return await fdm.transaction(async (tx: FdmType) => {
+ await checkPermission(
+ tx,
+ "farm",
+ "write",
+ b_id_farm,
+ principal_id,
+ "addOrganicCertification",
+ )
+
+ const existingCertification = await tx
+ .select({ id: schema.organicCertifications.b_id_organic })
+ .from(schema.organicCertifications)
+ .leftJoin(
+ schema.organicCertificationsHolding,
+ eq(
+ schema.organicCertifications.b_id_organic,
+ schema.organicCertificationsHolding.b_id_organic,
+ ),
+ )
+ .where(
+ and(
+ eq(
+ schema.organicCertificationsHolding.b_id_farm,
+ b_id_farm,
+ ),
+ b_organic_traces
+ ? eq(
+ schema.organicCertifications.b_organic_traces,
+ b_organic_traces,
+ )
+ : undefined,
+ b_organic_skal
+ ? eq(
+ schema.organicCertifications.b_organic_skal,
+ b_organic_skal,
+ )
+ : undefined,
+ ),
+ )
+ .limit(1)
+
+ if (existingCertification.length > 0) {
+ throw new Error(
+ "Organic certification with similar TRACES/SKAL number already exists for this farm.",
+ )
+ }
+
+ const b_id_organic = createId()
+ await tx.insert(schema.organicCertifications).values({
+ b_id_organic,
+ b_organic_traces,
+ b_organic_skal,
+ b_organic_issued,
+ b_organic_expires,
+ })
+
+ await tx.insert(schema.organicCertificationsHolding).values({
+ b_id_farm,
+ b_id_organic,
+ })
+
+ return b_id_organic
+ })
+ } catch (err) {
+ throw handleError(err, "Exception for addOrganicCertification", {
+ b_id_farm,
+ b_organic_traces,
+ b_organic_skal,
+ })
+ }
+}
+
+/**
+ * Removes an organic certification.
+ *
+ * This function checks if the principal has 'write' permission on the associated farm,
+ * then deletes the certification and its link to the farm.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The identifier of the principal removing the certification.
+ * @param b_id_organic The identifier of the organic certification to remove.
+ * @throws {Error} If the principal does not have permission, the certification does not exist, or the database transaction fails.
+ */
+export async function removeOrganicCertification(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_organic: schema.organicCertificationsTypeInsert["b_id_organic"],
+): Promise {
+ try {
+ await fdm.transaction(async (tx: FdmType) => {
+ const holding = await tx
+ .select()
+ .from(schema.organicCertificationsHolding)
+ .where(
+ eq(
+ schema.organicCertificationsHolding.b_id_organic,
+ b_id_organic,
+ ),
+ )
+
+ if (!holding[0]) {
+ throw new Error("Organic certification not found on any farm.")
+ }
+
+ await checkPermission(
+ tx,
+ "farm",
+ "write",
+ holding[0].b_id_farm,
+ principal_id,
+ "removeOrganicCertification",
+ )
+
+ await tx
+ .delete(schema.organicCertificationsHolding)
+ .where(
+ eq(
+ schema.organicCertificationsHolding.b_id_organic,
+ b_id_organic,
+ ),
+ )
+
+ await tx
+ .delete(schema.organicCertifications)
+ .where(
+ eq(schema.organicCertifications.b_id_organic, b_id_organic),
+ )
+ })
+ } catch (err) {
+ throw handleError(err, "Exception for removeOrganicCertification", {
+ b_id_organic,
+ })
+ }
+}
+
+/**
+ * Lists all organic certifications for a given farm.
+ *
+ * This function checks if the principal has 'read' permission on the farm before returning the list.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The identifier of the principal requesting the list.
+ * @param b_id_farm The identifier of the farm.
+ * @returns A Promise that resolves with a list of organic certifications for the specified farm.
+ * @throws {Error} If the principal does not have permission to read the farm's certifications.
+ */
+export async function listOrganicCertifications(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_farm: schema.farmsTypeInsert["b_id_farm"],
+): Promise {
+ try {
+ return await fdm.transaction(async (tx: FdmType) => {
+ await checkPermission(
+ tx,
+ "farm",
+ "read",
+ b_id_farm,
+ principal_id,
+ "listOrganicCertifications",
+ )
+
+ const holdings = await tx
+ .select({
+ b_id_organic:
+ schema.organicCertificationsHolding.b_id_organic,
+ })
+ .from(schema.organicCertificationsHolding)
+ .where(
+ eq(
+ schema.organicCertificationsHolding.b_id_farm,
+ b_id_farm,
+ ),
+ )
+
+ if (holdings.length === 0) {
+ return []
+ }
+
+ const organicIds = holdings.map(
+ (holding: { b_id_organic: string }) => holding.b_id_organic,
+ )
+
+ return await tx
+ .select()
+ .from(schema.organicCertifications)
+ .where(
+ inArray(
+ schema.organicCertifications.b_id_organic,
+ organicIds,
+ ),
+ )
+ })
+ } catch (err) {
+ throw handleError(err, "Exception for listOrganicCertifications", {
+ b_id_farm,
+ })
+ }
+}
+
+/**
+ * Retrieves the details of a single organic certification by its ID.
+ *
+ * This function checks if the principal has 'read' permission on the associated farm
+ * before returning the certification details.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The identifier of the principal requesting the certification.
+ * @param b_id_organic The identifier of the organic certification to retrieve.
+ * @returns A Promise that resolves with the organic certification details, or undefined if not found.
+ * @throws {Error} If the principal does not have permission or the database transaction fails.
+ */
+export async function getOrganicCertification(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_organic: schema.organicCertificationsTypeSelect["b_id_organic"],
+): Promise {
+ try {
+ return await fdm.transaction(async (tx: FdmType) => {
+ const holding = await tx
+ .select({
+ b_id_farm: schema.organicCertificationsHolding.b_id_farm,
+ })
+ .from(schema.organicCertificationsHolding)
+ .where(
+ eq(
+ schema.organicCertificationsHolding.b_id_organic,
+ b_id_organic,
+ ),
+ )
+ .limit(1)
+
+ if (!holding[0]) {
+ return undefined // Certification not linked to any farm or does not exist
+ }
+
+ await checkPermission(
+ tx,
+ "farm",
+ "read",
+ holding[0].b_id_farm,
+ principal_id,
+ "getOrganicCertification",
+ )
+
+ const certification = await tx
+ .select()
+ .from(schema.organicCertifications)
+ .where(
+ eq(schema.organicCertifications.b_id_organic, b_id_organic),
+ )
+ .limit(1)
+
+ return certification[0]
+ })
+ } catch (err) {
+ throw handleError(err, "Exception for getOrganicCertification", {
+ b_id_organic,
+ })
+ }
+}
+
+/**
+ * Checks if a farm has a valid organic certification on a specific date.
+ *
+ * This function checks if the principal has 'read' permission on the farm.
+ * A certification is considered valid if the given date falls within its issued and expires dates.
+ *
+ * @param fdm The FDM instance providing the connection to the database.
+ * @param principal_id The identifier of the principal making the request.
+ * @param b_id_farm The identifier of the farm.
+ * @param date The date to check for a valid certification.
+ * @returns A Promise that resolves to true if a valid organic certification is found, false otherwise.
+ * @throws {Error} If the principal does not have permission to read the farm's certifications.
+ */
+export async function isOrganicCertificationValid(
+ fdm: FdmType,
+ principal_id: PrincipalId,
+ b_id_farm: schema.farmsTypeInsert["b_id_farm"],
+ date: Date,
+): Promise {
+ try {
+ return await fdm.transaction(async (tx: FdmType) => {
+ await checkPermission(
+ tx,
+ "farm",
+ "read",
+ b_id_farm,
+ principal_id,
+ "isOrganicCertificationValid",
+ )
+
+ const result = await tx
+ .select({ id: schema.organicCertifications.b_id_organic })
+ .from(schema.organicCertifications)
+ .leftJoin(
+ schema.organicCertificationsHolding,
+ eq(
+ schema.organicCertifications.b_id_organic,
+ schema.organicCertificationsHolding.b_id_organic,
+ ),
+ )
+ .where(
+ and(
+ eq(
+ schema.organicCertificationsHolding.b_id_farm,
+ b_id_farm,
+ ),
+ lte(
+ schema.organicCertifications.b_organic_issued,
+ date,
+ ),
+ gte(
+ schema.organicCertifications.b_organic_expires,
+ date,
+ ),
+ ),
+ )
+ .limit(1)
+
+ return result.length > 0
+ })
+ } catch (err) {
+ throw handleError(err, "Exception for isOrganicCertificationValid", {
+ b_id_farm,
+ date,
+ })
+ }
+}
diff --git a/fdm-data/CHANGELOG.md b/fdm-data/CHANGELOG.md
index 88ab9acff..cf49eac52 100644
--- a/fdm-data/CHANGELOG.md
+++ b/fdm-data/CHANGELOG.md
@@ -1,5 +1,12 @@
# fdm-data
+## 0.18.0
+
+### Minor Changes
+
+- 97083dd: Adds `b_lu_start_default` and `b_date_harvest_default` to brp catalogue
+- d6b8900: Add `p_type_rvo` to `baat` catalogue
+
## 0.17.1
### Patch Changes
diff --git a/fdm-data/package.json b/fdm-data/package.json
index dba82c157..3a854bc06 100644
--- a/fdm-data/package.json
+++ b/fdm-data/package.json
@@ -1,7 +1,7 @@
{
"name": "@svenvw/fdm-data",
"private": false,
- "version": "0.17.1",
+ "version": "0.18.0",
"description": "Extend Farm Data Model with catalogue data",
"license": "MIT",
"homepage": "https://github.com/SvenVw/fdm",
@@ -57,7 +57,7 @@
"typescript": "catalog:",
"vitest": "catalog:"
},
- "packageManager": "pnpm@10.17.0",
+ "packageManager": "pnpm@10.18.3",
"publishConfig": {
"registry": "https://npm.pkg.github.com"
},
diff --git a/fdm-data/src/cultivations/catalogues/brp.json b/fdm-data/src/cultivations/catalogues/brp.json
index 1f7750133..71e578a06 100644
--- a/fdm-data/src/cultivations/catalogues/brp.json
+++ b/fdm-data/src/cultivations/catalogues/brp.json
@@ -13,7 +13,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_174",
@@ -29,7 +31,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_175",
@@ -45,7 +49,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_176",
@@ -61,7 +67,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_212",
@@ -77,7 +85,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_229",
@@ -93,7 +103,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_233",
@@ -109,7 +121,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_234",
@@ -125,7 +139,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_235",
@@ -141,7 +157,9 @@
"b_lu_n_residue": 4.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "09-14",
+ "b_date_harvest_default": "07-21"
},
{
"b_lu_catalogue": "nl_236",
@@ -157,7 +175,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_237",
@@ -173,7 +193,9 @@
"b_lu_n_residue": 4.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_238",
@@ -189,7 +211,9 @@
"b_lu_n_residue": 4.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_239",
@@ -205,7 +229,9 @@
"b_lu_n_residue": 29.8,
"b_n_fixation": 100,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_240",
@@ -221,7 +247,9 @@
"b_lu_n_residue": 24.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "07-21"
},
{
"b_lu_catalogue": "nl_241",
@@ -237,7 +265,9 @@
"b_lu_n_residue": 24.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_242",
@@ -253,7 +283,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_243",
@@ -269,7 +301,9 @@
"b_lu_n_residue": 21.1,
"b_n_fixation": 100,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_244",
@@ -285,7 +319,9 @@
"b_lu_n_residue": 29.8,
"b_n_fixation": 100,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "07-21"
},
{
"b_lu_catalogue": "nl_246",
@@ -301,7 +337,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-15",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_247",
@@ -317,7 +355,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-15",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_249",
@@ -333,7 +373,9 @@
"b_lu_n_residue": 4.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-24"
},
{
"b_lu_catalogue": "nl_256",
@@ -349,7 +391,9 @@
"b_lu_n_residue": 17.5,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_257",
@@ -365,7 +409,9 @@
"b_lu_n_residue": 17.5,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_258",
@@ -381,7 +427,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 300,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_259",
@@ -397,7 +445,9 @@
"b_lu_n_residue": 10,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_262",
@@ -413,7 +463,9 @@
"b_lu_n_residue": 15.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "09-01"
},
{
"b_lu_catalogue": "nl_263",
@@ -429,7 +481,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_265",
@@ -445,7 +499,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_266",
@@ -461,7 +517,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_294",
@@ -477,7 +535,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_308",
@@ -493,7 +553,9 @@
"b_lu_n_residue": 24.7,
"b_n_fixation": 100,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_311",
@@ -509,7 +571,9 @@
"b_lu_n_residue": 21.1,
"b_n_fixation": 100,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_314",
@@ -525,7 +589,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_316",
@@ -541,7 +607,9 @@
"b_lu_n_residue": 10,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_317",
@@ -557,7 +625,9 @@
"b_lu_n_residue": 10,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_331",
@@ -573,7 +643,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_332",
@@ -589,7 +661,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_333",
@@ -605,7 +679,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_334",
@@ -621,7 +697,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_335",
@@ -637,7 +715,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_336",
@@ -653,7 +733,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_337",
@@ -669,7 +751,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_338",
@@ -685,7 +769,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_343",
@@ -701,7 +787,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_344",
@@ -717,7 +805,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_345",
@@ -733,7 +823,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_346",
@@ -749,7 +841,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_347",
@@ -765,7 +859,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_370",
@@ -781,7 +877,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_372",
@@ -797,7 +895,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_375",
@@ -813,7 +913,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_381",
@@ -829,7 +931,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_382",
@@ -845,7 +949,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_383",
@@ -861,7 +967,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_426",
@@ -877,7 +985,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_427",
@@ -893,7 +1003,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_428",
@@ -909,7 +1021,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_511",
@@ -925,7 +1039,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_513",
@@ -941,7 +1057,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_515",
@@ -957,7 +1075,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_516",
@@ -973,7 +1093,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_636",
@@ -989,7 +1111,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_637",
@@ -1005,7 +1129,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_652",
@@ -1021,7 +1147,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_653",
@@ -1037,7 +1165,9 @@
"b_lu_n_residue": 3.5,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_654",
@@ -1053,7 +1183,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_655",
@@ -1069,7 +1201,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_656",
@@ -1085,7 +1219,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_657",
@@ -1101,7 +1237,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_658",
@@ -1117,7 +1255,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_659",
@@ -1133,7 +1273,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_660",
@@ -1149,7 +1291,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_661",
@@ -1165,7 +1309,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_662",
@@ -1181,7 +1327,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_663",
@@ -1197,7 +1345,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_664",
@@ -1213,7 +1363,9 @@
"b_lu_n_residue": 7.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_665",
@@ -1229,7 +1381,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_666",
@@ -1245,7 +1399,9 @@
"b_lu_n_residue": 4.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-24"
},
{
"b_lu_catalogue": "nl_669",
@@ -1261,7 +1417,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_670",
@@ -1277,7 +1435,9 @@
"b_lu_n_residue": 4.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_671",
@@ -1293,7 +1453,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_672",
@@ -1309,7 +1471,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_794",
@@ -1325,7 +1489,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_795",
@@ -1341,7 +1507,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_796",
@@ -1357,7 +1525,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_799",
@@ -1373,7 +1543,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_800",
@@ -1389,7 +1561,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_801",
@@ -1405,7 +1579,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_802",
@@ -1421,7 +1597,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_803",
@@ -1437,7 +1615,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_804",
@@ -1453,7 +1633,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_814",
@@ -1469,7 +1651,9 @@
"b_lu_n_residue": 16,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_853",
@@ -1485,7 +1669,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 100,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_854",
@@ -1501,7 +1687,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 100,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_859",
@@ -1517,7 +1705,9 @@
"b_lu_n_residue": 16.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_863",
@@ -1533,7 +1723,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_864",
@@ -1549,7 +1741,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_944",
@@ -1565,7 +1759,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_964",
@@ -1581,7 +1777,9 @@
"b_lu_n_residue": 17.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_965",
@@ -1597,7 +1795,9 @@
"b_lu_n_residue": 17.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_967",
@@ -1613,7 +1813,9 @@
"b_lu_n_residue": 13,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_968",
@@ -1629,7 +1831,9 @@
"b_lu_n_residue": 13,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_970",
@@ -1645,7 +1849,9 @@
"b_lu_n_residue": 19.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_971",
@@ -1661,7 +1867,9 @@
"b_lu_n_residue": 19.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_973",
@@ -1677,7 +1885,9 @@
"b_lu_n_residue": 11.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_974",
@@ -1693,7 +1903,9 @@
"b_lu_n_residue": 11.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_976",
@@ -1709,7 +1921,9 @@
"b_lu_n_residue": 13.4,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_977",
@@ -1725,7 +1939,9 @@
"b_lu_n_residue": 13.4,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_979",
@@ -1741,7 +1957,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_980",
@@ -1757,7 +1975,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_982",
@@ -1773,7 +1993,9 @@
"b_lu_n_residue": 12.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_983",
@@ -1789,7 +2011,9 @@
"b_lu_n_residue": 12.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_985",
@@ -1805,7 +2029,9 @@
"b_lu_n_residue": 13.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_986",
@@ -1821,7 +2047,9 @@
"b_lu_n_residue": 13.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_988",
@@ -1837,7 +2065,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_989",
@@ -1853,7 +2083,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_991",
@@ -1869,7 +2101,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_992",
@@ -1885,7 +2119,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_994",
@@ -1901,7 +2137,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_995",
@@ -1917,7 +2155,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_997",
@@ -1933,7 +2173,9 @@
"b_lu_n_residue": 17.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_998",
@@ -1949,7 +2191,9 @@
"b_lu_n_residue": 13,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_999",
@@ -1965,7 +2209,9 @@
"b_lu_n_residue": 19.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1000",
@@ -1981,7 +2227,9 @@
"b_lu_n_residue": 11.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1001",
@@ -1997,7 +2245,9 @@
"b_lu_n_residue": 13.4,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1002",
@@ -2013,7 +2263,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1003",
@@ -2029,7 +2281,9 @@
"b_lu_n_residue": 12.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1004",
@@ -2045,7 +2299,9 @@
"b_lu_n_residue": 13.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1005",
@@ -2061,7 +2317,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1006",
@@ -2077,7 +2335,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1007",
@@ -2093,7 +2353,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1010",
@@ -2109,7 +2371,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1011",
@@ -2125,7 +2389,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1012",
@@ -2141,7 +2407,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1013",
@@ -2157,7 +2425,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1014",
@@ -2173,7 +2443,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1015",
@@ -2189,7 +2461,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1016",
@@ -2205,7 +2479,9 @@
"b_lu_n_residue": 19.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1017",
@@ -2221,7 +2497,9 @@
"b_lu_n_residue": 19.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1018",
@@ -2237,7 +2515,9 @@
"b_lu_n_residue": 19.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1019",
@@ -2253,7 +2533,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1020",
@@ -2269,7 +2551,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1021",
@@ -2285,7 +2569,9 @@
"b_lu_n_residue": 5,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-14",
+ "b_date_harvest_default": "06-15"
},
{
"b_lu_catalogue": "nl_1022",
@@ -2301,7 +2587,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "08-31"
},
{
"b_lu_catalogue": "nl_1023",
@@ -2317,7 +2605,9 @@
"b_lu_n_residue": 22.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-21"
},
{
"b_lu_catalogue": "nl_1024",
@@ -2333,7 +2623,9 @@
"b_lu_n_residue": 22.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-21"
},
{
"b_lu_catalogue": "nl_1025",
@@ -2349,7 +2641,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": "Alchemilla mollis||Carthamus||Gypsophila paniculata||Lymonium||Lysimachia||Paeonia||Solidago||Veronica"
+ "b_lu_variety_options": "Alchemilla mollis||Carthamus||Gypsophila paniculata||Lymonium||Lysimachia||Paeonia||Solidago||Veronica",
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1026",
@@ -2365,7 +2659,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": "Alchemilla mollis||Carthamus||Gypsophila paniculata||Lymonium||Lysimachia||Paeonia||Solidago||Veronica"
+ "b_lu_variety_options": "Alchemilla mollis||Carthamus||Gypsophila paniculata||Lymonium||Lysimachia||Paeonia||Solidago||Veronica",
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1027",
@@ -2381,7 +2677,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1028",
@@ -2397,7 +2695,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1029",
@@ -2413,7 +2713,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1030",
@@ -2429,7 +2731,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1031",
@@ -2445,7 +2749,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1032",
@@ -2461,7 +2767,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1033",
@@ -2477,7 +2785,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1034",
@@ -2493,7 +2803,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1035",
@@ -2509,7 +2821,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1036",
@@ -2525,7 +2839,9 @@
"b_lu_n_residue": 22.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-01"
},
{
"b_lu_catalogue": "nl_1037",
@@ -2541,7 +2857,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-15",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1038",
@@ -2557,7 +2875,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-15",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1039",
@@ -2573,7 +2893,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1040",
@@ -2589,7 +2911,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1042",
@@ -2605,7 +2929,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1043",
@@ -2621,7 +2947,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1044",
@@ -2637,7 +2965,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1045",
@@ -2653,7 +2983,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1046",
@@ -2669,7 +3001,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1047",
@@ -2685,7 +3019,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1048",
@@ -2701,7 +3037,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1049",
@@ -2717,7 +3055,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1050",
@@ -2733,7 +3073,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1051",
@@ -2749,7 +3091,9 @@
"b_lu_n_residue": 11.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1052",
@@ -2765,7 +3109,9 @@
"b_lu_n_residue": 11.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1053",
@@ -2781,7 +3127,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1054",
@@ -2797,7 +3145,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": "Alchemilla mollis||Carthamus||Gypsophila paniculata||Lymonium||Lysimachia||Paeonia||Solidago||Veronica"
+ "b_lu_variety_options": "Alchemilla mollis||Carthamus||Gypsophila paniculata||Lymonium||Lysimachia||Paeonia||Solidago||Veronica",
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1055",
@@ -2813,7 +3163,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1067",
@@ -2829,7 +3181,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1068",
@@ -2845,7 +3199,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1069",
@@ -2861,7 +3217,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1070",
@@ -2877,7 +3235,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1071",
@@ -2893,7 +3253,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1072",
@@ -2909,7 +3271,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1073",
@@ -2925,7 +3289,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1074",
@@ -2941,7 +3307,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1075",
@@ -2957,7 +3325,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1076",
@@ -2973,7 +3343,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1077",
@@ -2989,7 +3361,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1078",
@@ -3005,7 +3379,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1079",
@@ -3021,7 +3397,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1080",
@@ -3037,7 +3415,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1081",
@@ -3053,7 +3433,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1082",
@@ -3069,7 +3451,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1083",
@@ -3085,7 +3469,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1084",
@@ -3101,7 +3487,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1085",
@@ -3117,7 +3505,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1086",
@@ -3133,7 +3523,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1087",
@@ -3149,7 +3541,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1088",
@@ -3165,7 +3559,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1089",
@@ -3181,7 +3577,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1090",
@@ -3197,7 +3595,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1091",
@@ -3213,7 +3613,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1092",
@@ -3229,7 +3631,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1093",
@@ -3245,7 +3649,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1094",
@@ -3261,7 +3667,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1095",
@@ -3277,7 +3685,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1096",
@@ -3293,7 +3703,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1097",
@@ -3309,7 +3721,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1098",
@@ -3325,7 +3739,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1099",
@@ -3341,7 +3757,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1100",
@@ -3357,7 +3775,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1570",
@@ -3373,7 +3793,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1574",
@@ -3389,7 +3811,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1575",
@@ -3405,7 +3829,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1697",
@@ -3421,7 +3847,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1698",
@@ -3437,7 +3865,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1869",
@@ -3453,7 +3883,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1870",
@@ -3469,7 +3901,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1872",
@@ -3485,7 +3919,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1873",
@@ -3501,7 +3937,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1874",
@@ -3517,7 +3955,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1876",
@@ -3533,7 +3973,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_1909",
@@ -3549,7 +3991,9 @@
"b_lu_n_residue": 16.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_1910",
@@ -3565,7 +4009,9 @@
"b_lu_n_residue": 16.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_1911",
@@ -3581,7 +4027,9 @@
"b_lu_n_residue": 17.6,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_1912",
@@ -3597,7 +4045,9 @@
"b_lu_n_residue": 17.6,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_1914",
@@ -3613,7 +4063,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1915",
@@ -3629,7 +4081,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1916",
@@ -3645,7 +4099,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1917",
@@ -3661,7 +4117,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1918",
@@ -3677,7 +4135,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1919",
@@ -3693,7 +4153,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1920",
@@ -3709,7 +4171,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1921",
@@ -3725,7 +4189,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1922",
@@ -3741,7 +4207,9 @@
"b_lu_n_residue": 7.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "08-22",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_1923",
@@ -3757,7 +4225,9 @@
"b_lu_n_residue": 7.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_1925",
@@ -3773,7 +4243,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_1926",
@@ -3789,7 +4261,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1927",
@@ -3805,7 +4279,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_1928",
@@ -3821,7 +4297,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_1929",
@@ -3837,7 +4315,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_1930",
@@ -3853,7 +4333,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1931",
@@ -3869,7 +4351,9 @@
"b_lu_n_residue": 5,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_1932",
@@ -3885,7 +4369,9 @@
"b_lu_n_residue": 5,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_1933",
@@ -3901,7 +4387,9 @@
"b_lu_n_residue": 5,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_1934",
@@ -3917,7 +4405,9 @@
"b_lu_n_residue": 5,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_1935",
@@ -3933,7 +4423,9 @@
"b_lu_n_residue": 10,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-01"
},
{
"b_lu_catalogue": "nl_1936",
@@ -3949,7 +4441,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1940",
@@ -3965,7 +4459,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1949",
@@ -3981,7 +4477,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_1950",
@@ -3997,7 +4495,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_1959",
@@ -4013,7 +4513,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2014",
@@ -4029,7 +4531,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": "Adora||Annabelle||Bintje||Carlita||Courage||Draga||Felsina||Fontane||Innovator||Inova||Jaerla||Lady Blanca||Lady Olympia||Lady Rosetta||Liseta||Maritiema||Marlen||Miranda||Ramos||Redstar||Sante||Satellite||Victoria||VR 808||Zorba||Agria||Allure||Alpha||Aprilia||Asterix||Aziza||Ballys||Baraka||Bartina||Ceasar||Dore||Eigenheimer||El Paso||Futura||Gloria||Irene||Maradonna||Markies||Milva||Minerva||Mondial||Morene||Mozart||Producent||Remarka||Rodeo||Safari||Saphire||Simply Red||Spirit||Terra Gold||Ukama||Vision"
+ "b_lu_variety_options": "Adora||Annabelle||Bintje||Carlita||Courage||Draga||Felsina||Fontane||Innovator||Inova||Jaerla||Lady Blanca||Lady Olympia||Lady Rosetta||Liseta||Maritiema||Marlen||Miranda||Ramos||Redstar||Sante||Satellite||Victoria||VR 808||Zorba||Agria||Allure||Alpha||Aprilia||Asterix||Aziza||Ballys||Baraka||Bartina||Ceasar||Dore||Eigenheimer||El Paso||Futura||Gloria||Irene||Maradonna||Markies||Milva||Minerva||Mondial||Morene||Mozart||Producent||Remarka||Rodeo||Safari||Saphire||Simply Red||Spirit||Terra Gold||Ukama||Vision",
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_2015",
@@ -4045,7 +4549,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": "Adora||Agata||Annabelle||Arinda||Berber||Binella||Climax||Donald||Elisabeth||Fontane||Gloria||Inova||Jaerla||Junior||Lady Rosetta||Lady Olympia||Leyla||Linzer Delikatess||Miriam||Orinana||Premiere||Primura||Prior||Rikea||Romano||Satellite||Sirco||Sirtema||Tresor||Ukama||Arcade||Astarte||Asterix||Baraka||Bartina||Diamant||Dolce Vita||Elles||Elvira||Everest||Florijn||Kardal||Karnico||Maradonna||Mondial||Morene||Mozart||Picasso||Remarka||Resonant||Rodeo||Saphire||Sifra||Simply Red||Spirit||Van Gogh||Vebesta||Vento||Voyager"
+ "b_lu_variety_options": "Adora||Agata||Annabelle||Arinda||Berber||Binella||Climax||Donald||Elisabeth||Fontane||Gloria||Inova||Jaerla||Junior||Lady Rosetta||Lady Olympia||Leyla||Linzer Delikatess||Miriam||Orinana||Premiere||Primura||Prior||Rikea||Romano||Satellite||Sirco||Sirtema||Tresor||Ukama||Arcade||Astarte||Asterix||Baraka||Bartina||Diamant||Dolce Vita||Elles||Elvira||Everest||Florijn||Kardal||Karnico||Maradonna||Mondial||Morene||Mozart||Picasso||Remarka||Resonant||Rodeo||Saphire||Sifra||Simply Red||Spirit||Van Gogh||Vebesta||Vento||Voyager",
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_2016",
@@ -4061,7 +4567,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": "Adora||Agata||Annabelle||Arinda||Berber||Binella||Climax||Donald||Elisabeth||Fontane||Gloria||Inova||Jaerla||Junior||Lady Rosetta||Lady Olympia||Leyla||Linzer Delikatess||Miriam||Orinana||Premiere||Primura||Prior||Rikea||Romano||Satellite||Sirco||Sirtema||Tresor||Ukama||Arcade||Astarte||Asterix||Baraka||Bartina||Diamant||Dolce Vita||Elles||Elvira||Everest||Florijn||Kardal||Karnico||Maradonna||Mondial||Morene||Mozart||Picasso||Remarka||Resonant||Rodeo||Saphire||Sifra||Simply Red||Spirit||Van Gogh||Vebesta||Vento||Voyager"
+ "b_lu_variety_options": "Adora||Agata||Annabelle||Arinda||Berber||Binella||Climax||Donald||Elisabeth||Fontane||Gloria||Inova||Jaerla||Junior||Lady Rosetta||Lady Olympia||Leyla||Linzer Delikatess||Miriam||Orinana||Premiere||Primura||Prior||Rikea||Romano||Satellite||Sirco||Sirtema||Tresor||Ukama||Arcade||Astarte||Asterix||Baraka||Bartina||Diamant||Dolce Vita||Elles||Elvira||Everest||Florijn||Kardal||Karnico||Maradonna||Mondial||Morene||Mozart||Picasso||Remarka||Resonant||Rodeo||Saphire||Sifra||Simply Red||Spirit||Van Gogh||Vebesta||Vento||Voyager",
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_2017",
@@ -4077,7 +4585,9 @@
"b_lu_n_residue": 16.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_2025",
@@ -4093,7 +4603,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_2026",
@@ -4109,7 +4621,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2027",
@@ -4125,7 +4639,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2029",
@@ -4141,7 +4657,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2030",
@@ -4157,7 +4675,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2031",
@@ -4173,7 +4693,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2032",
@@ -4189,7 +4711,9 @@
"b_lu_n_residue": 10,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_2033",
@@ -4205,7 +4729,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2297",
@@ -4221,7 +4747,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2298",
@@ -4237,7 +4765,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2299",
@@ -4253,7 +4783,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2300",
@@ -4269,7 +4801,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2301",
@@ -4285,7 +4819,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2302",
@@ -4301,7 +4837,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2303",
@@ -4317,7 +4855,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2304",
@@ -4333,7 +4873,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2325",
@@ -4349,7 +4891,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2326",
@@ -4365,7 +4909,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2327",
@@ -4381,7 +4927,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2328",
@@ -4397,7 +4945,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2617",
@@ -4413,7 +4963,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2618",
@@ -4429,7 +4981,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2619",
@@ -4445,7 +4999,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2620",
@@ -4461,7 +5017,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2621",
@@ -4477,7 +5035,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2622",
@@ -4493,7 +5053,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2624",
@@ -4509,7 +5071,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2625",
@@ -4525,7 +5089,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2626",
@@ -4541,7 +5107,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2628",
@@ -4557,7 +5125,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2629",
@@ -4573,7 +5143,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2630",
@@ -4589,7 +5161,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2631",
@@ -4605,7 +5179,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2633",
@@ -4621,7 +5197,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2634",
@@ -4637,7 +5215,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2635",
@@ -4653,7 +5233,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2636",
@@ -4669,7 +5251,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2637",
@@ -4685,7 +5269,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2638",
@@ -4701,7 +5287,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2639",
@@ -4717,7 +5305,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2640",
@@ -4733,7 +5323,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2641",
@@ -4749,7 +5341,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2642",
@@ -4765,7 +5359,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2643",
@@ -4781,7 +5377,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2644",
@@ -4797,7 +5395,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_2645",
@@ -4813,7 +5413,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2650",
@@ -4829,7 +5431,9 @@
"b_lu_n_residue": 24.7,
"b_n_fixation": 100,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2651",
@@ -4845,7 +5449,9 @@
"b_lu_n_residue": 17.5,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2652",
@@ -4861,7 +5467,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_2653",
@@ -4877,7 +5485,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2700",
@@ -4893,7 +5503,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2701",
@@ -4909,7 +5521,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2702",
@@ -4925,7 +5539,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2703",
@@ -4941,7 +5557,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2704",
@@ -4957,7 +5575,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2705",
@@ -4973,7 +5593,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2706",
@@ -4989,7 +5611,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2707",
@@ -5005,7 +5629,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2708",
@@ -5021,7 +5647,9 @@
"b_lu_n_residue": 30,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_2709",
@@ -5037,7 +5665,9 @@
"b_lu_n_residue": 30,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-14"
},
{
"b_lu_catalogue": "nl_2710",
@@ -5053,7 +5683,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2711",
@@ -5069,7 +5701,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2712",
@@ -5085,7 +5719,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2713",
@@ -5101,7 +5737,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-15",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_2714",
@@ -5117,7 +5755,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-15",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_2715",
@@ -5133,7 +5773,9 @@
"b_lu_n_residue": 24.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "07-14",
+ "b_date_harvest_default": "12-01"
},
{
"b_lu_catalogue": "nl_2716",
@@ -5149,7 +5791,9 @@
"b_lu_n_residue": 24.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "07-14",
+ "b_date_harvest_default": "12-01"
},
{
"b_lu_catalogue": "nl_2717",
@@ -5165,7 +5809,9 @@
"b_lu_n_residue": 22.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2718",
@@ -5181,7 +5827,9 @@
"b_lu_n_residue": 22.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2719",
@@ -5197,7 +5845,9 @@
"b_lu_n_residue": 41.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2720",
@@ -5213,7 +5863,9 @@
"b_lu_n_residue": 41.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2721",
@@ -5229,7 +5881,9 @@
"b_lu_n_residue": 43.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2722",
@@ -5245,7 +5899,9 @@
"b_lu_n_residue": 43.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2723",
@@ -5261,7 +5917,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2724",
@@ -5277,7 +5935,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2725",
@@ -5293,7 +5953,9 @@
"b_lu_n_residue": 22.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "11-01"
},
{
"b_lu_catalogue": "nl_2726",
@@ -5309,7 +5971,9 @@
"b_lu_n_residue": 22.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "11-01"
},
{
"b_lu_catalogue": "nl_2727",
@@ -5325,7 +5989,9 @@
"b_lu_n_residue": 38.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2728",
@@ -5341,7 +6007,9 @@
"b_lu_n_residue": 38.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2729",
@@ -5357,7 +6025,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2730",
@@ -5373,7 +6043,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2731",
@@ -5389,7 +6061,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2732",
@@ -5405,7 +6079,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2733",
@@ -5421,7 +6097,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_2734",
@@ -5437,7 +6115,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_2735",
@@ -5453,7 +6133,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-15",
+ "b_date_harvest_default": "09-21"
},
{
"b_lu_catalogue": "nl_2736",
@@ -5469,7 +6151,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-15",
+ "b_date_harvest_default": "09-21"
},
{
"b_lu_catalogue": "nl_2737",
@@ -5485,7 +6169,9 @@
"b_lu_n_residue": 22.6,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "07-14",
+ "b_date_harvest_default": "11-01"
},
{
"b_lu_catalogue": "nl_2738",
@@ -5501,7 +6187,9 @@
"b_lu_n_residue": 22.6,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "07-14",
+ "b_date_harvest_default": "11-01"
},
{
"b_lu_catalogue": "nl_2739",
@@ -5517,7 +6205,9 @@
"b_lu_n_residue": 35,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2740",
@@ -5533,7 +6223,9 @@
"b_lu_n_residue": 35,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2741",
@@ -5549,7 +6241,9 @@
"b_lu_n_residue": 25.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2742",
@@ -5565,7 +6259,9 @@
"b_lu_n_residue": 25.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2743",
@@ -5581,7 +6277,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2744",
@@ -5597,7 +6295,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2745",
@@ -5613,7 +6313,9 @@
"b_lu_n_residue": 43.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2746",
@@ -5629,7 +6331,9 @@
"b_lu_n_residue": 43.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2747",
@@ -5645,7 +6349,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_2748",
@@ -5661,7 +6367,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_2749",
@@ -5677,7 +6385,9 @@
"b_lu_n_residue": 31.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2750",
@@ -5693,7 +6403,9 @@
"b_lu_n_residue": 31.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2751",
@@ -5709,7 +6421,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_2752",
@@ -5725,7 +6439,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_2753",
@@ -5741,7 +6457,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "05-21"
},
{
"b_lu_catalogue": "nl_2754",
@@ -5757,7 +6475,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "05-21"
},
{
"b_lu_catalogue": "nl_2755",
@@ -5773,7 +6493,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2756",
@@ -5789,7 +6511,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_2757",
@@ -5805,7 +6529,9 @@
"b_lu_n_residue": 50,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "05-15"
},
{
"b_lu_catalogue": "nl_2758",
@@ -5821,7 +6547,9 @@
"b_lu_n_residue": 50,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "05-15"
},
{
"b_lu_catalogue": "nl_2759",
@@ -5837,7 +6565,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "10-01"
},
{
"b_lu_catalogue": "nl_2760",
@@ -5853,7 +6583,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "10-01"
},
{
"b_lu_catalogue": "nl_2761",
@@ -5869,7 +6601,9 @@
"b_lu_n_residue": 31.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "02-15",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_2762",
@@ -5885,7 +6619,9 @@
"b_lu_n_residue": 31.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "02-15",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_2763",
@@ -5901,7 +6637,9 @@
"b_lu_n_residue": 19.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "11-15"
},
{
"b_lu_catalogue": "nl_2764",
@@ -5917,7 +6655,9 @@
"b_lu_n_residue": 19.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "11-15"
},
{
"b_lu_catalogue": "nl_2765",
@@ -5933,7 +6673,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2766",
@@ -5949,7 +6691,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2767",
@@ -5965,7 +6709,9 @@
"b_lu_n_residue": 41.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2768",
@@ -5981,7 +6727,9 @@
"b_lu_n_residue": 41.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2769",
@@ -5997,7 +6745,9 @@
"b_lu_n_residue": 41.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2770",
@@ -6013,7 +6763,9 @@
"b_lu_n_residue": 41.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2771",
@@ -6029,7 +6781,9 @@
"b_lu_n_residue": 33.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2772",
@@ -6045,7 +6799,9 @@
"b_lu_n_residue": 33.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2773",
@@ -6061,7 +6817,9 @@
"b_lu_n_residue": 50,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "06-01"
},
{
"b_lu_catalogue": "nl_2774",
@@ -6077,7 +6835,9 @@
"b_lu_n_residue": 50,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "06-01"
},
{
"b_lu_catalogue": "nl_2775",
@@ -6093,7 +6853,9 @@
"b_lu_n_residue": 35.6,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "06-01",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_2776",
@@ -6109,7 +6871,9 @@
"b_lu_n_residue": 35.6,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "06-01",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_2777",
@@ -6125,7 +6889,9 @@
"b_lu_n_residue": 16.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "11-14"
},
{
"b_lu_catalogue": "nl_2778",
@@ -6141,7 +6907,9 @@
"b_lu_n_residue": 16.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "11-14"
},
{
"b_lu_catalogue": "nl_2779",
@@ -6157,7 +6925,9 @@
"b_lu_n_residue": 32.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_2780",
@@ -6173,7 +6943,9 @@
"b_lu_n_residue": 32.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_2781",
@@ -6189,7 +6961,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_2782",
@@ -6205,7 +6979,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-21",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_2783",
@@ -6221,7 +6997,9 @@
"b_lu_n_residue": 22.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2784",
@@ -6237,7 +7015,9 @@
"b_lu_n_residue": 22.2,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2785",
@@ -6253,7 +7033,9 @@
"b_lu_n_residue": 29,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-21"
},
{
"b_lu_catalogue": "nl_2786",
@@ -6269,7 +7051,9 @@
"b_lu_n_residue": 29,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "10-21"
},
{
"b_lu_catalogue": "nl_2787",
@@ -6285,7 +7069,9 @@
"b_lu_n_residue": 19.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-21",
+ "b_date_harvest_default": "09-21"
},
{
"b_lu_catalogue": "nl_2788",
@@ -6301,7 +7087,9 @@
"b_lu_n_residue": 19.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-21",
+ "b_date_harvest_default": "09-21"
},
{
"b_lu_catalogue": "nl_2789",
@@ -6317,7 +7105,9 @@
"b_lu_n_residue": 26.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_2790",
@@ -6333,7 +7123,9 @@
"b_lu_n_residue": 26.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "08-14"
},
{
"b_lu_catalogue": "nl_2791",
@@ -6349,7 +7141,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2792",
@@ -6365,7 +7159,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2793",
@@ -6381,7 +7177,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2794",
@@ -6397,7 +7195,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "06-21"
},
{
"b_lu_catalogue": "nl_2795",
@@ -6413,7 +7213,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "07-14",
+ "b_date_harvest_default": "10-01"
},
{
"b_lu_catalogue": "nl_2796",
@@ -6429,7 +7231,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "07-14",
+ "b_date_harvest_default": "10-01"
},
{
"b_lu_catalogue": "nl_2797",
@@ -6445,7 +7249,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-15",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_2798",
@@ -6461,7 +7267,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-15",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_2799",
@@ -6477,7 +7285,9 @@
"b_lu_n_residue": 31.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "07-14",
+ "b_date_harvest_default": "04-01"
},
{
"b_lu_catalogue": "nl_2800",
@@ -6493,7 +7303,9 @@
"b_lu_n_residue": 31.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "07-14",
+ "b_date_harvest_default": "04-01"
},
{
"b_lu_catalogue": "nl_2801",
@@ -6509,7 +7321,9 @@
"b_lu_n_residue": 31.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2802",
@@ -6525,7 +7339,9 @@
"b_lu_n_residue": 31.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "07-14"
},
{
"b_lu_catalogue": "nl_2951",
@@ -6541,7 +7357,9 @@
"b_lu_n_residue": 16.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_3055",
@@ -6557,7 +7375,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3500",
@@ -6573,7 +7393,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3501",
@@ -6589,7 +7411,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3502",
@@ -6605,7 +7429,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3503",
@@ -6621,7 +7447,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3504",
@@ -6637,7 +7465,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3505",
@@ -6653,7 +7483,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3506",
@@ -6669,7 +7501,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3507",
@@ -6685,7 +7519,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3508",
@@ -6701,7 +7537,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3509",
@@ -6717,7 +7555,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3510",
@@ -6733,7 +7573,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3511",
@@ -6749,7 +7591,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3512",
@@ -6765,7 +7609,9 @@
"b_lu_n_residue": 9.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3513",
@@ -6781,7 +7627,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3514",
@@ -6797,7 +7645,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3515",
@@ -6813,7 +7663,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3516",
@@ -6829,7 +7681,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3517",
@@ -6845,7 +7699,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3518",
@@ -6861,7 +7717,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3519",
@@ -6877,7 +7735,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3520",
@@ -6893,7 +7753,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "08-15",
+ "b_date_harvest_default": "10-15"
},
{
"b_lu_catalogue": "nl_3521",
@@ -6909,7 +7771,9 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "08-01",
+ "b_date_harvest_default": "11-15"
},
{
"b_lu_catalogue": "nl_3522",
@@ -6925,7 +7789,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3523",
@@ -6941,7 +7807,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3524",
@@ -6957,7 +7825,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3718",
@@ -6973,7 +7843,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3719",
@@ -6989,7 +7861,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3720",
@@ -7005,7 +7879,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3721",
@@ -7021,7 +7897,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3722",
@@ -7037,7 +7915,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3730",
@@ -7053,7 +7933,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_3731",
@@ -7069,7 +7951,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_3732",
@@ -7085,7 +7969,9 @@
"b_lu_n_residue": 22,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_3736",
@@ -7101,7 +7987,9 @@
"b_lu_n_residue": 4.7,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-24"
},
{
"b_lu_catalogue": "nl_3792",
@@ -7117,7 +8005,9 @@
"b_lu_n_residue": 16.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-15",
+ "b_date_harvest_default": "09-14"
},
{
"b_lu_catalogue": "nl_3801",
@@ -7133,7 +8023,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3802",
@@ -7149,7 +8041,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3803",
@@ -7165,7 +8059,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3804",
@@ -7181,7 +8077,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3805",
@@ -7197,7 +8095,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3806",
@@ -7213,7 +8113,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_3807",
@@ -7229,7 +8131,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_3808",
@@ -7245,7 +8149,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6520",
@@ -7261,7 +8167,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6521",
@@ -7277,7 +8185,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6522",
@@ -7293,7 +8203,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6632",
@@ -7309,7 +8221,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-15",
+ "b_date_harvest_default": "10-01"
},
{
"b_lu_catalogue": "nl_6636",
@@ -7325,7 +8239,9 @@
"b_lu_n_residue": 4.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_6660",
@@ -7341,7 +8257,9 @@
"b_lu_n_residue": 15.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "09-01"
},
{
"b_lu_catalogue": "nl_6664",
@@ -7357,7 +8275,9 @@
"b_lu_n_residue": 15.8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "09-01"
},
{
"b_lu_catalogue": "nl_6746",
@@ -7373,7 +8293,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6748",
@@ -7389,7 +8311,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6749",
@@ -7405,7 +8329,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6750",
@@ -7421,7 +8347,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6751",
@@ -7437,7 +8365,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6752",
@@ -7453,7 +8383,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6753",
@@ -7469,7 +8401,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6754",
@@ -7485,7 +8419,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6755",
@@ -7501,7 +8437,9 @@
"b_lu_n_residue": 9.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6756",
@@ -7517,7 +8455,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6757",
@@ -7533,7 +8473,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6758",
@@ -7549,7 +8491,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6759",
@@ -7565,7 +8509,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6760",
@@ -7581,7 +8527,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6761",
@@ -7597,7 +8545,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6762",
@@ -7613,7 +8563,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6763",
@@ -7629,7 +8581,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6764",
@@ -7645,7 +8599,9 @@
"b_lu_n_residue": 26.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6765",
@@ -7661,7 +8617,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6766",
@@ -7677,7 +8635,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6767",
@@ -7693,7 +8653,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_6768",
@@ -7709,7 +8671,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6769",
@@ -7725,7 +8689,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6782",
@@ -7741,7 +8707,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6783",
@@ -7757,7 +8725,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6784",
@@ -7773,7 +8743,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6785",
@@ -7789,7 +8761,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6786",
@@ -7805,7 +8779,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6787",
@@ -7821,7 +8797,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6788",
@@ -7837,7 +8815,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6789",
@@ -7853,7 +8833,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6790",
@@ -7869,7 +8851,9 @@
"b_lu_n_residue": 8,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6791",
@@ -7885,7 +8869,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6792",
@@ -7901,7 +8887,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6793",
@@ -7917,7 +8905,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6794",
@@ -7933,7 +8923,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_6795",
@@ -7949,7 +8941,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6796",
@@ -7965,7 +8959,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6797",
@@ -7981,7 +8977,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6798",
@@ -7997,7 +8995,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6799",
@@ -8013,7 +9013,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6800",
@@ -8029,7 +9031,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6801",
@@ -8045,7 +9049,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6802",
@@ -8061,7 +9067,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6803",
@@ -8077,7 +9085,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6804",
@@ -8093,7 +9103,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6805",
@@ -8109,7 +9121,9 @@
"b_lu_n_residue": 11,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6806",
@@ -8125,7 +9139,9 @@
"b_lu_n_residue": 4.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-01",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_6807",
@@ -8141,7 +9157,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6808",
@@ -8157,7 +9175,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_6809",
@@ -8173,7 +9193,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_7121",
@@ -8189,7 +9211,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 100,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_7122",
@@ -8205,7 +9229,9 @@
"b_lu_n_residue": 20,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "03-21",
+ "b_date_harvest_default": "08-01"
},
{
"b_lu_catalogue": "nl_7124",
@@ -8221,7 +9247,9 @@
"b_lu_n_residue": 7.1,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_7125",
@@ -8237,7 +9265,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_7126",
@@ -8253,7 +9283,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_7127",
@@ -8269,7 +9301,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_7128",
@@ -8285,7 +9319,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_7129",
@@ -8301,7 +9337,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_7130",
@@ -8317,7 +9355,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "01-03",
+ "b_date_harvest_default": "08-15"
},
{
"b_lu_catalogue": "nl_7131",
@@ -8333,7 +9373,9 @@
"b_lu_n_residue": 5.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": true,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-01",
+ "b_date_harvest_default": "12-31"
},
{
"b_lu_catalogue": "nl_7134",
@@ -8349,7 +9391,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_7135",
@@ -8365,7 +9409,9 @@
"b_lu_n_residue": 22.9,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "10-15",
+ "b_date_harvest_default": "07-15"
},
{
"b_lu_catalogue": "nl_7137",
@@ -8381,7 +9427,9 @@
"b_lu_n_residue": 13.9,
"b_n_fixation": 100,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "05-01",
+ "b_date_harvest_default": "08-22"
},
{
"b_lu_catalogue": "nl_7138",
@@ -8397,6 +9445,8 @@
"b_lu_n_residue": 34.3,
"b_n_fixation": 0,
"b_lu_rest_oravib": false,
- "b_lu_variety_options": null
+ "b_lu_variety_options": null,
+ "b_lu_start_default": "04-01",
+ "b_date_harvest_default": "10-01"
}
]
diff --git a/fdm-data/src/cultivations/catalogues/brp.ts b/fdm-data/src/cultivations/catalogues/brp.ts
index 0cac1d8d7..ca3b5f204 100644
--- a/fdm-data/src/cultivations/catalogues/brp.ts
+++ b/fdm-data/src/cultivations/catalogues/brp.ts
@@ -69,6 +69,20 @@ export async function getCatalogueBrp(): Promise {
.map((s) => s.trim())
.filter((s) => s.length > 0)
: null,
+ b_lu_start_default:
+ typeof cultivation.b_lu_start_default === "string" &&
+ /^(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/.test(
+ cultivation.b_lu_start_default.trim(),
+ )
+ ? cultivation.b_lu_start_default.trim()
+ : null,
+ b_date_harvest_default:
+ typeof cultivation.b_date_harvest_default === "string" &&
+ /^(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/.test(
+ cultivation.b_date_harvest_default.trim(),
+ )
+ ? cultivation.b_date_harvest_default.trim()
+ : null,
hash: null,
}
diff --git a/fdm-data/src/cultivations/d.ts b/fdm-data/src/cultivations/d.ts
index 38bafca91..f884c96b4 100644
--- a/fdm-data/src/cultivations/d.ts
+++ b/fdm-data/src/cultivations/d.ts
@@ -28,6 +28,8 @@ export interface CatalogueCultivationItem {
b_n_fixation: number
b_lu_rest_oravib: boolean
b_lu_variety_options: string[] | null
+ b_lu_start_default: string | null
+ b_date_harvest_default: string | null
hash: string | null
}
diff --git a/fdm-data/src/cultivations/hash.test.ts b/fdm-data/src/cultivations/hash.test.ts
index 62dec409d..64593b7fa 100644
--- a/fdm-data/src/cultivations/hash.test.ts
+++ b/fdm-data/src/cultivations/hash.test.ts
@@ -20,6 +20,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -27,7 +29,7 @@ describe("hashCultivation", () => {
expect(hash).toBeDefined()
expect(typeof hash).toBe("string")
expect(hash.length).toBeGreaterThan(0)
- expect(hash).toBe("f6ceb42b")
+ expect(hash).toBe("860c0fe5")
})
it("should generate different hashes for different cultivation items", async () => {
@@ -47,6 +49,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -66,6 +70,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -92,6 +98,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -122,6 +130,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -152,6 +162,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -183,6 +195,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -214,6 +228,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: ["Agria"],
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -245,6 +261,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
@@ -283,6 +301,8 @@ describe("hashCultivation", () => {
b_n_fixation: 0,
b_lu_rest_oravib: false,
b_lu_variety_options: null,
+ b_lu_start_default: "03-15",
+ b_date_harvest_default: "09-15",
hash: null,
}
diff --git a/fdm-data/src/fertilizers/catalogues/baat.json b/fdm-data/src/fertilizers/catalogues/baat.json
index fd4ed7de5..692d7a340 100644
--- a/fdm-data/src/fertilizers/catalogues/baat.json
+++ b/fdm-data/src/fertilizers/catalogues/baat.json
@@ -34,6 +34,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -74,6 +75,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -114,6 +116,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "spoke wheel||spraying",
"p_type_mineral": true,
"p_type_manure": false,
@@ -154,6 +157,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -194,6 +198,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -234,6 +239,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 116,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": false,
@@ -274,6 +280,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 116,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": false,
@@ -314,6 +321,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 116,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": false,
@@ -354,6 +362,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 116,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": false,
@@ -394,6 +403,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 116,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": false,
@@ -434,6 +444,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 116,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": false,
@@ -474,6 +485,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -514,6 +526,7 @@
"p_mn_rt": 20,
"p_mo_rt": 1,
"p_zn_rt": 42,
+ "p_type_rvo": 110,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": false,
@@ -554,6 +567,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -594,6 +608,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -634,6 +649,7 @@
"p_mn_rt": 277,
"p_mo_rt": 1,
"p_zn_rt": 73,
+ "p_type_rvo": 80,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -674,6 +690,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -714,6 +731,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -754,6 +772,7 @@
"p_mn_rt": 27,
"p_mo_rt": 1,
"p_zn_rt": 55,
+ "p_type_rvo": 61,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -794,6 +813,7 @@
"p_mn_rt": 20,
"p_mo_rt": 1,
"p_zn_rt": 111,
+ "p_type_rvo": 111,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": false,
@@ -834,6 +854,7 @@
"p_mn_rt": 20,
"p_mo_rt": 1,
"p_zn_rt": 38,
+ "p_type_rvo": 111,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": false,
@@ -874,6 +895,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -914,6 +936,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -954,6 +977,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -994,6 +1018,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1034,6 +1059,7 @@
"p_mn_rt": 277,
"p_mo_rt": 2,
"p_zn_rt": 167,
+ "p_type_rvo": 23,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1074,6 +1100,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1114,6 +1141,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1154,6 +1182,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1194,6 +1223,7 @@
"p_mn_rt": 277,
"p_mo_rt": 2,
"p_zn_rt": 190,
+ "p_type_rvo": 35,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1234,6 +1264,7 @@
"p_mn_rt": 27,
"p_mo_rt": 1,
"p_zn_rt": 81,
+ "p_type_rvo": 90,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1274,6 +1305,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1314,6 +1346,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1354,6 +1387,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1394,6 +1428,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 120,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1434,6 +1469,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1474,6 +1510,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1514,6 +1551,7 @@
"p_mn_rt": 27,
"p_mo_rt": 1,
"p_zn_rt": 89,
+ "p_type_rvo": 75,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1554,6 +1592,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1594,6 +1633,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1634,6 +1674,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1674,6 +1715,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1714,6 +1756,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1754,6 +1797,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "spoke wheel||spraying",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1794,6 +1838,7 @@
"p_mn_rt": 27,
"p_mo_rt": 1,
"p_zn_rt": 57,
+ "p_type_rvo": 25,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1834,6 +1879,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -1874,6 +1920,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 33,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1914,6 +1961,7 @@
"p_mn_rt": 13,
"p_mo_rt": 0,
"p_zn_rt": 4,
+ "p_type_rvo": 19,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1954,6 +2002,7 @@
"p_mn_rt": 27,
"p_mo_rt": 0,
"p_zn_rt": 38,
+ "p_type_rvo": 10,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -1994,6 +2043,7 @@
"p_mn_rt": 13,
"p_mo_rt": 0,
"p_zn_rt": 17,
+ "p_type_rvo": 14,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2034,6 +2084,7 @@
"p_mn_rt": 13,
"p_mo_rt": 0,
"p_zn_rt": 5,
+ "p_type_rvo": 12,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2074,6 +2125,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 13,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2114,6 +2166,7 @@
"p_mn_rt": 27,
"p_mo_rt": 1,
"p_zn_rt": 55,
+ "p_type_rvo": 56,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2154,6 +2207,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 116,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2194,6 +2248,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -2234,6 +2289,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -2274,6 +2330,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "spoke wheel||spraying",
"p_type_mineral": true,
"p_type_manure": false,
@@ -2314,6 +2371,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -2354,6 +2412,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "spoke wheel||spraying",
"p_type_mineral": true,
"p_type_manure": false,
@@ -2394,6 +2453,7 @@
"p_mn_rt": 494,
"p_mo_rt": 1,
"p_zn_rt": 248,
+ "p_type_rvo": 40,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2434,6 +2494,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 43,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2474,6 +2535,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": false,
"p_type_manure": false,
@@ -2514,6 +2576,7 @@
"p_mn_rt": 277,
"p_mo_rt": 2,
"p_zn_rt": 23,
+ "p_type_rvo": 39,
"p_app_method_options": "incorporation||incorporation 2 tracks",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2554,6 +2617,7 @@
"p_mn_rt": 27,
"p_mo_rt": 0,
"p_zn_rt": 89,
+ "p_type_rvo": 50,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2594,6 +2658,7 @@
"p_mn_rt": 27,
"p_mo_rt": 0,
"p_zn_rt": 81,
+ "p_type_rvo": 42,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2634,6 +2699,7 @@
"p_mn_rt": 13,
"p_mo_rt": 0,
"p_zn_rt": 4,
+ "p_type_rvo": 18,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2674,6 +2740,7 @@
"p_mn_rt": 28,
"p_mo_rt": 0,
"p_zn_rt": 64,
+ "p_type_rvo": 46,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2714,6 +2781,7 @@
"p_mn_rt": 28,
"p_mo_rt": 0,
"p_zn_rt": 10,
+ "p_type_rvo": 42,
"p_app_method_options": "slotted coulter||incorporation||incorporation 2 tracks||injection||shallow injection||narrowband",
"p_type_mineral": false,
"p_type_manure": true,
@@ -2754,6 +2822,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
@@ -2794,6 +2863,7 @@
"p_mn_rt": null,
"p_mo_rt": null,
"p_zn_rt": null,
+ "p_type_rvo": 115,
"p_app_method_options": "broadcasting||pocket placement||incorporation",
"p_type_mineral": true,
"p_type_manure": false,
diff --git a/fdm-data/src/fertilizers/catalogues/baat.ts b/fdm-data/src/fertilizers/catalogues/baat.ts
index 00469de1f..d3e255726 100644
--- a/fdm-data/src/fertilizers/catalogues/baat.ts
+++ b/fdm-data/src/fertilizers/catalogues/baat.ts
@@ -90,6 +90,10 @@ export async function getCatalogueBaat(): Promise {
p_type_manure: fertilizer.p_type_manure,
p_type_mineral: fertilizer.p_type_mineral,
p_type_compost: fertilizer.p_type_compost,
+ p_type_rvo:
+ fertilizer.p_type_rvo === undefined
+ ? null
+ : String(fertilizer.p_type_rvo),
hash: null,
}
diff --git a/fdm-data/src/fertilizers/d.ts b/fdm-data/src/fertilizers/d.ts
index d69fe41a0..7b1df1d6b 100644
--- a/fdm-data/src/fertilizers/d.ts
+++ b/fdm-data/src/fertilizers/d.ts
@@ -65,6 +65,7 @@ export interface CatalogueFertilizerItem {
p_type_manure?: boolean | null
p_type_mineral?: boolean | null
p_type_compost?: boolean | null
+ p_type_rvo?: string | null
hash?: string | null | undefined
}
diff --git a/fdm-data/src/fertilizers/hash.test.ts b/fdm-data/src/fertilizers/hash.test.ts
index c5750dc5d..8ca9260b4 100644
--- a/fdm-data/src/fertilizers/hash.test.ts
+++ b/fdm-data/src/fertilizers/hash.test.ts
@@ -56,13 +56,14 @@ describe("hashFertilizer", () => {
p_type_manure: true,
p_type_mineral: false,
p_type_compost: false,
+ p_type_rvo: "42",
}
const hash = await hashFertilizer(fertilizer)
expect(hash).toBeDefined()
expect(typeof hash).toBe("string")
expect(hash.length).toBeGreaterThan(0)
- expect(hash).toBe("08585267")
+ expect(hash).toBe("dfb35759")
})
it("should generate different hashes for different fertilizer items", async () => {
@@ -117,6 +118,7 @@ describe("hashFertilizer", () => {
p_type_manure: true,
p_type_mineral: false,
p_type_compost: false,
+ p_type_rvo: "42",
}
const fertilizer2: CatalogueFertilizerItem = {
@@ -170,6 +172,7 @@ describe("hashFertilizer", () => {
p_type_manure: true,
p_type_mineral: false,
p_type_compost: false,
+ p_type_rvo: "42",
}
const hash1 = await hashFertilizer(fertilizer1)
@@ -230,6 +233,7 @@ describe("hashFertilizer", () => {
p_type_manure: true,
p_type_mineral: false,
p_type_compost: false,
+ p_type_rvo: "42",
}
const fertilizer2: CatalogueFertilizerItem = {
@@ -294,6 +298,7 @@ describe("hashFertilizer", () => {
p_type_manure: true,
p_type_mineral: false,
p_type_compost: false,
+ p_type_rvo: "42",
}
const fertilizer2: CatalogueFertilizerItem = {
@@ -358,6 +363,7 @@ describe("hashFertilizer", () => {
p_type_manure: true,
p_type_mineral: false,
p_type_compost: false,
+ p_type_rvo: "42",
}
const fertilizer2: CatalogueFertilizerItem = {
@@ -422,6 +428,7 @@ describe("hashFertilizer", () => {
p_type_manure: true,
p_type_mineral: false,
p_type_compost: false,
+ p_type_rvo: "42",
}
const fertilizer2: CatalogueFertilizerItem = {
diff --git a/fdm-data/src/fertilizers/index.test.ts b/fdm-data/src/fertilizers/index.test.ts
index 9d05da434..57f774ed4 100644
--- a/fdm-data/src/fertilizers/index.test.ts
+++ b/fdm-data/src/fertilizers/index.test.ts
@@ -173,6 +173,7 @@ describe("getCatalogueBaat", async () => {
expect(item).toHaveProperty("p_type_manure")
expect(item).toHaveProperty("p_type_mineral")
expect(item).toHaveProperty("p_type_compost")
+ expect(item).toHaveProperty("p_type_rvo")
expect(item).toHaveProperty("hash")
}
})
diff --git a/fdm-docs/CHANGELOG.md b/fdm-docs/CHANGELOG.md
index 0a7925ca9..34794aba3 100644
--- a/fdm-docs/CHANGELOG.md
+++ b/fdm-docs/CHANGELOG.md
@@ -1,5 +1,11 @@
# fdm-docs
+## 0.8.0
+
+### Minor Changes
+
+- 6ee8422: Update and extend the documentation for 2025 Dutch Fertilizer Application Norms, e.g. explaining how filling is calculated
+
## 0.7.0
### Minor Changes
diff --git a/fdm-docs/blog/2025-07-31-release-notes.mdx b/fdm-docs/blog/2025-07-31-release-notes.mdx
index e6a7bf161..e3d59cf6f 100644
--- a/fdm-docs/blog/2025-07-31-release-notes.mdx
+++ b/fdm-docs/blog/2025-07-31-release-notes.mdx
@@ -39,7 +39,7 @@ We've introduced several new features and improvements to give users more granul
### Detailed Implementation of 2025 Dutch Fertilizer Norms
-`@svenvw/fdm-calculator` has been significantly updated with the latest Dutch fertilizer regulations for 2025, a critical update for our users in the Netherlands. The new implementation automates the complex calculations for three key usage norms (`gebruiksnormen`), ensuring that farm management plans are compliant with national environmental regulations. For a complete breakdown, you can refer to our detailed documentation on the [2025 Dutch Fertilization Norms](/docs/norms/nl/01-2025).
+`@svenvw/fdm-calculator` has been significantly updated with the latest Dutch fertilizer regulations for 2025, a critical update for our users in the Netherlands. The new implementation automates the complex calculations for three key usage norms (`gebruiksnormen`), ensuring that farm management plans are compliant with national environmental regulations. For a complete breakdown, you can refer to our detailed documentation on the 2025 Dutch Fertilization Norms.
Here’s a summary of what the calculator now handles:
diff --git a/fdm-docs/blog/2025-11-03-release-notes.mdx b/fdm-docs/blog/2025-11-03-release-notes.mdx
new file mode 100644
index 000000000..95a7ca3e9
--- /dev/null
+++ b/fdm-docs/blog/2025-11-03-release-notes.mdx
@@ -0,0 +1,84 @@
+---
+slug: release-october-2025
+title: October 2025 Release
+authors: [svenverweij]
+tags: [release, fdm-app, fdm-calculator, fdm-core, fdm-data, fdm-docs]
+date: 2025-11-03
+---
+
+This post outlines the October 2025 updates of the FDM libraries: `@svenvw/fdm-app`, `@svenvw/fdm-calculator`, `@svenvw/fdm-core`, and `@svenvw/fdm-data`. This release introduces a wide range of improvements across the application, calculation engine, and data management, focusing on enhanced user experience, improved performance, and expanded functionality.
+
+{/* truncate */}
+
+### FDM Application Enhancements (`@svenvw/fdm-app`)
+
+* **Fertilizer Management:**
+ * Users can now edit previously created fertilizer applications, both for individual fields or a given cultivation type.
+ * The fertilizer list now displays the RVO `mestcode` colored by fertilizer type for easier identification.
+ * The design of the fertilizer application list has been improved with icons and better spacing.
+ * The term "Meststoftype" has been replaced with "Mestcode (RVO)" in fertilizer forms.
+* **Nutrient Management:**
+ * The nutrient advice page now shows a progress bar for nutrients with an advice of 0.
+ * Doses between 0 and 1 kg/ha are now displayed with a precision of 2 decimal places.
+ * The fertilizer applications page for a field now includes metrics for norms, nitrogen balance, and nutrient advice.
+* **Farm & Field Management:**
+ * A new page has been added at farm details to manage organic certifications for a farm.
+ * A new page has been added at farm details to state whether the farmer has done grazing or intends it for a year.
+ * For cultivations, default dates based on the cultivation catalogue date are used for `b_lu_start` and `b_lu_end` if available when adding a field with a cultivation.
+* **Nitrogen Balance:**
+ * In case a field has an error at the nitrogen balance calculation, the balance at farm level and other fields are still shown, but an error message for the specific field is shown.
+* **Error Reporting:**
+ * Calculation errors at nitrogen balance calculation are now submitted to Sentry.
+ * Other "other" errors for loaders and actions are also submitted to Sentry.
+* **Performance:**
+ * The app now uses cached versions of the calculator functions for `norms` and `balance`.
+* **Bug Fix:**
+ * The atlas no longer redirects the users to an invalid route when they don't have any farms.
+ * Fixed link in header of fertilizers.
+
+### FDM Calculator Upgrades (`@svenvw/fdm-calculator`)
+
+* **Nitrogen Balance:**
+ * The nitrogen balance can now be calculated per field instead of only per farm.
+ * The nitrogen balance calculation now gracefully handles errors for individual fields. Instead of failing the entire farm calculation, it will now return partial results for successfully calculated fields and provide specific error messages for fields that encountered issues.
+* **Nutrient Advice:**
+ * Added `getNutrientAdvice` and `requestNutrientAdvice` to fetch nutrient advices from the NMI API.
+* **Norms:**
+ * Added functions to calculate the norm filling by fertilizer application for NL 2025.
+ * Fixes to differentiate `stikstofgebruiksnorm` for grassland based on "beweiden" or "volledig maaien".
+* **Performance:**
+ * Added cached versions of main calculator functions for `balance` and `norms` to enable caching.
+
+### FDM Core Developments (`@svenvw/fdm-core`)
+
+* **Cultivation:**
+ * Adds `b_lu_start_default` and `b_date_harvest_default` to cultivations catalogue as the default start and harvest dates of a cultivation.
+ * Adds `getDefaultDatesOfCultivation` as helper function to determine default dates for cultivations.
+* **Grazing:**
+ * Add the table `intending_grazing` to store if the farm is planning to perform grazing.
+ * Add the functions `setGrazingIntention`, `removeGrazingIntention`, `getGrazingIntention` and `getGrazingIntentions` to manage if a farm is planning to do grazing.
+* **Organic Certification:**
+ * Add tables `organic_certifications` and `organic_certifications_holding` to store information of farm if they have organic certificates.
+ * Add the functions `addOrganicCertification`, `isOrganicCertificationValid`, `listOrganicCertifications`, `getOrganicCertification`, and `removeOrganicCertification` to manage organic certifications of a farm.
+* **Fertilizers:**
+ * Add `p_type_rvo` as new parameter to `fertilizersCatalogue`. It describes the 'Mestcode' according to RVO (Dutch government).
+* **Fields:**
+ * Improve check for `b_isproductive` by checking if name contains 'buffer'.
+ * Add the missing options for `b_acquiring_method`: "In gebruik van een terreinbeherende organisatie" (nl_03), "Tijdelijk gebruik in het kader van landinrichting" (nl_04), "Pacht van geringe oppervlakten" (nl_10) and "Natuurpacht" (nl_11).
+* **Performance:**
+ * Add new db schema `fdm-calculator` to cache calculation results and store calculation errors. The decorator function `withCalculationCache` enables adds the functionality to add caching to calculator functions.
+
+### FDM Data Updates (`@svenvw/fdm-data`)
+
+* **Cultivation Catalogue:**
+ * Adds `b_lu_start_default` and `b_date_harvest_default` to BRP catalogue.
+* **Fertilizer Catalogue:**
+ * Add `p_type_rvo` to `baat` catalogue.
+
+### FDM Docs (`@svenvw/fdm-docs`)
+
+* Update and extend the documentation for 2025 Dutch Fertilizer Application Norms, e.g. explaining how filling is calculated.
+
+---
+
+These updates reflect our ongoing commitment to providing a robust and comprehensive platform for farm data management. We encourage you to explore these new features and welcome any feedback or contributions on our GitHub repository.
diff --git a/fdm-docs/blog/tags.yml b/fdm-docs/blog/tags.yml
index 8a70ca691..b9f7b30e4 100644
--- a/fdm-docs/blog/tags.yml
+++ b/fdm-docs/blog/tags.yml
@@ -23,6 +23,11 @@ fdm-docs:
description: Posts related to the FDM documentation website (@svenvw/fdm-docs).
permalink: /fdm-docs
+fdm-app:
+ label: fdm-app
+ description: Posts related to the React web application to interact with FDM (@svenvw/fdm-app).
+ permalink: /fdm-app
+
update:
label: Update
description: General updates and improvements to the FDM ecosystem.
diff --git a/fdm-docs/docs/core-concepts/02-schema.md b/fdm-docs/docs/core-concepts/02-schema.md
index 22525f2ea..190965fd9 100644
--- a/fdm-docs/docs/core-concepts/02-schema.md
+++ b/fdm-docs/docs/core-concepts/02-schema.md
@@ -8,11 +8,12 @@ This document provides a comprehensive overview of the Farm Data Model (FDM) dat
## Schema Overview
-The FDM database is organized into three distinct PostgreSQL schemas:
+The FDM database is organized into four distinct PostgreSQL schemas:
1. **`fdm`**: Contains the core tables related to farm management, fields, cultivations, fertilizers, soil data, etc.
2. **`fdm-authn`**: Handles authentication, storing user accounts, sessions, organizations, and related information.
3. **`fdm-authz`**: Manages authorization, defining roles, permissions, and maintaining an audit trail.
+4. **`fdm-calculator`**: Caches calculation results and stores calculation errors to improve performance and provide better debugging capabilities.
---
@@ -55,14 +56,14 @@ This schema holds the primary data related to farm operations.
* GIST index on `b_geometry` for spatial queries.
#### **`fieldAcquiring`**
-**Purpose**: Tracks the relationship between a farm and a field it manages, including the method and timeframe of acquisition. Replaces the old `farmManaging` concept.
+**Purpose**: Tracks the relationship between a farm and a field it manages, including the method and timeframe of acquisition.
| Column | Type | Constraints | Description |
|-----------------------|-----------------------------|----------------------------------------------|--------------------------------------------------------------------------|
| **b_id** | `text` | Not Null, Foreign Key (references `fields.b_id`) | Identifier of the field being acquired. |
| **b_id_farm** | `text` | Not Null, Foreign Key (references `farms.b_id_farm`) | Identifier of the farm acquiring the field. |
| **b_start** | `timestamp with time zone` | | Timestamp indicating the start of the farm's management/acquisition. |
-| **b_acquiring_method**| `acquiringMethodEnum` | Not Null (default: 'unknown') | Method by which the farm acquired the field (e.g., 'nl_01', 'nl_02'). |
+| **b_acquiring_method**| `acquiringMethodEnum` | Not Null (default: 'unknown') | Method by which the farm acquired the field. |
| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
@@ -71,7 +72,7 @@ This schema holds the primary data related to farm operations.
##### `acquiringMethodEnum`
* **Name**: `b_acquiring_method`
-* **Possible values**: `nl_01`, `nl_02`, `nl_07`, `nl_09`, `nl_12`, `nl_13`, `nl_61`, `nl_63`, `unknown`
+* **Possible values**: `nl_01`, `nl_02`, `nl_03`, `nl_04`, `nl_07`, `nl_09`, `nl_10`, `nl_11`, `nl_12`, `nl_13`, `nl_61`, `nl_63`, `unknown`
#### **`fieldDiscarding`**
**Purpose**: Marks when a field is no longer actively managed or used within the system.
@@ -105,6 +106,10 @@ This schema holds the primary data related to farm operations.
| **b_lu_n_harvestable**| `numeric` (custom) | | Nitrogen content in the harvested portion. |
| **b_lu_n_residue** | `numeric` (custom) | | Nitrogen content in the crop residue. |
| **b_n_fixation** | `numeric` (custom) | | Nitrogen fixation rate (for legumes). |
+| **b_lu_rest_oravib**| `boolean` | | Is the cultivation a 'rustgewas' with regards to Dutch manure legislation |
+| **b_lu_variety_options**| `text[]` | | A set of varieties (cultivars) that a cultivation may be |
+| **b_lu_start_default**| `text` | | Default start date of the cultivation (MM-DD). |
+| **b_date_harvest_default**| `text` | | Default harvest date of the cultivation (MM-DD). |
| **hash** | `text` | | A hash value representing the content of the catalogue entry, for change tracking. |
| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
@@ -127,6 +132,7 @@ This schema holds the primary data related to farm operations.
|--------------------|-----------------------------|--------------------------------------------------------------|--------------------------------------------------------------------------|
| **b_lu** | `text` | Primary Key | Unique identifier for this specific cultivation instance. |
| **b_lu_catalogue** | `text` | Not Null, Foreign Key (references `cultivationsCatalogue.b_lu_catalogue`) | Links to the type of cultivation in the catalogue. |
+| **b_lu_variety** | `text` | | Variety of the cultivation. |
| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
@@ -134,7 +140,7 @@ This schema holds the primary data related to farm operations.
* Unique index on `b_lu`.
#### **`cultivationStarting`**
-**Purpose**: Records the event of starting a specific cultivation instance on a particular field. Replaces `fieldSowing`.
+**Purpose**: Records the event of starting a specific cultivation instance on a particular field.
| Column | Type | Constraints | Description |
|-------------------|-----------------------------|----------------------------------------------|--------------------------------------------------------------------|
@@ -248,6 +254,7 @@ This schema holds the primary data related to farm operations.
| **p_name_nl** | `text` | Not Null | Name of the fertilizer (often in Dutch). |
| **p_name_en** | `text` | | English name of the fertilizer. |
| **p_description** | `text` | | Additional descriptive text about the fertilizer. |
+| **p_app_method_options** | `applicationMethodEnum[]` | | Allowed application methods for the fertilizer. |
| **p_dm** | `numeric` (custom) | | Dry Matter content (%). |
| **p_density** | `numeric` (custom) | | Density (e.g., kg/m³). |
| **p_om** | `numeric` (custom) | | Organic Matter content (%). |
@@ -264,6 +271,8 @@ This schema holds the primary data related to farm operations.
| **p_n_if** | `numeric` (custom) | | Inorganic Nitrogen content (%). |
| **p_n_of** | `numeric` (custom) | | Organic Nitrogen content (%). |
| **p_n_wc** | `numeric` (custom) | | Water-soluble Nitrogen content (%). |
+| **p_no3_rt** | `numeric` (custom) | | Total Nitrate content (%). |
+| **p_nh4_rt** | `numeric` (custom) | | Total Ammonium content (%). |
| **p_p_rt** | `numeric` (custom) | | Total Phosphorus content (%). |
| **p_k_rt** | `numeric` (custom) | | Total Potassium content (%). |
| **p_mg_rt** | `numeric` (custom) | | Total Magnesium content (%). |
@@ -288,9 +297,11 @@ This schema holds the primary data related to farm operations.
| **p_pb_rt** | `numeric` (custom) | | Total Lead content (%). |
| **p_hg_rt** | `numeric` (custom) | | Total Mercury content (%). |
| **p_cl_rt** | `numeric` (custom) | | Total Chlorine content (%). |
+| **p_ef_nh3** | `numeric` (custom) | | Ammonia emission factor. |
| **p_type_manure** | `boolean` | | Flag indicating if it's a manure type fertilizer. |
| **p_type_mineral** | `boolean` | | Flag indicating if it's a mineral type fertilizer. |
| **p_type_compost** | `boolean` | | Flag indicating if it's a compost type fertilizer. |
+| **p_type_rvo** | `typeRvoEnum` | | RVO manure type code. |
| **hash** | `text` | | A hash value representing the content of the catalogue entry, for change tracking. |
| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
@@ -333,7 +344,7 @@ This schema holds the primary data related to farm operations.
| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
-#### **`fertilizerApplying`** (formerly `fertilizerApplication`)
+#### **`fertilizer_applying`**
**Purpose**: Logs the event of applying a specific fertilizer instance to a field.
| Column | Type | Constraints | Description |
@@ -342,7 +353,7 @@ This schema holds the primary data related to farm operations.
| **b_id** | `text` | Not Null, Foreign Key (references `fields.b_id`) | Identifier of the field where the fertilizer was applied. |
| **p_id** | `text` | Not Null, Foreign Key (references `fertilizers.p_id`) | Identifier of the fertilizer instance applied. |
| **p_app_amount**| `numeric` (custom) | | Amount of fertilizer applied (typically kg/ha). |
-| **p_app_method**| `applicationMethodEnum` | | Method used for application (e.g., 'injection', 'spraying'). |
+| **p_app_method**| `applicationMethodEnum` | | Method used for application. |
| **p_app_date** | `timestamp with time zone` | | Timestamp when the application occurred. |
| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
@@ -352,7 +363,7 @@ This schema holds the primary data related to farm operations.
##### `applicationMethodEnum`
* **Name**: `p_app_method`
-* **Possible values**: `slotted coulter`, `incorporation`, `injection`, `spraying`, `broadcasting`, `spoke wheel`, `pocket placement`
+* **Possible values**: `slotted coulter`, `incorporation`, `incorporation 2 tracks`, `injection`, `shallow injection`, `spraying`, `broadcasting`, `spoke wheel`, `pocket placement`, `narrowband`
#### **`fertilizerCatalogueEnabling`**
**Purpose**: Indicates which fertilizer catalogue sources are actively enabled or used by a specific farm.
@@ -425,7 +436,7 @@ This schema holds the primary data related to farm operations.
##### `gwlClassEnum`
* **Name**: `b_gwl_class`
-* **Possible values**: `II`, `IV`, `IIIb`, `V`, `VI`, `VII`, `Vb`, `-`, `Va`, `III`, `VIII`, `sVI`, `I`, `IIb`, `sVII`, `IVu`, `bVII`, `sV`, `sVb`, `bVI`, `IIIa`
+* **Possible values**: `I`, `Ia`, `Ic`, `II`, `IIa`, `IIb`, `IIc`, `III`, `IIIa`, `IIIb`, `IV`, `IVu`, `IVc`, `V`, `Va`, `Vao`, `Vad`, `Vb`, `Vbo`, `Vbd`, `sV`, `sVb`, `VI`, `VIo`, `VId`, `VII`, `VIIo`, `VIId`, `VIII`, `VIIIo`, `VIIId`
##### `soilAnalysisSourceEnum`
* **Name**: `a_source`
@@ -448,7 +459,7 @@ This schema holds the primary data related to farm operations.
---
-### Derogations
+### Derogations & Certifications
#### **`derogations`**
**Purpose**: Stores information about derogations, which is special permissions by year related to legal norms for fertilizer application.
@@ -476,6 +487,46 @@ This schema holds the primary data related to farm operations.
**Constraints:**
* Primary Key on (`b_id_farm`, `b_id_derogation`).
+#### **`organicCertifications`**
+**Purpose**: Stores information about organic certifications for a farm.
+
+| Column | Type | Constraints | Description |
+|---|---|---|---|
+| **b_id_organic** | `text` | Primary Key | Unique identifier for the organic certification. |
+| **b_organic_traces** | `text` | | TRACES number of the organic certification. |
+| **b_organic_skal** | `text` | | Skal number of the organic certification. |
+| **b_organic_issued** | `timestamp with time zone` | | Timestamp when the certification was issued. |
+| **b_organic_expires** | `timestamp with time zone` | | Timestamp when the certification expires. |
+| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
+| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
+
+#### **`organicCertificationsHolding`**
+**Purpose**: Links a farm to a specific organic certification.
+
+| Column | Type | Constraints | Description |
+|---|---|---|---|
+| **b_id_farm** | `text` | Not Null, Foreign Key (references `farms.b_id_farm`) | Identifier of the farm holding the certification. |
+| **b_id_organic** | `text` | Not Null, Foreign Key (references `organicCertifications.b_id_organic`) | Identifier of the organic certification. |
+| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
+| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
+
+**Constraints:**
+* Primary Key on (`b_id_farm`, `b_id_organic`).
+
+#### **`intendingGrazing`**
+**Purpose**: Stores the grazing intention for a farm for a specific year.
+
+| Column | Type | Constraints | Description |
+|---|---|---|---|
+| **b_id_farm** | `text` | Not Null, Foreign Key (references `farms.b_id_farm`) | Identifier of the farm. |
+| **b_grazing_intention** | `boolean` | | Whether the farm intends to graze animals. |
+| **b_grazing_intention_year** | `integer` | Not Null | The year of the grazing intention. |
+| **created** | `timestamp with time zone` | Not Null | Timestamp when this record was created (default: now()). |
+| **updated** | `timestamp with time zone` | | Timestamp when this record was last updated. |
+
+**Constraints:**
+* Primary Key on (`b_id_farm`, `b_grazing_intention_year`).
+
---
## `fdm-authn` Schema (Authentication)
@@ -636,6 +687,37 @@ This schema manages roles, permissions, and auditing for authorization purposes.
---
+## `fdm-calculator` Schema (Calculator)
+
+This schema is used to cache calculation results and store errors that occur during calculations.
+
+#### **`calculationCache`**
+**Purpose**: Caches the results of calculations to improve performance.
+
+| Column | Type | Constraints | Description |
+|---|---|---|---|
+| **calculation_hash** | `text` | Primary Key | A unique hash representing the calculation function and its input. |
+| **calculation_function** | `text` | Not Null | The name of the calculation function that was executed. |
+| **calculator_version** | `text` | | The version of the calculator that was used. |
+| **input** | `jsonb` | Not Null | The input parameters for the calculation. |
+| **result** | `jsonb` | Not Null | The result of the calculation. |
+| **created_at** | `timestamp with time zone` | Not Null | Timestamp when the calculation was cached (default: now()). |
+
+#### **`calculationErrors`**
+**Purpose**: Logs errors that occur during calculations.
+
+| Column | Type | Constraints | Description |
+|---|---|---|---|
+| **calculation_error_id** | `text` | Primary Key | Unique identifier for the calculation error. |
+| **calculation_function** | `text` | | The name of the calculation function that failed. |
+| **calculator_version** | `text` | | The version of the calculator that was used. |
+| **input** | `jsonb` | | The input parameters for the calculation. |
+| **error_message** | `text` | | The error message. |
+| **stack_trace** | `text` | | The stack trace of the error. |
+| **created_at** | `timestamp with time zone` | Not Null | Timestamp when the error occurred (default: now()). |
+
+---
+
## Custom Types
These custom types are defined in `schema-custom-types.ts` to handle specific data representations.
@@ -651,4 +733,4 @@ These custom types are defined in `schema-custom-types.ts` to handle specific da
* **Application Type**: GeoJSON `Geometry` object (e.g., `Polygon`, `MultiPoint`).
* **Dependencies**: Requires the PostGIS extension enabled in the PostgreSQL database.
* **Current Implementation**: The provided code in `schema-custom-types.ts` includes parsing logic primarily for `Polygon` and `MultiPoint` types when reading from the database (especially from hexewkb format). Writing uses `ST_GeomFromGeoJSON`. Support for other geometry types might be limited or require additional parsing logic.
-* **SRID**: Assumes SRID 4326 (WGS 84).
+* **SRID**: Assumes SRID 4326 (WGS 84).
\ No newline at end of file
diff --git a/fdm-docs/docs/core-concepts/06-release.md b/fdm-docs/docs/core-concepts/06-release.md
new file mode 100644
index 000000000..fdb2531ea
--- /dev/null
+++ b/fdm-docs/docs/core-concepts/06-release.md
@@ -0,0 +1,109 @@
+# Release Process
+
+This document outlines the release process for the `fdm` monorepo. Our process is built on a `development` -> `release` -> `main` branching strategy and is automated using GitHub Actions and [Changesets](https://github.com/changesets/changesets).
+
+## Overview
+
+The core idea is to separate the development of features from the release of new versions.
+
+- **`development` branch**: This is the primary integration branch where all new features and bug fixes are merged. Pushing to this branch automatically publishes a `development` snapshot version for testing.
+- **`release/*` branches**: These branches are created from `development` to prepare for a new stable release. This is where final release chores (like updating documentation, blog posts, etc.) are performed.
+- **`main` branch**: This branch represents the latest stable production code. Merging a `release/*` branch into `main` triggers the publication of stable packages to the registry and the creation of official GitHub Releases.
+
+## For Developers: Making a Change
+
+When you contribute code that should result in a new version of one or more packages, you must include a "changeset".
+
+1. **Make your code changes** on a feature branch as usual.
+2. **Run `pnpm changeset`**. This will launch an interactive CLI.
+3. **Select the packages** you have changed using the arrow keys and spacebar.
+4. **Choose the version bump type** (Major, Minor, or Patch) for each selected package.
+5. **Write a clear summary** of the change. This summary will be used to generate the `CHANGELOG.md` for the packages.
+6. **Commit the new changeset file** (e.g., `.changeset/unique-name.md`) along with your code changes.
+7. **Open a pull request** to the `development` branch.
+
+Once your PR is merged into `development`, the automation will take over and publish a snapshot release.
+
+## For Release Managers: Creating a New Release
+
+Follow these steps to create a new stable release.
+
+### Step 1: Create the Release Branch
+
+Create a new `release/*` branch from the `development` branch.
+
+```bash
+git checkout development
+git pull origin development
+git checkout -b release/[YYYY-MM]
+```
+
+### Step 2: Perform Release Chores
+
+On this `release/*` branch, you can perform any final tasks before the release. This is the time to:
+
+- Add or update blog posts.
+- Update a "What's New" section in the application.
+- Run code formatters or linters.
+- Perform any other final checks or documentation updates.
+
+You can make and push as many commits as you need for these chores. The automation will not interfere.
+
+### Step 3: Finalize and Version the Release
+
+When you are **100% certain** the release branch is complete and ready, you must manually trigger the versioning process.
+
+1. Go to the **Actions** tab in the GitHub repository.
+2. Select the **Release** workflow from the list on the left.
+3. Click the **Run workflow** dropdown.
+4. Select your `release/[YYYY-MM]` branch from the "Branch" dropdown.
+5. Click the green **Run workflow** button.
+
+This will trigger the `Version Packages` job, which adds a final commit to your branch containing all the version bumps, changelog updates, and Git tags.
+
+### Step 4: Merge to Main
+
+1. Open a pull request from your `release/[YYYY-MM]` branch to the `main` branch.
+2. The PR will have a **`Verify Versioning`** status check. This check must pass before you can merge. It fails if the versioning commit from the previous step is not present.
+3. A bot will also add a comment to the PR reminding you of the process.
+4. Once all checks pass, **merge the pull request**.
+
+Merging into `main` will trigger the final step of the automation, which publishes the stable packages and creates the GitHub Releases.
+
+### Step 5: Merge Main Back to Development
+
+**This is a critical final step.** To ensure the `development` branch receives the latest version bumps and changelogs from the release, you must merge `main` back into `development`.
+
+```bash
+git checkout development
+git pull origin development
+git merge --no-ff main
+git push origin development
+```
+
+## For Release Managers: Creating a Hotfix
+
+A hotfix is used to patch a critical bug in production. The process is similar to a regular release, but it starts from the `main` branch.
+
+1. **Create the Hotfix Branch**: Create a `hotfix/*` branch from the `main` branch.
+
+ ```bash
+ git checkout main
+ git pull origin main
+ git checkout -b hotfix/fix-critical-bug
+ ```
+
+2. **Make and Commit Changes**: Apply the necessary code changes to fix the bug. Remember to add a changeset for the patch by running `pnpm changeset`.
+
+3. **Finalize and Version the Hotfix**: Just like a release branch, when the hotfix is ready, you must manually trigger the versioning process from the **Actions** tab on your `hotfix/*` branch.
+
+4. **Merge to Main**: Open a pull request from your `hotfix/*` branch to `main`. The same status checks and comments will apply. Merging this will publish the patched version.
+
+5. **Merge back to Development**: **This is a critical step.** To ensure the fix is not lost, you must also merge the `main` branch back into the `development` branch.
+
+ ```bash
+ git checkout development
+ git pull origin development
+ git merge --no-ff main
+ git push origin development
+ ```
diff --git a/fdm-docs/docs/norms/nl/01-2025.md b/fdm-docs/docs/norms/nl/01-2025.md
deleted file mode 100644
index 67db97115..000000000
--- a/fdm-docs/docs/norms/nl/01-2025.md
+++ /dev/null
@@ -1,107 +0,0 @@
----
-title: 2025 Dutch Fertilization Norms
-sidebar_label: "2025"
----
-
-# Calculating the 2025 Dutch Fertilization Norms
-
-This guide explains how the FDM Calculator determines the official Dutch legal usage norms (`gebruiksnormen`) for nitrogen and phosphate for the year 2025. These calculations are essential for ensuring your farm management plan complies with national environmental regulations.
-
-The FDM Calculator automates these complex calculations based on your specific farm, field, and cultivation data. It calculates three key norms:
-
-1. **Nitrogen Usage Norm (`Stikstofgebruiksnorm`)**: The maximum effective nitrogen from all fertilizers.
-2. **Phosphate Usage Norm (`Fosfaatgebruiksnorm`)**: The maximum phosphate, based on your soil's phosphate status.
-3. **Animal Manure Usage Norm (`Dierlijke Mest Gebruiksnorm`)**: The maximum nitrogen from animal manure, with specific rules for derogation farms.
-
-:::danger Official Source & Disclaimer
-The calculations in this document are based on the official 2025 norms published by the RVO (Rijksdienst voor Ondernemend Nederland). While we strive for accuracy, this document is for informational purposes only.
-
-Always consult your agricultural advisor for definitive guidance and values tailored to your specific situation. FDM is not liable for any discrepancies or decisions made based on this information.
-:::
-
-## 1. How the Calculator Works: Required Data
-
-To calculate the norms for a specific field, the FDM Calculator requires the following information for the 2025 calendar year.
-
-* **Farm Details**:
- * **Derogation Status**: Does the farm have a derogation permit for 2025? This is a critical factor for nitrogen and animal manure norms.
-
-* **Field & Location**:
- * **Field Location**: The precise geographical coordinates of the field are used to determine if it falls within special regulatory zones, such as Nutrient-Polluted Areas (`NV-gebieden`), Groundwater Protection Areas (`GWBG-gebieden`), or specific soil regions (sand, clay, peat, loess).
-
-* **Cultivation Plan for 2025**:
- * **Main Crop (`hoofdteelt`)**: The primary crop grown on the field. The calculator identifies the main crop as the one with the longest cultivation period between May 15th and July 15th.
- * **Crop Variety**: For certain crops like potatoes and flowers, the specific variety can result in a higher or lower nitrogen norm.
- * **Cultivation Dates**: The start and end dates of cultivation are crucial for time-sensitive norms, such as those for temporary grassland.
-
-* **Latest Soil Analysis Data**:
- * **Phosphate Levels**: The P-CaCl2 (or P-PAE) and P-Al values from your most recent soil test are used to classify the soil's phosphate status, which directly determines the phosphate usage norm.
-
-## 2. Nitrogen Usage Norm (`Stikstofgebruiksnorm`)
-
-This norm sets the maximum total nitrogen (in kg N/ha) that can be applied. The calculation follows a step-by-step process to find the most precise norm.
-
-* **Official Source**: [RVO Tabel 2 Stikstof landbouwgrond 2025](https://www.rvo.nl/sites/default/files/2024-12/Tabel-2-Stikstof-landbouwgrond-2025_0.pdf)
-
-### Calculation Steps
-
-1. **Identify Main Crop**: The calculator determines the main crop for 2025 based on your cultivation plan.
-2. **Determine Geographical Context**: Using the field's location, the system checks:
- * If the field is in a **Nutrient-Polluted Area (`NV-gebied`)**, which results in a stricter (lower) norm.
- * The dominant **soil region** (`zand_nwc`, `zand_zuid`, `klei`, `veen`, or `loess`).
-3. **Find the Standard Norm**: The calculator looks up the main crop in the official RVO Table 2 (implemented as `nitrogenStandardsData`).
-4. **Apply Specific Rules**: For various crops, the standard norm is refined with additional rules:
- * **Temporary Grassland (`Tijdelijk grasland`)**: The norm is adjusted based on the cultivation end date.
- * **Potatoes (`Aardappelen`)**: The norm is adjusted based on the potato variety, which may be classified as requiring a high, low, or standard nitrogen level. See [RVO Tabel 2c](https://www.rvo.nl/sites/default/files/2024-12/Tabel-2c-Consumptieaardappelen%20hoge%20of%20lage%20norm-2025.pdf). If the variety is unknown or not on the list of RVO Tabel 2c, the standard norm is used as "overig".
- * **Maize (`Mais`)**: The norm depends on the farm's derogation status (`is_derogatie_bedrijf`).
- * **Outdoor Flowers (`Buitenbloemen`)**: A higher norm is applied if the flower variety is on a specific list (see note 8 at RVO Table 2); otherwise, the standard norm is used.
-5. **Select the Final Norm**: The final value is selected from the refined list based on the field's soil region and whether it is in an `NV-gebied`.
-6. **Apply Nitrogen Usage Norm Reduction (`Korting Stikstofgebruiksnorm`)**: The total nitrogen usage norm can be reduced (`korting`) if specific conditions regarding catch crops (`vanggewassen`) or winter crops (`winterteelten`) are not met in the previous calendar year. This reduction only applies to fields on sand and loess soils.
-
- ### Reduction Rules
-
- 1. **Winter Crop Exception**: No reduction is applied if the main crop of the current year (2025) is a designated **winter crop (`winterteelt`)** and the field is located in a sand or loess region. This is because winter crops provide similar environmental benefits to catch crops.
-
- 2. **Catch Crop Rules (if no Winter Crop Exception)**: If the winter crop exception does not apply, the reduction depends on whether a catch crop was sown in the previous year (2024) and its sowing date:
- * **No Reduction**: If a valid **catch crop (`vanggewas`)** was sown by **October 1st** of the previous year, no reduction is applied.
- * **5 kg N/ha Reduction**: If a valid catch crop was sown between **October 2nd and October 14th** of the previous year, a reduction of 5 kg N/ha is applied.
- * **10 kg N/ha Reduction**: If a valid catch crop was sown between **October 15th and October 31st** of the previous year, a reduction of 10 kg N/ha is applied.
- * **20 kg N/ha Reduction**: A reduction of 20 kg N/ha is applied if:
- * No valid catch crop was sown in the previous year.
- * A valid catch crop was sown on or after **November 1st** of the previous year.
- * A catch crop was sown but destroyed before February 1st of the current year.
-
- The `kortingDescription` in the result will provide details on why a specific reduction was applied (or not applied).
-
-## 3. Phosphate Usage Norm (`Fosfaatgebruiksnorm`)
-
-This norm sets the maximum phosphate (in kg P₂O₅/ha) that can be applied, based on the soil's phosphate status and the land use type.
-
-### Calculation Steps
-
-1. **Determine Land Type**: The calculator checks if the main crop is grassland (`grasland`) or arable land (`bouwland`).
-2. **Determine Phosphate Class**: Using the soil analysis data (P-CaCl2 and P-Al values), the soil is assigned a phosphate class: `Arm` (Poor), `Laag` (Low), `Neutraal` (Neutral), `Ruim` (Sufficient), or `Hoog` (High). The thresholds for these classes differ between grassland and arable land.
-3. **Look Up the Final Norm**: The land type and phosphate class are used to find the final norm in the table below.
-
-| Klasse | Grasland (kg P₂O₅/ha) | Bouwland (kg P₂O₅/ha) |
-| :------- | :-------------------- | :-------------------- |
-| Arm | 120 | 120 |
-| Laag | 105 | 80 |
-| Neutraal | 95 | 70 |
-| Ruim | 90 | 60 |
-| Hoog | 75 | 40 |
-
-The result includes the norm value and its source, for example, "Grasland: Neutraal".
-
-## 4. Animal Manure Usage Norm (`Dierlijke Mest Gebruiksnorm`)
-
-This norm defines the maximum nitrogen from animal manure (in kg N/ha) that can be applied. The calculation is based on the farm's derogation status and the field's location.
-
-### Calculation Rules
-
-1. **No Derogation**: If the farm does **not** have a derogation permit, the norm is **170 kg N/ha**.
-
-2. **With Derogation**: If the farm **has** a derogation permit, the norm depends on the field's location:
- * The system checks if the field is in a **Nutrient-Polluted Area (`NV-gebied`)** or a **Groundwater Protection Area (`GWBG-gebied`)**.
- * If it is in either of these sensitive areas, the norm is **190 kg N/ha**.
- * If it is outside these areas, the norm is **200 kg N/ha**.
diff --git a/fdm-docs/docs/norms/nl/2025/01-index.md b/fdm-docs/docs/norms/nl/2025/01-index.md
new file mode 100644
index 000000000..91653fba7
--- /dev/null
+++ b/fdm-docs/docs/norms/nl/2025/01-index.md
@@ -0,0 +1,39 @@
+---
+title: 2025 Dutch Fertilizer Application Norms
+sidebar_label: "Introduction"
+position: 1
+---
+
+# Calculating the 2025 Dutch Fertilizer Application Norms
+
+This guide explains how the FDM Calculator determines the official Dutch legal usage norms (`gebruiksnormen`) for nitrogen and phosphate for the year 2025. These calculations are essential for ensuring your farm management plan complies with national environmental regulations.
+
+The FDM Calculator automates these complex calculations based on your specific farm, field, and cultivation data. It calculates three key norms:
+
+1. **Nitrogen Usage Norm (`Stikstofgebruiksnorm`)**: The maximum effective nitrogen from all fertilizers.
+2. **Phosphate Usage Norm (`Fosfaatgebruiksnorm`)**: The maximum phosphate, based on your soil's phosphate status.
+3. **Animal Manure Usage Norm (`Dierlijke Mest Gebruiksnorm`)**: The maximum nitrogen from animal manure, with specific rules for derogation farms.
+
+:::danger Official Source & Disclaimer
+The calculations in this document are based on the official 2025 norms published by the RVO (Rijksdienst voor Ondernemend Nederland). While we strive for accuracy, this document is for informational purposes only.
+
+Always consult your agricultural advisor for definitive guidance and values tailored to your specific situation. FDM is not liable for any discrepancies or decisions made based on this information.
+:::
+
+## How the Calculator Works: Required Data
+
+To calculate the norms for a specific field, the FDM Calculator requires the following information for the 2025 calendar year.
+
+* **Farm Details**:
+ * **Derogation Status**: Does the farm have a derogation permit for 2025? This is a critical factor for nitrogen and animal manure norms.
+
+* **Field & Location**:
+ * **Field Location**: The precise geographical coordinates of the field are used to determine if it falls within special regulatory zones, such as Nutrient-Polluted Areas (`NV-gebieden`), Groundwater Protection Areas (`GWBG-gebieden`), or specific soil regions (sand, clay, peat, loess).
+
+* **Cultivation Plan for 2025**:
+ * **Main Crop (`hoofdteelt`)**: The primary crop grown on the field. The calculator identifies the main crop as the one with the longest cultivation period between May 15th and July 15th.
+ * **Crop Variety**: For certain crops like potatoes and flowers, the specific variety can result in a higher or lower nitrogen norm.
+ * **Cultivation Dates**: The start and end dates of cultivation are crucial for time-sensitive norms, such as those for temporary grassland.
+
+* **Latest Soil Analysis Data**:
+ * **Phosphate Levels**: The P-CaCl2 (or P-PAE) and P-Al values from your most recent soil test are used to classify the soil's phosphate status, which directly determines the phosphate usage norm.
diff --git a/fdm-docs/docs/norms/nl/2025/_category_.json b/fdm-docs/docs/norms/nl/2025/_category_.json
new file mode 100644
index 000000000..a24f609d3
--- /dev/null
+++ b/fdm-docs/docs/norms/nl/2025/_category_.json
@@ -0,0 +1,8 @@
+{
+ "label": "2025",
+ "position": 1,
+ "link": {
+ "type": "generated-index",
+ "description": "Learn more about the 2025 Dutch Fertilizer Application Norms."
+ }
+}
diff --git a/fdm-docs/docs/norms/nl/2025/dierlijke-mest-gebruiksnorm.md b/fdm-docs/docs/norms/nl/2025/dierlijke-mest-gebruiksnorm.md
new file mode 100644
index 000000000..0d89a01fa
--- /dev/null
+++ b/fdm-docs/docs/norms/nl/2025/dierlijke-mest-gebruiksnorm.md
@@ -0,0 +1,72 @@
+---
+title: Dierlijke Mest Gebruiksnorm 2025
+sidebar_label: "Dierlijke Mest Gebruiksnorm"
+---
+
+# Dierlijke Mest Gebruiksnorm 2025
+
+This document explains how the FDM Calculator determines the official Dutch legal usage norm (`gebruiksnorm`) for nitrogen from animal manure and how the applied animal manure counts towards this norm (the `filling`). It also covers the derogation regulations for 2025.
+
+---
+
+## Calculating the Gebruiksnorm (Usage Norm)
+
+### How the Norm Works
+
+This norm defines the maximum nitrogen from animal manure (in kg N/ha) that can be applied. The calculation is based on the farm's derogation status and the field's location.
+
+#### Standard Norm (No Derogation):
+
+If the farm does **not** have a derogation permit, the standard norm is **170 kg N/ha**.
+
+#### Derogation Norms for 2025:
+
+Derogation is a temporary exception that allows farms with at least 80% grassland to use more nitrogen from grazing animal manure. However, derogation is being phased out, and the norms for 2025 are as follows:
+
+1. **Derogation-Free Zones**:
+ * If a field is in a **derogation-free zone** (`derogatievrije zone`) around a Natura 2000 area, the standard norm of **170 kg N/ha** applies, even with a derogation permit.
+
+2. **Nutrient-Polluted and Groundwater Protection Areas**:
+ * If a field is in a **Nutrient-Polluted Area (`NV-gebied`)** or a **Groundwater Protection Area (`GWBG-gebied`)**, the derogation norm is **190 kg N/ha**.
+
+3. **Other Areas**:
+ * For all other fields, the derogation norm is **200 kg N/ha**.
+
+### How the FDM Calculator Determines the Norm
+
+The `fdm-calculator` uses the `calculateAnimalManureUsageNorm` function in `fdm-calculator/src/norms/nl/2025/value/dierlijke-mest-gebruiksnorm.ts`. This function takes the farm's derogation status and the field's geographical context as input to apply the correct norm.
+
+---
+
+## Calculating the Opvulling (Filling)
+
+### How the Filling Works
+
+The filling for the animal manure usage norm is based on the **total nitrogen** from all applied animal manures. Unlike the nitrogen usage norm, no efficiency coefficients are applied here; the total nitrogen content of the manure counts.
+
+#### Calculation Formula:
+
+`Total Nitrogen (kg N) = Applied Amount (ton) × Total Nitrogen Content (kg N/ton)`
+
+#### Forfaitair Nitrogen Content (`Forfaitaire Stikstofgehalten`):
+
+The forfaitair nitrogen content per ton of manure is determined by the animal species, category, and manure type, as specified in RVO Tabel 11. This table provides standard values for various manure codes (`mestcodes`).
+
+**Example from RVO Tabel 11**:
+
+| Diersoort (Animal Species) | Omschrijving (Description) | Mestcode | Kg stikstof per ton | Kg fosfaat per ton |
+| :------------------------ | :------------------------- | :------- | :------------------ | :----------------- |
+| Rundvee (Cattle) | Vaste mest (Solid manure) | 10 | 6.4 | 3.2 |
+| Rundvee | Drijfmest (Slurry) | 17 | 4.0 | 1.3 |
+| Varkens (Pigs) | Drijfmest vleesvarkens | 46 | 6.4 | 2.4 |
+| Kippen (Chickens) | Mestband (Belt manure) | 32 | 26.0 | 3.8 |
+
+### How the FDM Calculator Determines the Filling
+
+The `fdm-calculator` uses the `calculateAnimalManureFilling` function in `fdm-calculator/src/norms/nl/2025/filling/dierlijke-mest-gebruiksnorm.ts`. This function relies on:
+
+* The applied amount of animal manure.
+* The manure code (`mestcode`) of the applied manure.
+* The forfaitair nitrogen values from `fdm-calculator/src/norms/nl/2025/filling/table-11-mestcodes.ts`, which implements RVO Tabel 11.
+
+If a specific analysis value for the nitrogen content is known, it will be used; otherwise, the forfaitair content is applied.
diff --git a/fdm-docs/docs/norms/nl/2025/fosfaatgebruiksnorm.md b/fdm-docs/docs/norms/nl/2025/fosfaatgebruiksnorm.md
new file mode 100644
index 000000000..d788334f0
--- /dev/null
+++ b/fdm-docs/docs/norms/nl/2025/fosfaatgebruiksnorm.md
@@ -0,0 +1,118 @@
+---
+title: Fosfaatgebruiksnorm 2025
+sidebar_label: "Fosfaatgebruiksnorm"
+---
+
+# Fosfaatgebruiksnorm 2025
+
+This document provides a detailed explanation of the Dutch legal usage norm (`gebruiksnorm`) for phosphate in 2025. It covers how the norm is calculated and how the amount of applied phosphate counts towards this norm (`opvulling`), with a special focus on the regulations for organic-rich fertilizers as introduced in the 7th Action Programme Nitraatrichtlijn.
+
+---
+
+## Calculating the Gebruiksnorm (Usage Norm)
+
+### How the Norm Works
+
+The phosphate usage norm defines the maximum amount of phosphate (in kg P₂O₅ per hectare) that can be applied to a parcel of land. This maximum is determined by two key factors: the **land use type** and the **phosphate status of the soil**.
+
+The process involves three steps:
+
+1. **Determine Land Type**: First, the land is classified as either **`grasland`** (grassland) or **`bouwland`** (arable land) based on the main crop.
+2. **Determine Phosphate Class**: Based on a recent soil analysis (using P-CaCl₂ and P-Al values), the soil is assigned a phosphate class. The classes range from `Arm` (Poor) to `Hoog` (High). The specific thresholds for each class differ for grassland and arable land.
+3. **Look Up the Final Norm**: The combination of land type and phosphate class determines the final usage norm, as shown in the official table below.
+
+| Klasse | Grasland (kg P₂O₅/ha) | Bouwland (kg P₂O₅/ha) |
+| :------- | :-------------------- | :-------------------- |
+| Arm | 120 | 120 |
+| Laag | 105 | 80 |
+| Neutraal | 95 | 70 |
+| Ruim | 90 | 60 |
+| Hoog | 75 | 40 |
+
+The result of this calculation is the maximum allowable phosphate application for the parcel.
+
+### How the FDM Calculator Determines the Norm
+
+The `fdm-calculator` uses the `calculatePhosphateUsageNorm` function, located in `fdm-calculator/src/norms/nl/2025/value/fosfaatgebruiksnorm.ts`.
+
+This function requires the following inputs, defined in `input.ts`:
+* **Main Crop**: To determine if the land is `grasland` or `bouwland`.
+* **Soil Analysis Data**: The latest P-CaCl₂ and P-Al values.
+
+The core logic uses `fosfaatgebruiksnorm-data.ts`, which contains the official thresholds for phosphate classes and the corresponding norm values for both grassland and arable land.
+
+---
+
+## Calculating the Opvulling (Filling)
+
+### How the Filling Works
+
+The "filling" (`opvulling`) refers to how much of the applied phosphate counts towards the usage norm. While most fertilizers count for 100% of their phosphate content, the Dutch government encourages the use of **organic-rich fertilizers** (`Organische Stofrijke meststoffen`) to improve soil quality. To stimulate their use, these fertilizers count for a lower percentage of their phosphate content.
+
+#### Differentiated Percentages for Organic-Rich Fertilizers:
+
+The phosphate in qualifying organic-rich fertilizers counts towards the usage norm according to the following differentiated percentages:
+
+* **25% of phosphate counts for:**
+ * GFT-compost
+ * Groencompost (Green compost)
+
+* **75% of phosphate counts for:**
+ * Vaste strorijke mest van rundvee (Straw-rich solid manure from cattle)
+ * Vaste strorijke mest van varkens (only for organic farms) (Straw-rich solid manure)
+ * Vaste strorijke mest van schapen (Straw-rich solid manure from sheep)
+ * Vaste strorijke mest van geiten (Straw-rich solid manure from goats)
+ * Vaste strorijke mest van paarden (Straw-rich solid manure from horses)
+ * Champost
+
+* **100% of phosphate counts for:**
+ * All other fertilizers, including mineral fertilizers and other organic fertilizers not listed above.
+
+#### Conditions for Differentiated Percentages:
+
+To use these lower percentages, two important conditions must be met:
+
+1. **Minimum Application**: At least **20 kg P₂O₅ per hectare** of a specific organic-rich fertilizer must be applied. This ensures the application is substantial enough to contribute to soil improvement.
+2. **Maximum for Differentiated Calculation**: The differentiated percentage (25% or 75%) applies only to the amount of phosphate **up to the parcel's maximum usage norm**. If you apply more phosphate from an organic-rich source than the norm allows, the excess amount counts for **100%**.
+
+#### Calculation Examples:
+
+**Example 1: Standard Application**
+* **Parcel**: Arable land, phosphate status `Ruim`.
+* **Norm**: 60 kg P₂O₅/ha.
+* **Application**: 10 tons/ha of straw-rich cattle manure (forfaitair: 3.2 kg P₂O₅/ton).
+
+1. **Total Phosphate Applied**: `10 ton/ha × 3.2 kg P₂O₅/ton = 32 kg P₂O₅/ha`.
+2. **Check Conditions**:
+ * The applied amount (32 kg) is > 20 kg (minimum met).
+ * The applied amount (32 kg) is < 60 kg (norm).
+ * The 75% rule applies.
+3. **Calculate Filling**: `32 kg P₂O₅/ha × 75% = 24 kg P₂O₅/ha`.
+ * **Result**: Only **24 kg** counts towards the 60 kg norm, leaving **36 kg** of usage room.
+
+**Example 2: High Application of Compost**
+* **Parcel**: Grassland, phosphate status `Arm`.
+* **Norm**: 120 kg P₂O₅/ha.
+* **Application**: 210 kg P₂O₅/ha from green compost.
+
+1. **Check Conditions**:
+ * The applied amount (210 kg) is > 20 kg (minimum met).
+ * The differentiated percentage of 25% applies up to the norm of 120 kg.
+2. **Calculate Filling**:
+ * **Part 1 (up to the norm)**: `120 kg P₂O₅/ha × 25% = 30 kg P₂O₅/ha`.
+ * **Part 2 (above the norm)**: The remaining phosphate is `210 kg - 120 kg = 90 kg`. This amount counts for 100%.
+ * **Total Filling**: `30 kg + 90 kg = 120 kg P₂O₅/ha`.
+ * **Result**: The total filling is **120 kg**, which meets the 120 kg norm exactly.
+
+### How the FDM Calculator Determines the Filling
+
+The `fdm-calculator` uses the `calculatePhosphateFilling` function, located in `fdm-calculator/src/norms/nl/2025/filling/fosfaatgebruiksnorm.ts`.
+
+This function processes a list of fertilizer applications and implements the following logic:
+1. It identifies which fertilizers are classified as organic-rich and determines their applicable percentage (25% or 75%).
+2. For each application of an organic-rich fertilizer, it checks if the **20 kg P₂O₅/ha minimum** is met.
+3. It calculates the filling by applying the differentiated percentage to the phosphate amount that falls **within the usage norm**.
+4. Any phosphate from an organic-rich fertilizer applied **above the usage norm** is counted at 100%.
+5. All other fertilizers are always counted at 100%.
+
+The function sums the calculated filling from all applications to provide the total phosphate filling for the parcel.
diff --git a/fdm-docs/docs/norms/nl/2025/stikstofgebruiksnorm.md b/fdm-docs/docs/norms/nl/2025/stikstofgebruiksnorm.md
new file mode 100644
index 000000000..db7112dab
--- /dev/null
+++ b/fdm-docs/docs/norms/nl/2025/stikstofgebruiksnorm.md
@@ -0,0 +1,107 @@
+---
+title: Stikstofgebruiksnorm 2025
+sidebar_label: "Stikstofgebruiksnorm"
+---
+
+# Stikstofgebruiksnorm 2025
+
+This document provides a detailed explanation of the Dutch legal usage norm (`gebruiksnorm`) for nitrogen in 2025. It covers how the norm is calculated, the rules for catch crops and winter crops, and how the applied nitrogen counts towards this norm (`opvulling`).
+
+---
+
+## Calculating the Gebruiksnorm (Usage Norm)
+
+### How the Norm Works
+
+The nitrogen usage norm sets the maximum total effective nitrogen (in kg N/ha) that can be applied to a field. The calculation follows a step-by-step process to find the most precise norm based on various factors.
+
+#### Calculation Steps:
+
+1. **Identify Main Crop**: The main crop for 2025 is determined from your cultivation plan.
+2. **Determine Geographical Context**: The field's location is used to check:
+ * If it is in a **Nutrient-Polluted Area (`NV-gebied`)**, which results in a stricter (lower) norm.
+ * The dominant **soil region** (`zand_nwc`, `zand_zuid`, `klei`, `veen`, or `loess`).
+3. **Find the Standard Norm**: The main crop is looked up in the official RVO Table 2 (or Tabel 2g for NV-gebieden).
+4. **Apply Specific Rules**: The standard norm is refined with additional rules for certain crops:
+ * **Temporary Grassland (`Tijdelijk grasland`)**: The norm is adjusted based on the cultivation end date.
+ * **Potatoes (`Aardappelen`)**: The norm is adjusted based on the potato variety. See [RVO Tabel 2c](https://www.rvo.nl/sites/default/files/2024-12/Tabel-2c-Consumptieaardappelen%20hoge%20of%20lage%20norm-2025.pdf).
+ * **Maize (`Maïs`)**: The norm depends on the farm's derogation status.
+ * **Outdoor Flowers (`Buitenbloemen`)**: A higher norm is applied for specific varieties.
+5. **Select the Final Norm**: The final value is selected based on the field's soil region and `NV-gebied` status.
+6. **Apply Nitrogen Usage Norm Reduction (`Korting Stikstofgebruiksnorm`)**: The norm can be reduced (`korting`) if catch crop (`vanggewas`) or winter crop (`winterteelt`) requirements were not met in the previous year on sand and loess soils.
+
+### How the FDM Calculator Determines the Norm
+
+The `fdm-calculator` uses the `calculateNitrogenUsageNorm` function in `fdm-calculator/src/norms/nl/2025/value/stikstofgebruiksnorm.ts`, which relies on:
+* **`stikstofgebruiksnorm-data.ts`**: Contains the data from RVO Tabel 2 and Tabel 2g.
+* **`input.ts`**: Defines the required inputs, such as derogation status, location, and crop data.
+
+---
+
+## Vanggewassen en Winterteelten (Catch Crops and Winter Crops)
+
+### How the Rules Work
+
+On sand and loess soils, the land must be covered during the winter to prevent nitrogen leaching. This can be achieved with a catch crop or a designated winter crop. Failure to comply results in a reduction of the nitrogen usage norm for the following year.
+
+#### 1. Winter Crop Exception
+
+No reduction is applied if the main crop of the current year is a designated **winter crop (`winterteelt`)**. These crops provide sufficient ground cover and nitrogen uptake.
+**Official Source**: [RVO Tabel 2F Vanggewassen en winterteelten](https://www.rvo.nl/sites/default/files/2023-11/Tabel-2F-Vanggewassen-en-winterteelten-op-zand-en-l%C3%B6ssgrond-2024.pdf)
+
+#### 2. Catch Crop Rules
+
+If there is no winter crop, a **catch crop (`vanggewas`)** must be sown. The sowing date determines the reduction:
+
+* **No Reduction**: Sown by **October 1st**.
+* **5 kg N/ha Reduction**: Sown between **October 2nd and October 14th**.
+* **10 kg N/ha Reduction**: Sown between **October 15th and October 31st**.
+* **20 kg N/ha Reduction**: No valid catch crop, sown on or after **November 1st**, or destroyed before **February 1st**.
+
+### How the FDM Calculator Implements These Rules
+
+This logic is part of the `calculateNitrogenUsageNorm` function:
+
+1. **Check for Winter Crop**: The calculator checks if the current year's main crop is a winter crop.
+2. **Check for Catch Crop**: If not, it checks the previous year's cultivation data for a catch crop.
+3. **Apply Reduction**: The sowing date determines the reduction, which is applied to the current year's norm.
+
+---
+
+## Calculating the Opvulling (Filling)
+
+### How the Filling Works
+
+The filling is based on the **effective nitrogen** (`werkzame stikstof`) applied, which is calculated using an efficiency coefficient (`werkingscoëfficiënt`).
+
+**Official Source**: [RVO Tabel 9 Werkzame stikstof landbouwgrond 2025](https://www.rvo.nl/sites/default/files/2024-12/Tabel-9-Werkzame-stikstof-landbouwgrond-2025.pdf)
+
+#### Calculation Formula
+
+`Effective Nitrogen (kg N) = Applied Amount (kg or ton) × Total Nitrogen Content (%) × Efficiency Coefficient (%)`
+
+#### Efficiency Coefficients (`Werkingscoëfficiënten`)
+
+| Mestsoort (Manure Type) & Herkomst (Origin) | Toepassing (Application) | Werkingscoëfficiënt (%) |
+| :--- | :--- | :--- |
+| **Drijfmest en dunne fractie** | | |
+| Drijfmest van graasdieren (eigen bedrijf) | Met beweiding | 45 |
+| | Zonder beweiding | 60 |
+| Drijfmest van graasdieren (aangevoerd) | | 60 |
+| Drijfmest van varkens | Klei en veen | 60 |
+| | Zand en löss | 80 |
+| Overige drijfmest en dunne fractie | | 80 |
+| **Vaste mest** | | |
+| Vaste mest van graasdieren (eigen bedrijf) | Bouwland (sep-jan) | 30 |
+| | Overig met beweiding | 45 |
+| | Overig zonder beweiding | 60 |
+| Vaste mest van graasdieren (aangevoerd) | Bouwland (sep-jan) | 30 |
+| | Overige | 40 |
+| Vaste mest van varkens, pluimvee, nertsen | | 55 |
+| **Overig** | | |
+| Compost / Champost | | 10 / 25 |
+| Kunstmest (Mineral fertilizer) | | 100 |
+
+### How the FDM Calculator Determines the Filling
+
+The `calculateNitrogenFilling` function in `fdm-calculator/src/norms/nl/2025/filling/stikstofgebruiksnorm.ts` uses the fertilizer type, application method, and the coefficients from `table-9.ts` to calculate the effective nitrogen.
diff --git a/fdm-docs/docs/norms/nl/_category_.json b/fdm-docs/docs/norms/nl/_category_.json
index cec7d94ec..617b87028 100644
--- a/fdm-docs/docs/norms/nl/_category_.json
+++ b/fdm-docs/docs/norms/nl/_category_.json
@@ -1,8 +1,4 @@
{
"label": "The Netherlands",
- "position": 1,
- "link": {
- "type": "generated-index",
- "description": "Guides to understand calculations of Dutch legal norms for fertilizer application per year."
- }
+ "position": 1
}
diff --git a/fdm-docs/package.json b/fdm-docs/package.json
index 880a2da95..cdfc1b647 100644
--- a/fdm-docs/package.json
+++ b/fdm-docs/package.json
@@ -1,6 +1,6 @@
{
"name": "@svenvw/fdm-docs",
- "version": "0.7.0",
+ "version": "0.8.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
@@ -19,23 +19,23 @@
"preinstall": "npx only-allow pnpm"
},
"dependencies": {
- "@docusaurus/core": "3.8.1",
- "@docusaurus/faster": "^3.8.1",
- "@docusaurus/preset-classic": "3.8.1",
+ "@docusaurus/core": "3.9.1",
+ "@docusaurus/faster": "3.9.1",
+ "@docusaurus/preset-classic": "3.9.1",
"@mdx-js/react": "^3.1.1",
"clsx": "^2.1.1",
- "lucide-react": "^0.544.0",
+ "lucide-react": "^0.545.0",
"prism-react-renderer": "^2.4.1",
- "react": "^19.1.1",
- "react-dom": "^19.1.1"
+ "react": "^19.2.0",
+ "react-dom": "^19.2.0"
},
"devDependencies": {
- "@docusaurus/module-type-aliases": "3.8.1",
- "@docusaurus/tsconfig": "3.8.1",
- "@docusaurus/types": "3.8.1",
+ "@docusaurus/module-type-aliases": "3.9.1",
+ "@docusaurus/tsconfig": "3.9.1",
+ "@docusaurus/types": "3.9.1",
"docusaurus-plugin-typedoc": "^1.4.2",
"typedoc": "catalog:",
- "typedoc-plugin-markdown": "^4.8.1",
+ "typedoc-plugin-markdown": "^4.9.0",
"typescript": "catalog:"
},
"browserslist": {
@@ -53,5 +53,5 @@
"engines": {
"node": ">=18.0"
},
- "packageManager": "pnpm@10.14.0"
+ "packageManager": "pnpm@10.18.3"
}
diff --git a/package.json b/package.json
index 01e6c30af..70ea4212d 100644
--- a/package.json
+++ b/package.json
@@ -25,11 +25,11 @@
"format-and-lint:fix-unsafe": "biome check . --write --unsafe"
},
"devDependencies": {
- "@biomejs/biome": "^2.2.4",
+ "@biomejs/biome": "^2.2.6",
"@changesets/cli": "^2.29.7",
- "turbo": "^2.5.6"
+ "turbo": "^2.5.8"
},
- "packageManager": "pnpm@10.17.0",
+ "packageManager": "pnpm@10.18.3",
"pnpm": {
"packageExtensions": {
"vite-plugin-dts": {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index bdeee45ae..ad5641659 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -7,53 +7,53 @@ settings:
catalogs:
default:
'@dotenvx/dotenvx':
- specifier: ^1.49.1
- version: 1.48.4
+ specifier: ^1.51.0
+ version: 1.51.0
'@rollup/plugin-commonjs':
specifier: ^28.0.6
- version: 28.0.6
+ version: 28.0.8
'@rollup/plugin-json':
specifier: ^6.1.0
version: 6.1.0
'@rollup/plugin-node-resolve':
- specifier: ^16.0.1
- version: 16.0.1
+ specifier: ^16.0.3
+ version: 16.0.3
'@rollup/plugin-terser':
specifier: ^0.4.4
version: 0.4.4
'@rollup/plugin-typescript':
specifier: ^12.1.4
- version: 12.1.4
+ version: 12.3.0
'@vitest/coverage-v8':
specifier: 3.2.4
version: 3.2.4
better-auth:
- specifier: ^1.3.11
- version: 1.3.5
+ specifier: ^1.3.27
+ version: 1.3.29
drizzle-kit:
- specifier: ^0.31.4
- version: 0.31.4
+ specifier: ^0.31.5
+ version: 0.31.5
drizzle-orm:
- specifier: ^0.44.5
- version: 0.44.4
+ specifier: ^0.44.6
+ version: 0.44.7
rollup:
- specifier: ^4.50.2
- version: 4.50.2
+ specifier: ^4.52.4
+ version: 4.52.5
rollup-plugin-polyfill-node:
specifier: ^0.13.0
version: 0.13.0
typedoc:
- specifier: ^0.28.13
- version: 0.28.13
+ specifier: ^0.28.14
+ version: 0.28.14
typedoc-plugin-missing-exports:
- specifier: ^4.1.0
- version: 4.1.0
+ specifier: ^4.1.2
+ version: 4.1.2
typescript:
- specifier: ^5.9.2
- version: 5.9.2
+ specifier: ^5.9.3
+ version: 5.9.3
vite:
- specifier: ^7.1.6
- version: 7.1.6
+ specifier: ^7.1.11
+ version: 7.1.12
vite-tsconfig-paths:
specifier: ^5.1.4
version: 5.1.4
@@ -68,14 +68,14 @@ importers:
.:
devDependencies:
'@biomejs/biome':
- specifier: ^2.2.4
- version: 2.2.4
+ specifier: ^2.2.6
+ version: 2.3.0
'@changesets/cli':
specifier: ^2.29.7
- version: 2.29.7(@types/node@24.5.2)
+ version: 2.29.7(@types/node@24.9.1)
turbo:
- specifier: ^2.5.6
- version: 2.5.6
+ specifier: ^2.5.8
+ version: 2.5.8
fdm-app:
dependencies:
@@ -84,7 +84,10 @@ importers:
version: 1.4.1
'@hookform/resolvers':
specifier: ^5.2.2
- version: 5.2.2(react-hook-form@7.62.0(react@19.1.1))
+ version: 5.2.2(react-hook-form@7.65.0(react@19.2.0))
+ '@lucide/lab':
+ specifier: ^0.1.2
+ version: 0.1.2
'@mapbox/geojson-extent':
specifier: ^1.0.1
version: 1.0.1
@@ -93,28 +96,37 @@ importers:
version: 5.1.2
'@radix-ui/react-alert-dialog':
specifier: ^1.1.15
- version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@radix-ui/react-icons':
specifier: ^1.3.2
- version: 1.3.2(react@19.1.1)
+ version: 1.3.2(react@19.2.0)
+ '@radix-ui/react-label':
+ specifier: ^2.1.7
+ version: 2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-progress':
+ specifier: ^1.1.7
+ version: 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-separator':
+ specifier: ^1.1.7
+ version: 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@radix-ui/react-slot':
specifier: ^1.2.3
- version: 1.2.3(@types/react@19.1.13)(react@19.1.1)
+ version: 1.2.3(@types/react@19.2.2)(react@19.2.0)
'@radix-ui/react-switch':
specifier: ^1.2.6
- version: 1.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 1.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@react-email/components':
- specifier: ^0.5.3
- version: 0.5.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^0.5.6
+ version: 0.5.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@react-email/tailwind':
specifier: 1.2.2
- version: 1.2.2(react@19.1.1)
+ version: 1.2.2(react@19.2.0)
'@react-router/node':
- specifier: ^7.9.1
- version: 7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)
+ specifier: ^7.9.4
+ version: 7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)
'@react-router/serve':
- specifier: ^7.9.1
- version: 7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)
+ specifier: ^7.9.4
+ version: 7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)
'@remix-run/file-storage':
specifier: ^0.9.0
version: 0.9.0
@@ -122,11 +134,11 @@ importers:
specifier: ^0.10.1
version: 0.10.1
'@sentry/profiling-node':
- specifier: ^10.12.0
- version: 10.12.0
+ specifier: ^10.22.0
+ version: 10.22.0
'@sentry/react-router':
- specifier: ^10.12.0
- version: 10.12.0(@react-router/node@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2))(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
+ specifier: ^10.22.0
+ version: 10.22.0(@react-router/node@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)
'@svenvw/fdm-calculator':
specifier: workspace:^
version: link:../fdm-calculator
@@ -137,11 +149,11 @@ importers:
specifier: workspace:*
version: link:../fdm-data
'@tailwindcss/vite':
- specifier: ^4.1.13
- version: 4.1.13(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))
+ specifier: ^4.1.14
+ version: 4.1.16(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))
'@tanstack/react-table':
specifier: ^8.21.3
- version: 8.21.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 8.21.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@turf/centroid':
specifier: ^7.2.0
version: 7.2.0
@@ -150,7 +162,7 @@ importers:
version: 7.2.0
better-auth:
specifier: 'catalog:'
- version: 1.3.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(zod@3.25.76)
+ version: 1.3.29(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
class-variance-authority:
specifier: ^0.7.1
version: 0.7.1
@@ -159,49 +171,52 @@ importers:
version: 2.1.1
cmdk:
specifier: 1.1.1
- version: 1.1.1(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
date-fns:
specifier: ^4.1.0
version: 4.1.0
drizzle-orm:
specifier: 'catalog:'
- version: 0.44.4(@electric-sql/pglite@0.3.8)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.7)(postgres@3.4.7)
+ version: 0.44.7(@electric-sql/pglite@0.3.11)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.8)(postgres@3.4.7)
file-type:
specifier: ^21.0.0
version: 21.0.0
flatgeobuf:
- specifier: ^4.2.0
- version: 4.2.0
+ specifier: ^4.3.1
+ version: 4.3.1
framer-motion:
- specifier: ^12.23.14
- version: 12.23.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^12.23.24
+ version: 12.23.24(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
fuzzysort:
specifier: ^3.1.0
version: 3.1.0
isbot:
- specifier: ^5.1.30
- version: 5.1.30
+ specifier: ^5.1.31
+ version: 5.1.31
lodash.throttle:
specifier: ^4.1.1
version: 4.1.1
lucide-react:
- specifier: ^0.544.0
- version: 0.544.0(react@19.1.1)
+ specifier: ^0.545.0
+ version: 0.545.0(react@19.2.0)
mapbox-gl:
specifier: ^3.15.0
- version: 3.15.0
+ version: 3.16.0
+ nanoid:
+ specifier: ^5.1.5
+ version: 5.1.6
next-themes:
specifier: ^0.4.6
- version: 0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
postgres:
specifier: ^3.4.7
version: 3.4.7
posthog-js:
- specifier: ^1.266.0
- version: 1.266.0
+ specifier: ^1.284.0
+ version: 1.284.0
posthog-node:
- specifier: ^5.8.4
- version: 5.8.4
+ specifier: ^5.11.0
+ version: 5.11.0
postmark:
specifier: ^4.0.5
version: 4.0.5
@@ -210,83 +225,80 @@ importers:
version: 2.19.10
radix-ui:
specifier: ^1.4.3
- version: 1.4.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 1.4.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react:
- specifier: ^19.1.1
- version: 19.1.1
+ specifier: ^19.2.0
+ version: 19.2.0
react-day-picker:
- specifier: 9.10.0
- version: 9.10.0(react@19.1.1)
+ specifier: 9.11.1
+ version: 9.11.1(react@19.2.0)
react-dom:
- specifier: ^19.1.1
- version: 19.1.1(react@19.1.1)
+ specifier: ^19.2.0
+ version: 19.2.0(react@19.2.0)
react-hook-form:
- specifier: ^7.62.0
- version: 7.62.0(react@19.1.1)
+ specifier: ^7.65.0
+ version: 7.65.0(react@19.2.0)
react-map-gl:
- specifier: ^8.0.4
- version: 8.0.4(mapbox-gl@3.15.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^8.1.0
+ version: 8.1.0(mapbox-gl@3.16.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react-markdown:
specifier: ^10.1.0
- version: 10.1.0(@types/react@19.1.13)(react@19.1.1)
+ version: 10.1.0(@types/react@19.2.2)(react@19.2.0)
react-router:
- specifier: ^7.9.1
- version: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^7.9.4
+ version: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react-router-dom:
- specifier: ^7.9.1
- version: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: ^7.9.4
+ version: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
recharts:
specifier: ^2.15.4
- version: 2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 2.15.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
remark-gfm:
specifier: ^4.0.1
version: 4.0.1
remix-hook-form:
specifier: 7.1.0
- version: 7.1.0(react-dom@19.1.1(react@19.1.1))(react-hook-form@7.62.0(react@19.1.1))(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)
+ version: 7.1.0(react-dom@19.2.0(react@19.2.0))(react-hook-form@7.65.0(react@19.2.0))(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)
remix-toast:
- specifier: ^3.2.0
- version: 3.2.0(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))
+ specifier: ^3.3.0
+ version: 3.3.0(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
remix-utils:
- specifier: ^8.8.0
- version: 8.8.0(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(zod@3.25.76)
+ specifier: ^9.0.0
+ version: 9.0.0(@standard-schema/spec@1.0.0)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)
shpjs:
- specifier: ^6.1.0
- version: 6.1.0
+ specifier: ^6.2.0
+ version: 6.2.0
sonner:
specifier: ^2.0.7
- version: 2.0.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ version: 2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
tailwind-merge:
specifier: ^3.3.1
version: 3.3.1
tailwindcss-animate:
specifier: ^1.0.7
- version: 1.0.7(tailwindcss@4.1.13)
+ version: 1.0.7(tailwindcss@4.1.16)
validator:
- specifier: ^13.15.15
- version: 13.15.15
- vite-node:
- specifier: ^3.2.4
- version: 3.2.4(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ specifier: ^13.15.20
+ version: 13.15.20
zod:
specifier: ^3.25.76
version: 3.25.76
zustand:
specifier: ^5.0.8
- version: 5.0.8(@types/react@19.1.13)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1))
+ version: 5.0.8(@types/react@19.2.2)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0))
devDependencies:
'@dotenvx/dotenvx':
specifier: 'catalog:'
- version: 1.48.4
+ version: 1.51.0
'@react-router/dev':
- specifier: ^7.9.1
- version: 7.9.1(@react-router/serve@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2))(@types/node@24.5.2)(@vitejs/plugin-rsc@0.4.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)))(jiti@2.5.1)(lightningcss@1.30.1)(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)
+ specifier: ^7.9.4
+ version: 7.9.4(@react-router/serve@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.44.0)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)
'@react-router/fs-routes':
- specifier: ^7.9.1
- version: 7.9.1(@react-router/dev@7.9.1(@react-router/serve@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2))(@types/node@24.5.2)(@vitejs/plugin-rsc@0.4.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)))(jiti@2.5.1)(lightningcss@1.30.1)(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.2)
+ specifier: ^7.9.4
+ version: 7.9.4(@react-router/dev@7.9.4(@react-router/serve@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.44.0)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.3)
'@tailwindcss/postcss':
- specifier: ^4.1.13
- version: 4.1.13
+ specifier: ^4.1.14
+ version: 4.1.16
'@types/geojson':
specifier: ^7946.0.16
version: 7946.0.16
@@ -301,13 +313,13 @@ importers:
version: 1.0.3
'@types/mapbox__mapbox-gl-geocoder':
specifier: ^5.0.0
- version: 5.0.0
+ version: 5.1.0
'@types/react':
- specifier: ^19.1.13
- version: 19.1.13
+ specifier: ^19.2.2
+ version: 19.2.2
'@types/react-dom':
- specifier: ^19.1.9
- version: 19.1.9(@types/react@19.1.13)
+ specifier: ^19.2.2
+ version: 19.2.2(@types/react@19.2.2)
'@types/react-map-gl':
specifier: ^6.1.7
version: 6.1.7
@@ -318,17 +330,20 @@ importers:
specifier: ^8.5.6
version: 8.5.6
tailwindcss:
- specifier: ^4.1.13
- version: 4.1.13
+ specifier: ^4.1.14
+ version: 4.1.16
typescript:
specifier: 'catalog:'
- version: 5.9.2
+ version: 5.9.3
vite:
specifier: 'catalog:'
- version: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ version: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
+ vite-node:
+ specifier: ^3.2.4
+ version: 3.2.4(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
vite-tsconfig-paths:
specifier: 'catalog:'
- version: 5.1.4(typescript@5.9.2)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))
+ version: 5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))
fdm-calculator:
dependencies:
@@ -347,49 +362,49 @@ importers:
devDependencies:
'@dotenvx/dotenvx':
specifier: 'catalog:'
- version: 1.48.4
+ version: 1.51.0
'@rollup/plugin-commonjs':
specifier: 'catalog:'
- version: 28.0.6(rollup@4.50.2)
+ version: 28.0.8(rollup@4.52.5)
'@rollup/plugin-node-resolve':
specifier: 'catalog:'
- version: 16.0.1(rollup@4.50.2)
+ version: 16.0.3(rollup@4.52.5)
'@rollup/plugin-terser':
specifier: 'catalog:'
- version: 0.4.4(rollup@4.50.2)
+ version: 0.4.4(rollup@4.52.5)
'@rollup/plugin-typescript':
specifier: 'catalog:'
- version: 12.1.4(rollup@4.50.2)(tslib@2.8.1)(typescript@5.9.2)
+ version: 12.3.0(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3)
'@vitest/coverage-v8':
specifier: 'catalog:'
- version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))
+ version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))
postgres:
specifier: ^3.4.7
version: 3.4.7
rollup:
specifier: 'catalog:'
- version: 4.50.2
+ version: 4.52.5
rollup-plugin-polyfill-node:
specifier: 'catalog:'
- version: 0.13.0(rollup@4.50.2)
+ version: 0.13.0(rollup@4.52.5)
typedoc:
specifier: 'catalog:'
- version: 0.28.13(typescript@5.9.2)
+ version: 0.28.14(typescript@5.9.3)
typedoc-plugin-missing-exports:
specifier: 'catalog:'
- version: 4.1.0(typedoc@0.28.13(typescript@5.9.2))
+ version: 4.1.2(typedoc@0.28.14(typescript@5.9.3))
typescript:
specifier: 'catalog:'
- version: 5.9.2
+ version: 5.9.3
vitest:
specifier: 'catalog:'
- version: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
fdm-core:
dependencies:
'@electric-sql/pglite':
- specifier: ^0.3.8
- version: 0.3.8
+ specifier: ^0.3.11
+ version: 0.3.11
'@svenvw/fdm-data':
specifier: workspace:*
version: link:../fdm-data
@@ -398,44 +413,47 @@ importers:
version: 7946.0.16
better-auth:
specifier: 'catalog:'
- version: 1.3.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(zod@4.1.9)
+ version: 1.3.29(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
drizzle-orm:
specifier: 'catalog:'
- version: 0.44.4(@electric-sql/pglite@0.3.8)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.7)(postgres@3.4.7)
+ version: 0.44.7(@electric-sql/pglite@0.3.11)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.8)(postgres@3.4.7)
nanoid:
- specifier: ^5.1.5
- version: 5.1.5
+ specifier: ^5.1.6
+ version: 5.1.6
postgres:
specifier: ^3.4.7
version: 3.4.7
+ safe-stable-stringify:
+ specifier: ^2.5.0
+ version: 2.5.0
unique-username-generator:
specifier: ^1.5.1
version: 1.5.1
devDependencies:
'@dotenvx/dotenvx':
specifier: 'catalog:'
- version: 1.48.4
+ version: 1.51.0
'@rollup/plugin-commonjs':
specifier: 'catalog:'
- version: 28.0.6(rollup@4.50.2)
+ version: 28.0.8(rollup@4.52.5)
'@rollup/plugin-node-resolve':
specifier: 'catalog:'
- version: 16.0.1(rollup@4.50.2)
+ version: 16.0.3(rollup@4.52.5)
'@rollup/plugin-terser':
specifier: 'catalog:'
- version: 0.4.4(rollup@4.50.2)
+ version: 0.4.4(rollup@4.52.5)
'@rollup/plugin-typescript':
specifier: 'catalog:'
- version: 12.1.4(rollup@4.50.2)(tslib@2.8.1)(typescript@5.9.2)
+ version: 12.3.0(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3)
'@types/node':
- specifier: ^24.5.2
- version: 24.5.2
+ specifier: ^24.7.2
+ version: 24.9.1
'@vitest/coverage-v8':
specifier: 'catalog:'
- version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))
+ version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))
drizzle-kit:
specifier: 'catalog:'
- version: 0.31.4
+ version: 0.31.5
fs-extra:
specifier: ^11.3.2
version: 11.3.2
@@ -444,22 +462,22 @@ importers:
version: 16.4.0
rollup:
specifier: 'catalog:'
- version: 4.50.2
+ version: 4.52.5
rollup-plugin-polyfill-node:
specifier: 'catalog:'
- version: 0.13.0(rollup@4.50.2)
+ version: 0.13.0(rollup@4.52.5)
typedoc:
specifier: 'catalog:'
- version: 0.28.13(typescript@5.9.2)
+ version: 0.28.14(typescript@5.9.3)
typedoc-plugin-missing-exports:
specifier: 'catalog:'
- version: 4.1.0(typedoc@0.28.13(typescript@5.9.2))
+ version: 4.1.2(typedoc@0.28.14(typescript@5.9.3))
typescript:
specifier: 'catalog:'
- version: 5.9.2
+ version: 5.9.3
vitest:
specifier: 'catalog:'
- version: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
fdm-data:
dependencies:
@@ -469,175 +487,195 @@ importers:
devDependencies:
'@dotenvx/dotenvx':
specifier: 'catalog:'
- version: 1.48.4
+ version: 1.51.0
'@rollup/plugin-commonjs':
specifier: 'catalog:'
- version: 28.0.6(rollup@4.50.2)
+ version: 28.0.8(rollup@4.52.5)
'@rollup/plugin-json':
specifier: 'catalog:'
- version: 6.1.0(rollup@4.50.2)
+ version: 6.1.0(rollup@4.52.5)
'@rollup/plugin-node-resolve':
specifier: 'catalog:'
- version: 16.0.1(rollup@4.50.2)
+ version: 16.0.3(rollup@4.52.5)
'@rollup/plugin-terser':
specifier: 'catalog:'
- version: 0.4.4(rollup@4.50.2)
+ version: 0.4.4(rollup@4.52.5)
'@rollup/plugin-typescript':
specifier: 'catalog:'
- version: 12.1.4(rollup@4.50.2)(tslib@2.8.1)(typescript@5.9.2)
+ version: 12.3.0(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3)
'@vitest/coverage-v8':
specifier: 'catalog:'
- version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))
+ version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))
rollup:
specifier: 'catalog:'
- version: 4.50.2
+ version: 4.52.5
rollup-plugin-polyfill-node:
specifier: 'catalog:'
- version: 0.13.0(rollup@4.50.2)
+ version: 0.13.0(rollup@4.52.5)
typedoc:
specifier: 'catalog:'
- version: 0.28.13(typescript@5.9.2)
+ version: 0.28.14(typescript@5.9.3)
typedoc-plugin-missing-exports:
specifier: 'catalog:'
- version: 4.1.0(typedoc@0.28.13(typescript@5.9.2))
+ version: 4.1.2(typedoc@0.28.14(typescript@5.9.3))
typescript:
specifier: 'catalog:'
- version: 5.9.2
+ version: 5.9.3
vitest:
specifier: 'catalog:'
- version: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ version: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
fdm-docs:
dependencies:
'@docusaurus/core':
- specifier: 3.8.1
- version: 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
+ specifier: 3.9.1
+ version: 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
'@docusaurus/faster':
- specifier: ^3.8.1
- version: 3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))
+ specifier: 3.9.1
+ version: 3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
'@docusaurus/preset-classic':
- specifier: 3.8.1
- version: 3.8.1(@algolia/client-search@5.37.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(search-insights@2.17.3)(typescript@5.9.2)
+ specifier: 3.9.1
+ version: 3.9.1(@algolia/client-search@5.41.0)(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)
'@mdx-js/react':
specifier: ^3.1.1
- version: 3.1.1(@types/react@19.1.13)(react@19.1.1)
+ version: 3.1.1(@types/react@19.2.2)(react@19.2.0)
clsx:
specifier: ^2.1.1
version: 2.1.1
lucide-react:
- specifier: ^0.544.0
- version: 0.544.0(react@19.1.1)
+ specifier: ^0.545.0
+ version: 0.545.0(react@19.2.0)
prism-react-renderer:
specifier: ^2.4.1
- version: 2.4.1(react@19.1.1)
+ version: 2.4.1(react@19.2.0)
react:
- specifier: ^19.1.1
- version: 19.1.1
+ specifier: ^19.2.0
+ version: 19.2.0
react-dom:
- specifier: ^19.1.1
- version: 19.1.1(react@19.1.1)
+ specifier: ^19.2.0
+ version: 19.2.0(react@19.2.0)
devDependencies:
'@docusaurus/module-type-aliases':
- specifier: 3.8.1
- version: 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: 3.9.1
+ version: 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@docusaurus/tsconfig':
- specifier: 3.8.1
- version: 3.8.1
+ specifier: 3.9.1
+ version: 3.9.1
'@docusaurus/types':
- specifier: 3.8.1
- version: 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ specifier: 3.9.1
+ version: 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
docusaurus-plugin-typedoc:
specifier: ^1.4.2
- version: 1.4.2(typedoc-plugin-markdown@4.8.1(typedoc@0.28.13(typescript@5.9.2)))
+ version: 1.4.2(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3)))
typedoc:
specifier: 'catalog:'
- version: 0.28.13(typescript@5.9.2)
+ version: 0.28.14(typescript@5.9.3)
typedoc-plugin-markdown:
- specifier: ^4.8.1
- version: 4.8.1(typedoc@0.28.13(typescript@5.9.2))
+ specifier: ^4.9.0
+ version: 4.9.0(typedoc@0.28.14(typescript@5.9.3))
typescript:
specifier: 'catalog:'
- version: 5.9.2
+ version: 5.9.3
packages:
- '@algolia/abtesting@1.3.0':
- resolution: {integrity: sha512-KqPVLdVNfoJzX5BKNGM9bsW8saHeyax8kmPFXul5gejrSPN3qss7PgsFH5mMem7oR8tvjvNkia97ljEYPYCN8Q==}
- engines: {node: '>= 14.0.0'}
+ '@ai-sdk/gateway@2.0.1':
+ resolution: {integrity: sha512-vPVIbnP35ZnayS937XLo85vynR85fpBQWHCdUweq7apzqFOTU2YkUd4V3msebEHbQ2Zro60ZShDDy9SMiyWTqA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.25.76 || ^4.1.8
- '@algolia/autocomplete-core@1.17.9':
- resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==}
+ '@ai-sdk/provider-utils@3.0.12':
+ resolution: {integrity: sha512-ZtbdvYxdMoria+2SlNarEk6Hlgyf+zzcznlD55EAl+7VZvJaSg2sqPvwArY7L6TfDEDJsnCq0fdhBSkYo0Xqdg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.25.76 || ^4.1.8
- '@algolia/autocomplete-plugin-algolia-insights@1.17.9':
- resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==}
+ '@ai-sdk/provider@2.0.0':
+ resolution: {integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==}
+ engines: {node: '>=18'}
+
+ '@ai-sdk/react@2.0.78':
+ resolution: {integrity: sha512-f5inDBHJyUEzbtNxc9HiTxbcGjtot0uuc//0/khGrl8IZlLxw+yTxO/T1Qq95Rw5QPwTx9/Aw7wIZei3qws9hA==}
+ engines: {node: '>=18'}
peerDependencies:
- search-insights: '>= 1 < 3'
+ react: ^18 || ^19 || ^19.0.0-rc
+ zod: ^3.25.76 || ^4.1.8
+ peerDependenciesMeta:
+ zod:
+ optional: true
+
+ '@algolia/abtesting@1.7.0':
+ resolution: {integrity: sha512-hOEItTFOvNLI6QX6TSGu7VE4XcUcdoKZT8NwDY+5mWwu87rGhkjlY7uesKTInlg6Sh8cyRkDBYRumxbkoBbBhA==}
+ engines: {node: '>= 14.0.0'}
- '@algolia/autocomplete-preset-algolia@1.17.9':
- resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==}
+ '@algolia/autocomplete-core@1.19.2':
+ resolution: {integrity: sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==}
+
+ '@algolia/autocomplete-plugin-algolia-insights@1.19.2':
+ resolution: {integrity: sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==}
peerDependencies:
- '@algolia/client-search': '>= 4.9.1 < 6'
- algoliasearch: '>= 4.9.1 < 6'
+ search-insights: '>= 1 < 3'
- '@algolia/autocomplete-shared@1.17.9':
- resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==}
+ '@algolia/autocomplete-shared@1.19.2':
+ resolution: {integrity: sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==}
peerDependencies:
'@algolia/client-search': '>= 4.9.1 < 6'
algoliasearch: '>= 4.9.1 < 6'
- '@algolia/client-abtesting@5.37.0':
- resolution: {integrity: sha512-Dp2Zq+x9qQFnuiQhVe91EeaaPxWBhzwQ6QnznZQnH9C1/ei3dvtmAFfFeaTxM6FzfJXDLvVnaQagTYFTQz3R5g==}
+ '@algolia/client-abtesting@5.41.0':
+ resolution: {integrity: sha512-iRuvbEyuHCAhIMkyzG3tfINLxTS7mSKo7q8mQF+FbQpWenlAlrXnfZTN19LRwnVjx0UtAdZq96ThMWGS6cQ61A==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-analytics@5.37.0':
- resolution: {integrity: sha512-wyXODDOluKogTuZxRII6mtqhAq4+qUR3zIUJEKTiHLe8HMZFxfUEI4NO2qSu04noXZHbv/sRVdQQqzKh12SZuQ==}
+ '@algolia/client-analytics@5.41.0':
+ resolution: {integrity: sha512-OIPVbGfx/AO8l1V70xYTPSeTt/GCXPEl6vQICLAXLCk9WOUbcLGcy6t8qv0rO7Z7/M/h9afY6Af8JcnI+FBFdQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-common@5.37.0':
- resolution: {integrity: sha512-GylIFlPvLy9OMgFG8JkonIagv3zF+Dx3H401Uo2KpmfMVBBJiGfAb9oYfXtplpRMZnZPxF5FnkWaI/NpVJMC+g==}
+ '@algolia/client-common@5.41.0':
+ resolution: {integrity: sha512-8Mc9niJvfuO8dudWN5vSUlYkz7U3M3X3m1crDLc9N7FZrIVoNGOUETPk3TTHviJIh9y6eKZKbq1hPGoGY9fqPA==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-insights@5.37.0':
- resolution: {integrity: sha512-T63afO2O69XHKw2+F7mfRoIbmXWGzgpZxgOFAdP3fR4laid7pWBt20P4eJ+Zn23wXS5kC9P2K7Bo3+rVjqnYiw==}
+ '@algolia/client-insights@5.41.0':
+ resolution: {integrity: sha512-vXzvCGZS6Ixxn+WyzGUVDeR3HO/QO5POeeWy1kjNJbEf6f+tZSI+OiIU9Ha+T3ntV8oXFyBEuweygw4OLmgfiQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-personalization@5.37.0':
- resolution: {integrity: sha512-1zOIXM98O9zD8bYDCJiUJRC/qNUydGHK/zRK+WbLXrW1SqLFRXECsKZa5KoG166+o5q5upk96qguOtE8FTXDWQ==}
+ '@algolia/client-personalization@5.41.0':
+ resolution: {integrity: sha512-tkymXhmlcc7w/HEvLRiHcpHxLFcUB+0PnE9FcG6hfFZ1ZXiWabH+sX+uukCVnluyhfysU9HRU2kUmUWfucx1Dg==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-query-suggestions@5.37.0':
- resolution: {integrity: sha512-31Nr2xOLBCYVal+OMZn1rp1H4lPs1914Tfr3a34wU/nsWJ+TB3vWjfkUUuuYhWoWBEArwuRzt3YNLn0F/KRVkg==}
+ '@algolia/client-query-suggestions@5.41.0':
+ resolution: {integrity: sha512-vyXDoz3kEZnosNeVQQwf0PbBt5IZJoHkozKRIsYfEVm+ylwSDFCW08qy2YIVSHdKy69/rWN6Ue/6W29GgVlmKQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/client-search@5.37.0':
- resolution: {integrity: sha512-DAFVUvEg+u7jUs6BZiVz9zdaUebYULPiQ4LM2R4n8Nujzyj7BZzGr2DCd85ip4p/cx7nAZWKM8pLcGtkTRTdsg==}
+ '@algolia/client-search@5.41.0':
+ resolution: {integrity: sha512-G9I2atg1ShtFp0t7zwleP6aPS4DcZvsV4uoQOripp16aR6VJzbEnKFPLW4OFXzX7avgZSpYeBAS+Zx4FOgmpPw==}
engines: {node: '>= 14.0.0'}
'@algolia/events@4.0.1':
resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==}
- '@algolia/ingestion@1.37.0':
- resolution: {integrity: sha512-pkCepBRRdcdd7dTLbFddnu886NyyxmhgqiRcHHaDunvX03Ij4WzvouWrQq7B7iYBjkMQrLS8wQqSP0REfA4W8g==}
+ '@algolia/ingestion@1.41.0':
+ resolution: {integrity: sha512-sxU/ggHbZtmrYzTkueTXXNyifn+ozsLP+Wi9S2hOBVhNWPZ8uRiDTDcFyL7cpCs1q72HxPuhzTP5vn4sUl74cQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/monitoring@1.37.0':
- resolution: {integrity: sha512-fNw7pVdyZAAQQCJf1cc/ih4fwrRdQSgKwgor4gchsI/Q/ss9inmC6bl/69jvoRSzgZS9BX4elwHKdo0EfTli3w==}
+ '@algolia/monitoring@1.41.0':
+ resolution: {integrity: sha512-UQ86R6ixraHUpd0hn4vjgTHbViNO8+wA979gJmSIsRI3yli2v89QSFF/9pPcADR6PbtSio/99PmSNxhZy+CR3Q==}
engines: {node: '>= 14.0.0'}
- '@algolia/recommend@5.37.0':
- resolution: {integrity: sha512-U+FL5gzN2ldx3TYfQO5OAta2TBuIdabEdFwD5UVfWPsZE5nvOKkc/6BBqP54Z/adW/34c5ZrvvZhlhNTZujJXQ==}
+ '@algolia/recommend@5.41.0':
+ resolution: {integrity: sha512-DxP9P8jJ8whJOnvmyA5mf1wv14jPuI0L25itGfOHSU6d4ZAjduVfPjTS3ROuUN5CJoTdlidYZE+DtfWHxJwyzQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/requester-browser-xhr@5.37.0':
- resolution: {integrity: sha512-Ao8GZo8WgWFABrU7iq+JAftXV0t+UcOtCDL4mzHHZ+rQeTTf1TZssr4d0vIuoqkVNnKt9iyZ7T4lQff4ydcTrw==}
+ '@algolia/requester-browser-xhr@5.41.0':
+ resolution: {integrity: sha512-C21J+LYkE48fDwtLX7YXZd2Fn7Fe0/DOEtvohSfr/ODP8dGDhy9faaYeWB0n1AvmZltugjkjAXT7xk0CYNIXsQ==}
engines: {node: '>= 14.0.0'}
- '@algolia/requester-fetch@5.37.0':
- resolution: {integrity: sha512-H7OJOXrFg5dLcGJ22uxx8eiFId0aB9b0UBhoOi4SMSuDBe6vjJJ/LeZyY25zPaSvkXNBN3vAM+ad6M0h6ha3AA==}
+ '@algolia/requester-fetch@5.41.0':
+ resolution: {integrity: sha512-FhJy/+QJhMx1Hajf2LL8og4J7SqOAHiAuUXq27cct4QnPhSIuIGROzeRpfDNH5BUbq22UlMuGd44SeD4HRAqvA==}
engines: {node: '>= 14.0.0'}
- '@algolia/requester-node-http@5.37.0':
- resolution: {integrity: sha512-npZ9aeag4SGTx677eqPL3rkSPlQrnzx/8wNrl1P7GpWq9w/eTmRbOq+wKrJ2r78idlY0MMgmY/mld2tq6dc44g==}
+ '@algolia/requester-node-http@5.41.0':
+ resolution: {integrity: sha512-tYv3rGbhBS0eZ5D8oCgV88iuWILROiemk+tQ3YsAKZv2J4kKUNvKkrX/If/SreRy4MGP2uJzMlyKcfSfO2mrsQ==}
engines: {node: '>= 14.0.0'}
'@alloc/quick-lru@5.2.0':
@@ -648,20 +686,26 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
+ '@apm-js-collab/code-transformer@0.8.2':
+ resolution: {integrity: sha512-YRjJjNq5KFSjDUoqu5pFUWrrsvGOxl6c3bu+uMFc9HNNptZ2rNU/TI2nLw4jnhQNtka972Ee2m3uqbvDQtPeCA==}
+
+ '@apm-js-collab/tracing-hooks@0.3.1':
+ resolution: {integrity: sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==}
+
'@babel/code-frame@7.27.1':
resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
engines: {node: '>=6.9.0'}
- '@babel/compat-data@7.28.4':
- resolution: {integrity: sha512-YsmSKC29MJwf0gF8Rjjrg5LQCmyh+j/nD8/eP7f+BeoQTKYqs9RoWbjGOdy0+1Ekr68RJZMUOPVQaQisnIo4Rw==}
+ '@babel/compat-data@7.28.5':
+ resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
engines: {node: '>=6.9.0'}
- '@babel/core@7.28.4':
- resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==}
+ '@babel/core@7.28.5':
+ resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
engines: {node: '>=6.9.0'}
- '@babel/generator@7.28.3':
- resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==}
+ '@babel/generator@7.28.5':
+ resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
engines: {node: '>=6.9.0'}
'@babel/helper-annotate-as-pure@7.27.3':
@@ -672,14 +716,14 @@ packages:
resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-create-class-features-plugin@7.28.3':
- resolution: {integrity: sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==}
+ '@babel/helper-create-class-features-plugin@7.28.5':
+ resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/helper-create-regexp-features-plugin@7.27.1':
- resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==}
+ '@babel/helper-create-regexp-features-plugin@7.28.5':
+ resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -693,8 +737,8 @@ packages:
resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-member-expression-to-functions@7.27.1':
- resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
engines: {node: '>=6.9.0'}
'@babel/helper-module-imports@7.27.1':
@@ -735,8 +779,8 @@ packages:
resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.27.1':
@@ -751,13 +795,13 @@ packages:
resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
engines: {node: '>=6.9.0'}
- '@babel/parser@7.28.4':
- resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1':
- resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==}
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5':
+ resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
@@ -851,8 +895,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-block-scoping@7.28.4':
- resolution: {integrity: sha512-1yxmvN0MJHOhPVmAsmoW5liWwoILobu/d/ShymZmj867bAdxGbehIrew1DuLpw2Ukv+qDSSPQdYW1dLNE7t11A==}
+ '@babel/plugin-transform-block-scoping@7.28.5':
+ resolution: {integrity: sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -881,8 +925,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-destructuring@7.28.0':
- resolution: {integrity: sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==}
+ '@babel/plugin-transform-destructuring@7.28.5':
+ resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -917,8 +961,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-exponentiation-operator@7.27.1':
- resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==}
+ '@babel/plugin-transform-exponentiation-operator@7.28.5':
+ resolution: {integrity: sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -953,8 +997,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-logical-assignment-operators@7.27.1':
- resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==}
+ '@babel/plugin-transform-logical-assignment-operators@7.28.5':
+ resolution: {integrity: sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -977,8 +1021,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-modules-systemjs@7.27.1':
- resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==}
+ '@babel/plugin-transform-modules-systemjs@7.28.5':
+ resolution: {integrity: sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -1031,8 +1075,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-optional-chaining@7.27.1':
- resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==}
+ '@babel/plugin-transform-optional-chaining@7.28.5':
+ resolution: {integrity: sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -1109,8 +1153,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-runtime@7.28.3':
- resolution: {integrity: sha512-Y6ab1kGqZ0u42Zv/4a7l0l72n9DKP/MKoKWaUSBylrhNZO2prYuqFOLbn5aW5SIFXwSH93yfjbgllL8lxuGKLg==}
+ '@babel/plugin-transform-runtime@7.28.5':
+ resolution: {integrity: sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -1145,8 +1189,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/plugin-transform-typescript@7.28.0':
- resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
+ '@babel/plugin-transform-typescript@7.28.5':
+ resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -1175,8 +1219,8 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0
- '@babel/preset-env@7.28.3':
- resolution: {integrity: sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==}
+ '@babel/preset-env@7.28.5':
+ resolution: {integrity: sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -1186,14 +1230,14 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
- '@babel/preset-react@7.27.1':
- resolution: {integrity: sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==}
+ '@babel/preset-react@7.28.5':
+ resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
- '@babel/preset-typescript@7.27.1':
- resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==}
+ '@babel/preset-typescript@7.28.5':
+ resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
@@ -1210,20 +1254,30 @@ packages:
resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
engines: {node: '>=6.9.0'}
- '@babel/traverse@7.28.4':
- resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==}
+ '@babel/traverse@7.28.5':
+ resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.28.4':
- resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
'@bcoe/v8-coverage@1.0.2':
resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines: {node: '>=18'}
- '@better-auth/utils@0.2.6':
- resolution: {integrity: sha512-3y/vaL5Ox33dBwgJ6ub3OPkVqr6B5xL2kgxNHG8eHZuryLyG/4JSPGqjbdRSgjuy9kALUZYDFl+ORIAxlWMSuA==}
+ '@better-auth/core@1.3.29':
+ resolution: {integrity: sha512-Ka2mg4qZACFaLY7DOGFXv1Ma8CkF17k0ClUd2U/ZJbbSoEPI5gnVguEmakJB6HFYswszeZh2295IFORtW9wf7A==}
+ peerDependencies:
+ '@better-auth/utils': 0.3.0
+ '@better-fetch/fetch': 1.1.18
+ better-call: 1.0.19
+ jose: ^6.1.0
+ kysely: ^0.28.5
+ nanostores: ^1.0.1
+
+ '@better-auth/telemetry@1.3.29':
+ resolution: {integrity: sha512-1BFh3YulYDrwWcUkfEWddcrcApACyI4wtrgq3NBd9y+tilBRjWTCWEPuRqJrfM3a5F1ZSqsvOYfFG1XZbkxlVw==}
'@better-auth/utils@0.3.0':
resolution: {integrity: sha512-W+Adw6ZA6mgvnSnhOki270rwJ42t4XzSK6YWGF//BbVXL6SwCLWfyzBc1lN2m/4RM28KubdBKQ4X5VMoLRNPQw==}
@@ -1231,55 +1285,55 @@ packages:
'@better-fetch/fetch@1.1.18':
resolution: {integrity: sha512-rEFOE1MYIsBmoMJtQbl32PGHHXuG2hDxvEd7rUHE0vCBoFQVSDqaVs9hkZEtHCxRoY+CljXKFCOuJ8uxqw1LcA==}
- '@biomejs/biome@2.2.4':
- resolution: {integrity: sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==}
+ '@biomejs/biome@2.3.0':
+ resolution: {integrity: sha512-shdUY5H3S3tJVUWoVWo5ua+GdPW5lRHf+b0IwZ4OC1o2zOKQECZ6l2KbU6t89FNhtd3Qx5eg5N7/UsQWGQbAFw==}
engines: {node: '>=14.21.3'}
hasBin: true
- '@biomejs/cli-darwin-arm64@2.2.4':
- resolution: {integrity: sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==}
+ '@biomejs/cli-darwin-arm64@2.3.0':
+ resolution: {integrity: sha512-3cJVT0Z5pbTkoBmbjmDZTDFYxIkRcrs9sYVJbIBHU8E6qQxgXAaBfSVjjCreG56rfDuQBr43GzwzmaHPcu4vlw==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [darwin]
- '@biomejs/cli-darwin-x64@2.2.4':
- resolution: {integrity: sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==}
+ '@biomejs/cli-darwin-x64@2.3.0':
+ resolution: {integrity: sha512-6LIkhglh3UGjuDqJXsK42qCA0XkD1Ke4K/raFOii7QQPbM8Pia7Qj2Hji4XuF2/R78hRmEx7uKJH3t/Y9UahtQ==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [darwin]
- '@biomejs/cli-linux-arm64-musl@2.2.4':
- resolution: {integrity: sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==}
+ '@biomejs/cli-linux-arm64-musl@2.3.0':
+ resolution: {integrity: sha512-nDksoFdwZ2YrE7NiYDhtMhL2UgFn8Kb7Y0bYvnTAakHnqEdb4lKindtBc1f+xg2Snz0JQhJUYO7r9CDBosRU5w==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
- '@biomejs/cli-linux-arm64@2.2.4':
- resolution: {integrity: sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==}
+ '@biomejs/cli-linux-arm64@2.3.0':
+ resolution: {integrity: sha512-uhAsbXySX7xsXahegDg5h3CDgfMcRsJvWLFPG0pjkylgBb9lErbK2C0UINW52zhwg0cPISB09lxHPxCau4e2xA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
- '@biomejs/cli-linux-x64-musl@2.2.4':
- resolution: {integrity: sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==}
+ '@biomejs/cli-linux-x64-musl@2.3.0':
+ resolution: {integrity: sha512-+i9UcJwl99uAhtRQDz9jUAh+Xkb097eekxs/D9j4deWDg5/yB/jPWzISe1nBHvlzTXsdUSj0VvB4Go2DSpKIMw==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
- '@biomejs/cli-linux-x64@2.2.4':
- resolution: {integrity: sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==}
+ '@biomejs/cli-linux-x64@2.3.0':
+ resolution: {integrity: sha512-uxa8reA2s1VgoH8MhbGlCmMOt3JuSE1vJBifkh1ulaPiuk0SPx8cCdpnm9NWnTe2x/LfWInWx4sZ7muaXTPGGw==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
- '@biomejs/cli-win32-arm64@2.2.4':
- resolution: {integrity: sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==}
+ '@biomejs/cli-win32-arm64@2.3.0':
+ resolution: {integrity: sha512-ynjmsJLIKrAjC3CCnKMMhzcnNy8dbQWjKfSU5YA0mIruTxBNMbkAJp+Pr2iV7/hFou+66ZSD/WV8hmLEmhUaXA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [win32]
- '@biomejs/cli-win32-x64@2.2.4':
- resolution: {integrity: sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==}
+ '@biomejs/cli-win32-x64@2.3.0':
+ resolution: {integrity: sha512-zOCYmCRVkWXc9v8P7OLbLlGGMxQTKMvi+5IC4v7O8DkjLCOHRzRVK/Lno2pGZNo0lzKM60pcQOhH8HVkXMQdFg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [win32]
@@ -1388,8 +1442,8 @@ packages:
'@csstools/css-parser-algorithms': ^3.0.5
'@csstools/css-tokenizer': ^3.0.4
- '@csstools/postcss-alpha-function@1.0.0':
- resolution: {integrity: sha512-r2L8KNg5Wriq5n8IUQcjzy2Rh37J5YjzP9iOyHZL5fxdWYHB08vqykHQa4wAzN/tXwDuCHnhQDGCtxfS76xn7g==}
+ '@csstools/postcss-alpha-function@1.0.1':
+ resolution: {integrity: sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -1400,32 +1454,38 @@ packages:
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-color-function-display-p3-linear@1.0.0':
- resolution: {integrity: sha512-7q+OuUqfowRrP84m/Jl0wv3pfCQyUTCW5MxDIux+/yty5IkUUHOTigCjrC0Fjy3OT0ncGLudHbfLWmP7E1arNA==}
+ '@csstools/postcss-color-function-display-p3-linear@1.0.1':
+ resolution: {integrity: sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ postcss: ^8.4
+
+ '@csstools/postcss-color-function@4.0.12':
+ resolution: {integrity: sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-color-function@4.0.11':
- resolution: {integrity: sha512-AtH22zLHTLm64HLdpv5EedT/zmYTm1MtdQbQhRZXxEB6iYtS6SrS1jLX3TcmUWMFzpumK/OVylCm3HcLms4slw==}
+ '@csstools/postcss-color-mix-function@3.0.12':
+ resolution: {integrity: sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-color-mix-function@3.0.11':
- resolution: {integrity: sha512-cQpXBelpTx0YhScZM5Ve0jDCA4RzwFc7oNafzZOGgCHt/GQVYiU8Vevz9QJcwy/W0Pyi/BneY+KMjz23lI9r+Q==}
+ '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2':
+ resolution: {integrity: sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-color-mix-variadic-function-arguments@1.0.1':
- resolution: {integrity: sha512-c7hyBtbF+jlHIcUGVdWY06bHICgguV9ypfcELU3eU3W/9fiz2dxM8PqxQk2ndXYTzLnwPvNNqu1yCmQ++N6Dcg==}
+ '@csstools/postcss-content-alt-text@2.0.8':
+ resolution: {integrity: sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-content-alt-text@2.0.7':
- resolution: {integrity: sha512-cq/zWaEkpcg3RttJ5+GdNwk26NwxY5KgqgtNL777Fdd28AVGHxuBvqmK4Jq4oKhW1NX4M2LbgYAVVN0NZ+/XYQ==}
+ '@csstools/postcss-contrast-color-function@2.0.12':
+ resolution: {integrity: sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -1448,20 +1508,20 @@ packages:
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-gradients-interpolation-method@5.0.11':
- resolution: {integrity: sha512-8M3mcNTL3cGIJXDnvrJ2oWEcKi3zyw7NeYheFKePUlBmLYm1gkw9Rr/BA7lFONrOPeQA3yeMPldrrws6lqHrug==}
+ '@csstools/postcss-gradients-interpolation-method@5.0.12':
+ resolution: {integrity: sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-hwb-function@4.0.11':
- resolution: {integrity: sha512-9meZbsVWTZkWsSBazQips3cHUOT29a/UAwFz0AMEXukvpIGGDR9+GMl3nIckWO5sPImsadu4F5Zy+zjt8QgCdA==}
+ '@csstools/postcss-hwb-function@4.0.12':
+ resolution: {integrity: sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-ic-unit@4.0.3':
- resolution: {integrity: sha512-RtYYm2qUIu9vAaHB0cC8rQGlOCQAUgEc2tMr7ewlGXYipBQKjoWmyVArqsk7SEr8N3tErq6P6UOJT3amaVof5Q==}
+ '@csstools/postcss-ic-unit@4.0.4':
+ resolution: {integrity: sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -1478,8 +1538,8 @@ packages:
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-light-dark-function@2.0.10':
- resolution: {integrity: sha512-g7Lwb294lSoNnyrwcqoooh9fTAp47rRNo+ILg7SLRSMU3K9ePIwRt566sNx+pehiCelv4E1ICaU1EwLQuyF2qw==}
+ '@csstools/postcss-light-dark-function@2.0.11':
+ resolution: {integrity: sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -1538,14 +1598,14 @@ packages:
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-oklab-function@4.0.11':
- resolution: {integrity: sha512-9f03ZGxZ2VmSCrM4SDXlAYP+Xpu4VFzemfQUQFL9OYxAbpvDy0FjDipZ0i8So1pgs8VIbQI0bNjFWgfdpGw8ig==}
+ '@csstools/postcss-oklab-function@4.0.12':
+ resolution: {integrity: sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-progressive-custom-properties@4.2.0':
- resolution: {integrity: sha512-fWCXRasX17N1NCPTCuwC3FJDV+Wc031f16cFuuMEfIsYJ1q5ABCa59W0C6VeMGqjNv6ldf37vvwXXAeaZjD9PA==}
+ '@csstools/postcss-progressive-custom-properties@4.2.1':
+ resolution: {integrity: sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -1556,8 +1616,8 @@ packages:
peerDependencies:
postcss: ^8.4
- '@csstools/postcss-relative-color-syntax@3.0.11':
- resolution: {integrity: sha512-oQ5fZvkcBrWR+k6arHXk0F8FlkmD4IxM+rcGDLWrF2f31tWyEM3lSraeWAV0f7BGH6LIrqmyU3+Qo/1acfoJng==}
+ '@csstools/postcss-relative-color-syntax@3.0.12':
+ resolution: {integrity: sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -1623,11 +1683,11 @@ packages:
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
engines: {node: '>=10.0.0'}
- '@docsearch/css@3.9.0':
- resolution: {integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==}
+ '@docsearch/css@4.2.0':
+ resolution: {integrity: sha512-65KU9Fw5fGsPPPlgIghonMcndyx1bszzrDQYLfierN+Ha29yotMHzVS94bPkZS6On9LS8dE4qmW4P/fGjtCf/g==}
- '@docsearch/react@3.9.0':
- resolution: {integrity: sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==}
+ '@docsearch/react@4.2.0':
+ resolution: {integrity: sha512-zSN/KblmtBcerf7Z87yuKIHZQmxuXvYc6/m0+qnjyNu+Ir67AVOagTa1zBqcxkVUVkmBqUExdcyrdo9hbGbqTw==}
peerDependencies:
'@types/react': '>= 16.8.0 < 20.0.0'
react: '>= 16.8.0 < 20.0.0'
@@ -1643,126 +1703,126 @@ packages:
search-insights:
optional: true
- '@docusaurus/babel@3.8.1':
- resolution: {integrity: sha512-3brkJrml8vUbn9aeoZUlJfsI/GqyFcDgQJwQkmBtclJgWDEQBKKeagZfOgx0WfUQhagL1sQLNW0iBdxnI863Uw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/babel@3.9.1':
+ resolution: {integrity: sha512-/uoi3oG+wvbVWNBRfPrzrEslOSeLxrQEyWMywK51TLDFTANqIRivzkMusudh5bdDty8fXzCYUT+tg5t697jYqg==}
+ engines: {node: '>=20.0'}
- '@docusaurus/bundler@3.8.1':
- resolution: {integrity: sha512-/z4V0FRoQ0GuSLToNjOSGsk6m2lQUG4FRn8goOVoZSRsTrU8YR2aJacX5K3RG18EaX9b+52pN4m1sL3MQZVsQA==}
- engines: {node: '>=18.0'}
+ '@docusaurus/bundler@3.9.1':
+ resolution: {integrity: sha512-E1c9DgNmAz4NqbNtiJVp4UgjLtr8O01IgtXD/NDQ4PZaK8895cMiTOgb3k7mN0qX8A3lb8vqyrPJ842+yMpuUg==}
+ engines: {node: '>=20.0'}
peerDependencies:
'@docusaurus/faster': '*'
peerDependenciesMeta:
'@docusaurus/faster':
optional: true
- '@docusaurus/core@3.8.1':
- resolution: {integrity: sha512-ENB01IyQSqI2FLtOzqSI3qxG2B/jP4gQPahl2C3XReiLebcVh5B5cB9KYFvdoOqOWPyr5gXK4sjgTKv7peXCrA==}
- engines: {node: '>=18.0'}
+ '@docusaurus/core@3.9.1':
+ resolution: {integrity: sha512-FWDk1LIGD5UR5Zmm9rCrXRoxZUgbwuP6FBA7rc50DVfzqDOMkeMe3NyJhOsA2dF0zBE3VbHEIMmTjKwTZJwbaA==}
+ engines: {node: '>=20.0'}
hasBin: true
peerDependencies:
'@mdx-js/react': ^3.0.0
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/cssnano-preset@3.8.1':
- resolution: {integrity: sha512-G7WyR2N6SpyUotqhGznERBK+x84uyhfMQM2MmDLs88bw4Flom6TY46HzkRkSEzaP9j80MbTN8naiL1fR17WQug==}
- engines: {node: '>=18.0'}
+ '@docusaurus/cssnano-preset@3.9.1':
+ resolution: {integrity: sha512-2y7+s7RWQMqBg+9ejeKwvZs7Bdw/hHIVJIodwMXbs2kr+S48AhcmAfdOh6Cwm0unJb0hJUshN0ROwRoQMwl3xg==}
+ engines: {node: '>=20.0'}
- '@docusaurus/faster@3.8.1':
- resolution: {integrity: sha512-XYrj3qnTm+o2d5ih5drCq9s63GJoM8vZ26WbLG5FZhURsNxTSXgHJcx11Qo7nWPUStCQkuqk1HvItzscCUnd4A==}
- engines: {node: '>=18.0'}
+ '@docusaurus/faster@3.9.1':
+ resolution: {integrity: sha512-zJIrIv+R/IN5TTLV9L+SvO3hwz62L6pO/L16k+b2nC3to3Gn01cnEGHL6doTGAezuPwTSmteJl+kzaoOf+znzg==}
+ engines: {node: '>=20.0'}
peerDependencies:
'@docusaurus/types': '*'
- '@docusaurus/logger@3.8.1':
- resolution: {integrity: sha512-2wjeGDhKcExEmjX8k1N/MRDiPKXGF2Pg+df/bDDPnnJWHXnVEZxXj80d6jcxp1Gpnksl0hF8t/ZQw9elqj2+ww==}
- engines: {node: '>=18.0'}
+ '@docusaurus/logger@3.9.1':
+ resolution: {integrity: sha512-C9iFzXwHzwvGlisE4bZx+XQE0JIqlGAYAd5LzpR7fEDgjctu7yL8bE5U4nTNywXKHURDzMt4RJK8V6+stFHVkA==}
+ engines: {node: '>=20.0'}
- '@docusaurus/mdx-loader@3.8.1':
- resolution: {integrity: sha512-DZRhagSFRcEq1cUtBMo4TKxSNo/W6/s44yhr8X+eoXqCLycFQUylebOMPseHi5tc4fkGJqwqpWJLz6JStU9L4w==}
- engines: {node: '>=18.0'}
+ '@docusaurus/mdx-loader@3.9.1':
+ resolution: {integrity: sha512-/1PY8lqry8jCt0qZddJSpc0U2sH6XC27kVJZfpA7o2TiQ3mdBQyH5AVbj/B2m682B1ounE+XjI0LdpOkAQLPoA==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/module-type-aliases@3.8.1':
- resolution: {integrity: sha512-6xhvAJiXzsaq3JdosS7wbRt/PwEPWHr9eM4YNYqVlbgG1hSK3uQDXTVvQktasp3VO6BmfYWPozueLWuj4gB+vg==}
+ '@docusaurus/module-type-aliases@3.9.1':
+ resolution: {integrity: sha512-YBce3GbJGGcMbJTyHcnEOMvdXqg41pa5HsrMCGA5Rm4z0h0tHS6YtEldj0mlfQRhCG7Y0VD66t2tb87Aom+11g==}
peerDependencies:
react: '*'
react-dom: '*'
- '@docusaurus/plugin-content-blog@3.8.1':
- resolution: {integrity: sha512-vNTpMmlvNP9n3hGEcgPaXyvTljanAKIUkuG9URQ1DeuDup0OR7Ltvoc8yrmH+iMZJbcQGhUJF+WjHLwuk8HSdw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-content-blog@3.9.1':
+ resolution: {integrity: sha512-vT6kIimpJLWvW9iuWzH4u7VpTdsGlmn4yfyhq0/Kb1h4kf9uVouGsTmrD7WgtYBUG1P+TSmQzUUQa+ALBSRTig==}
+ engines: {node: '>=20.0'}
peerDependencies:
'@docusaurus/plugin-content-docs': '*'
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/plugin-content-docs@3.8.1':
- resolution: {integrity: sha512-oByRkSZzeGNQByCMaX+kif5Nl2vmtj2IHQI2fWjCfCootsdKZDPFLonhIp5s3IGJO7PLUfe0POyw0Xh/RrGXJA==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-content-docs@3.9.1':
+ resolution: {integrity: sha512-DyLk9BIA6I9gPIuia8XIL+XIEbNnExam6AHzRsfrEq4zJr7k/DsWW7oi4aJMepDnL7jMRhpVcdsCxdjb0/A9xg==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/plugin-content-pages@3.8.1':
- resolution: {integrity: sha512-a+V6MS2cIu37E/m7nDJn3dcxpvXb6TvgdNI22vJX8iUTp8eoMoPa0VArEbWvCxMY/xdC26WzNv4wZ6y0iIni/w==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-content-pages@3.9.1':
+ resolution: {integrity: sha512-/1wFzRnXYASI+Nv9ck9IVPIMw0O5BGQ8ZVhDzEwhkL+tl44ycvSnY6PIe6rW2HLxsw61Z3WFwAiU8+xMMtMZpg==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/plugin-css-cascade-layers@3.8.1':
- resolution: {integrity: sha512-VQ47xRxfNKjHS5ItzaVXpxeTm7/wJLFMOPo1BkmoMG4Cuz4nuI+Hs62+RMk1OqVog68Swz66xVPK8g9XTrBKRw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-css-cascade-layers@3.9.1':
+ resolution: {integrity: sha512-/QyW2gRCk/XE3ttCK/ERIgle8KJ024dBNKMu6U5SmpJvuT2il1n5jR/48Pp/9wEwut8WVml4imNm6X8JsL5A0Q==}
+ engines: {node: '>=20.0'}
- '@docusaurus/plugin-debug@3.8.1':
- resolution: {integrity: sha512-nT3lN7TV5bi5hKMB7FK8gCffFTBSsBsAfV84/v293qAmnHOyg1nr9okEw8AiwcO3bl9vije5nsUvP0aRl2lpaw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-debug@3.9.1':
+ resolution: {integrity: sha512-qPeAuk0LccC251d7jg2MRhNI+o7niyqa924oEM/AxnZJvIpMa596aAxkRImiAqNN6+gtLE1Hkrz/RHUH2HDGsA==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/plugin-google-analytics@3.8.1':
- resolution: {integrity: sha512-Hrb/PurOJsmwHAsfMDH6oVpahkEGsx7F8CWMjyP/dw1qjqmdS9rcV1nYCGlM8nOtD3Wk/eaThzUB5TSZsGz+7Q==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-google-analytics@3.9.1':
+ resolution: {integrity: sha512-k4Qq2HphqOrIU/CevGPdEO1yJnWUI8m0zOJsYt5NfMJwNsIn/gDD6gv/DKD+hxHndQT5pacsfBd4BWHZVNVroQ==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/plugin-google-gtag@3.8.1':
- resolution: {integrity: sha512-tKE8j1cEZCh8KZa4aa80zpSTxsC2/ZYqjx6AAfd8uA8VHZVw79+7OTEP2PoWi0uL5/1Is0LF5Vwxd+1fz5HlKg==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-google-gtag@3.9.1':
+ resolution: {integrity: sha512-n9BURBiQyJKI/Ecz35IUjXYwXcgNCSq7/eA07+ZYcDiSyH2p/EjPf8q/QcZG3CyEJPZ/SzGkDHePfcVPahY4Gg==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/plugin-google-tag-manager@3.8.1':
- resolution: {integrity: sha512-iqe3XKITBquZq+6UAXdb1vI0fPY5iIOitVjPQ581R1ZKpHr0qe+V6gVOrrcOHixPDD/BUKdYwkxFjpNiEN+vBw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-google-tag-manager@3.9.1':
+ resolution: {integrity: sha512-rZAQZ25ZuXaThBajxzLjXieTDUCMmBzfAA6ThElQ3o7Q+LEpOjCIrwGFau0KLY9HeG6x91+FwwsAM8zeApYDrg==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/plugin-sitemap@3.8.1':
- resolution: {integrity: sha512-+9YV/7VLbGTq8qNkjiugIelmfUEVkTyLe6X8bWq7K5qPvGXAjno27QAfFq63mYfFFbJc7z+pudL63acprbqGzw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-sitemap@3.9.1':
+ resolution: {integrity: sha512-k/bf5cXDxAJUYTzqatgFJwmZsLUbIgl6S8AdZMKGG2Mv2wcOHt+EQNN9qPyWZ5/9cFj+Q8f8DN+KQheBMYLong==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/plugin-svgr@3.8.1':
- resolution: {integrity: sha512-rW0LWMDsdlsgowVwqiMb/7tANDodpy1wWPwCcamvhY7OECReN3feoFwLjd/U4tKjNY3encj0AJSTxJA+Fpe+Gw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/plugin-svgr@3.9.1':
+ resolution: {integrity: sha512-TeZOXT2PSdTNR1OpDJMkYqFyX7MMhbd4t16hQByXksgZQCXNyw3Dio+KaDJ2Nj+LA4WkOvsk45bWgYG5MAaXSQ==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/preset-classic@3.8.1':
- resolution: {integrity: sha512-yJSjYNHXD8POMGc2mKQuj3ApPrN+eG0rO1UPgSx7jySpYU+n4WjBikbrA2ue5ad9A7aouEtMWUoiSRXTH/g7KQ==}
- engines: {node: '>=18.0'}
+ '@docusaurus/preset-classic@3.9.1':
+ resolution: {integrity: sha512-ZHga2xsxxsyd0dN1BpLj8S889Eu9eMBuj2suqxdw/vaaXu/FjJ8KEGbcaeo6nHPo8VQcBBnPEdkBtSDm2TfMNw==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
@@ -1772,55 +1832,55 @@ packages:
peerDependencies:
react: '*'
- '@docusaurus/theme-classic@3.8.1':
- resolution: {integrity: sha512-bqDUCNqXeYypMCsE1VcTXSI1QuO4KXfx8Cvl6rYfY0bhhqN6d2WZlRkyLg/p6pm+DzvanqHOyYlqdPyP0iz+iw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/theme-classic@3.9.1':
+ resolution: {integrity: sha512-LrAIu/mQ04nG6s1cssC0TMmICD8twFIIn/hJ5Pd9uIPQvtKnyAKEn12RefopAul5KfMo9kixPaqogV5jIJr26w==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/theme-common@3.8.1':
- resolution: {integrity: sha512-UswMOyTnPEVRvN5Qzbo+l8k4xrd5fTFu2VPPfD6FcW/6qUtVLmJTQCktbAL3KJ0BVXGm5aJXz/ZrzqFuZERGPw==}
- engines: {node: '>=18.0'}
+ '@docusaurus/theme-common@3.9.1':
+ resolution: {integrity: sha512-j9adi961F+6Ps9d0jcb5BokMcbjXAAJqKkV43eo8nh4YgmDj7KUNDX4EnOh/MjTQeO06oPY5cxp3yUXdW/8Ggw==}
+ engines: {node: '>=20.0'}
peerDependencies:
'@docusaurus/plugin-content-docs': '*'
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/theme-search-algolia@3.8.1':
- resolution: {integrity: sha512-NBFH5rZVQRAQM087aYSRKQ9yGEK9eHd+xOxQjqNpxMiV85OhJDD4ZGz6YJIod26Fbooy54UWVdzNU0TFeUUUzQ==}
- engines: {node: '>=18.0'}
+ '@docusaurus/theme-search-algolia@3.9.1':
+ resolution: {integrity: sha512-WjM28bzlgfT6nHlEJemkwyGVpvGsZWPireV/w+wZ1Uo64xCZ8lNOb4xwQRukDaLSed3oPBN0gSnu06l5VuCXHg==}
+ engines: {node: '>=20.0'}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/theme-translations@3.8.1':
- resolution: {integrity: sha512-OTp6eebuMcf2rJt4bqnvuwmm3NVXfzfYejL+u/Y1qwKhZPrjPoKWfk1CbOP5xH5ZOPkiAsx4dHdQBRJszK3z2g==}
- engines: {node: '>=18.0'}
+ '@docusaurus/theme-translations@3.9.1':
+ resolution: {integrity: sha512-mUQd49BSGKTiM6vP9+JFgRJL28lMIN3PUvXjF3rzuOHMByUZUBNwCt26Z23GkKiSIOrRkjKoaBNTipR/MHdYSQ==}
+ engines: {node: '>=20.0'}
- '@docusaurus/tsconfig@3.8.1':
- resolution: {integrity: sha512-XBWCcqhRHhkhfolnSolNL+N7gj3HVE3CoZVqnVjfsMzCoOsuQw2iCLxVVHtO+rePUUfouVZHURDgmqIySsF66A==}
+ '@docusaurus/tsconfig@3.9.1':
+ resolution: {integrity: sha512-stdzM1dNDgRO0OvxeznXlE3N1igUoeHPNJjiKqyffLizgpVgNXJBAWeG6fuoYiCH4udGUBqy2dyM+1+kG2/UPQ==}
- '@docusaurus/types@3.8.1':
- resolution: {integrity: sha512-ZPdW5AB+pBjiVrcLuw3dOS6BFlrG0XkS2lDGsj8TizcnREQg3J8cjsgfDviszOk4CweNfwo1AEELJkYaMUuOPg==}
+ '@docusaurus/types@3.9.1':
+ resolution: {integrity: sha512-ElekJ29sk39s5LTEZMByY1c2oH9FMtw7KbWFU3BtuQ1TytfIK39HhUivDEJvm5KCLyEnnfUZlvSNDXeyk0vzAA==}
peerDependencies:
react: ^18.0.0 || ^19.0.0
react-dom: ^18.0.0 || ^19.0.0
- '@docusaurus/utils-common@3.8.1':
- resolution: {integrity: sha512-zTZiDlvpvoJIrQEEd71c154DkcriBecm4z94OzEE9kz7ikS3J+iSlABhFXM45mZ0eN5pVqqr7cs60+ZlYLewtg==}
- engines: {node: '>=18.0'}
+ '@docusaurus/utils-common@3.9.1':
+ resolution: {integrity: sha512-4M1u5Q8Zn2CYL2TJ864M51FV4YlxyGyfC3x+7CLuR6xsyTVNBNU4QMcPgsTHRS9J2+X6Lq7MyH6hiWXyi/sXUQ==}
+ engines: {node: '>=20.0'}
- '@docusaurus/utils-validation@3.8.1':
- resolution: {integrity: sha512-gs5bXIccxzEbyVecvxg6upTwaUbfa0KMmTj7HhHzc016AGyxH2o73k1/aOD0IFrdCsfJNt37MqNI47s2MgRZMA==}
- engines: {node: '>=18.0'}
+ '@docusaurus/utils-validation@3.9.1':
+ resolution: {integrity: sha512-5bzab5si3E1udrlZuVGR17857Lfwe8iFPoy5AvMP9PXqDfoyIKT7gDQgAmxdRDMurgHaJlyhXEHHdzDKkOxxZQ==}
+ engines: {node: '>=20.0'}
- '@docusaurus/utils@3.8.1':
- resolution: {integrity: sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==}
- engines: {node: '>=18.0'}
+ '@docusaurus/utils@3.9.1':
+ resolution: {integrity: sha512-YAL4yhhWLl9DXuf5MVig260a6INz4MehrBGFU/CZu8yXmRiYEuQvRFWh9ZsjfAOyaG7za1MNmBVZ4VVAi/CiJA==}
+ engines: {node: '>=20.0'}
- '@dotenvx/dotenvx@1.48.4':
- resolution: {integrity: sha512-GpJWpGVI5JGhNzFlWOjCD3KMiN3xU1US4oLKQ7SiiGru4LvR7sUf3pDMpfjtlgzHStL5ydq4ekfZcRxWpHaJkA==}
+ '@dotenvx/dotenvx@1.51.0':
+ resolution: {integrity: sha512-CbMGzyOYSyFF7d4uaeYwO9gpSBzLTnMmSmTVpCZjvpJFV69qYbjYPpzNnCz1mb2wIvEhjWjRwQWuBzTO0jITww==}
hasBin: true
'@drizzle-team/brocli@0.10.2':
@@ -1832,14 +1892,14 @@ packages:
peerDependencies:
'@noble/ciphers': ^1.0.0
- '@electric-sql/pglite@0.3.8':
- resolution: {integrity: sha512-VlAz/R7mktifp9IHzNvjxWJM8p3fPH2lHpustYuRSOXOpXiAMTlA5qqxcufPaDnfee6CZCE9qrT1MHDT7riSHg==}
+ '@electric-sql/pglite@0.3.11':
+ resolution: {integrity: sha512-FJtjnEyez8XgmgyE5Ewmx89TGVN+75ZjykFoExApRIbJBMT4dsbsuZkF/YWLuymGDfGFHDACjvENPMEqg4FoWg==}
- '@emnapi/core@1.5.0':
- resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==}
+ '@emnapi/core@1.6.0':
+ resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==}
- '@emnapi/runtime@1.5.0':
- resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==}
+ '@emnapi/runtime@1.6.0':
+ resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==}
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
@@ -1852,8 +1912,8 @@ packages:
resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==}
deprecated: 'Merged into tsx: https://tsx.is'
- '@esbuild/aix-ppc64@0.25.10':
- resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==}
+ '@esbuild/aix-ppc64@0.25.11':
+ resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -1864,8 +1924,8 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.25.10':
- resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==}
+ '@esbuild/android-arm64@0.25.11':
+ resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -1876,8 +1936,8 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.25.10':
- resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==}
+ '@esbuild/android-arm@0.25.11':
+ resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -1888,8 +1948,8 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.25.10':
- resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==}
+ '@esbuild/android-x64@0.25.11':
+ resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -1900,8 +1960,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.25.10':
- resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==}
+ '@esbuild/darwin-arm64@0.25.11':
+ resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -1912,8 +1972,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.10':
- resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==}
+ '@esbuild/darwin-x64@0.25.11':
+ resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -1924,8 +1984,8 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.25.10':
- resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==}
+ '@esbuild/freebsd-arm64@0.25.11':
+ resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -1936,8 +1996,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.10':
- resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==}
+ '@esbuild/freebsd-x64@0.25.11':
+ resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -1948,8 +2008,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.25.10':
- resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==}
+ '@esbuild/linux-arm64@0.25.11':
+ resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -1960,8 +2020,8 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.25.10':
- resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==}
+ '@esbuild/linux-arm@0.25.11':
+ resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -1972,8 +2032,8 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.25.10':
- resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==}
+ '@esbuild/linux-ia32@0.25.11':
+ resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -1984,8 +2044,8 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.25.10':
- resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==}
+ '@esbuild/linux-loong64@0.25.11':
+ resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -1996,8 +2056,8 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.25.10':
- resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==}
+ '@esbuild/linux-mips64el@0.25.11':
+ resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -2008,8 +2068,8 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.25.10':
- resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==}
+ '@esbuild/linux-ppc64@0.25.11':
+ resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -2020,8 +2080,8 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.10':
- resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==}
+ '@esbuild/linux-riscv64@0.25.11':
+ resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -2032,8 +2092,8 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.25.10':
- resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==}
+ '@esbuild/linux-s390x@0.25.11':
+ resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -2044,14 +2104,14 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.25.10':
- resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==}
+ '@esbuild/linux-x64@0.25.11':
+ resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.10':
- resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==}
+ '@esbuild/netbsd-arm64@0.25.11':
+ resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
@@ -2062,14 +2122,14 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.10':
- resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==}
+ '@esbuild/netbsd-x64@0.25.11':
+ resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.10':
- resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==}
+ '@esbuild/openbsd-arm64@0.25.11':
+ resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
@@ -2080,14 +2140,14 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.10':
- resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==}
+ '@esbuild/openbsd-x64@0.25.11':
+ resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.25.10':
- resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==}
+ '@esbuild/openharmony-arm64@0.25.11':
+ resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
@@ -2098,8 +2158,8 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.25.10':
- resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==}
+ '@esbuild/sunos-x64@0.25.11':
+ resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -2110,8 +2170,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.25.10':
- resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==}
+ '@esbuild/win32-arm64@0.25.11':
+ resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -2122,8 +2182,8 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.25.10':
- resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==}
+ '@esbuild/win32-ia32@0.25.11':
+ resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -2134,8 +2194,8 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.25.10':
- resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==}
+ '@esbuild/win32-x64@0.25.11':
+ resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -2155,8 +2215,8 @@ packages:
'@floating-ui/utils@0.2.10':
resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==}
- '@gerrit0/mini-shiki@3.12.2':
- resolution: {integrity: sha512-HKZPmO8OSSAAo20H2B3xgJdxZaLTwtlMwxg0967scnrDlPwe6j5+ULGHyIqwgTbFCn9yv/ff8CmfWZLE9YKBzA==}
+ '@gerrit0/mini-shiki@3.13.1':
+ resolution: {integrity: sha512-fDWM5QQc70jwBIt/WYMybdyXdyBmoJe7r1hpM+V/bHnyla79sygVDK2/LlVxIPc4n5FA3B5Wzt7AQH2+psNphg==}
'@hapi/hoek@9.3.0':
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
@@ -2193,10 +2253,6 @@ packages:
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
engines: {node: '>=12'}
- '@isaacs/fs-minipass@4.0.1':
- resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
- engines: {node: '>=18.0.0'}
-
'@istanbuljs/schema@0.1.3':
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
@@ -2228,12 +2284,51 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@jsonjoy.com/base64@1.1.2':
+ resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/buffers@1.2.1':
+ resolution: {integrity: sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/codegen@1.0.0':
+ resolution: {integrity: sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/json-pack@1.21.0':
+ resolution: {integrity: sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/json-pointer@1.0.2':
+ resolution: {integrity: sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
+ '@jsonjoy.com/util@1.9.0':
+ resolution: {integrity: sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
'@leichtgewicht/ip-codec@2.0.5':
resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==}
'@levischuck/tiny-cbor@0.2.11':
resolution: {integrity: sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==}
+ '@lucide/lab@0.1.2':
+ resolution: {integrity: sha512-VprF2BJa7ZuTGOhUd5cf8tHJXyL63wdxcGieAiVVoR9hO0YmPsnZO0AGqDiX2/br+/MC6n8BoJcmPilltOXIJA==}
+
'@manypkg/find-root@1.1.0':
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
@@ -2311,9 +2406,6 @@ packages:
'@mjackson/node-fetch-server@0.2.0':
resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==}
- '@mjackson/node-fetch-server@0.7.0':
- resolution: {integrity: sha512-un8diyEBKU3BTVj3GzlTPA1kIjCkGdD+AMYQy31Gf9JCkfoZzwgJ79GUtHrF2BN3XPNMLpubbzPcxys+a3uZEw==}
-
'@module-federation/error-codes@0.18.0':
resolution: {integrity: sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==}
@@ -2332,16 +2424,17 @@ packages:
'@module-federation/webpack-bundler-runtime@0.18.0':
resolution: {integrity: sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==}
- '@napi-rs/wasm-runtime@1.0.5':
- resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==}
-
- '@noble/ciphers@0.6.0':
- resolution: {integrity: sha512-mIbq/R9QXk5/cTfESb1OKtyFnk7oc1Om/8onA1158K9/OZUQFDEVy55jVTato+xmp3XX6F6Qh0zz0Nc1AxAlRQ==}
+ '@napi-rs/wasm-runtime@1.0.7':
+ resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
'@noble/ciphers@1.3.0':
resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==}
engines: {node: ^14.21.3 || >=16}
+ '@noble/ciphers@2.0.1':
+ resolution: {integrity: sha512-xHK3XHPUW8DTAobU+G0XT+/w+JLM7/8k1UFdB5xg/zTFPnFCobhftzw8wl4Lw2aq/Rvir5pxfZV5fEazmeCJ2g==}
+ engines: {node: '>= 20.19.0'}
+
'@noble/curves@1.9.7':
resolution: {integrity: sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==}
engines: {node: ^14.21.3 || >=16}
@@ -2350,6 +2443,10 @@ packages:
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
engines: {node: ^14.21.3 || >=16}
+ '@noble/hashes@2.0.1':
+ resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==}
+ engines: {node: '>= 20.19.0'}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -2386,8 +2483,8 @@ packages:
resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==}
engines: {node: '>=8.0.0'}
- '@opentelemetry/context-async-hooks@2.1.0':
- resolution: {integrity: sha512-zOyetmZppnwTyPrt4S7jMfXiSX9yyfF0hxlA8B5oo2TtKl+/RGCy7fi4DrBfIf3lCPrkKsRBWZZD7RFojK7FDg==}
+ '@opentelemetry/context-async-hooks@2.2.0':
+ resolution: {integrity: sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
@@ -2398,6 +2495,12 @@ packages:
peerDependencies:
'@opentelemetry/api': '>=1.0.0 <1.10.0'
+ '@opentelemetry/core@2.2.0':
+ resolution: {integrity: sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw==}
+ engines: {node: ^18.19.0 || >=20.6.0}
+ peerDependencies:
+ '@opentelemetry/api': '>=1.0.0 <1.10.0'
+
'@opentelemetry/instrumentation-amqplib@0.51.0':
resolution: {integrity: sha512-XGmjYwjVRktD4agFnWBWQXo9SiYHKBxR6Ag3MLXwtLE4R99N3a08kGKM5SC1qOFKIELcQDGFEFT9ydXMH00Luw==}
engines: {node: ^18.19.0 || >=20.6.0}
@@ -2542,18 +2645,18 @@ packages:
peerDependencies:
'@opentelemetry/api': ^1.3.0
- '@opentelemetry/redis-common@0.38.0':
- resolution: {integrity: sha512-4Wc0AWURII2cfXVVoZ6vDqK+s5n4K5IssdrlVrvGsx6OEOKdghKtJZqXAHWFiZv4nTDLH2/2fldjIHY8clMOjQ==}
+ '@opentelemetry/redis-common@0.38.2':
+ resolution: {integrity: sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==}
engines: {node: ^18.19.0 || >=20.6.0}
- '@opentelemetry/resources@2.1.0':
- resolution: {integrity: sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw==}
+ '@opentelemetry/resources@2.2.0':
+ resolution: {integrity: sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
- '@opentelemetry/sdk-trace-base@2.1.0':
- resolution: {integrity: sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ==}
+ '@opentelemetry/sdk-trace-base@2.2.0':
+ resolution: {integrity: sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': '>=1.3.0 <1.10.0'
@@ -2562,8 +2665,8 @@ packages:
resolution: {integrity: sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==}
engines: {node: '>=14'}
- '@opentelemetry/sql-common@0.41.0':
- resolution: {integrity: sha512-pmzXctVbEERbqSfiAgdes9Y63xjoOyXcD7B6IXBkVb+vbM7M9U98mn33nGXxPf4dfYR0M+vhcKRZmbSJ7HfqFA==}
+ '@opentelemetry/sql-common@0.41.2':
+ resolution: {integrity: sha512-4mhWm3Z8z+i508zQJ7r6Xi7y4mmoJpdvH0fZPFRkWrdp5fq7hhZ2HhYokEOLkfqSMgPR4Z9EyB3DBkbKGOqZiQ==}
engines: {node: ^18.19.0 || >=20.6.0}
peerDependencies:
'@opentelemetry/api': ^1.1.0
@@ -2604,8 +2707,8 @@ packages:
'@peculiar/x509@1.14.0':
resolution: {integrity: sha512-Yc4PDxN3OrxUPiXgU63c+ZRXKGE8YKF2McTciYhUHFtHVB0KMnjeFSU0qpztGhsp4P0uKix4+J2xEpIEDu8oXg==}
- '@petamoriken/float16@3.9.2':
- resolution: {integrity: sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==}
+ '@petamoriken/float16@3.9.3':
+ resolution: {integrity: sha512-8awtpHXCx/bNpFt4mt2xdkgtgVvKqty8VbjHI/WWWQuEw+KLzFot3f4+LkQY9YmOtq7A5GdOnqoIC8Pdygjk2g==}
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
@@ -2626,8 +2729,8 @@ packages:
'@polka/url@1.0.0-next.29':
resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
- '@posthog/core@1.0.2':
- resolution: {integrity: sha512-hWk3rUtJl2crQK0WNmwg13n82hnTwB99BT99/XI5gZSvIlYZ1TPmMZE8H2dhJJ98J/rm9vYJ/UXNzw3RV5HTpQ==}
+ '@posthog/core@1.5.0':
+ resolution: {integrity: sha512-oxfV20QMNwH30jKybUyqi3yGuMghULQz1zkJgQG3rjpHDxhD2vDN6E7UpmaqgphMIvGG3Q+DgfU10zfSPA7w7w==}
'@prisma/instrumentation@6.15.0':
resolution: {integrity: sha512-6TXaH6OmDkMOQvOxwLZ8XS51hU2v4A3vmE2pSijCIiGRJYyNeMcL6nMHQMyYdZRD8wl7LF3Wzc+AMPMV/9Oo7A==}
@@ -3358,8 +3461,8 @@ packages:
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/components@0.5.3':
- resolution: {integrity: sha512-8G5vsoMehuGOT4cDqaYLdpagtqCYPl4vThXNylClxO6SrN2w9Mh1+i2RNGj/rdqh/woamHORjlXMYCA/kzDMew==}
+ '@react-email/components@0.5.7':
+ resolution: {integrity: sha512-ECyVoyDcev2FSQ7C0buXaIJ0+6MRDXNUbCOZwBRrlLdCCRjap2b4+MHrYSTXFzo5kqfjjRoyo/2PbJXFQni67g==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3411,8 +3514,8 @@ packages:
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/markdown@0.0.15':
- resolution: {integrity: sha512-UQA9pVm5sbflgtg3EX3FquUP4aMBzmLReLbGJ6DZQZnAskBF36aI56cRykDq1o+1jT+CKIK1CducPYziaXliag==}
+ '@react-email/markdown@0.0.16':
+ resolution: {integrity: sha512-KSUHmoBMYhvc6iGwlIDkm0DRGbGQ824iNjLMCJsBVUoKHGQYs7F/N3b1tnS1YzRUX+GwHIexSsHuIUEi1m+8OQ==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3423,8 +3526,8 @@ packages:
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-email/render@1.2.3':
- resolution: {integrity: sha512-qu3XYNkHGao3teJexVD5CrcgFkNLrzbZvpZN17a7EyQYUN3kHkTkE9saqY4VbvGx6QoNU3p8rsk/Xm++D/+pTw==}
+ '@react-email/render@1.4.0':
+ resolution: {integrity: sha512-ZtJ3noggIvW1ZAryoui95KJENKdCzLmN5F7hyZY1F/17B1vwzuxHB7YkuCg0QqHjDivc5axqYEYdIOw4JIQdUw==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
@@ -3454,14 +3557,14 @@ packages:
peerDependencies:
react: ^18.0 || ^19.0 || ^19.0.0-rc
- '@react-router/dev@7.9.1':
- resolution: {integrity: sha512-fW/qubsdHq1nsufHPLpXa6hiNvXXV9JBtWqRlJ02OOhFeaWERZw4rGoHjG1DCg8/QTTadgbzplmP97ZnzWPkcA==}
+ '@react-router/dev@7.9.4':
+ resolution: {integrity: sha512-bLs6DjKMJExT7Y57EBx25hkeGGUla3pURxvOn15IN8Mmaw2+euDtBUX9+OFrAPsAzD1xIj6+2HNLXlFH/LB86Q==}
engines: {node: '>=20.0.0'}
hasBin: true
peerDependencies:
- '@react-router/serve': ^7.9.1
+ '@react-router/serve': ^7.9.4
'@vitejs/plugin-rsc': '*'
- react-router: ^7.9.1
+ react-router: ^7.9.4
typescript: ^5.1.0
vite: ^5.1.0 || ^6.0.0 || ^7.0.0
wrangler: ^3.28.2 || ^4.0.0
@@ -3475,43 +3578,43 @@ packages:
wrangler:
optional: true
- '@react-router/express@7.9.1':
- resolution: {integrity: sha512-d1sfsD3AJXZj+C5k3jAmxAD3vJXGfoh3lNmtSwxp0NdZFHI54zPC5S9o80cy3P8p6Gc7XzSEQJYk9k7fAM/AIw==}
+ '@react-router/express@7.9.4':
+ resolution: {integrity: sha512-qba2YnZXWz8kyXNxXKDa0qS88ct4MwJKMwINmto/LPb08W/YdgRUBSZIw7QnOdN7aFkvWTRGXKBTCcle8WDnRA==}
engines: {node: '>=20.0.0'}
peerDependencies:
express: ^4.17.1 || ^5
- react-router: 7.9.1
+ react-router: 7.9.4
typescript: ^5.1.0
peerDependenciesMeta:
typescript:
optional: true
- '@react-router/fs-routes@7.9.1':
- resolution: {integrity: sha512-K97pQ7PIUJnmYPzoC5lrJxr3XKDn5ZLBMkp403usQJlucpP2NUfRw7I5N3NdqQ5XDbPEyROOJr6wsZnWGPPC7g==}
+ '@react-router/fs-routes@7.9.4':
+ resolution: {integrity: sha512-k3IWKOGiPDJqGsoqKaI4V1WY4ulfG5/lWLlI0G5p1Yij4eDyYW3D+p/+inBFs49Oxsc/PbB2rnAXY4j5Bjruhg==}
engines: {node: '>=20.0.0'}
peerDependencies:
- '@react-router/dev': ^7.9.1
+ '@react-router/dev': ^7.9.4
typescript: ^5.1.0
peerDependenciesMeta:
typescript:
optional: true
- '@react-router/node@7.9.1':
- resolution: {integrity: sha512-XfyVLM+sDUDB1frGNr7iqaKNglrPwBiUp8+sFdL4///bngy49pUb2RuEtn2J2Cy5yjL+IlKbjJFrsmfimLBmeg==}
+ '@react-router/node@7.9.4':
+ resolution: {integrity: sha512-sdeDNRaqAB71BR2hPlhcQbPbrXh8uGJUjLVc+NpRiPsQbv6B8UvIucN4IX9YGVJkw3UxVQBn2vPSwxACAck32Q==}
engines: {node: '>=20.0.0'}
peerDependencies:
- react-router: 7.9.1
+ react-router: 7.9.4
typescript: ^5.1.0
peerDependenciesMeta:
typescript:
optional: true
- '@react-router/serve@7.9.1':
- resolution: {integrity: sha512-yVBSb5KsNCdkSoOk186/M5GJtcIvKE32Ax9LhXySVpM+suCSjucI+p2TXDOJIYsBqr2aKcBl/bNBm5sIJxG/HA==}
+ '@react-router/serve@7.9.4':
+ resolution: {integrity: sha512-zXub2L4qwtGd8+pdXi1QheI8PHPxSwi5EF0D1924fji8yN1R8csP/2cr055/xFOEtbkbJSZyVRrJ44fFnBxKCw==}
engines: {node: '>=20.0.0'}
hasBin: true
peerDependencies:
- react-router: 7.9.1
+ react-router: 7.9.4
'@remix-run/file-storage@0.9.0':
resolution: {integrity: sha512-GbrmqGTdgevRMqkcTzGG9eyUn3eo32ST/jmqdh2g8h5MNKmONF6TJpVDZvtGhrvl93kX/k01WigUk/R8j58/eA==}
@@ -3522,17 +3625,20 @@ packages:
'@remix-run/headers@0.12.0':
resolution: {integrity: sha512-eqVSL5UOIyqVx0NTqgtNKMKVokE9jPchkZHl/N13KKPQYw/leS8VCoX5zRhkB1UvcLyfj113LX0OvEcuNbc5Hg==}
- '@remix-run/lazy-file@3.5.0':
- resolution: {integrity: sha512-/QuQA1XXaVSco02fI2RRL6K6av81gcfb8MVtINbciqGjA24p3qAZ5M7YytLBrK0cAb7S39eEte9p0nrlqKnUrw==}
+ '@remix-run/lazy-file@3.6.0':
+ resolution: {integrity: sha512-z+Ze2SinJoko3D0AGWCFGPKLmszC3mxn5/Fcqn/aR+xva8JC/lJVNY/xl45tZmGhsW2cu9hiAPHkC+DHuVdl2w==}
'@remix-run/multipart-parser@0.11.0':
resolution: {integrity: sha512-AE/H+ok0fWOZb84sJ8vREOJiSwYoEoGL0rpHZSAiPmCkBKbnsmHCbiUtg5+wELem4Q0HAEY6vjVK83u9cIlAhw==}
+ '@remix-run/node-fetch-server@0.9.0':
+ resolution: {integrity: sha512-SoLMv7dbH+njWzXnOY6fI08dFMI5+/dQ+vY3n8RnnbdG7MdJEgiP28Xj/xWlnRnED/aB6SFw56Zop+LbmaaKqA==}
+
'@repeaterjs/repeater@3.0.6':
resolution: {integrity: sha512-Javneu5lsuhwNCryN+pXH93VPQ8g0dBX7wItHFgYiwQmzE1sVdg5tWHiOgHywzL2W21XQopa7IwIEnNbmeUJYA==}
- '@rollup/plugin-commonjs@28.0.6':
- resolution: {integrity: sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==}
+ '@rollup/plugin-commonjs@28.0.8':
+ resolution: {integrity: sha512-o1Ug9PxYsF61R7/NXO/GgMZZproLd/WH2XA53Tp9ppf6bU1lMlTtC/gUM6zM3mesi2E0rypk+PNtVrELREyWEQ==}
engines: {node: '>=16.0.0 || 14 >= 14.17'}
peerDependencies:
rollup: ^2.68.0||^3.0.0||^4.0.0
@@ -3558,8 +3664,8 @@ packages:
rollup:
optional: true
- '@rollup/plugin-node-resolve@16.0.1':
- resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==}
+ '@rollup/plugin-node-resolve@16.0.3':
+ resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^2.78.0||^3.0.0||^4.0.0
@@ -3576,8 +3682,8 @@ packages:
rollup:
optional: true
- '@rollup/plugin-typescript@12.1.4':
- resolution: {integrity: sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==}
+ '@rollup/plugin-typescript@12.3.0':
+ resolution: {integrity: sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big==}
engines: {node: '>=14.0.0'}
peerDependencies:
rollup: ^2.14.0||^3.0.0||^4.0.0
@@ -3598,165 +3704,170 @@ packages:
rollup:
optional: true
- '@rollup/rollup-android-arm-eabi@4.50.2':
- resolution: {integrity: sha512-uLN8NAiFVIRKX9ZQha8wy6UUs06UNSZ32xj6giK/rmMXAgKahwExvK6SsmgU5/brh4w/nSgj8e0k3c1HBQpa0A==}
+ '@rollup/rollup-android-arm-eabi@4.52.5':
+ resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.50.2':
- resolution: {integrity: sha512-oEouqQk2/zxxj22PNcGSskya+3kV0ZKH+nQxuCCOGJ4oTXBdNTbv+f/E3c74cNLeMO1S5wVWacSws10TTSB77g==}
+ '@rollup/rollup-android-arm64@4.52.5':
+ resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.50.2':
- resolution: {integrity: sha512-OZuTVTpj3CDSIxmPgGH8en/XtirV5nfljHZ3wrNwvgkT5DQLhIKAeuFSiwtbMto6oVexV0k1F1zqURPKf5rI1Q==}
+ '@rollup/rollup-darwin-arm64@4.52.5':
+ resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.50.2':
- resolution: {integrity: sha512-Wa/Wn8RFkIkr1vy1k1PB//VYhLnlnn5eaJkfTQKivirOvzu5uVd2It01ukeQstMursuz7S1bU+8WW+1UPXpa8A==}
+ '@rollup/rollup-darwin-x64@4.52.5':
+ resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.50.2':
- resolution: {integrity: sha512-QkzxvH3kYN9J1w7D1A+yIMdI1pPekD+pWx7G5rXgnIlQ1TVYVC6hLl7SOV9pi5q9uIDF9AuIGkuzcbF7+fAhow==}
+ '@rollup/rollup-freebsd-arm64@4.52.5':
+ resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.50.2':
- resolution: {integrity: sha512-dkYXB0c2XAS3a3jmyDkX4Jk0m7gWLFzq1C3qUnJJ38AyxIF5G/dyS4N9B30nvFseCfgtCEdbYFhk0ChoCGxPog==}
+ '@rollup/rollup-freebsd-x64@4.52.5':
+ resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.50.2':
- resolution: {integrity: sha512-9VlPY/BN3AgbukfVHAB8zNFWB/lKEuvzRo1NKev0Po8sYFKx0i+AQlCYftgEjcL43F2h9Ui1ZSdVBc4En/sP2w==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.52.5':
+ resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.50.2':
- resolution: {integrity: sha512-+GdKWOvsifaYNlIVf07QYan1J5F141+vGm5/Y8b9uCZnG/nxoGqgCmR24mv0koIWWuqvFYnbURRqw1lv7IBINw==}
+ '@rollup/rollup-linux-arm-musleabihf@4.52.5':
+ resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.50.2':
- resolution: {integrity: sha512-df0Eou14ojtUdLQdPFnymEQteENwSJAdLf5KCDrmZNsy1c3YaCNaJvYsEUHnrg+/DLBH612/R0xd3dD03uz2dg==}
+ '@rollup/rollup-linux-arm64-gnu@4.52.5':
+ resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.50.2':
- resolution: {integrity: sha512-iPeouV0UIDtz8j1YFR4OJ/zf7evjauqv7jQ/EFs0ClIyL+by++hiaDAfFipjOgyz6y6xbDvJuiU4HwpVMpRFDQ==}
+ '@rollup/rollup-linux-arm64-musl@4.52.5':
+ resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loong64-gnu@4.50.2':
- resolution: {integrity: sha512-OL6KaNvBopLlj5fTa5D5bau4W82f+1TyTZRr2BdnfsrnQnmdxh4okMxR2DcDkJuh4KeoQZVuvHvzuD/lyLn2Kw==}
+ '@rollup/rollup-linux-loong64-gnu@4.52.5':
+ resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.50.2':
- resolution: {integrity: sha512-I21VJl1w6z/K5OTRl6aS9DDsqezEZ/yKpbqlvfHbW0CEF5IL8ATBMuUx6/mp683rKTK8thjs/0BaNrZLXetLag==}
+ '@rollup/rollup-linux-ppc64-gnu@4.52.5':
+ resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.50.2':
- resolution: {integrity: sha512-Hq6aQJT/qFFHrYMjS20nV+9SKrXL2lvFBENZoKfoTH2kKDOJqff5OSJr4x72ZaG/uUn+XmBnGhfr4lwMRrmqCQ==}
+ '@rollup/rollup-linux-riscv64-gnu@4.52.5':
+ resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.50.2':
- resolution: {integrity: sha512-82rBSEXRv5qtKyr0xZ/YMF531oj2AIpLZkeNYxmKNN6I2sVE9PGegN99tYDLK2fYHJITL1P2Lgb4ZXnv0PjQvw==}
+ '@rollup/rollup-linux-riscv64-musl@4.52.5':
+ resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.50.2':
- resolution: {integrity: sha512-4Q3S3Hy7pC6uaRo9gtXUTJ+EKo9AKs3BXKc2jYypEcMQ49gDPFU2P1ariX9SEtBzE5egIX6fSUmbmGazwBVF9w==}
+ '@rollup/rollup-linux-s390x-gnu@4.52.5':
+ resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.50.2':
- resolution: {integrity: sha512-9Jie/At6qk70dNIcopcL4p+1UirusEtznpNtcq/u/C5cC4HBX7qSGsYIcG6bdxj15EYWhHiu02YvmdPzylIZlA==}
+ '@rollup/rollup-linux-x64-gnu@4.52.5':
+ resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.50.2':
- resolution: {integrity: sha512-HPNJwxPL3EmhzeAnsWQCM3DcoqOz3/IC6de9rWfGR8ZCuEHETi9km66bH/wG3YH0V3nyzyFEGUZeL5PKyy4xvw==}
+ '@rollup/rollup-linux-x64-musl@4.52.5':
+ resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-openharmony-arm64@4.50.2':
- resolution: {integrity: sha512-nMKvq6FRHSzYfKLHZ+cChowlEkR2lj/V0jYj9JnGUVPL2/mIeFGmVM2mLaFeNa5Jev7W7TovXqXIG2d39y1KYA==}
+ '@rollup/rollup-openharmony-arm64@4.52.5':
+ resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.50.2':
- resolution: {integrity: sha512-eFUvvnTYEKeTyHEijQKz81bLrUQOXKZqECeiWH6tb8eXXbZk+CXSG2aFrig2BQ/pjiVRj36zysjgILkqarS2YA==}
+ '@rollup/rollup-win32-arm64-msvc@4.52.5':
+ resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.50.2':
- resolution: {integrity: sha512-cBaWmXqyfRhH8zmUxK3d3sAhEWLrtMjWBRwdMMHJIXSjvjLKvv49adxiEz+FJ8AP90apSDDBx2Tyd/WylV6ikA==}
+ '@rollup/rollup-win32-ia32-msvc@4.52.5':
+ resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.50.2':
- resolution: {integrity: sha512-APwKy6YUhvZaEoHyM+9xqmTpviEI+9eL7LoCH+aLcvWYHJ663qG5zx7WzWZY+a9qkg5JtzcMyJ9z0WtQBMDmgA==}
+ '@rollup/rollup-win32-x64-gnu@4.52.5':
+ resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==}
cpu: [x64]
os: [win32]
- '@rspack/binding-darwin-arm64@1.5.5':
- resolution: {integrity: sha512-Kg3ywEZHLX+aROfTQ5tMOv+Ud+8b4jk8ruUgsi0W8oBkEkR5xBdhFa9vcf6pzy+gfoLCnEI68U9i8ttm+G0csA==}
+ '@rollup/rollup-win32-x64-msvc@4.52.5':
+ resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rspack/binding-darwin-arm64@1.5.8':
+ resolution: {integrity: sha512-spJfpOSN3f7V90ic45/ET2NKB2ujAViCNmqb0iGurMNQtFRq+7Kd+jvVKKGXKBHBbsQrFhidSWbbqy2PBPGK8g==}
cpu: [arm64]
os: [darwin]
- '@rspack/binding-darwin-x64@1.5.5':
- resolution: {integrity: sha512-uoGTYnlYW8m47yiDCKvXOehhAOH12wlePJq4sbUbBoHmG07vbDw7fUqnvy2k8319NTVEpMJWGoKyisgI09/uMQ==}
+ '@rspack/binding-darwin-x64@1.5.8':
+ resolution: {integrity: sha512-YFOzeL1IBknBcri8vjUp43dfUBylCeQnD+9O9p0wZmLAw7DtpN5JEOe2AkGo8kdTqJjYKI+cczJPKIw6lu1LWw==}
cpu: [x64]
os: [darwin]
- '@rspack/binding-linux-arm64-gnu@1.5.5':
- resolution: {integrity: sha512-KgVN3TeUJ3iNwwOX3JGY4arvoLHX94eItJ4TeOSyetRiSJUrQI0evP16i5kIh+n+p7mVnXmfUS944Gl+uNsJmg==}
+ '@rspack/binding-linux-arm64-gnu@1.5.8':
+ resolution: {integrity: sha512-UAWCsOnpkvy8eAVRo0uipbHXDhnoDq5zmqWTMhpga0/a3yzCp2e+fnjZb/qnFNYb5MeL0O1mwMOYgn1M3oHILQ==}
cpu: [arm64]
os: [linux]
- '@rspack/binding-linux-arm64-musl@1.5.5':
- resolution: {integrity: sha512-1gKthlCQinXtWar6Hl9Il6BQ/NgYBH0NVuUsjjf85ejD/cTPQENKyIpGvVa1rSIHSfnG/XujUbruHAeY9mEHCA==}
+ '@rspack/binding-linux-arm64-musl@1.5.8':
+ resolution: {integrity: sha512-GnSvGT4GjokPSD45cTtE+g7LgghuxSP1MRmvd+Vp/I8pnxTVSTsebRod4TAqyiv+l11nuS8yqNveK9qiOkBLWw==}
cpu: [arm64]
os: [linux]
- '@rspack/binding-linux-x64-gnu@1.5.5':
- resolution: {integrity: sha512-haPFg4M9GwpSI5g9BQhKUNdzCKDvFexIUkLiAHBjFU9iWQTEcI9VfYPixestOIwzUv7E34rHM+jAsmRGWdgmXw==}
+ '@rspack/binding-linux-x64-gnu@1.5.8':
+ resolution: {integrity: sha512-XLxh5n/pzUfxsugz/8rVBv+Tx2nqEM+9rharK69kfooDsQNKyz7PANllBQ/v4svJ+W0BRHnDL4qXSGdteZeEjA==}
cpu: [x64]
os: [linux]
- '@rspack/binding-linux-x64-musl@1.5.5':
- resolution: {integrity: sha512-oUny56JEkCZvIu4n8/P7IPLPNtJnL89EDhxHINH87XLBY3OOgo8JHELR11Zj9SFWiGNsRcLqi+Q78tWa0ligBQ==}
+ '@rspack/binding-linux-x64-musl@1.5.8':
+ resolution: {integrity: sha512-gE0+MZmwF+01p9/svpEESkzkLpBkVUG2o03YMpwXYC/maeRRhWvF8BJ7R3i/Ls/jFGSE87dKX5NbRLVzqksq/w==}
cpu: [x64]
os: [linux]
- '@rspack/binding-wasm32-wasi@1.5.5':
- resolution: {integrity: sha512-tRgxBgIXaBKBH/0KlwvyqbIMqQrg8jKOyFOEQseEE7Oqs2M9KkJ7Vp5QN11u3NvZ9nz5GbZxmVGBMkdj9Gth1w==}
+ '@rspack/binding-wasm32-wasi@1.5.8':
+ resolution: {integrity: sha512-cfg3niNHeJuxuml1Vy9VvaJrI/5TakzoaZvKX2g5S24wfzR50Eyy4JAsZ+L2voWQQp1yMJbmPYPmnTCTxdJQBQ==}
cpu: [wasm32]
- '@rspack/binding-win32-arm64-msvc@1.5.5':
- resolution: {integrity: sha512-wGWd2yluoFdQgtkIbny6FoHnzahTk+o9RzrptjeS1u/NV1lKrWzmWhwZojMGOUqPiaukZKaziOEo7gpRn2XbEQ==}
+ '@rspack/binding-win32-arm64-msvc@1.5.8':
+ resolution: {integrity: sha512-7i3ZTHFXKfU/9Jm9XhpMkrdkxO7lfeYMNVEGkuU5dyBfRMQj69dRgPL7zJwc2plXiqu9LUOl+TwDNTjap7Q36g==}
cpu: [arm64]
os: [win32]
- '@rspack/binding-win32-ia32-msvc@1.5.5':
- resolution: {integrity: sha512-Ikml8AQkzjPCG24vTO4pG2bpJ8vp93jVEgo9X9uYjO2vQbIp5QSOmeZOTM7tXCf8AfTfHEF/yAdE/pR/+tXXGQ==}
+ '@rspack/binding-win32-ia32-msvc@1.5.8':
+ resolution: {integrity: sha512-7ZPPWO11J+soea1+mnfaPpQt7GIodBM7A86dx6PbXgVEoZmetcWPrCF2NBfXxQWOKJ9L3RYltC4z+ZyXRgMOrw==}
cpu: [ia32]
os: [win32]
- '@rspack/binding-win32-x64-msvc@1.5.5':
- resolution: {integrity: sha512-m2059ms0i/GIQGWTlZ5GI6SWpuMFAPMsWlhXLk2LZRIydhi+N/YPkmc33lFRTlDA3QpKDCvowvCvIIA7g6WSlg==}
+ '@rspack/binding-win32-x64-msvc@1.5.8':
+ resolution: {integrity: sha512-N/zXQgzIxME3YUzXT8qnyzxjqcnXudWOeDh8CAG9zqTCnCiy16SFfQ/cQgEoLlD9geQntV6jx2GbDDI5kpDGMQ==}
cpu: [x64]
os: [win32]
- '@rspack/binding@1.5.5':
- resolution: {integrity: sha512-JkB943uBU0lABnKG/jdO+gg3/eeO9CEQMR/1dL6jSU9GTxaNf3XIVc05RhRC7qoVsiXuhSMMFxWyV0hyHxp2bA==}
+ '@rspack/binding@1.5.8':
+ resolution: {integrity: sha512-/91CzhRl9r5BIQCgGsS7jA6MDbw1I2BQpbfcUUdkdKl2P79K3Zo/Mw/TvKzS86catwLaUQEgkGRmYawOfPg7ow==}
- '@rspack/core@1.5.5':
- resolution: {integrity: sha512-AOIuMktK6X/xHAjJ/0QJ2kbSkILXj641GCPE+EOfWO27ODA8fHPArKbyz5AVGVePV3aUfEo2VFcsNzP67VBEPA==}
+ '@rspack/core@1.5.8':
+ resolution: {integrity: sha512-sUd2LfiDhqYVfvknuoz0+/c+wSpn693xotnG5g1CSWKZArbtwiYzBIVnNlcHGmuoBRsnj/TkSq8dTQ7gwfBroQ==}
engines: {node: '>=18.12.0'}
peerDependencies:
'@swc/helpers': '>=0.5.1'
@@ -3771,96 +3882,96 @@ packages:
'@selderee/plugin-htmlparser2@0.11.0':
resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==}
- '@sentry-internal/browser-utils@10.12.0':
- resolution: {integrity: sha512-dozbx389jhKynj0d657FsgbBVOar7pX3mb6GjqCxslXF0VKpZH2Xks0U32RgDY/nK27O+o095IWz7YvjVmPkDw==}
+ '@sentry-internal/browser-utils@10.22.0':
+ resolution: {integrity: sha512-BpJoLZEyJr7ORzkCrIjxRTnFWwO1mJNICVh3B9g5d9245niGT4OJvRozmLz89WgJkZFHWu84ls6Xfq5b/3tGFQ==}
engines: {node: '>=18'}
- '@sentry-internal/feedback@10.12.0':
- resolution: {integrity: sha512-0+7ceO6yQPPqfxRc9ue/xoPHKcnB917ezPaehGQNfAFNQB9PNTG1y55+8mRu0Fw+ANbZeCt/HyoCmXuRdxmkpg==}
+ '@sentry-internal/feedback@10.22.0':
+ resolution: {integrity: sha512-zXySOin/gGHPV+yKaHqjN9YZ7psEJwzLn8PzCLeo+4REzF1eQwbYZIgOxJFD32z8s3nZiABSWFM/n1CvVfMEsQ==}
engines: {node: '>=18'}
'@sentry-internal/node-cpu-profiler@2.2.0':
resolution: {integrity: sha512-oLHVYurqZfADPh5hvmQYS5qx8t0UZzT2u6+/68VXsFruQEOnYJTODKgU3BVLmemRs3WE6kCJjPeFdHVYOQGSzQ==}
engines: {node: '>=18'}
- '@sentry-internal/replay-canvas@10.12.0':
- resolution: {integrity: sha512-W/z1/+69i3INNfPjD1KuinSNaRQaApjzwb37IFmiyF440F93hxmEYgXHk3poOlYYaigl2JMYbysGPWOiXnqUXA==}
+ '@sentry-internal/replay-canvas@10.22.0':
+ resolution: {integrity: sha512-DE4JNUskJg+O+wFq42W5gAa/99aD5k7TfGOwABxvnzFv8vkKA7pqXwPbFFPzypdKIkln+df7RmbnDwQRNg6/lA==}
engines: {node: '>=18'}
- '@sentry-internal/replay@10.12.0':
- resolution: {integrity: sha512-/1093gSNGN5KlOBsuyAl33JkzGiG38kCnxswQLZWpPpR6LBbR1Ddb18HjhDpoQNNEZybJBgJC3a5NKl43C2TSQ==}
+ '@sentry-internal/replay@10.22.0':
+ resolution: {integrity: sha512-JNE4kHAQSG4/V+J+Zog3vKBWgOe9H33ol/MEU1RuLM/4I+uLf4mTetwnS9ilpnnW/Z/gQYfA+R3CiMrZtqTivw==}
engines: {node: '>=18'}
- '@sentry/babel-plugin-component-annotate@4.3.0':
- resolution: {integrity: sha512-OuxqBprXRyhe8Pkfyz/4yHQJc5c3lm+TmYWSSx8u48g5yKewSQDOxkiLU5pAk3WnbLPy8XwU/PN+2BG0YFU9Nw==}
+ '@sentry/babel-plugin-component-annotate@4.5.0':
+ resolution: {integrity: sha512-9sn9tJFtNnhSitPXW8hTuteefGMBbnPFyDER8dz+2sgdvcdq7T99lEwprMf8gUv5JCiDKIvtLe20Sf/4KPAahA==}
engines: {node: '>= 14'}
- '@sentry/browser@10.12.0':
- resolution: {integrity: sha512-lKyaB2NFmr7SxPjmMTLLhQ7xfxaY3kdkMhpzuRI5qwOngtKt4+FtvNYHRuz+PTtEFv4OaHhNNbRn6r91gWguQg==}
+ '@sentry/browser@10.22.0':
+ resolution: {integrity: sha512-wD2XqN+yeBpQFfdPo6+wlKDMyyuDctVGzZWE4qTPntICKQuwMdAfeq5Ma89ad0Dw+bzG9UijGeyuJQlswF87Mw==}
engines: {node: '>=18'}
- '@sentry/bundler-plugin-core@4.3.0':
- resolution: {integrity: sha512-dmR4DJhJ4jqVWGWppuTL2blNFqOZZnt4aLkewbD1myFG3KVfUx8CrMQWEmGjkgPOtj5TO6xH9PyTJjXC6o5tnA==}
+ '@sentry/bundler-plugin-core@4.5.0':
+ resolution: {integrity: sha512-LTgYe7qGgAP0BpsyCTpjk756l6wZUv3MtCE+G0qzlpsQ2AljYe2bN4qjDy0bQrsPo0QzNQm+S6d0zogcJj/tqw==}
engines: {node: '>= 14'}
- '@sentry/cli-darwin@2.53.0':
- resolution: {integrity: sha512-NNPfpILMwKgpHiyJubHHuauMKltkrgLQ5tvMdxNpxY60jBNdo5VJtpESp4XmXlnidzV4j1z61V4ozU6ttDgt5Q==}
+ '@sentry/cli-darwin@2.57.0':
+ resolution: {integrity: sha512-v1wYQU3BcCO+Z3OVxxO+EnaW4oQhuOza6CXeYZ0z5ftza9r0QQBLz3bcZKTVta86xraNm0z8GDlREwinyddOxQ==}
engines: {node: '>=10'}
os: [darwin]
- '@sentry/cli-linux-arm64@2.53.0':
- resolution: {integrity: sha512-xY/CZ1dVazsSCvTXzKpAgXaRqfljVfdrFaYZRUaRPf1ZJRGa3dcrivoOhSIeG/p5NdYtMvslMPY9Gm2MT0M83A==}
+ '@sentry/cli-linux-arm64@2.57.0':
+ resolution: {integrity: sha512-Kh1jTsMV5Fy/RvB381N/woXe1qclRMqsG6kM3Gq6m6afEF/+k3PyQdNW3HXAola6d63EptokLtxPG2xjWQ+w9Q==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux, freebsd, android]
- '@sentry/cli-linux-arm@2.53.0':
- resolution: {integrity: sha512-NdRzQ15Ht83qG0/Lyu11ciy/Hu/oXbbtJUgwzACc7bWvHQA8xEwTsehWexqn1529Kfc5EjuZ0Wmj3MHmp+jOWw==}
+ '@sentry/cli-linux-arm@2.57.0':
+ resolution: {integrity: sha512-uNHB8xyygqfMd1/6tFzl9NUkuVefg7jdZtM/vVCQVaF/rJLWZ++Wms+LLhYyKXKN8yd7J9wy7kTEl4Qu4jWbGQ==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux, freebsd, android]
- '@sentry/cli-linux-i686@2.53.0':
- resolution: {integrity: sha512-0REmBibGAB4jtqt9S6JEsFF4QybzcXHPcHtJjgMi5T0ueh952uG9wLzjSxQErCsxTKF+fL8oG0Oz5yKBuCwCCQ==}
+ '@sentry/cli-linux-i686@2.57.0':
+ resolution: {integrity: sha512-EYXghoK/tKd0zqz+KD/ewXXE3u1HLCwG89krweveytBy/qw7M5z58eFvw+iGb1Vnbl1f/fRD0G4E0AbEsPfmpg==}
engines: {node: '>=10'}
cpu: [x86, ia32]
os: [linux, freebsd, android]
- '@sentry/cli-linux-x64@2.53.0':
- resolution: {integrity: sha512-9UGJL+Vy5N/YL1EWPZ/dyXLkShlNaDNrzxx4G7mTS9ywjg+BIuemo6rnN7w43K1NOjObTVO6zY0FwumJ1pCyLg==}
+ '@sentry/cli-linux-x64@2.57.0':
+ resolution: {integrity: sha512-CyZrP/ssHmAPLSzfd4ydy7icDnwmDD6o3QjhkWwVFmCd+9slSBMQxpIqpamZmrWE6X4R+xBRbSUjmdoJoZ5yMw==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux, freebsd, android]
- '@sentry/cli-win32-arm64@2.53.0':
- resolution: {integrity: sha512-G1kjOjrjMBY20rQcJV2GA8KQE74ufmROCDb2GXYRfjvb1fKAsm4Oh8N5+Tqi7xEHdjQoLPkE4CNW0aH68JSUDQ==}
+ '@sentry/cli-win32-arm64@2.57.0':
+ resolution: {integrity: sha512-wji/GGE4Lh5I/dNCsuVbg6fRvttvZRG6db1yPW1BSvQRh8DdnVy1CVp+HMqSq0SRy/S4z60j2u+m4yXMoCL+5g==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
- '@sentry/cli-win32-i686@2.53.0':
- resolution: {integrity: sha512-qbGTZUzesuUaPtY9rPXdNfwLqOZKXrJRC1zUFn52hdo6B+Dmv0m/AHwRVFHZP53Tg1NCa8bDei2K/uzRN0dUZw==}
+ '@sentry/cli-win32-i686@2.57.0':
+ resolution: {integrity: sha512-hWvzyD7bTPh3b55qvJ1Okg3Wbl0Km8xcL6KvS7gfBl6uss+I6RldmQTP0gJKdHSdf/QlJN1FK0b7bLnCB3wHsg==}
engines: {node: '>=10'}
cpu: [x86, ia32]
os: [win32]
- '@sentry/cli-win32-x64@2.53.0':
- resolution: {integrity: sha512-1TXYxYHtwgUq5KAJt3erRzzUtPqg7BlH9T7MdSPHjJatkrr/kwZqnVe2H6Arr/5NH891vOlIeSPHBdgJUAD69g==}
+ '@sentry/cli-win32-x64@2.57.0':
+ resolution: {integrity: sha512-QWYV/Y0sbpDSTyA4XQBOTaid4a6H2Iwa1Z8UI+qNxFlk0ADSEgIqo2NrRHDU8iRnghTkecQNX1NTt/7mXN3f/A==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
- '@sentry/cli@2.53.0':
- resolution: {integrity: sha512-n2ZNb+5Z6AZKQSI0SusQ7ZzFL637mfw3Xh4C3PEyVSn9LiF683fX0TTq8OeGmNZQS4maYfS95IFD+XpydU0dEA==}
+ '@sentry/cli@2.57.0':
+ resolution: {integrity: sha512-oC4HPrVIX06GvUTgK0i+WbNgIA9Zl5YEcwf9N4eWFJJmjonr2j4SML9Hn2yNENbUWDgwepy4MLod3P8rM4bk/w==}
engines: {node: '>= 10'}
hasBin: true
- '@sentry/core@10.12.0':
- resolution: {integrity: sha512-Jrf0Yo7DvmI/ZQcvBnA0xKNAFkJlVC/fMlvcin+5IrFNRcqOToZ2vtF+XqTgjRZymXQNE8s1QTD7IomPHk0TAw==}
+ '@sentry/core@10.22.0':
+ resolution: {integrity: sha512-V1oeHbrOKzxadsCmgtPku3v3Emo/Bpb3VSuKmlLrQefiHX98MWtjJ3XDGfduzD5/dCdh0r/OOLwjcmrO/PZ2aw==}
engines: {node: '>=18'}
- '@sentry/node-core@10.12.0':
- resolution: {integrity: sha512-ki+pX4YyVVMhue1Qso0Kiz862ragDe1PgRc/AgtUJ0jc75s5PTvQw6N+9DAtSahL8t078+8rC7UzyGdLTPCl5w==}
+ '@sentry/node-core@10.22.0':
+ resolution: {integrity: sha512-88Yyn+Qvmp0kPMnNRWgpUlAvhI9CNPqOT+0glW0L7OoN8LkJcNgx2GGUoLrJ+RGeHz/S7dIJY6DGa+u0Not2Qg==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
@@ -3871,12 +3982,12 @@ packages:
'@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
'@opentelemetry/semantic-conventions': ^1.37.0
- '@sentry/node@10.12.0':
- resolution: {integrity: sha512-rnrNKJkG8rbm1NZaYAhTfLqGmZmiOjv9Y6apa1G9+hsfAqdK4SGFa/s22WG//qVnvqW4aDXR883Dvc0236op+g==}
+ '@sentry/node@10.22.0':
+ resolution: {integrity: sha512-PfG8AMT2kgFJ7rWb0lLJOmjLW2riytTliLMjfoJ8/tLGk964uKqE0xM7FLtXZjlLJqTXVYCVG7VIPj185uyckQ==}
engines: {node: '>=18'}
- '@sentry/opentelemetry@10.12.0':
- resolution: {integrity: sha512-bkUfLVpu0qTfCrQsz7uE/ch0kCJSV2KlFtguWPLMG2m0JOLDI+iivLm2nbp+Bg16FopZojKs5P8aevCSl+ilEw==}
+ '@sentry/opentelemetry@10.22.0':
+ resolution: {integrity: sha512-XHXYYq3zsQ/dj1kQ7cGGLFIEVRmrmjcMhiJHvmKKsUGKxQjHe2G0LuG8clHIPkmbg7yEIxCT/W2I9QzrwYt5+g==}
engines: {node: '>=18'}
peerDependencies:
'@opentelemetry/api': ^1.9.0
@@ -3885,40 +3996,40 @@ packages:
'@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.1.0
'@opentelemetry/semantic-conventions': ^1.37.0
- '@sentry/profiling-node@10.12.0':
- resolution: {integrity: sha512-F6ZyDi2zCQEpUFpp2n2H+WRDgyFpiY1B4BsTJsUitZPGuVxq5gF0Kxc0685q2pWgY2S23eOY61OZvFOvL3Kjrg==}
+ '@sentry/profiling-node@10.22.0':
+ resolution: {integrity: sha512-aeOxTP5YCuaqicKs2AjbjaxEVlZ+msSoASghHOElwbp5eiFLfc/15NrFbZEeY6i+MS6SY1korLA4PutihwF0tw==}
engines: {node: '>=18'}
hasBin: true
- '@sentry/react-router@10.12.0':
- resolution: {integrity: sha512-0rAr63ARYb807tPd4gc94fyuf1BjPk5TCaXLlAo+v9/mFNWIjtZhaSXkR++UCE6XV5aNhgCquiLonYaDbfaLlw==}
+ '@sentry/react-router@10.22.0':
+ resolution: {integrity: sha512-Ppyx+CUdSjEvYBO/9TopPScjxKd2K7pHU1t7VCHcqC/I4VuuPRrVQ50guBHSppc15+yY1aZlEnlzUV/4q928cA==}
engines: {node: '>=20'}
peerDependencies:
'@react-router/node': 7.x
react: '>=18'
react-router: 7.x
- '@sentry/react@10.12.0':
- resolution: {integrity: sha512-TpqgdoYbkf5JynmmW2oQhHQ/h5w+XPYk0cEb/UrsGlvJvnBSR+5tgh0AqxCSi3gvtp82rAXI5w1TyRPBbhLDBw==}
+ '@sentry/react@10.22.0':
+ resolution: {integrity: sha512-XByOjtW30LMNibmCPJF5LNYFmETNOUmWByECADox8GYV4BEX18WGXl4K1fpPDTSk+y4vUCHbltHa4GkyTRwG8Q==}
engines: {node: '>=18'}
peerDependencies:
react: ^16.14.0 || 17.x || 18.x || 19.x
- '@sentry/vite-plugin@4.3.0':
- resolution: {integrity: sha512-MeTAHMmTOgBPMAjeW7/ONyXwgScZdaFFtNiALKcAODnVqC7eoHdSRIWeH5mkLr2Dvs7nqtBaDpKxRjUBgfm9LQ==}
+ '@sentry/vite-plugin@4.5.0':
+ resolution: {integrity: sha512-8AcTuAmu2NFCkSgVroCeu/ExZeMDVGdgrXq9MzgE5LT2bcomKsHiAifhitq64QwFEfL6CFt3TYEsw0rm0AoRhQ==}
engines: {node: '>= 14'}
- '@shikijs/engine-oniguruma@3.12.2':
- resolution: {integrity: sha512-hozwnFHsLvujK4/CPVHNo3Bcg2EsnG8krI/ZQ2FlBlCRpPZW4XAEQmEwqegJsypsTAN9ehu2tEYe30lYKSZW/w==}
+ '@shikijs/engine-oniguruma@3.13.0':
+ resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==}
- '@shikijs/langs@3.12.2':
- resolution: {integrity: sha512-bVx5PfuZHDSHoBal+KzJZGheFuyH4qwwcwG/n+MsWno5cTlKmaNtTsGzJpHYQ8YPbB5BdEdKU1rga5/6JGY8ww==}
+ '@shikijs/langs@3.13.0':
+ resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==}
- '@shikijs/themes@3.12.2':
- resolution: {integrity: sha512-fTR3QAgnwYpfGczpIbzPjlRnxyONJOerguQv1iwpyQZ9QXX4qy/XFQqXlf17XTsorxnHoJGbH/LXBvwtqDsF5A==}
+ '@shikijs/themes@3.13.0':
+ resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==}
- '@shikijs/types@3.12.2':
- resolution: {integrity: sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==}
+ '@shikijs/types@3.13.0':
+ resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==}
'@shikijs/vscode-textmate@10.0.2':
resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==}
@@ -3932,11 +4043,11 @@ packages:
'@sideway/pinpoint@2.0.0':
resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
- '@simplewebauthn/browser@13.2.0':
- resolution: {integrity: sha512-N3fuA1AAnTo5gCStYoIoiasPccC+xPLx2YU88Dv0GeAmPQTWHETlZQq5xZ0DgUq1H9loXMWQH5qqUjcI7BHJ1A==}
+ '@simplewebauthn/browser@13.2.2':
+ resolution: {integrity: sha512-FNW1oLQpTJyqG5kkDg5ZsotvWgmBaC6jCHR7Ej0qUNep36Wl9tj2eZu7J5rP+uhXgHaLk+QQ3lqcw2vS5MX1IA==}
- '@simplewebauthn/server@13.2.1':
- resolution: {integrity: sha512-Inmfye5opZXe3HI0GaksqBnQiM7glcNySoG6DH1GgkO1Lh9dvuV4XSV9DK02DReUVX39HpcDob9nxHELjECoQw==}
+ '@simplewebauthn/server@13.2.2':
+ resolution: {integrity: sha512-HcWLW28yTMGXpwE9VLx9J+N2KEUaELadLrkPEEI9tpI5la70xNEVEsu/C+m3u7uoq4FulLqZQhgBCzR9IZhFpA==}
engines: {node: '>=20.0.0'}
'@sinclair/typebox@0.27.8':
@@ -3959,6 +4070,9 @@ packages:
'@slorber/remark-comment@1.0.0':
resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==}
+ '@standard-schema/spec@1.0.0':
+ resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
+
'@standard-schema/utils@0.3.0':
resolution: {integrity: sha512-e7Mew686owMaPJVNNLs55PUvgz371nKgwsc4vxE49zsODpJEnxgxRo2y/OKrqueavXgZNMDVj3DdHFlaSAeU8g==}
@@ -4040,68 +4154,68 @@ packages:
resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==}
engines: {node: '>=14'}
- '@swc/core-darwin-arm64@1.13.5':
- resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==}
+ '@swc/core-darwin-arm64@1.13.21':
+ resolution: {integrity: sha512-0jaz9r7f0PDK8OyyVooadv8dkFlQmVmBK6DtAnWSRjkCbNt4sdqsc9ZkyEDJXaxOVcMQ3pJx/Igniyw5xqACLw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
- '@swc/core-darwin-x64@1.13.5':
- resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==}
+ '@swc/core-darwin-x64@1.13.21':
+ resolution: {integrity: sha512-pLeZn+NTGa7oW/ysD6oM82BjKZl71WNJR9BKXRsOhrNQeUWv55DCoZT2P4DzeU5Xgjmos+iMoDLg/9R6Ngc0PA==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
- '@swc/core-linux-arm-gnueabihf@1.13.5':
- resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==}
+ '@swc/core-linux-arm-gnueabihf@1.13.21':
+ resolution: {integrity: sha512-p9aYzTmP7qVDPkXxnbekOfbT11kxnPiuLrUbgpN/vn6sxXDCObMAiY63WlDR0IauBK571WUdmgb04goe/xTQWw==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
- '@swc/core-linux-arm64-gnu@1.13.5':
- resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==}
+ '@swc/core-linux-arm64-gnu@1.13.21':
+ resolution: {integrity: sha512-yRqFoGlCwEX1nS7OajBE23d0LPeONmFAgoe4rgRYvaUb60qGxIJoMMdvF2g3dum9ZyVDYAb3kP09hbXFbMGr4A==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- '@swc/core-linux-arm64-musl@1.13.5':
- resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==}
+ '@swc/core-linux-arm64-musl@1.13.21':
+ resolution: {integrity: sha512-wu5EGA86gtdYMW69eU80jROzArzD3/6G6zzK0VVR+OFt/0zqbajiiszIpaniOVACObLfJEcShQ05B3q0+CpUEg==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- '@swc/core-linux-x64-gnu@1.13.5':
- resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==}
+ '@swc/core-linux-x64-gnu@1.13.21':
+ resolution: {integrity: sha512-AoGGVPNXH3C4S7WlJOxN1nGW5nj//J9uKysS7CIBotRmHXfHO4wPK3TVFRTA4cuouAWBBn7O8m3A99p/GR+iaw==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- '@swc/core-linux-x64-musl@1.13.5':
- resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==}
+ '@swc/core-linux-x64-musl@1.13.21':
+ resolution: {integrity: sha512-cBy2amuDuxMZnEq16MqGu+DUlEFqI+7F/OACNlk7zEJKq48jJKGEMqJz3X2ucJE5jqUIg6Pos6Uo/y+vuWQymQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- '@swc/core-win32-arm64-msvc@1.13.5':
- resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==}
+ '@swc/core-win32-arm64-msvc@1.13.21':
+ resolution: {integrity: sha512-2xfR5gnqBGOMOlY3s1QiFTXZaivTILMwX67FD2uzT6OCbT/3lyAM/4+3BptBXD8pUkkOGMFLsdeHw4fbO1GrpQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
- '@swc/core-win32-ia32-msvc@1.13.5':
- resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==}
+ '@swc/core-win32-ia32-msvc@1.13.21':
+ resolution: {integrity: sha512-0pkpgKlBDwUImWTQxLakKbzZI6TIGVVAxk658oxrY8VK+hxRy2iezFY6m5Urmeds47M/cnW3dO+OY4C2caOF8A==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
- '@swc/core-win32-x64-msvc@1.13.5':
- resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==}
+ '@swc/core-win32-x64-msvc@1.13.21':
+ resolution: {integrity: sha512-DAnIw2J95TOW4Kr7NBx12vlZPW3QndbpFMmuC7x+fPoozoLpEscaDkiYhk7/sTtY9pubPMfHFPBORlbqyQCfOQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
- '@swc/core@1.13.5':
- resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==}
+ '@swc/core@1.13.21':
+ resolution: {integrity: sha512-umBaSb65O1v6Lt8RV3o5srw0nKr25amf/yRIGFPug63sAerL9n2UkmfGywA1l1aN81W7faXIynF0JmlQ2wPSdw==}
engines: {node: '>=10'}
peerDependencies:
'@swc/helpers': '>=0.5.17'
@@ -4112,68 +4226,68 @@ packages:
'@swc/counter@0.1.3':
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
- '@swc/html-darwin-arm64@1.13.5':
- resolution: {integrity: sha512-5r4kGFQJm85EKOxSiP9pUT/9T1uq+tx0s5HRqfM/J1hVZmpIq2GudBVYS8CGklVWAVQ0tBHhBuP9SysAb/pcSA==}
+ '@swc/html-darwin-arm64@1.13.21':
+ resolution: {integrity: sha512-gFMIqfBi7oQxOWk4bb47s3RvAXrVaebBjWnR1L+fbcCp6e6rxHg30Vl/Z270tv/dvQM1mDQCmt6FL8ar6Z/k+w==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
- '@swc/html-darwin-x64@1.13.5':
- resolution: {integrity: sha512-bCY0BSfxrmbKpInB/wZFX0DH4hgEQBwWLeKNwZhafIR5R/tvzuiIvb/VdkeKv8+26r2lkedbp+EreCFnDqQ2BQ==}
+ '@swc/html-darwin-x64@1.13.21':
+ resolution: {integrity: sha512-Bc5Q2lHd/ALkhZlCspx7ydMTgE+0KsG+zCkubqMj6wftdH2RY4ySKnUQWSsFo9lq5QH7XhPM/pyl/EdTSHshdw==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
- '@swc/html-linux-arm-gnueabihf@1.13.5':
- resolution: {integrity: sha512-o6TVZERfx7Z8btauYE7nHgMEPPIVemqAZL3ViUTuBK6asF9wfJ4m2YAbsrlzi8xaLgaizWvdUV7W1qE5yfOxPg==}
+ '@swc/html-linux-arm-gnueabihf@1.13.21':
+ resolution: {integrity: sha512-g+Dd9VkKYvSgLb2FdDrl0ErMvAuNmBfWH9AJfA97FY8CeW/dr6cmp4BXvS4i2orDH6hACMIMRtReXOpyQVe6uQ==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
- '@swc/html-linux-arm64-gnu@1.13.5':
- resolution: {integrity: sha512-I/Ip5FtCfQ0wYg2MurytkEWPZrFB1SOPOeTNu4n+PAWDBjEcX3q+wgmMpzoGgVljvpEAQviJ+jzRyLW2tDDVHA==}
+ '@swc/html-linux-arm64-gnu@1.13.21':
+ resolution: {integrity: sha512-2sSzRPWq4JpZgTAEr1poZ07zEZWwecjqGEgPkx+dYYXK8z7rNQ5kliiB3qVn3YQZbZU9Yr1dzMVfffioKWuCaA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- '@swc/html-linux-arm64-musl@1.13.5':
- resolution: {integrity: sha512-q8RTISYZuI5qOR8wEhox2oC+ZBo5IBaT6N43b5W+JRSIMKIsY7hVgC3gSI/tG4/6K14hv2QrqtAUFzVpLwtkyA==}
+ '@swc/html-linux-arm64-musl@1.13.21':
+ resolution: {integrity: sha512-9Y34srsiMU97Ob9900R/3SbnPOILbsEOafGeAp8m0/zFRF33TM18jzrR3KmocVac09YlKapBxe6Ske24oyq+QA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- '@swc/html-linux-x64-gnu@1.13.5':
- resolution: {integrity: sha512-YFU0/xVWzjAtg5V6QREW510O5/SNILrm18Vo2qF1bTktCB2eCjNSjCHOdicvPXTImEUlTp0ey6wO+QvEuvRFAg==}
+ '@swc/html-linux-x64-gnu@1.13.21':
+ resolution: {integrity: sha512-QF8vm1BnS6WYiFpKbNaBuO0JhodRMb0Hp+fuZJlHADI+eVTxx3ggDepiaBZK8EF7xhYEioriSpUJuW9uzdkicg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- '@swc/html-linux-x64-musl@1.13.5':
- resolution: {integrity: sha512-/ilgZm7umDQTea97FlE0pIcoHTAlICE+aSoVvLi+ONL3wr4g1ebwlgQ5Cxpgp5cxnKeghDYpqP/mFLh+Ztl8DQ==}
+ '@swc/html-linux-x64-musl@1.13.21':
+ resolution: {integrity: sha512-B9Wryb7Se6nc1k3K9kSdsgsAinIN5TnB2E1USDvfnfrTxTR6Uhdc4OcwLHkSrvDrGXJiFMN6GNxL7jaBnG0LVg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- '@swc/html-win32-arm64-msvc@1.13.5':
- resolution: {integrity: sha512-aLZvyEhzM6e7E53jelEp9ob/CrZ4K0atmsq+ctsaki8PNOu8shM03CEK1yQNCdZLR1kKkUgytyUVMEbhqz+IQQ==}
+ '@swc/html-win32-arm64-msvc@1.13.21':
+ resolution: {integrity: sha512-Sh9saR4dw7CW2A7q6T2Z0wG8yujxoX8NfKxG2KmK9iB//SHh04SMjMvma5+XZDL98oaRRQrdm8bJ7eQ0BbD/4Q==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
- '@swc/html-win32-ia32-msvc@1.13.5':
- resolution: {integrity: sha512-51QXTdKMmgRriRmTzH0gkeyHLY4knJdAKEY1kPTBeguXCjgLIUX2nMQd24oe9ovJfPce0NCOmCSrODri8PiduQ==}
+ '@swc/html-win32-ia32-msvc@1.13.21':
+ resolution: {integrity: sha512-hA3YvHvkT0BqxBzP4Rbo8gp3Nw0pj786aILxCY2uorQvR62olk0Vaw/HxAQdzJlHpGD2pdYwPuSgpbxF3MJ+vA==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
- '@swc/html-win32-x64-msvc@1.13.5':
- resolution: {integrity: sha512-MnU1fMNZijEKkKTp12SKbNuH7rglgHhXSFZr+zjDhQmtVPEF4goCrBfoY8ZJ4j9FjOGyodFcYH6ulz95l9/QwQ==}
+ '@swc/html-win32-x64-msvc@1.13.21':
+ resolution: {integrity: sha512-rrLCvIJkVKoisS8MhYny5PDt932xeAl67S1BRLEZreDCSF8hMxYRDhY8REqYtWKALeRBO3mHnMGigunh9s+MtQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
- '@swc/html@1.13.5':
- resolution: {integrity: sha512-eVAyb3kk6wltz4FnWNRL06iYnqkQuTfpe5Fin9oLLmcpIYr2DgHcrGgeDJF4vJc9YZwACvEYmV8DC+1NfdzAJQ==}
+ '@swc/html@1.13.21':
+ resolution: {integrity: sha512-b5TDwhEKQfpPJDU8uA5/0nnd7BryFMRnwva2tD8WkBZe7C2cZ1kaXFJkoMhDaWNwyRA0QHc8tKcpxLiGto+FGQ==}
engines: {node: '>=14'}
'@swc/types@0.1.25':
@@ -4187,65 +4301,65 @@ packages:
resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
engines: {node: '>=14.16'}
- '@tailwindcss/node@4.1.13':
- resolution: {integrity: sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==}
+ '@tailwindcss/node@4.1.16':
+ resolution: {integrity: sha512-BX5iaSsloNuvKNHRN3k2RcCuTEgASTo77mofW0vmeHkfrDWaoFAFvNHpEgtu0eqyypcyiBkDWzSMxJhp3AUVcw==}
- '@tailwindcss/oxide-android-arm64@4.1.13':
- resolution: {integrity: sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==}
+ '@tailwindcss/oxide-android-arm64@4.1.16':
+ resolution: {integrity: sha512-8+ctzkjHgwDJ5caq9IqRSgsP70xhdhJvm+oueS/yhD5ixLhqTw9fSL1OurzMUhBwE5zK26FXLCz2f/RtkISqHA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [android]
- '@tailwindcss/oxide-darwin-arm64@4.1.13':
- resolution: {integrity: sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==}
+ '@tailwindcss/oxide-darwin-arm64@4.1.16':
+ resolution: {integrity: sha512-C3oZy5042v2FOALBZtY0JTDnGNdS6w7DxL/odvSny17ORUnaRKhyTse8xYi3yKGyfnTUOdavRCdmc8QqJYwFKA==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [darwin]
- '@tailwindcss/oxide-darwin-x64@4.1.13':
- resolution: {integrity: sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==}
+ '@tailwindcss/oxide-darwin-x64@4.1.16':
+ resolution: {integrity: sha512-vjrl/1Ub9+JwU6BP0emgipGjowzYZMjbWCDqwA2Z4vCa+HBSpP4v6U2ddejcHsolsYxwL5r4bPNoamlV0xDdLg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [darwin]
- '@tailwindcss/oxide-freebsd-x64@4.1.13':
- resolution: {integrity: sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==}
+ '@tailwindcss/oxide-freebsd-x64@4.1.16':
+ resolution: {integrity: sha512-TSMpPYpQLm+aR1wW5rKuUuEruc/oOX3C7H0BTnPDn7W/eMw8W+MRMpiypKMkXZfwH8wqPIRKppuZoedTtNj2tg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [freebsd]
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13':
- resolution: {integrity: sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==}
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16':
+ resolution: {integrity: sha512-p0GGfRg/w0sdsFKBjMYvvKIiKy/LNWLWgV/plR4lUgrsxFAoQBFrXkZ4C0w8IOXfslB9vHK/JGASWD2IefIpvw==}
engines: {node: '>= 10'}
cpu: [arm]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.13':
- resolution: {integrity: sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==}
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.16':
+ resolution: {integrity: sha512-DoixyMmTNO19rwRPdqviTrG1rYzpxgyYJl8RgQvdAQUzxC1ToLRqtNJpU/ATURSKgIg6uerPw2feW0aS8SNr/w==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tailwindcss/oxide-linux-arm64-musl@4.1.13':
- resolution: {integrity: sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==}
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.16':
+ resolution: {integrity: sha512-H81UXMa9hJhWhaAUca6bU2wm5RRFpuHImrwXBUvPbYb+3jo32I9VIwpOX6hms0fPmA6f2pGVlybO6qU8pF4fzQ==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
- '@tailwindcss/oxide-linux-x64-gnu@4.1.13':
- resolution: {integrity: sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==}
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.16':
+ resolution: {integrity: sha512-ZGHQxDtFC2/ruo7t99Qo2TTIvOERULPl5l0K1g0oK6b5PGqjYMga+FcY1wIUnrUxY56h28FxybtDEla+ICOyew==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tailwindcss/oxide-linux-x64-musl@4.1.13':
- resolution: {integrity: sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==}
+ '@tailwindcss/oxide-linux-x64-musl@4.1.16':
+ resolution: {integrity: sha512-Oi1tAaa0rcKf1Og9MzKeINZzMLPbhxvm7rno5/zuP1WYmpiG0bEHq4AcRUiG2165/WUzvxkW4XDYCscZWbTLZw==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
- '@tailwindcss/oxide-wasm32-wasi@4.1.13':
- resolution: {integrity: sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==}
+ '@tailwindcss/oxide-wasm32-wasi@4.1.16':
+ resolution: {integrity: sha512-B01u/b8LteGRwucIBmCQ07FVXLzImWESAIMcUU6nvFt/tYsQ6IHz8DmZ5KtvmwxD+iTYBtM1xwoGXswnlu9v0Q==}
engines: {node: '>=14.0.0'}
cpu: [wasm32]
bundledDependencies:
@@ -4256,27 +4370,27 @@ packages:
- '@emnapi/wasi-threads'
- tslib
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.13':
- resolution: {integrity: sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==}
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.16':
+ resolution: {integrity: sha512-zX+Q8sSkGj6HKRTMJXuPvOcP8XfYON24zJBRPlszcH1Np7xuHXhWn8qfFjIujVzvH3BHU+16jBXwgpl20i+v9A==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [win32]
- '@tailwindcss/oxide-win32-x64-msvc@4.1.13':
- resolution: {integrity: sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==}
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.16':
+ resolution: {integrity: sha512-m5dDFJUEejbFqP+UXVstd4W/wnxA4F61q8SoL+mqTypId2T2ZpuxosNSgowiCnLp2+Z+rivdU0AqpfgiD7yCBg==}
engines: {node: '>= 10'}
cpu: [x64]
os: [win32]
- '@tailwindcss/oxide@4.1.13':
- resolution: {integrity: sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==}
+ '@tailwindcss/oxide@4.1.16':
+ resolution: {integrity: sha512-2OSv52FRuhdlgyOQqgtQHuCgXnS8nFSYRp2tJ+4WZXKgTxqPy7SMSls8c3mPT5pkZ17SBToGM5LHEJBO7miEdg==}
engines: {node: '>= 10'}
- '@tailwindcss/postcss@4.1.13':
- resolution: {integrity: sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==}
+ '@tailwindcss/postcss@4.1.16':
+ resolution: {integrity: sha512-Qn3SFGPXYQMKR/UtqS+dqvPrzEeBZHrFA92maT4zijCVggdsXnDBMsPFJo1eArX3J+O+Gi+8pV4PkqjLCNBk3A==}
- '@tailwindcss/vite@4.1.13':
- resolution: {integrity: sha512-0PmqLQ010N58SbMTJ7BVJ4I2xopiQn/5i6nlb4JmxzQf8zcS5+m2Cv6tqh+sfDwtIdjoEnOvwsGQ1hkUi8QEHQ==}
+ '@tailwindcss/vite@4.1.16':
+ resolution: {integrity: sha512-bbguNBcDxsRmi9nnlWJxhfDWamY3lmcyACHcdO1crxfzuLpOhHLLtEIN/nCbbAtj5rchUgQD17QVAKi1f7IsKg==}
peerDependencies:
vite: ^5.2.0 || ^6 || ^7
@@ -4659,8 +4773,8 @@ packages:
'@types/cacheable-request@6.0.3':
resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
- '@types/chai@5.2.2':
- resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
'@types/connect-history-api-fallback@1.5.4':
resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==}
@@ -4716,14 +4830,11 @@ packages:
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
- '@types/express-serve-static-core@4.19.6':
- resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==}
-
- '@types/express-serve-static-core@5.0.7':
- resolution: {integrity: sha512-R+33OsgWw7rOhD1emjU7dzCDHucJrgJXMA5PYCzJxVil0dsyx5iBEPHqpPfiKNJQb7lZ1vxwoLR4Z87bBUpeGQ==}
+ '@types/express-serve-static-core@4.19.7':
+ resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==}
- '@types/express@4.17.23':
- resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==}
+ '@types/express@4.17.24':
+ resolution: {integrity: sha512-Mbrt4SRlXSTWryOnHAh2d4UQ/E7n9lZyGSi6KgX+4hkuL9soYbLOVXVhnk/ODp12YsGc95f4pOvqywJ6kngUwg==}
'@types/geojson-vt@3.2.5':
resolution: {integrity: sha512-qDO7wqtprzlpe8FfQ//ClPV9xiuoh2nkIgiouIptON9w5jvD/fA4szvP9GBlDVdJ5dldAl0kX/sy3URbWwLx0g==}
@@ -4749,8 +4860,8 @@ packages:
'@types/http-errors@2.0.5':
resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
- '@types/http-proxy@1.17.16':
- resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==}
+ '@types/http-proxy@1.17.17':
+ resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==}
'@types/istanbul-lib-coverage@2.0.6':
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
@@ -4779,8 +4890,8 @@ packages:
'@types/mapbox__geojson-extent@1.0.3':
resolution: {integrity: sha512-i7r+3Iencd5PMleZmIRciaN8ntaGvwPA2sHts50YFrZeH9FIJFAjK64HgDaqzrtecmPbMvIltQuwuEbEQfoUJA==}
- '@types/mapbox__mapbox-gl-geocoder@5.0.0':
- resolution: {integrity: sha512-eGBWdFiP2QgmwndPyhwK6eBeOfyB8vRscp2C6Acqasx5dH8FvTo/VgXWCrCKFR3zkWek/H4w4/CwmBFOs7OLBA==}
+ '@types/mapbox__mapbox-gl-geocoder@5.1.0':
+ resolution: {integrity: sha512-5zN8sQstmoHcFpaJn6+b7hJDigRf5sso+fuba2DrZbNHk/+vOHHo9t7IjoaDuRPkfRR7Qs4IzFfHczpJ9S6Fiw==}
'@types/mapbox__point-geometry@0.1.4':
resolution: {integrity: sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==}
@@ -4812,8 +4923,8 @@ packages:
'@types/node@17.0.45':
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
- '@types/node@24.5.2':
- resolution: {integrity: sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==}
+ '@types/node@24.9.1':
+ resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -4839,10 +4950,10 @@ packages:
'@types/rbush@4.0.0':
resolution: {integrity: sha512-+N+2H39P8X+Hy1I5mC6awlTX54k3FhiUmvt7HWzGJZvF+syUAAxP/stwppS8JE84YHqFgRMv6fCy31202CMFxQ==}
- '@types/react-dom@19.1.9':
- resolution: {integrity: sha512-qXRuZaOsAdXKFyOhRBg6Lqqc0yay13vN7KrIg4L7N4aaHN68ma9OK3NE1BoDFgFOTfM7zg+3/8+2n8rLUH3OKQ==}
+ '@types/react-dom@19.2.2':
+ resolution: {integrity: sha512-9KQPoO6mZCi7jcIStSnlOWn2nEF3mNmyr3rIAsGnAbQKYbRLyqmeSc39EVgtxXVia+LMT8j3knZLAZAh+xLmrw==}
peerDependencies:
- '@types/react': ^19.0.0
+ '@types/react': ^19.2.0
'@types/react-map-gl@6.1.7':
resolution: {integrity: sha512-szkfkWd3FbySDkxyn0MDj9yzD8XYk+RIi4od6sGb3lVHNBGcW20G2v2vcq2N5k18UYAdqAoKGSYuHkGV4JOCrA==}
@@ -4856,8 +4967,8 @@ packages:
'@types/react-router@5.1.20':
resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==}
- '@types/react@19.1.13':
- resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==}
+ '@types/react@19.2.2':
+ resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==}
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
@@ -4865,20 +4976,23 @@ packages:
'@types/responselike@1.0.3':
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
- '@types/retry@0.12.0':
- resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
+ '@types/retry@0.12.2':
+ resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==}
'@types/sax@1.2.7':
resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==}
- '@types/send@0.17.5':
- resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==}
+ '@types/send@0.17.6':
+ resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
+
+ '@types/send@1.2.1':
+ resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
'@types/serve-index@1.9.4':
resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==}
- '@types/serve-static@1.15.8':
- resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==}
+ '@types/serve-static@1.15.10':
+ resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==}
'@types/shimmer@1.2.0':
resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==}
@@ -4910,14 +5024,18 @@ packages:
'@types/yargs-parser@21.0.3':
resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
- '@types/yargs@17.0.33':
- resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
+ '@types/yargs@17.0.34':
+ resolution: {integrity: sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==}
'@ungap/structured-clone@1.3.0':
resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
- '@vis.gl/react-mapbox@8.0.4':
- resolution: {integrity: sha512-NFk0vsWcNzSs0YCsVdt2100Zli9QWR+pje8DacpLkkGEAXFaJsFtI1oKD0Hatiate4/iAIW39SQHhgfhbeEPfQ==}
+ '@vercel/oidc@3.0.3':
+ resolution: {integrity: sha512-yNEQvPcVrK9sIe637+I0jD6leluPxzwJKx/Haw6F4H77CdDsszUn5V3o96LPziXkSNE2B83+Z3mjqGKBK/R6Gg==}
+ engines: {node: '>= 20'}
+
+ '@vis.gl/react-mapbox@8.1.0':
+ resolution: {integrity: sha512-FwvH822oxEjWYOr+pP2L8hpv+7cZB2UsQbHHHT0ryrkvvqzmTgt7qHDhamv0EobKw86e1I+B4ojENdJ5G5BkyQ==}
peerDependencies:
mapbox-gl: '>=3.5.0'
react: '>=16.3.0'
@@ -4926,8 +5044,8 @@ packages:
mapbox-gl:
optional: true
- '@vis.gl/react-maplibre@8.0.4':
- resolution: {integrity: sha512-HwZyfLjEu+y1mUFvwDAkVxinGm8fEegaWN+O8np/WZ2Sqe5Lv6OXFpV6GWz9LOEvBYMbGuGk1FQdejo+4HCJ5w==}
+ '@vis.gl/react-maplibre@8.1.0':
+ resolution: {integrity: sha512-PkAK/gp3mUfhCLhUuc+4gc3PN9zCtVGxTF2hB6R5R5yYUw+hdg84OZ770U5MU4tPMTCG6fbduExuIW6RRKN6qQ==}
peerDependencies:
maplibre-gl: '>=4.0.0'
react: '>=16.3.0'
@@ -4936,13 +5054,6 @@ packages:
maplibre-gl:
optional: true
- '@vitejs/plugin-rsc@0.4.11':
- resolution: {integrity: sha512-+4H4wLi+Y9yF58znBfKgGfX8zcqUGt8ngnmNgzrdGdF1SVz7EO0sg7WnhK5fFVHt6fUxsVEjmEabsCWHKPL1Tw==}
- peerDependencies:
- react: '*'
- react-dom: '*'
- vite: '*'
-
'@vitest/coverage-v8@3.2.4':
resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==}
peerDependencies:
@@ -5073,6 +5184,12 @@ packages:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
engines: {node: '>=8'}
+ ai@5.0.78:
+ resolution: {integrity: sha512-ec77fmQwJGLduswMrW4AAUGSOiu8dZaIwMmWHHGKsrMUFFS6ugfkTyx0srtuKYHNRRLRC2dT7cPirnUl98VnxA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ zod: ^3.25.76 || ^4.1.8
+
ajv-formats@2.1.1:
resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==}
peerDependencies:
@@ -5102,8 +5219,8 @@ packages:
peerDependencies:
algoliasearch: '>= 3.1 < 6'
- algoliasearch@5.37.0:
- resolution: {integrity: sha512-y7gau/ZOQDqoInTQp0IwTOjkrHc4Aq4R8JgpmCleFwiLl+PbN2DMWoDUWZnrK8AhNJwT++dn28Bt4NZYNLAmuA==}
+ algoliasearch@5.41.0:
+ resolution: {integrity: sha512-9E4b3rJmYbBkn7e3aAPt1as+VVnRhsR4qwRRgOzpeyz4PAOuwKh0HI4AN6mTrqK0S0M9fCCSTOUnuJ8gPY/tvA==}
engines: {node: '>= 14.0.0'}
ansi-align@3.0.1:
@@ -5190,8 +5307,8 @@ packages:
resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==}
engines: {node: '>=0.10.0'}
- ast-v8-to-istanbul@0.3.5:
- resolution: {integrity: sha512-9SdXjNheSiE8bALAQCQQuT6fgQaoxJh7IRYrRGZ8/9nv8WhJeC1aXAwN8TbaOssGOukUvyvnkgD9+Yuykvl1aA==}
+ ast-v8-to-istanbul@0.3.8:
+ resolution: {integrity: sha512-szgSZqUxI5T8mLKvS7WTjF9is+MVbOeLADU73IseOcrqhxr/VAvy6wfoVE39KnKzA7JRhjF5eUagNlHwvZPlKQ==}
astring@1.9.0:
resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
@@ -5255,8 +5372,8 @@ packages:
base-64@0.1.0:
resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==}
- baseline-browser-mapping@2.8.5:
- resolution: {integrity: sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==}
+ baseline-browser-mapping@2.8.20:
+ resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==}
hasBin: true
basic-auth@2.0.1:
@@ -5266,17 +5383,34 @@ packages:
batch@0.6.1:
resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
- better-auth@1.3.5:
- resolution: {integrity: sha512-jo4WTqvco7vjWNodxZyKVky9i6A7RqOb2DgS4uKwIAVucrXDv5OPxnoNE2iuEMD4Bm6l2UHRqYeqnsvsi2F23g==}
+ better-auth@1.3.29:
+ resolution: {integrity: sha512-1va1XZLTQme3DX33PgHqwwVyOJya5H0+ozT6BhOjTnwecC50I75F0OqqTwINq4XZ0+GuD3bl3I55RiFP49jStw==}
peerDependencies:
- react: ^18.0.0 || ^19.0.0
- react-dom: ^18.0.0 || ^19.0.0
- zod: ^3.25.0 || ^4.0.0
+ '@lynx-js/react': '*'
+ '@sveltejs/kit': '*'
+ next: '*'
+ react: '*'
+ react-dom: '*'
+ solid-js: '*'
+ svelte: '*'
+ vue: '*'
peerDependenciesMeta:
+ '@lynx-js/react':
+ optional: true
+ '@sveltejs/kit':
+ optional: true
+ next:
+ optional: true
react:
optional: true
react-dom:
optional: true
+ solid-js:
+ optional: true
+ svelte:
+ optional: true
+ vue:
+ optional: true
better-call@1.0.19:
resolution: {integrity: sha512-sI3GcA1SCVa3H+CDHl8W8qzhlrckwXOTKhqq3OOPXjgn5aTOMIqGY34zLY/pHA6tRRMjTUC3lz5Mi7EbDA24Kw==}
@@ -5323,14 +5457,18 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.26.2:
- resolution: {integrity: sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==}
+ browserslist@4.27.0:
+ resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+
but-unzip@0.1.7:
resolution: {integrity: sha512-fGmYleG7dAYaoqMVZCoM6zjSeaIYNlyVreUVyUkVPtPLRTbKq8J8KdNnyqMaiLqun7P9bBuSMeqJs0YxN86GJA==}
@@ -5406,8 +5544,8 @@ packages:
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
- caniuse-lite@1.0.30001743:
- resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==}
+ caniuse-lite@1.0.30001751:
+ resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==}
ccount@2.0.1:
resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
@@ -5465,10 +5603,6 @@ packages:
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
engines: {node: '>= 14.16.0'}
- chownr@3.0.0:
- resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
- engines: {node: '>=18'}
-
chrome-trace-event@1.0.4:
resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
engines: {node: '>=6.0'}
@@ -5627,24 +5761,20 @@ packages:
resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==}
engines: {node: '>=18'}
- copy-text-to-clipboard@3.2.1:
- resolution: {integrity: sha512-3am6cw+WOicd0+HyzhC4kYS02wHJUiVQXmAADxfUARKsHBkWl1Vl3QQEiILlSs8YcPS/C0+y/urCNEYQk+byWA==}
- engines: {node: '>=12'}
-
copy-webpack-plugin@11.0.0:
resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==}
engines: {node: '>= 14.15.0'}
peerDependencies:
webpack: ^5.1.0
- core-js-compat@3.45.1:
- resolution: {integrity: sha512-tqTt5T4PzsMIZ430XGviK4vzYSoeNJ6CXODi6c/voxOT6IZqBht5/EKaSNnYiEjjRYxjVz7DQIsOsY0XNi8PIA==}
+ core-js-compat@3.46.0:
+ resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==}
- core-js-pure@3.45.1:
- resolution: {integrity: sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==}
+ core-js-pure@3.46.0:
+ resolution: {integrity: sha512-NMCW30bHNofuhwLhYPt66OLOKTMbOhgTTatKVbaQC3KRHpTCiRIBYvtshr+NBYSnBxwAFhjW/RfJ0XbIjS16rw==}
- core-js@3.45.1:
- resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==}
+ core-js@3.46.0:
+ resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==}
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
@@ -5672,8 +5802,8 @@ packages:
peerDependencies:
postcss: ^8.4
- css-declaration-sorter@7.2.0:
- resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
+ css-declaration-sorter@7.3.0:
+ resolution: {integrity: sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.0.9
@@ -5748,8 +5878,8 @@ packages:
csscolorparser@1.0.3:
resolution: {integrity: sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==}
- cssdb@8.4.0:
- resolution: {integrity: sha512-lyATYGyvXwQ8h55WeQeEHXhI+47rl52pXSYkFK/ZrCbAJSgVIaPFjYc3RM8TpRHKk7W3wsAZImmLps+P5VyN9g==}
+ cssdb@8.4.2:
+ resolution: {integrity: sha512-PzjkRkRUS+IHDJohtxkIczlxPPZqRo0nXplsYXOMBRPjcVRjj1W4DfvRgshUYTVuUigU7ptVYkFJQ7abUB0nyg==}
cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
@@ -5919,9 +6049,13 @@ packages:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
- default-gateway@6.0.3:
- resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==}
- engines: {node: '>= 10'}
+ default-browser-id@5.0.0:
+ resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==}
+ engines: {node: '>=18'}
+
+ default-browser@5.2.1:
+ resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==}
+ engines: {node: '>=18'}
defer-to-connect@2.0.1:
resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
@@ -5935,6 +6069,10 @@ packages:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
engines: {node: '>=8'}
+ define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+
define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
engines: {node: '>= 0.4'}
@@ -5966,8 +6104,8 @@ packages:
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
engines: {node: '>=8'}
- detect-libc@2.1.0:
- resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==}
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
engines: {node: '>=8'}
detect-node-es@1.1.0:
@@ -6037,16 +6175,16 @@ packages:
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
engines: {node: '>=12'}
- dotenv@17.2.2:
- resolution: {integrity: sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==}
+ dotenv@17.2.3:
+ resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
engines: {node: '>=12'}
- drizzle-kit@0.31.4:
- resolution: {integrity: sha512-tCPWVZWZqWVx2XUsVpJRnH9Mx0ClVOf5YUHerZ5so1OKSlqww4zy1R5ksEdGRcO3tM3zj0PYN6V48TbQCL1RfA==}
+ drizzle-kit@0.31.5:
+ resolution: {integrity: sha512-+CHgPFzuoTQTt7cOYCV6MOw2w8vqEn/ap1yv4bpZOWL03u7rlVRQhUY0WYT3rHsgVTXwYQDZaSUJSQrMBUKuWg==}
hasBin: true
- drizzle-orm@0.44.4:
- resolution: {integrity: sha512-ZyzKFpTC/Ut3fIqc2c0dPZ6nhchQXriTsqTNs4ayRgl6sZcFlMs9QZKPSHXK4bdOf41GHGWf+FrpcDDYwW+W6Q==}
+ drizzle-orm@0.44.7:
+ resolution: {integrity: sha512-quIpnYznjU9lHshEOAYLoZ9s3jweleHlZIAWR/jX9gAWNg/JhQ1wj0KGRf7/Zm+obRrYd9GjPVJg790QY9N5AQ==}
peerDependencies:
'@aws-sdk/client-rds-data': '>=3'
'@cloudflare/workers-types': '>=4'
@@ -6153,15 +6291,15 @@ packages:
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
- eciesjs@0.4.15:
- resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==}
+ eciesjs@0.4.16:
+ resolution: {integrity: sha512-dS5cbA9rA2VR4Ybuvhg6jvdmp46ubLn3E+px8cG/35aEDNclrqoCjg6mt0HYZ/M+OoESS3jSkCrqk1kWAEhWAw==}
engines: {bun: '>=1', deno: '>=2', node: '>=16'}
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.221:
- resolution: {integrity: sha512-/1hFJ39wkW01ogqSyYoA4goOXOtMRy6B+yvA1u42nnsEGtHzIzmk93aPISumVQeblj47JUHLC9coCjUxb1EvtQ==}
+ electron-to-chromium@1.5.240:
+ resolution: {integrity: sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -6258,8 +6396,8 @@ packages:
engines: {node: '>=12'}
hasBin: true
- esbuild@0.25.10:
- resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==}
+ esbuild@0.25.11:
+ resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==}
engines: {node: '>=18'}
hasBin: true
@@ -6322,8 +6460,8 @@ packages:
estree-util-to-js@2.0.0:
resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
- estree-util-value-to-estree@3.4.0:
- resolution: {integrity: sha512-Zlp+gxis+gCfK12d3Srl2PdX2ybsEA8ZYy6vQGVQTNNYLEGRQQ56XB64bjemN8kxIKXP1nC9ip4Z+ILy9LGzvQ==}
+ estree-util-value-to-estree@3.5.0:
+ resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==}
estree-util-visit@2.0.0:
resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
@@ -6360,6 +6498,10 @@ packages:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
+ eventsource-parser@3.0.6:
+ resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==}
+ engines: {node: '>=18.0.0'}
+
execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@@ -6396,8 +6538,8 @@ packages:
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
- fast-equals@5.2.2:
- resolution: {integrity: sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==}
+ fast-equals@5.3.2:
+ resolution: {integrity: sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==}
engines: {node: '>=6.0.0'}
fast-glob@3.3.3:
@@ -6484,8 +6626,8 @@ packages:
flatbuffers@24.12.23:
resolution: {integrity: sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA==}
- flatgeobuf@4.2.0:
- resolution: {integrity: sha512-Uauls7eBIxttVEZYMMuUF23SBjXgC3t/QZWCDEEbF2tXu8R/ozChcnOe15tWo9S+NA3r/McNSDGcgasF/IRMQQ==}
+ flatgeobuf@4.3.1:
+ resolution: {integrity: sha512-KWOMr70S4n8ZyNOHhOf9lDp+GI2dOgPtSXnsKpQT0QZGF60THyvH1n1hivSjo/JGFMJemxycqC82AWnEh5fIDQ==}
follow-redirects@1.15.11:
resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
@@ -6530,8 +6672,8 @@ packages:
fraction.js@4.3.7:
resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
- framer-motion@12.23.14:
- resolution: {integrity: sha512-8BQ6dvqOht2w8P1CwIEvAA0gypDR3fNG/M6/f5lT0QgNIKnJf7J43Bpv++NnCWU8YfmL47UEm2hbI0GRvdVhsQ==}
+ framer-motion@12.23.24:
+ resolution: {integrity: sha512-HMi5HRoRCTou+3fb3h9oTLyJGBxHfW+HnNE25tAXOvVx/IvwMHK0cx7IR4a2ZU6sh3IX1Z+4ts32PcYBOqka8w==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -6560,9 +6702,6 @@ packages:
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
engines: {node: '>=6 <7 || >=8'}
- fs-monkey@1.1.0:
- resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==}
-
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -6588,6 +6727,10 @@ packages:
fuzzysort@3.1.0:
resolution: {integrity: sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==}
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
@@ -6639,8 +6782,8 @@ packages:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
- get-tsconfig@4.10.1:
- resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==}
+ get-tsconfig@4.13.0:
+ resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
get-value@2.0.6:
resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==}
@@ -6660,6 +6803,12 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob-to-regex.js@1.2.0:
+ resolution: {integrity: sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
@@ -6672,10 +6821,6 @@ packages:
engines: {node: 20 || >=22}
hasBin: true
- glob@7.2.3:
- resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
- deprecated: Glob versions prior to v9 are no longer supported
-
glob@9.3.5:
resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -6818,9 +6963,6 @@ packages:
hpack.js@2.1.6:
resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==}
- html-entities@2.6.0:
- resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
-
html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
@@ -6908,14 +7050,18 @@ packages:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
engines: {node: '>= 6'}
- human-id@4.1.1:
- resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==}
+ human-id@4.1.2:
+ resolution: {integrity: sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==}
hasBin: true
human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
+ hyperdyperid@1.2.0:
+ resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==}
+ engines: {node: '>=10.18'}
+
iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -6946,8 +7092,8 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
- import-in-the-middle@1.14.2:
- resolution: {integrity: sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==}
+ import-in-the-middle@1.15.0:
+ resolution: {integrity: sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==}
import-lazy@4.0.0:
resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
@@ -6965,10 +7111,6 @@ packages:
resolution: {integrity: sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==}
engines: {node: '>=12'}
- inflight@1.0.6:
- resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
- deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
-
inherits@2.0.3:
resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
@@ -7061,6 +7203,11 @@ packages:
engines: {node: '>=8'}
hasBin: true
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
is-extendable@0.1.1:
resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
engines: {node: '>=0.10.0'}
@@ -7081,8 +7228,8 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-generator-function@1.1.0:
- resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
engines: {node: '>= 0.4'}
is-glob@4.0.3:
@@ -7092,6 +7239,11 @@ packages:
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+
is-installed-globally@0.4.0:
resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
engines: {node: '>=10'}
@@ -7107,6 +7259,10 @@ packages:
resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
engines: {node: '>= 0.4'}
+ is-network-error@1.3.0:
+ resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==}
+ engines: {node: '>=16'}
+
is-npm@6.1.0:
resolution: {integrity: sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -7150,9 +7306,6 @@ packages:
is-reference@1.2.1:
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
- is-reference@3.0.3:
- resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==}
-
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
@@ -7212,6 +7365,10 @@ packages:
resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
engines: {node: '>=8'}
+ is-wsl@3.1.0:
+ resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+ engines: {node: '>=16'}
+
is-yarn-global@0.4.1:
resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==}
engines: {node: '>=12'}
@@ -7225,8 +7382,8 @@ packages:
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
- isbot@5.1.30:
- resolution: {integrity: sha512-3wVJEonAns1OETX83uWsk5IAne2S5zfDcntD2hbtU23LelSqNXzXs9zKjMPOLMzroCgIjCfjYAEHrd2D6FOkiA==}
+ isbot@5.1.31:
+ resolution: {integrity: sha512-DPgQshehErHAqSCKDb3rNW03pa2wS/v5evvUqtxt6TTnHRqAG8FdzcSSJs9656pK6Y+NT7K9R4acEYXLHYfpUQ==}
engines: {node: '>=18'}
isexe@2.0.0:
@@ -7279,15 +7436,15 @@ packages:
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
hasBin: true
- jiti@2.5.1:
- resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
joi@17.13.3:
resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
- jose@5.10.0:
- resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==}
+ jose@6.1.0:
+ resolution: {integrity: sha512-TTQJyoEoKcC1lscpVDCSsVgYzUDg/0Bt3WE//WiTPK6uOCQC2KZS4MpugbMWt/zyjkopgZoXhZuCi00gLudfUA==}
js-tokens@4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -7308,6 +7465,11 @@ packages:
engines: {node: '>=6'}
hasBin: true
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@@ -7324,6 +7486,9 @@ packages:
json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ json-schema@0.4.0:
+ resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+
json-stringify-pretty-compact@3.0.0:
resolution: {integrity: sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==}
@@ -7356,8 +7521,8 @@ packages:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
engines: {node: '>=6'}
- kysely@0.28.7:
- resolution: {integrity: sha512-u/cAuTL4DRIiO2/g4vNGRgklEKNIj5Q3CG7RoUB5DV5SfEC2hMvPxKi0GWPmnzwL2ryIeud2VTcEEmqzTzEPNw==}
+ kysely@0.28.8:
+ resolution: {integrity: sha512-QUOgl5ZrS9IRuhq5FvOKFSsD/3+IA6MLE81/bOOTRA/YQpKDza2sFdN5g6JCB9BOpqMJDGefLCQ9F12hRS13TA==}
engines: {node: '>=20.0.0'}
latest-version@7.0.0:
@@ -7377,68 +7542,74 @@ packages:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
engines: {node: '>=6'}
- lightningcss-darwin-arm64@1.30.1:
- resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
+ lightningcss-android-arm64@1.30.2:
+ resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.30.2:
+ resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [darwin]
- lightningcss-darwin-x64@1.30.1:
- resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
+ lightningcss-darwin-x64@1.30.2:
+ resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [darwin]
- lightningcss-freebsd-x64@1.30.1:
- resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
+ lightningcss-freebsd-x64@1.30.2:
+ resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [freebsd]
- lightningcss-linux-arm-gnueabihf@1.30.1:
- resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
+ lightningcss-linux-arm-gnueabihf@1.30.2:
+ resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==}
engines: {node: '>= 12.0.0'}
cpu: [arm]
os: [linux]
- lightningcss-linux-arm64-gnu@1.30.1:
- resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
+ lightningcss-linux-arm64-gnu@1.30.2:
+ resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
- lightningcss-linux-arm64-musl@1.30.1:
- resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
+ lightningcss-linux-arm64-musl@1.30.2:
+ resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
- lightningcss-linux-x64-gnu@1.30.1:
- resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
+ lightningcss-linux-x64-gnu@1.30.2:
+ resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
- lightningcss-linux-x64-musl@1.30.1:
- resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
+ lightningcss-linux-x64-musl@1.30.2:
+ resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
- lightningcss-win32-arm64-msvc@1.30.1:
- resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
+ lightningcss-win32-arm64-msvc@1.30.2:
+ resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [win32]
- lightningcss-win32-x64-msvc@1.30.1:
- resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
+ lightningcss-win32-x64-msvc@1.30.2:
+ resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [win32]
- lightningcss@1.30.1:
- resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
+ lightningcss@1.30.2:
+ resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==}
engines: {node: '>= 12.0.0'}
lilconfig@3.1.3:
@@ -7451,8 +7622,8 @@ packages:
linkify-it@5.0.0:
resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
- loader-runner@4.3.0:
- resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
+ loader-runner@4.3.1:
+ resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
engines: {node: '>=6.11.5'}
loader-utils@2.0.4:
@@ -7513,8 +7684,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
- lru-cache@11.2.1:
- resolution: {integrity: sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==}
+ lru-cache@11.2.2:
+ resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
engines: {node: 20 || >=22}
lru-cache@5.1.1:
@@ -7528,16 +7699,16 @@ packages:
resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
engines: {node: '>=12'}
- lucide-react@0.544.0:
- resolution: {integrity: sha512-t5tS44bqd825zAW45UQxpG2CvcC4urOwn2TrwSH8u+MjeE+1NnWl6QqeQ/6NdjMqdOygyiT9p3Ev0p1NJykxjw==}
+ lucide-react@0.545.0:
+ resolution: {integrity: sha512-7r1/yUuflQDSt4f1bpn5ZAocyIxcTyVyBBChSVtBKn5M+392cPmI5YJMWOJKk/HUWGm5wg83chlAZtCcGbEZtw==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
lunr@2.3.9:
resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==}
- magic-string@0.30.19:
- resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
magic-string@0.30.8:
resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==}
@@ -7558,8 +7729,8 @@ packages:
resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
engines: {node: '>=8'}
- mapbox-gl@3.15.0:
- resolution: {integrity: sha512-I42ffZpiXwt0PG3PO6gMYQnoz+AInkirLe/+zoHjcfBTFoFkKYtu5gFwT1WGeSvNrVTqG2Bwp9zUjPw0PFGY+w==}
+ mapbox-gl@3.16.0:
+ resolution: {integrity: sha512-rluV1Zp/0oHf1Y9BV+nePRNnKyTdljko3E19CzO5rBqtQaNUYS0ePCMPRtxOuWRwSdKp3f9NWJkOCjemM8nmjw==}
marchingsquares@1.3.3:
resolution: {integrity: sha512-gz6nNQoVK7Lkh2pZulrT4qd4347S/toG9RXH2pyzhLgkL5mLkBoqgv4EvAGXcV0ikDW72n/OQb3Xe8bGagQZCg==}
@@ -7578,9 +7749,14 @@ packages:
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
- marked@7.0.4:
- resolution: {integrity: sha512-t8eP0dXRJMtMvBojtkcsA7n48BkauktUKzfkPSCq85ZMTJ0v76Rke4DYz01omYpPTUh4p/f7HePgRo3ebG8+QQ==}
- engines: {node: '>= 16'}
+ marked@15.0.12:
+ resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==}
+ engines: {node: '>= 18'}
+ hasBin: true
+
+ marked@16.4.1:
+ resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==}
+ engines: {node: '>= 20'}
hasBin: true
martinez-polygon-clipping@0.7.4:
@@ -7590,11 +7766,6 @@ packages:
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
engines: {node: '>= 0.4'}
- md-to-react-email@5.0.5:
- resolution: {integrity: sha512-OvAXqwq57uOk+WZqFFNCMZz8yDp8BD3WazW1wAKHUrPbbdr89K9DWS6JXY09vd9xNdPNeurI8DU/X4flcfaD8A==}
- peerDependencies:
- react: ^18.0 || ^19.0
-
mdast-util-directive@3.1.0:
resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==}
@@ -7662,9 +7833,8 @@ packages:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
- memfs@3.5.3:
- resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
- engines: {node: '>= 4.0.0'}
+ memfs@4.49.0:
+ resolution: {integrity: sha512-L9uC9vGuc4xFybbdOpRLoOAOq1YEBBsocCs5NVW32DfU+CZWWIn3OVF+lB8Gp4ttBVSMazwrTrjv8ussX/e3VQ==}
meow@9.0.0:
resolution: {integrity: sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==}
@@ -7834,6 +8004,10 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime-types@3.0.1:
+ resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
+ engines: {node: '>= 0.6'}
+
mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
@@ -7898,15 +8072,6 @@ packages:
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
engines: {node: '>=16 || 14 >=14.17'}
- minizlib@3.0.2:
- resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
- engines: {node: '>= 18'}
-
- mkdirp@3.0.1:
- resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
- engines: {node: '>=10'}
- hasBin: true
-
module-details-from-path@1.0.4:
resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==}
@@ -7914,8 +8079,8 @@ packages:
resolution: {integrity: sha512-223dMRJtI/l25dJKWpgij2cMtywuG/WiUKXdvwfbhGKBhy1puASqXwFzmWZ7+K73vUPoR7SS2Qz2cI/g9MKw0A==}
engines: {node: '>= 0.8.0'}
- motion-dom@12.23.12:
- resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==}
+ motion-dom@12.23.23:
+ resolution: {integrity: sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==}
motion-utils@12.23.6:
resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==}
@@ -7946,14 +8111,14 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@5.1.5:
- resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==}
+ nanoid@5.1.6:
+ resolution: {integrity: sha512-c7+7RQ+dMB5dPwwCp4ee1/iV/q2P6aK1mTZcfr1BTuVlyW9hJYiMPybJCcnBlQtuSmTIWNeazm/zqNoZSSElBg==}
engines: {node: ^18 || >=20}
hasBin: true
- nanostores@0.11.4:
- resolution: {integrity: sha512-k1oiVNN4hDK8NcNERSZLQiMfRzEGtfnvZvdBvey3SQbgn8Dcrk0h1I6vpxApjb10PFUflZrgJ2WEZyJQ+5v7YQ==}
- engines: {node: ^18.0.0 || >=20.0.0}
+ nanostores@1.0.1:
+ resolution: {integrity: sha512-kNZ9xnoJYKg/AfxjrVL4SS0fKX++4awQReGqWnwTRHxeHGZ1FJFVgTqr/eMrNQdp0Tz7M7tG/TDaX8QfHDwVCw==}
+ engines: {node: ^20.0.0 || >=22.0.0}
negotiator@0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
@@ -7975,8 +8140,8 @@ packages:
no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
- node-abi@3.77.0:
- resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==}
+ node-abi@3.78.0:
+ resolution: {integrity: sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==}
engines: {node: '>=10'}
node-emoji@2.2.0:
@@ -7996,8 +8161,8 @@ packages:
resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
engines: {node: '>= 6.13.0'}
- node-releases@2.0.21:
- resolution: {integrity: sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==}
+ node-releases@2.0.26:
+ resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==}
normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
@@ -8103,6 +8268,10 @@ packages:
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
engines: {node: '>=6'}
+ open@10.2.0:
+ resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
+ engines: {node: '>=18'}
+
open@8.4.2:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
engines: {node: '>=12'}
@@ -8170,9 +8339,9 @@ packages:
resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==}
engines: {node: '>=8'}
- p-retry@4.6.2:
- resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==}
- engines: {node: '>=8'}
+ p-retry@6.2.1:
+ resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==}
+ engines: {node: '>=16.17'}
p-timeout@3.2.0:
resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
@@ -8242,10 +8411,6 @@ packages:
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- path-is-absolute@1.0.1:
- resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
- engines: {node: '>=0.10.0'}
-
path-is-inside@1.0.2:
resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==}
@@ -8294,9 +8459,6 @@ packages:
peberminta@0.9.0:
resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==}
- periscopic@4.0.2:
- resolution: {integrity: sha512-sqpQDUy8vgB7ycLkendSKS6HnVz1Rneoc3Rc+ZBUCe2pbqlVuCC5vF52l0NJ1aiMg/r1qfYF9/myz8CZeI2rjA==}
-
pg-int8@1.0.1:
resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==}
engines: {node: '>=4.0.0'}
@@ -8358,8 +8520,8 @@ packages:
peerDependencies:
postcss: ^8.4.6
- postcss-color-functional-notation@7.0.11:
- resolution: {integrity: sha512-zfqoUSaHMko/k2PA9xnaydVTHqYv5vphq5Q2AHcG/dCdv/OkHYWcVWfVTBKZ526uzT8L7NghuvSw3C9PxlKnLg==}
+ postcss-color-functional-notation@7.0.12:
+ resolution: {integrity: sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -8442,8 +8604,8 @@ packages:
peerDependencies:
postcss: ^8.4.31
- postcss-double-position-gradients@6.0.3:
- resolution: {integrity: sha512-Dl0Z9sdbMwrPslgOaGBZRGo3TASmmgTcqcUODr82MTYyJk6devXZM6MlQjpQKMJqlLJ6oL1w78U7IXFdPA5+ug==}
+ postcss-double-position-gradients@6.0.4:
+ resolution: {integrity: sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -8477,8 +8639,8 @@ packages:
peerDependencies:
postcss: ^8.4
- postcss-lab-function@7.0.11:
- resolution: {integrity: sha512-BEA4jId8uQe1gyjZZ6Bunb6ZsH2izks+v25AxQJDBtigXCjTLmCPWECwQpLTtcxH589MVxhs/9TAmRC6lUEmXQ==}
+ postcss-lab-function@7.0.12:
+ resolution: {integrity: sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -8651,8 +8813,8 @@ packages:
peerDependencies:
postcss: ^8.4
- postcss-preset-env@10.3.1:
- resolution: {integrity: sha512-8ZOOWVwQ0iMpfEYkYo+U6W7fE2dJ/tP6dtEFwPJ66eB5JjnFupfYh+y6zo+vWDO72nGhKOVdxwhTjfzcSNRg4Q==}
+ postcss-preset-env@10.4.0:
+ resolution: {integrity: sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
@@ -8751,19 +8913,11 @@ packages:
resolution: {integrity: sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==}
engines: {node: '>=12'}
- posthog-js@1.266.0:
- resolution: {integrity: sha512-437KsO9N+pMW6FtilgKYTHel0RCWs2S7PvsNRJf20/f3npChX9i6F8cNCJ6O4Az37scC1kPdTknFY/xEGazVJw==}
- peerDependencies:
- '@rrweb/types': 2.0.0-alpha.17
- rrweb-snapshot: 2.0.0-alpha.17
- peerDependenciesMeta:
- '@rrweb/types':
- optional: true
- rrweb-snapshot:
- optional: true
+ posthog-js@1.284.0:
+ resolution: {integrity: sha512-GmycRGKWdTO6gUSMn8qzzoVTryQhxVwjK2y1Mn0eV7kldLS+tZhr/wM+Z8fXBkbrRwWUjofKFgB83gd1WzbJrA==}
- posthog-node@5.8.4:
- resolution: {integrity: sha512-O0lObQqeIiggNCjc5BQx5PaHqPzXxwKnCJdb+DuNkbDO6Vc442SQ5FDv0WjPd5Ejfwme1uGZmM5/xhHWKegFfQ==}
+ posthog-node@5.11.0:
+ resolution: {integrity: sha512-9+gmWp/7AEryJMi0+/ywJjKQhpkmcjxf+eT030fTIIPvFTF84zeeagdZBGNC/Nh2Jc0grIAW6O1n5lxXiX3daA==}
engines: {node: '>=20'}
postmark@4.0.5:
@@ -8947,22 +9101,22 @@ packages:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
- react-day-picker@9.10.0:
- resolution: {integrity: sha512-tedecLSd+fpSN+J08601MaMsf122nxtqZXxB6lwX37qFoLtuPNuRJN8ylxFjLhyJS1kaLfAqL1GUkSLd2BMrpQ==}
+ react-day-picker@9.11.1:
+ resolution: {integrity: sha512-l3ub6o8NlchqIjPKrRFUCkTUEq6KwemQlfv3XZzzwpUeGwmDJ+0u0Upmt38hJyd7D/vn2dQoOoLV/qAp0o3uUw==}
engines: {node: '>=18'}
peerDependencies:
react: '>=16.8.0'
- react-dom@19.1.1:
- resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==}
+ react-dom@19.2.0:
+ resolution: {integrity: sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ==}
peerDependencies:
- react: ^19.1.1
+ react: ^19.2.0
react-fast-compare@3.2.2:
resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==}
- react-hook-form@7.62.0:
- resolution: {integrity: sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==}
+ react-hook-form@7.65.0:
+ resolution: {integrity: sha512-xtOzDz063WcXvGWaHgLNrNzlsdFgtUWcb32E6WFaGTd7kPZG3EeDusjdZfUsPwKCKVXy1ZlntifaHZ4l8pAsmw==}
engines: {node: '>=18.0.0'}
peerDependencies:
react: ^16.8.0 || ^17 || ^18 || ^19
@@ -8986,8 +9140,8 @@ packages:
react-loadable: '*'
webpack: '>=4.41.1 || 5.x'
- react-map-gl@8.0.4:
- resolution: {integrity: sha512-SHdpvFIvswsZBg6BCPcwY/nbKuCo3sJM1Cj7Sd+gA3gFRFOixD+KtZ2XSuUWq2WySL2emYEXEgrLZoXsV4Ut4Q==}
+ react-map-gl@8.1.0:
+ resolution: {integrity: sha512-vDx/QXR3Tb+8/ap/z6gdMjJQ8ZEyaZf6+uMSPz7jhWF5VZeIsKsGfPvwHVPPwGF43Ryn+YR4bd09uEFNR5OPdg==}
peerDependencies:
mapbox-gl: '>=1.13.0'
maplibre-gl: '>=1.13.0'
@@ -9043,8 +9197,8 @@ packages:
peerDependencies:
react: '>=15'
- react-router-dom@7.9.1:
- resolution: {integrity: sha512-U9WBQssBE9B1vmRjo9qTM7YRzfZ3lUxESIZnsf4VjR/lXYz9MHjvOxHzr/aUm4efpktbVOrF09rL/y4VHa8RMw==}
+ react-router-dom@7.9.4:
+ resolution: {integrity: sha512-f30P6bIkmYvnHHa5Gcu65deIXoA2+r3Eb6PJIAddvsT9aGlchMatJ51GgpU470aSqRRbFX22T70yQNUGuW3DfA==}
engines: {node: '>=20.0.0'}
peerDependencies:
react: '>=18'
@@ -9055,8 +9209,8 @@ packages:
peerDependencies:
react: '>=15'
- react-router@7.9.1:
- resolution: {integrity: sha512-pfAByjcTpX55mqSDGwGnY9vDCpxqBLASg0BMNAuMmpSGESo/TaOUG6BllhAtAkCGx8Rnohik/XtaqiYUJtgW2g==}
+ react-router@7.9.4:
+ resolution: {integrity: sha512-SD3G8HKviFHg9xj7dNODUKDFgpG4xqD5nhyd0mYoB5iISepuZAvzSr8ywxgxKJ52yRzf/HWtVHc9AWwoTbljvA==}
engines: {node: '>=20.0.0'}
peerDependencies:
react: '>=18'
@@ -9087,8 +9241,8 @@ packages:
react: '>=16.6.0'
react-dom: '>=16.6.0'
- react@19.1.1:
- resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==}
+ react@19.2.0:
+ resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==}
engines: {node: '>=0.10.0'}
read-pkg-up@7.0.1:
@@ -9164,8 +9318,8 @@ packages:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
- regexpu-core@6.3.1:
- resolution: {integrity: sha512-DzcswPr252wEr7Qz8AyAVbfyBDKLoYp6eRA1We2Fa9qirRFSdtkP5sHr3yglDKy2BbA0fd2T+j/CUSKes3FeVQ==}
+ regexpu-core@6.4.0:
+ resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==}
engines: {node: '>=4'}
registry-auth-token@5.1.0:
@@ -9179,8 +9333,8 @@ packages:
regjsgen@0.8.0:
resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
- regjsparser@0.12.0:
- resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==}
+ regjsparser@0.13.0:
+ resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
hasBin: true
rehype-raw@7.0.0:
@@ -9226,13 +9380,13 @@ packages:
react-hook-form: ^7.55.0
react-router: '>=7.5.0'
- remix-toast@3.2.0:
- resolution: {integrity: sha512-xn4XUt0IXCKulN6DQ7ctPfzYY+xpeCFacZcYLtXeikFh/yM/LtlATTb2ap68tGgmQlo0HgPe1k8XYIqHtG1hRA==}
+ remix-toast@3.3.0:
+ resolution: {integrity: sha512-fC41y9Cl9kpngkYlcUaE/qs6zxv4PLsEjrtPPyEcIh6Iw1R+vVP9F3W7vxqS4nj7xccm1WyvT/KvpoVzvWUgPQ==}
peerDependencies:
- react-router: '>=7.8.0'
+ react-router: '>=7.9.0'
- remix-utils@8.8.0:
- resolution: {integrity: sha512-5CR4a3YwPaCoPUHg+O69UMek05tnFMrtQsoXTU4KzsyU7heDO94IFTjKVzEFhi+s+SSo+ebRMxWvjf/QiPpqiQ==}
+ remix-utils@9.0.0:
+ resolution: {integrity: sha512-xpDnw6hIjYbHR9/noE4lKNPRzfxvGai3XBQcjOjcwIwZVW9O1bdsnYAl+aqJ2fMXSQTNMjNuR8Cetn76HqwXCg==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@edgefirst-dev/batcher': ^1.0.0
@@ -9245,7 +9399,6 @@ packages:
is-ip: ^5.0.1
react: ^18.0.0 || ^19.0.0
react-router: ^7.0.0
- zod: ^3.22.4
peerDependenciesMeta:
'@edgefirst-dev/batcher':
optional: true
@@ -9267,8 +9420,6 @@ packages:
optional: true
react-router:
optional: true
- zod:
- optional: true
renderkid@3.0.0:
resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==}
@@ -9311,8 +9462,8 @@ packages:
resolve-protobuf-schema@2.1.0:
resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==}
- resolve@1.22.10:
- resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
engines: {node: '>= 0.4'}
hasBin: true
@@ -9335,11 +9486,6 @@ packages:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
- rimraf@3.0.2:
- resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
- deprecated: Rimraf versions prior to v4 are no longer supported
- hasBin: true
-
robust-predicates@2.0.4:
resolution: {integrity: sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==}
@@ -9351,8 +9497,8 @@ packages:
peerDependencies:
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
- rollup@4.50.2:
- resolution: {integrity: sha512-BgLRGy7tNS9H66aIMASq1qSYbAAJV6Z6WR4QYTvj5FgF15rZ/ympT1uixHXwzbZUBDbkvqUI1KR0fH1FhMaQ9w==}
+ rollup@4.52.5:
+ resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -9364,6 +9510,10 @@ packages:
engines: {node: '>=12.0.0'}
hasBin: true
+ run-applescript@7.1.0:
+ resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
+ engines: {node: '>=18'}
+
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
@@ -9391,14 +9541,18 @@ packages:
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
engines: {node: '>= 0.4'}
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
- scheduler@0.26.0:
- resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
+ scheduler@0.27.0:
+ resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==}
schema-dts@1.1.5:
resolution: {integrity: sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==}
@@ -9407,8 +9561,8 @@ packages:
resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
engines: {node: '>= 10.13.0'}
- schema-utils@4.3.2:
- resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==}
+ schema-utils@4.3.3:
+ resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
engines: {node: '>= 10.13.0'}
search-insights@2.17.3:
@@ -9440,8 +9594,8 @@ packages:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
- semver@7.7.2:
- resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
engines: {node: '>=10'}
hasBin: true
@@ -9514,8 +9668,8 @@ packages:
shimmer@1.2.1:
resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==}
- shpjs@6.1.0:
- resolution: {integrity: sha512-uaUpod7uIWetJK80yiiedZ3x4z9ZAPgDVT89N27+8F97Z8ZOqmu88P96I6CBC8N+YyERqdneZNT/wNFUEnzNpw==}
+ shpjs@6.2.0:
+ resolution: {integrity: sha512-8cR/RKYHQepmVyBMtzZQ+1bnSbWrtLXS6aoEJmpUlOSHtSUddterebVxYmIWq2g9kOEX9jm2kjHiikyPX7cNQA==}
side-channel-list@1.0.0:
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
@@ -9672,8 +9826,8 @@ packages:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
- std-env@3.9.0:
- resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
stop-iteration-iterator@1.1.0:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
@@ -9744,18 +9898,18 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- strip-literal@3.0.0:
- resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
+ strip-literal@3.1.0:
+ resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
strtok3@10.3.4:
resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==}
engines: {node: '>=18'}
- style-to-js@1.1.17:
- resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==}
+ style-to-js@1.1.18:
+ resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==}
- style-to-object@1.0.9:
- resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==}
+ style-to-object@1.0.11:
+ resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==}
stylehacks@6.1.1:
resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==}
@@ -9801,6 +9955,11 @@ packages:
sweepline-intersections@1.5.0:
resolution: {integrity: sha512-AoVmx72QHpKtItPu72TzFL+kcYjd67BPLDoR0LarIk+xyaRg+pDTMFXndIEvZf9xEKnJv6JdhgRMnocoG0D3AQ==}
+ swr@2.3.6:
+ resolution: {integrity: sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==}
+ peerDependencies:
+ react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+
tailwind-merge@3.3.1:
resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==}
@@ -9809,17 +9968,13 @@ packages:
peerDependencies:
tailwindcss: '>=3.0.0 || insiders'
- tailwindcss@4.1.13:
- resolution: {integrity: sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==}
+ tailwindcss@4.1.16:
+ resolution: {integrity: sha512-pONL5awpaQX4LN5eiv7moSiSPd/DLDzKVRJz8Q9PgzmAdd1R4307GQS2ZpfiN7ZmekdQrfhZZiSE5jkLR4WNaA==}
- tapable@2.2.3:
- resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==}
+ tapable@2.3.0:
+ resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
- tar@7.4.3:
- resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
- engines: {node: '>=18'}
-
term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
@@ -9849,6 +10004,16 @@ packages:
resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
engines: {node: '>=18'}
+ thingies@2.5.0:
+ resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==}
+ engines: {node: '>=10.18'}
+ peerDependencies:
+ tslib: ^2
+
+ throttleit@2.1.0:
+ resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==}
+ engines: {node: '>=18'}
+
thunky@1.1.0:
resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
@@ -9885,8 +10050,8 @@ packages:
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
engines: {node: '>=14.0.0'}
- tinyspy@4.0.3:
- resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==}
+ tinyspy@4.0.4:
+ resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==}
engines: {node: '>=14.0.0'}
to-regex-range@5.0.1:
@@ -9920,6 +10085,12 @@ packages:
resolution: {integrity: sha512-vxXDZg8/+p3gblxB6BhhG5yWVn1kGRlaL8O78UDXc3wRnPizB5g83dcvWV1jpDMIPnjZjOFuxlMmE82XJ4407w==}
engines: {node: '>= 0.4'}
+ tree-dump@1.1.0:
+ resolution: {integrity: sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==}
+ engines: {node: '>=10.0'}
+ peerDependencies:
+ tslib: '2'
+
trim-lines@3.0.1:
resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
@@ -9950,41 +10121,38 @@ packages:
resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==}
engines: {node: '>= 6.0.0'}
- turbo-darwin-64@2.5.6:
- resolution: {integrity: sha512-3C1xEdo4aFwMJAPvtlPqz1Sw/+cddWIOmsalHFMrsqqydcptwBfu26WW2cDm3u93bUzMbBJ8k3zNKFqxJ9ei2A==}
+ turbo-darwin-64@2.5.8:
+ resolution: {integrity: sha512-Dh5bCACiHO8rUXZLpKw+m3FiHtAp2CkanSyJre+SInEvEr5kIxjGvCK/8MFX8SFRjQuhjtvpIvYYZJB4AGCxNQ==}
cpu: [x64]
os: [darwin]
- turbo-darwin-arm64@2.5.6:
- resolution: {integrity: sha512-LyiG+rD7JhMfYwLqB6k3LZQtYn8CQQUePbpA8mF/hMLPAekXdJo1g0bUPw8RZLwQXUIU/3BU7tXENvhSGz5DPA==}
+ turbo-darwin-arm64@2.5.8:
+ resolution: {integrity: sha512-f1H/tQC9px7+hmXn6Kx/w8Jd/FneIUnvLlcI/7RGHunxfOkKJKvsoiNzySkoHQ8uq1pJnhJ0xNGTlYM48ZaJOQ==}
cpu: [arm64]
os: [darwin]
- turbo-linux-64@2.5.6:
- resolution: {integrity: sha512-GOcUTT0xiT/pSnHL4YD6Yr3HreUhU8pUcGqcI2ksIF9b2/r/kRHwGFcsHgpG3+vtZF/kwsP0MV8FTlTObxsYIA==}
+ turbo-linux-64@2.5.8:
+ resolution: {integrity: sha512-hMyvc7w7yadBlZBGl/bnR6O+dJTx3XkTeyTTH4zEjERO6ChEs0SrN8jTFj1lueNXKIHh1SnALmy6VctKMGnWfw==}
cpu: [x64]
os: [linux]
- turbo-linux-arm64@2.5.6:
- resolution: {integrity: sha512-10Tm15bruJEA3m0V7iZcnQBpObGBcOgUcO+sY7/2vk1bweW34LMhkWi8svjV9iDF68+KJDThnYDlYE/bc7/zzQ==}
+ turbo-linux-arm64@2.5.8:
+ resolution: {integrity: sha512-LQELGa7bAqV2f+3rTMRPnj5G/OHAe2U+0N9BwsZvfMvHSUbsQ3bBMWdSQaYNicok7wOZcHjz2TkESn1hYK6xIQ==}
cpu: [arm64]
os: [linux]
- turbo-stream@3.1.0:
- resolution: {integrity: sha512-tVI25WEXl4fckNEmrq70xU1XumxUwEx/FZD5AgEcV8ri7Wvrg2o7GEq8U7htrNx3CajciGm+kDyhRf5JB6t7/A==}
-
- turbo-windows-64@2.5.6:
- resolution: {integrity: sha512-FyRsVpgaj76It0ludwZsNN40ytHN+17E4PFJyeliBEbxrGTc5BexlXVpufB7XlAaoaZVxbS6KT8RofLfDRyEPg==}
+ turbo-windows-64@2.5.8:
+ resolution: {integrity: sha512-3YdcaW34TrN1AWwqgYL9gUqmZsMT4T7g8Y5Azz+uwwEJW+4sgcJkIi9pYFyU4ZBSjBvkfuPZkGgfStir5BBDJQ==}
cpu: [x64]
os: [win32]
- turbo-windows-arm64@2.5.6:
- resolution: {integrity: sha512-j/tWu8cMeQ7HPpKri6jvKtyXg9K1gRyhdK4tKrrchH8GNHscPX/F71zax58yYtLRWTiK04zNzPcUJuoS0+v/+Q==}
+ turbo-windows-arm64@2.5.8:
+ resolution: {integrity: sha512-eFC5XzLmgXJfnAK3UMTmVECCwuBcORrWdewoiXBnUm934DY6QN8YowC/srhNnROMpaKaqNeRpoB5FxCww3eteQ==}
cpu: [arm64]
os: [win32]
- turbo@2.5.6:
- resolution: {integrity: sha512-gxToHmi9oTBNB05UjUsrWf0OyN5ZXtD0apOarC1KIx232Vp3WimRNy3810QzeNSgyD5rsaIDXlxlbnOzlouo+w==}
+ turbo@2.5.8:
+ resolution: {integrity: sha512-5c9Fdsr9qfpT3hA0EyYSFRZj1dVVsb6KIWubA9JBYZ/9ZEAijgUEae0BBR/Xl/wekt4w65/lYLTFaP3JmwSO8w==}
hasBin: true
type-fest@0.18.1:
@@ -10047,26 +10215,26 @@ packages:
peerDependencies:
typedoc-plugin-markdown: '>=4.8.0'
- typedoc-plugin-markdown@4.8.1:
- resolution: {integrity: sha512-ug7fc4j0SiJxSwBGLncpSo8tLvrT9VONvPUQqQDTKPxCoFQBADLli832RGPtj6sfSVJebNSrHZQRUdEryYH/7g==}
+ typedoc-plugin-markdown@4.9.0:
+ resolution: {integrity: sha512-9Uu4WR9L7ZBgAl60N/h+jqmPxxvnC9nQAlnnO/OujtG2ubjnKTVUFY1XDhcMY+pCqlX3N2HsQM2QTYZIU9tJuw==}
engines: {node: '>= 18'}
peerDependencies:
typedoc: 0.28.x
- typedoc-plugin-missing-exports@4.1.0:
- resolution: {integrity: sha512-p1M5jXnEbQ4qqy0erJz41BBZEDb8XDrbLjndlH4RhYEcymbdQr0xLF6yUw1GWBrhSIfkU98m3BELMAiQh+R1zA==}
+ typedoc-plugin-missing-exports@4.1.2:
+ resolution: {integrity: sha512-WNoeWX9+8X3E3riuYPduilUTFefl1K+Z+5bmYqNeH5qcWjtnTRMbRzGdEQ4XXn1WEO4WCIlU0vf46Ca2y/mspg==}
peerDependencies:
typedoc: ^0.28.1
- typedoc@0.28.13:
- resolution: {integrity: sha512-dNWY8msnYB2a+7Audha+aTF1Pu3euiE7ySp53w8kEsXoYw7dMouV5A1UsTUY345aB152RHnmRMDiovuBi7BD+w==}
+ typedoc@0.28.14:
+ resolution: {integrity: sha512-ftJYPvpVfQvFzpkoSfHLkJybdA/geDJ8BGQt/ZnkkhnBYoYW6lBgPQXu6vqLxO4X75dA55hX8Af847H5KXlEFA==}
engines: {node: '>= 18', pnpm: '>= 10'}
hasBin: true
peerDependencies:
typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x
- typescript@5.9.2:
- resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==}
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
engines: {node: '>=14.17'}
hasBin: true
@@ -10090,8 +10258,8 @@ packages:
uncrypto@0.1.3:
resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
- undici-types@7.12.0:
- resolution: {integrity: sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==}
+ undici-types@7.16.0:
+ resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
unicode-canonical-property-names-ecmascript@2.0.1:
resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
@@ -10128,8 +10296,8 @@ packages:
resolution: {integrity: sha512-Q0pSKPyij4L7Tm6Bo3XsWeFG9qbyWTtwb3jTN+XgGhCFdlvQn6Fj0DCfYElw0kp/Xp7Jv1Q+CL+aA8S07RMChA==}
hasBin: true
- unist-util-is@6.0.0:
- resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+ unist-util-is@6.0.1:
+ resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==}
unist-util-position-from-estree@2.0.0:
resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
@@ -10140,8 +10308,8 @@ packages:
unist-util-stringify-position@4.0.0:
resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
- unist-util-visit-parents@6.0.1:
- resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+ unist-util-visit-parents@6.0.2:
+ resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==}
unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
@@ -10161,8 +10329,8 @@ packages:
unplugin@1.0.1:
resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==}
- update-browserslist-db@1.1.3:
- resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==}
+ update-browserslist-db@1.1.4:
+ resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -10204,8 +10372,8 @@ packages:
'@types/react':
optional: true
- use-sync-external-store@1.5.0:
- resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==}
+ use-sync-external-store@1.6.0:
+ resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
@@ -10227,8 +10395,8 @@ packages:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
- valibot@0.41.0:
- resolution: {integrity: sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==}
+ valibot@1.1.0:
+ resolution: {integrity: sha512-Nk8lX30Qhu+9txPYTwM0cFlWLdPFsFr6LblzqIySfbZph9+BFsAHsNvHOymEviUepeIW6KFHzpX8TKhbptBXXw==}
peerDependencies:
typescript: '>=5'
peerDependenciesMeta:
@@ -10242,8 +10410,8 @@ packages:
resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
- validator@13.15.15:
- resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==}
+ validator@13.15.20:
+ resolution: {integrity: sha512-KxPOq3V2LmfQPP4eqf3Mq/zrT0Dqp2Vmx2Bn285LwVahLc+CsxOM0crBHczm8ijlcjZ0Q5Xd6LW3z3odTPnlrw==}
engines: {node: '>= 0.10'}
value-equal@1.0.1:
@@ -10278,8 +10446,8 @@ packages:
vite:
optional: true
- vite@7.1.6:
- resolution: {integrity: sha512-SRYIB8t/isTwNn8vMB3MR6E+EQZM/WG1aKmmIUCfDXfVvKfc20ZpamngWHKzAmmu9ppsgxsg4b2I7c90JZudIQ==}
+ vite@7.1.12:
+ resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -10318,14 +10486,6 @@ packages:
yaml:
optional: true
- vitefu@1.1.1:
- resolution: {integrity: sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==}
- peerDependencies:
- vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0
- peerDependenciesMeta:
- vite:
- optional: true
-
vitest@3.2.4:
resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
@@ -10378,18 +10538,21 @@ packages:
engines: {node: '>= 10.13.0'}
hasBin: true
- webpack-dev-middleware@5.3.4:
- resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==}
- engines: {node: '>= 12.13.0'}
+ webpack-dev-middleware@7.4.5:
+ resolution: {integrity: sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==}
+ engines: {node: '>= 18.12.0'}
peerDependencies:
- webpack: ^4.0.0 || ^5.0.0
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ webpack:
+ optional: true
- webpack-dev-server@4.15.2:
- resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==}
- engines: {node: '>= 12.13.0'}
+ webpack-dev-server@5.2.2:
+ resolution: {integrity: sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==}
+ engines: {node: '>= 18.12.0'}
hasBin: true
peerDependencies:
- webpack: ^4.37.0 || ^5.0.0
+ webpack: ^5.0.0
webpack-cli: '*'
peerDependenciesMeta:
webpack:
@@ -10412,8 +10575,8 @@ packages:
webpack-virtual-modules@0.5.0:
resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
- webpack@5.101.3:
- resolution: {integrity: sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==}
+ webpack@5.102.1:
+ resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -10523,6 +10686,10 @@ packages:
utf-8-validate:
optional: true
+ wsl-utils@0.1.0:
+ resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
+ engines: {node: '>=18'}
+
xdg-basedir@5.1.0:
resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
engines: {node: '>=12'}
@@ -10547,10 +10714,6 @@ packages:
yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
- yallist@5.0.0:
- resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
- engines: {node: '>=18'}
-
yaml@2.8.1:
resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==}
engines: {node: '>= 14.6'}
@@ -10568,14 +10731,11 @@ packages:
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
- zimmerframe@1.1.4:
- resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==}
-
zod@3.25.76:
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
- zod@4.1.9:
- resolution: {integrity: sha512-HI32jTq0AUAC125z30E8bQNz0RQ+9Uc+4J7V97gLYjZVKRjeydPgGt6dvQzFrav7MYOUGFqqOGiHpA/fdbd0cQ==}
+ zod@4.1.12:
+ resolution: {integrity: sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ==}
zstddec@0.1.0:
resolution: {integrity: sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==}
@@ -10603,119 +10763,141 @@ packages:
snapshots:
- '@algolia/abtesting@1.3.0':
+ '@ai-sdk/gateway@2.0.1(zod@4.1.12)':
+ dependencies:
+ '@ai-sdk/provider': 2.0.0
+ '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12)
+ '@vercel/oidc': 3.0.3
+ zod: 4.1.12
+
+ '@ai-sdk/provider-utils@3.0.12(zod@4.1.12)':
+ dependencies:
+ '@ai-sdk/provider': 2.0.0
+ '@standard-schema/spec': 1.0.0
+ eventsource-parser: 3.0.6
+ zod: 4.1.12
+
+ '@ai-sdk/provider@2.0.0':
+ dependencies:
+ json-schema: 0.4.0
+
+ '@ai-sdk/react@2.0.78(react@19.2.0)(zod@4.1.12)':
+ dependencies:
+ '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12)
+ ai: 5.0.78(zod@4.1.12)
+ react: 19.2.0
+ swr: 2.3.6(react@19.2.0)
+ throttleit: 2.1.0
+ optionalDependencies:
+ zod: 4.1.12
+
+ '@algolia/abtesting@1.7.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)(search-insights@2.17.3)':
+ '@algolia/autocomplete-core@1.19.2(@algolia/client-search@5.41.0)(algoliasearch@5.41.0)(search-insights@2.17.3)':
dependencies:
- '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)(search-insights@2.17.3)
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)
+ '@algolia/autocomplete-plugin-algolia-insights': 1.19.2(@algolia/client-search@5.41.0)(algoliasearch@5.41.0)(search-insights@2.17.3)
+ '@algolia/autocomplete-shared': 1.19.2(@algolia/client-search@5.41.0)(algoliasearch@5.41.0)
transitivePeerDependencies:
- '@algolia/client-search'
- algoliasearch
- search-insights
- '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)(search-insights@2.17.3)':
+ '@algolia/autocomplete-plugin-algolia-insights@1.19.2(@algolia/client-search@5.41.0)(algoliasearch@5.41.0)(search-insights@2.17.3)':
dependencies:
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)
+ '@algolia/autocomplete-shared': 1.19.2(@algolia/client-search@5.41.0)(algoliasearch@5.41.0)
search-insights: 2.17.3
transitivePeerDependencies:
- '@algolia/client-search'
- algoliasearch
- '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)':
+ '@algolia/autocomplete-shared@1.19.2(@algolia/client-search@5.41.0)(algoliasearch@5.41.0)':
dependencies:
- '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)
- '@algolia/client-search': 5.37.0
- algoliasearch: 5.37.0
+ '@algolia/client-search': 5.41.0
+ algoliasearch: 5.41.0
- '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)':
+ '@algolia/client-abtesting@5.41.0':
dependencies:
- '@algolia/client-search': 5.37.0
- algoliasearch: 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/client-abtesting@5.37.0':
+ '@algolia/client-analytics@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/client-analytics@5.37.0':
- dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
-
- '@algolia/client-common@5.37.0': {}
+ '@algolia/client-common@5.41.0': {}
- '@algolia/client-insights@5.37.0':
+ '@algolia/client-insights@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/client-personalization@5.37.0':
+ '@algolia/client-personalization@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/client-query-suggestions@5.37.0':
+ '@algolia/client-query-suggestions@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/client-search@5.37.0':
+ '@algolia/client-search@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
'@algolia/events@4.0.1': {}
- '@algolia/ingestion@1.37.0':
+ '@algolia/ingestion@1.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/monitoring@1.37.0':
+ '@algolia/monitoring@1.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/recommend@5.37.0':
+ '@algolia/recommend@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
- '@algolia/requester-browser-xhr@5.37.0':
+ '@algolia/requester-browser-xhr@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
+ '@algolia/client-common': 5.41.0
- '@algolia/requester-fetch@5.37.0':
+ '@algolia/requester-fetch@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
+ '@algolia/client-common': 5.41.0
- '@algolia/requester-node-http@5.37.0':
+ '@algolia/requester-node-http@5.41.0':
dependencies:
- '@algolia/client-common': 5.37.0
+ '@algolia/client-common': 5.41.0
'@alloc/quick-lru@5.2.0': {}
@@ -10724,25 +10906,35 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
+ '@apm-js-collab/code-transformer@0.8.2': {}
+
+ '@apm-js-collab/tracing-hooks@0.3.1':
+ dependencies:
+ '@apm-js-collab/code-transformer': 0.8.2
+ debug: 4.4.3
+ module-details-from-path: 1.0.4
+ transitivePeerDependencies:
+ - supports-color
+
'@babel/code-frame@7.27.1':
dependencies:
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
js-tokens: 4.0.0
picocolors: 1.1.1
- '@babel/compat-data@7.28.4': {}
+ '@babel/compat-data@7.28.5': {}
- '@babel/core@7.28.4':
+ '@babel/core@7.28.5':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
+ '@babel/generator': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
'@babel/helpers': 7.28.4
- '@babel/parser': 7.28.4
+ '@babel/parser': 7.28.5
'@babel/template': 7.27.2
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
debug: 4.4.3
@@ -10752,774 +10944,791 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@babel/generator@7.28.3':
+ '@babel/generator@7.28.5':
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.0.2
'@babel/helper-annotate-as-pure@7.27.3':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
'@babel/helper-compilation-targets@7.27.2':
dependencies:
- '@babel/compat-data': 7.28.4
+ '@babel/compat-data': 7.28.5
'@babel/helper-validator-option': 7.27.1
- browserslist: 4.26.2
+ browserslist: 4.27.0
lru-cache: 5.1.1
semver: 6.3.1
- '@babel/helper-create-class-features-plugin@7.28.3(@babel/core@7.28.4)':
+ '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/helper-member-expression-to-functions': 7.28.5
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4)
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/traverse': 7.28.5
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.28.4)':
+ '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
- regexpu-core: 6.3.1
+ regexpu-core: 6.4.0
semver: 6.3.1
- '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.4)':
+ '@babel/helper-define-polyfill-provider@0.6.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
debug: 4.4.3
lodash.debounce: 4.0.8
- resolve: 1.22.10
+ resolve: 1.22.11
transitivePeerDependencies:
- supports-color
'@babel/helper-globals@7.28.0': {}
- '@babel/helper-member-expression-to-functions@7.27.1':
+ '@babel/helper-member-expression-to-functions@7.28.5':
dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
'@babel/helper-module-imports@7.27.1':
dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)':
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-module-imports': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
'@babel/helper-optimise-call-expression@7.27.1':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
'@babel/helper-plugin-utils@7.27.1': {}
- '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.4)':
+ '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-wrap-function': 7.28.3
- '@babel/traverse': 7.28.4
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.4)':
+ '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-member-expression-to-functions': 7.27.1
+ '@babel/core': 7.28.5
+ '@babel/helper-member-expression-to-functions': 7.28.5
'@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
'@babel/helper-skip-transparent-expression-wrappers@7.27.1':
dependencies:
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
'@babel/helper-string-parser@7.27.1': {}
- '@babel/helper-validator-identifier@7.27.1': {}
+ '@babel/helper-validator-identifier@7.28.5': {}
'@babel/helper-validator-option@7.27.1': {}
'@babel/helper-wrap-function@7.28.3':
dependencies:
'@babel/template': 7.27.2
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
'@babel/helpers@7.28.4':
dependencies:
'@babel/template': 7.27.2
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
- '@babel/parser@7.28.4':
+ '@babel/parser@7.28.5':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4)
+ '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.4)':
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)':
+ '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.4)':
+ '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.4)':
+ '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.4)':
+ '@babel/plugin-transform-async-generator-functions@7.28.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4)
- '@babel/traverse': 7.28.4
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-module-imports': 7.27.1
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.4)
+ '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-block-scoping@7.28.4(@babel/core@7.28.4)':
+ '@babel/plugin-transform-block-scoping@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.4)':
+ '@babel/plugin-transform-class-static-block@7.28.3(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.4)':
+ '@babel/plugin-transform-classes@7.28.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-globals': 7.28.0
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4)
- '@babel/traverse': 7.28.4
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/template': 7.27.2
- '@babel/plugin-transform-destructuring@7.28.0(@babel/core@7.28.4)':
+ '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.4)':
+ '@babel/plugin-transform-explicit-resource-management@7.28.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-exponentiation-operator@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-literals@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-logical-assignment-operators@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-modules-systemjs@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
- '@babel/traverse': 7.28.4
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.4)':
+ '@babel/plugin-transform-object-rest-spread@7.28.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4)
- '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4)
- '@babel/traverse': 7.28.4
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
+ '@babel/traverse': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.4)
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-optional-chaining@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.4)':
+ '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4)
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.4)':
+ '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-react-jsx@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-module-imports': 7.27.1
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
- '@babel/types': 7.28.4
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.4)':
+ '@babel/plugin-transform-regenerator@7.28.4(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-runtime@7.28.3(@babel/core@7.28.4)':
+ '@babel/plugin-transform-runtime@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-module-imports': 7.27.1
'@babel/helper-plugin-utils': 7.27.1
- babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4)
- babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4)
- babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4)
+ babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5)
+ babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-spread@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.4)':
+ '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-create-class-features-plugin': 7.28.3(@babel/core@7.28.4)
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.4)':
+ '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.28.5)
'@babel/helper-plugin-utils': 7.27.1
- '@babel/preset-env@7.28.3(@babel/core@7.28.4)':
+ '@babel/preset-env@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/compat-data': 7.28.4
- '@babel/core': 7.28.4
+ '@babel/compat-data': 7.28.5
+ '@babel/core': 7.28.5
'@babel/helper-compilation-targets': 7.27.2
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-validator-option': 7.27.1
- '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.4)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.4)
- '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.4)
- '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.4)
- '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-block-scoping': 7.28.4(@babel/core@7.28.4)
- '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.4)
- '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.4)
- '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-destructuring': 7.28.0(@babel/core@7.28.4)
- '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.4)
- '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.4)
- '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.4)
- '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.4)
- '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.4)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.4)
- babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.4)
- babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.4)
- babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.4)
- core-js-compat: 3.45.1
+ '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.3(@babel/core@7.28.5)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.28.5)
+ '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-async-generator-functions': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-block-scoping': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-class-static-block': 7.28.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-classes': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-explicit-resource-management': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-transform-exponentiation-operator': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-logical-assignment-operators': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-systemjs': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-object-rest-spread': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-optional-chaining': 7.28.5(@babel/core@7.28.5)
+ '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-regenerator': 7.28.4(@babel/core@7.28.5)
+ '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.28.5)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs2: 0.4.14(@babel/core@7.28.5)
+ babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.28.5)
+ babel-plugin-polyfill-regenerator: 0.6.5(@babel/core@7.28.5)
+ core-js-compat: 3.46.0
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.4)':
+ '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
esutils: 2.0.3
- '@babel/preset-react@7.27.1(@babel/core@7.28.4)':
+ '@babel/preset-react@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-validator-option': 7.27.1
- '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.4)
- '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.4)
+ '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
- '@babel/preset-typescript@7.27.1(@babel/core@7.28.4)':
+ '@babel/preset-typescript@7.28.5(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
'@babel/helper-validator-option': 7.27.1
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.4)
- '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4)
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
'@babel/runtime-corejs3@7.28.4':
dependencies:
- core-js-pure: 3.45.1
+ core-js-pure: 3.46.0
'@babel/runtime@7.28.4': {}
'@babel/template@7.27.2':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
- '@babel/traverse@7.28.4':
+ '@babel/traverse@7.28.5':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/generator': 7.28.3
+ '@babel/generator': 7.28.5
'@babel/helper-globals': 7.28.0
- '@babel/parser': 7.28.4
+ '@babel/parser': 7.28.5
'@babel/template': 7.27.2
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
debug: 4.4.3
transitivePeerDependencies:
- supports-color
- '@babel/types@7.28.4':
+ '@babel/types@7.28.5':
dependencies:
'@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
'@bcoe/v8-coverage@1.0.2': {}
- '@better-auth/utils@0.2.6':
+ '@better-auth/core@1.3.29(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)':
dependencies:
- uncrypto: 0.1.3
+ '@better-auth/utils': 0.3.0
+ '@better-fetch/fetch': 1.1.18
+ better-call: 1.0.19
+ jose: 6.1.0
+ kysely: 0.28.8
+ nanostores: 1.0.1
+ zod: 4.1.12
+
+ '@better-auth/telemetry@1.3.29(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)':
+ dependencies:
+ '@better-auth/core': 1.3.29(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
+ '@better-auth/utils': 0.3.0
+ '@better-fetch/fetch': 1.1.18
+ transitivePeerDependencies:
+ - better-call
+ - jose
+ - kysely
+ - nanostores
'@better-auth/utils@0.3.0': {}
'@better-fetch/fetch@1.1.18': {}
- '@biomejs/biome@2.2.4':
+ '@biomejs/biome@2.3.0':
optionalDependencies:
- '@biomejs/cli-darwin-arm64': 2.2.4
- '@biomejs/cli-darwin-x64': 2.2.4
- '@biomejs/cli-linux-arm64': 2.2.4
- '@biomejs/cli-linux-arm64-musl': 2.2.4
- '@biomejs/cli-linux-x64': 2.2.4
- '@biomejs/cli-linux-x64-musl': 2.2.4
- '@biomejs/cli-win32-arm64': 2.2.4
- '@biomejs/cli-win32-x64': 2.2.4
-
- '@biomejs/cli-darwin-arm64@2.2.4':
+ '@biomejs/cli-darwin-arm64': 2.3.0
+ '@biomejs/cli-darwin-x64': 2.3.0
+ '@biomejs/cli-linux-arm64': 2.3.0
+ '@biomejs/cli-linux-arm64-musl': 2.3.0
+ '@biomejs/cli-linux-x64': 2.3.0
+ '@biomejs/cli-linux-x64-musl': 2.3.0
+ '@biomejs/cli-win32-arm64': 2.3.0
+ '@biomejs/cli-win32-x64': 2.3.0
+
+ '@biomejs/cli-darwin-arm64@2.3.0':
optional: true
- '@biomejs/cli-darwin-x64@2.2.4':
+ '@biomejs/cli-darwin-x64@2.3.0':
optional: true
- '@biomejs/cli-linux-arm64-musl@2.2.4':
+ '@biomejs/cli-linux-arm64-musl@2.3.0':
optional: true
- '@biomejs/cli-linux-arm64@2.2.4':
+ '@biomejs/cli-linux-arm64@2.3.0':
optional: true
- '@biomejs/cli-linux-x64-musl@2.2.4':
+ '@biomejs/cli-linux-x64-musl@2.3.0':
optional: true
- '@biomejs/cli-linux-x64@2.2.4':
+ '@biomejs/cli-linux-x64@2.3.0':
optional: true
- '@biomejs/cli-win32-arm64@2.2.4':
+ '@biomejs/cli-win32-arm64@2.3.0':
optional: true
- '@biomejs/cli-win32-x64@2.2.4':
+ '@biomejs/cli-win32-x64@2.3.0':
optional: true
'@borewit/text-codec@0.1.1': {}
@@ -11538,7 +11747,7 @@ snapshots:
outdent: 0.5.0
prettier: 2.8.8
resolve-from: 5.0.0
- semver: 7.7.2
+ semver: 7.7.3
'@changesets/assemble-release-plan@6.0.9':
dependencies:
@@ -11547,13 +11756,13 @@ snapshots:
'@changesets/should-skip-package': 0.1.2
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
- semver: 7.7.2
+ semver: 7.7.3
'@changesets/changelog-git@0.2.1':
dependencies:
'@changesets/types': 6.1.0
- '@changesets/cli@2.29.7(@types/node@24.5.2)':
+ '@changesets/cli@2.29.7(@types/node@24.9.1)':
dependencies:
'@changesets/apply-release-plan': 7.0.13
'@changesets/assemble-release-plan': 6.0.9
@@ -11569,7 +11778,7 @@ snapshots:
'@changesets/should-skip-package': 0.1.2
'@changesets/types': 6.1.0
'@changesets/write': 0.4.0
- '@inquirer/external-editor': 1.0.2(@types/node@24.5.2)
+ '@inquirer/external-editor': 1.0.2(@types/node@24.9.1)
'@manypkg/get-packages': 1.1.3
ansi-colors: 4.1.3
ci-info: 3.9.0
@@ -11580,7 +11789,7 @@ snapshots:
package-manager-detector: 0.2.11
picocolors: 1.1.1
resolve-from: 5.0.0
- semver: 7.7.2
+ semver: 7.7.3
spawndamnit: 3.0.1
term-size: 2.2.1
transitivePeerDependencies:
@@ -11605,7 +11814,7 @@ snapshots:
'@changesets/types': 6.1.0
'@manypkg/get-packages': 1.1.3
picocolors: 1.1.1
- semver: 7.7.2
+ semver: 7.7.3
'@changesets/get-release-plan@4.0.13':
dependencies:
@@ -11665,7 +11874,7 @@ snapshots:
dependencies:
'@changesets/types': 6.1.0
fs-extra: 7.0.1
- human-id: 4.1.1
+ human-id: 4.1.2
prettier: 2.8.8
'@colors/colors@1.5.0':
@@ -11701,12 +11910,12 @@ snapshots:
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-alpha-function@1.0.0(postcss@8.5.6)':
+ '@csstools/postcss-alpha-function@1.0.1(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
@@ -11716,47 +11925,56 @@ snapshots:
postcss: 8.5.6
postcss-selector-parser: 7.1.0
- '@csstools/postcss-color-function-display-p3-linear@1.0.0(postcss@8.5.6)':
+ '@csstools/postcss-color-function-display-p3-linear@1.0.1(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
- '@csstools/postcss-color-function@4.0.11(postcss@8.5.6)':
+ '@csstools/postcss-color-function@4.0.12(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
- '@csstools/postcss-color-mix-function@3.0.11(postcss@8.5.6)':
+ '@csstools/postcss-color-mix-function@3.0.12(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
- '@csstools/postcss-color-mix-variadic-function-arguments@1.0.1(postcss@8.5.6)':
+ '@csstools/postcss-color-mix-variadic-function-arguments@1.0.2(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
+ '@csstools/utilities': 2.0.0(postcss@8.5.6)
+ postcss: 8.5.6
+
+ '@csstools/postcss-content-alt-text@2.0.8(postcss@8.5.6)':
+ dependencies:
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
- '@csstools/postcss-content-alt-text@2.0.7(postcss@8.5.6)':
+ '@csstools/postcss-contrast-color-function@2.0.12(postcss@8.5.6)':
dependencies:
+ '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
@@ -11780,27 +11998,27 @@ snapshots:
'@csstools/css-tokenizer': 3.0.4
postcss: 8.5.6
- '@csstools/postcss-gradients-interpolation-method@5.0.11(postcss@8.5.6)':
+ '@csstools/postcss-gradients-interpolation-method@5.0.12(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
- '@csstools/postcss-hwb-function@4.0.11(postcss@8.5.6)':
+ '@csstools/postcss-hwb-function@4.0.12(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
- '@csstools/postcss-ic-unit@4.0.3(postcss@8.5.6)':
+ '@csstools/postcss-ic-unit@4.0.4(postcss@8.5.6)':
dependencies:
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -11815,11 +12033,11 @@ snapshots:
postcss: 8.5.6
postcss-selector-parser: 7.1.0
- '@csstools/postcss-light-dark-function@2.0.10(postcss@8.5.6)':
+ '@csstools/postcss-light-dark-function@2.0.11(postcss@8.5.6)':
dependencies:
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
@@ -11872,16 +12090,16 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- '@csstools/postcss-oklab-function@4.0.11(postcss@8.5.6)':
+ '@csstools/postcss-oklab-function@4.0.12(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
- '@csstools/postcss-progressive-custom-properties@4.2.0(postcss@8.5.6)':
+ '@csstools/postcss-progressive-custom-properties@4.2.1(postcss@8.5.6)':
dependencies:
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -11893,12 +12111,12 @@ snapshots:
'@csstools/css-tokenizer': 3.0.4
postcss: 8.5.6
- '@csstools/postcss-relative-color-syntax@3.0.11(postcss@8.5.6)':
+ '@csstools/postcss-relative-color-syntax@3.0.12(postcss@8.5.6)':
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
@@ -11954,36 +12172,39 @@ snapshots:
'@discoveryjs/json-ext@0.5.7': {}
- '@docsearch/css@3.9.0': {}
+ '@docsearch/css@4.2.0': {}
- '@docsearch/react@3.9.0(@algolia/client-search@5.37.0)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(search-insights@2.17.3)':
+ '@docsearch/react@4.2.0(@algolia/client-search@5.41.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)':
dependencies:
- '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)(search-insights@2.17.3)
- '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.37.0)(algoliasearch@5.37.0)
- '@docsearch/css': 3.9.0
- algoliasearch: 5.37.0
+ '@ai-sdk/react': 2.0.78(react@19.2.0)(zod@4.1.12)
+ '@algolia/autocomplete-core': 1.19.2(@algolia/client-search@5.41.0)(algoliasearch@5.41.0)(search-insights@2.17.3)
+ '@docsearch/css': 4.2.0
+ ai: 5.0.78(zod@4.1.12)
+ algoliasearch: 5.41.0
+ marked: 16.4.1
+ zod: 4.1.12
optionalDependencies:
- '@types/react': 19.1.13
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@types/react': 19.2.2
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
search-insights: 2.17.3
transitivePeerDependencies:
- '@algolia/client-search'
- '@docusaurus/babel@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@docusaurus/babel@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/generator': 7.28.3
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.4)
- '@babel/plugin-transform-runtime': 7.28.3(@babel/core@7.28.4)
- '@babel/preset-env': 7.28.3(@babel/core@7.28.4)
- '@babel/preset-react': 7.27.1(@babel/core@7.28.4)
- '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-transform-runtime': 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-env': 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-react': 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5)
'@babel/runtime': 7.28.4
'@babel/runtime-corejs3': 7.28.4
- '@babel/traverse': 7.28.4
- '@docusaurus/logger': 3.8.1
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@babel/traverse': 7.28.5
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
babel-plugin-dynamic-import-node: 2.3.3
fs-extra: 11.3.2
tslib: 2.8.1
@@ -11996,34 +12217,34 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/bundler@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/bundler@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@babel/core': 7.28.4
- '@docusaurus/babel': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/cssnano-preset': 3.8.1
- '@docusaurus/logger': 3.8.1
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- babel-loader: 9.2.1(@babel/core@7.28.4)(webpack@5.101.3(@swc/core@1.13.5))
+ '@babel/core': 7.28.5
+ '@docusaurus/babel': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/cssnano-preset': 3.9.1
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ babel-loader: 9.2.1(@babel/core@7.28.5)(webpack@5.102.1(@swc/core@1.13.21))
clean-css: 5.3.3
- copy-webpack-plugin: 11.0.0(webpack@5.101.3(@swc/core@1.13.5))
- css-loader: 6.11.0(@rspack/core@1.5.5)(webpack@5.101.3(@swc/core@1.13.5))
- css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.101.3(@swc/core@1.13.5))
+ copy-webpack-plugin: 11.0.0(webpack@5.102.1(@swc/core@1.13.21))
+ css-loader: 6.11.0(@rspack/core@1.5.8)(webpack@5.102.1(@swc/core@1.13.21))
+ css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.102.1(@swc/core@1.13.21))
cssnano: 6.1.2(postcss@8.5.6)
- file-loader: 6.2.0(webpack@5.101.3(@swc/core@1.13.5))
+ file-loader: 6.2.0(webpack@5.102.1(@swc/core@1.13.21))
html-minifier-terser: 7.2.0
- mini-css-extract-plugin: 2.9.4(webpack@5.101.3(@swc/core@1.13.5))
- null-loader: 4.0.1(webpack@5.101.3(@swc/core@1.13.5))
+ mini-css-extract-plugin: 2.9.4(webpack@5.102.1(@swc/core@1.13.21))
+ null-loader: 4.0.1(webpack@5.102.1(@swc/core@1.13.21))
postcss: 8.5.6
- postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.9.2)(webpack@5.101.3(@swc/core@1.13.5))
- postcss-preset-env: 10.3.1(postcss@8.5.6)
- terser-webpack-plugin: 5.3.14(@swc/core@1.13.5)(webpack@5.101.3(@swc/core@1.13.5))
+ postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.9.3)(webpack@5.102.1(@swc/core@1.13.21))
+ postcss-preset-env: 10.4.0(postcss@8.5.6)
+ terser-webpack-plugin: 5.3.14(@swc/core@1.13.21)(webpack@5.102.1(@swc/core@1.13.21))
tslib: 2.8.1
- url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.3(@swc/core@1.13.5)))(webpack@5.101.3(@swc/core@1.13.5))
- webpack: 5.101.3(@swc/core@1.13.5)
- webpackbar: 6.0.1(webpack@5.101.3(@swc/core@1.13.5))
+ url-loader: 4.1.1(file-loader@6.2.0(webpack@5.102.1(@swc/core@1.13.21)))(webpack@5.102.1(@swc/core@1.13.21))
+ webpack: 5.102.1(@swc/core@1.13.21)
+ webpackbar: 6.0.1(webpack@5.102.1(@swc/core@1.13.21))
optionalDependencies:
- '@docusaurus/faster': 3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))
+ '@docusaurus/faster': 3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))
transitivePeerDependencies:
- '@parcel/css'
- '@rspack/core'
@@ -12039,23 +12260,23 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/core@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/babel': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/bundler': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/logger': 3.8.1
- '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@docusaurus/babel': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/bundler': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/mdx-loader': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-common': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0)
boxen: 6.2.1
chalk: 4.1.2
chokidar: 3.6.0
cli-table3: 0.6.5
combine-promises: 1.2.0
commander: 5.1.0
- core-js: 3.45.1
+ core-js: 3.46.0
detect-port: 1.6.1
escape-html: 1.0.3
eta: 2.2.0
@@ -12063,28 +12284,28 @@ snapshots:
execa: 5.1.1
fs-extra: 11.3.2
html-tags: 3.3.1
- html-webpack-plugin: 5.6.4(@rspack/core@1.5.5)(webpack@5.101.3(@swc/core@1.13.5))
+ html-webpack-plugin: 5.6.4(@rspack/core@1.5.8)(webpack@5.102.1(@swc/core@1.13.21))
leven: 3.1.0
lodash: 4.17.21
open: 8.4.2
p-map: 4.0.0
prompts: 2.4.2
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)'
- react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.1.1)'
- react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@19.1.1))(webpack@5.101.3(@swc/core@1.13.5))
- react-router: 5.3.4(react@19.1.1)
- react-router-config: 5.1.1(react-router@5.3.4(react@19.1.1))(react@19.1.1)
- react-router-dom: 5.3.4(react@19.1.1)
- semver: 7.7.2
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)'
+ react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.0)'
+ react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@19.2.0))(webpack@5.102.1(@swc/core@1.13.21))
+ react-router: 5.3.4(react@19.2.0)
+ react-router-config: 5.1.1(react-router@5.3.4(react@19.2.0))(react@19.2.0)
+ react-router-dom: 5.3.4(react@19.2.0)
+ semver: 7.7.3
serve-handler: 6.1.6
tinypool: 1.1.1
tslib: 2.8.1
update-notifier: 6.0.2
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
webpack-bundle-analyzer: 4.10.2
- webpack-dev-server: 4.15.2(webpack@5.101.3(@swc/core@1.13.5))
+ webpack-dev-server: 5.2.2(webpack@5.102.1(@swc/core@1.13.21))
webpack-merge: 6.0.1
transitivePeerDependencies:
- '@docusaurus/faster'
@@ -12103,51 +12324,51 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/cssnano-preset@3.8.1':
+ '@docusaurus/cssnano-preset@3.9.1':
dependencies:
cssnano-preset-advanced: 6.1.2(postcss@8.5.6)
postcss: 8.5.6
postcss-sort-media-queries: 5.2.0(postcss@8.5.6)
tslib: 2.8.1
- '@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))':
+ '@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))':
dependencies:
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@rspack/core': 1.5.5
- '@swc/core': 1.13.5
- '@swc/html': 1.13.5
- browserslist: 4.26.2
- lightningcss: 1.30.1
- swc-loader: 0.2.6(@swc/core@1.13.5)(webpack@5.101.3(@swc/core@1.13.5))
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@rspack/core': 1.5.8
+ '@swc/core': 1.13.21
+ '@swc/html': 1.13.21
+ browserslist: 4.27.0
+ lightningcss: 1.30.2
+ swc-loader: 0.2.6(@swc/core@1.13.21)(webpack@5.102.1(@swc/core@1.13.21))
tslib: 2.8.1
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- '@swc/helpers'
- esbuild
- uglify-js
- webpack-cli
- '@docusaurus/logger@3.8.1':
+ '@docusaurus/logger@3.9.1':
dependencies:
chalk: 4.1.2
tslib: 2.8.1
- '@docusaurus/mdx-loader@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@docusaurus/mdx-loader@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@docusaurus/logger': 3.8.1
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@mdx-js/mdx': 3.1.1
'@slorber/remark-comment': 1.0.0
escape-html: 1.0.3
- estree-util-value-to-estree: 3.4.0
- file-loader: 6.2.0(webpack@5.101.3(@swc/core@1.13.5))
+ estree-util-value-to-estree: 3.5.0
+ file-loader: 6.2.0(webpack@5.102.1(@swc/core@1.13.21))
fs-extra: 11.3.2
image-size: 2.0.2
mdast-util-mdx: 3.0.0
mdast-util-to-string: 4.0.0
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
rehype-raw: 7.0.0
remark-directive: 3.0.1
remark-emoji: 4.0.1
@@ -12157,9 +12378,9 @@ snapshots:
tslib: 2.8.1
unified: 11.0.5
unist-util-visit: 5.0.0
- url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.3(@swc/core@1.13.5)))(webpack@5.101.3(@swc/core@1.13.5))
+ url-loader: 4.1.1(file-loader@6.2.0(webpack@5.102.1(@swc/core@1.13.21)))(webpack@5.102.1(@swc/core@1.13.21))
vfile: 6.0.3
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -12167,17 +12388,17 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/module-type-aliases@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@docusaurus/module-type-aliases@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@types/history': 4.7.11
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
'@types/react-router-config': 5.0.11
'@types/react-router-dom': 5.3.3
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)'
- react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.1.1)'
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)'
+ react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.0)'
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -12185,29 +12406,29 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/plugin-content-blog@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
- dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/logger': 3.8.1
- '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/plugin-content-blog@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
+ dependencies:
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/mdx-loader': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/plugin-content-docs': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-common': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
cheerio: 1.0.0-rc.12
feed: 4.2.2
fs-extra: 11.3.2
lodash: 4.17.21
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
schema-dts: 1.1.5
srcset: 4.0.0
tslib: 2.8.1
unist-util-visit: 5.0.0
utility-types: 3.11.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- '@docusaurus/faster'
- '@mdx-js/react'
@@ -12226,28 +12447,28 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
- dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/logger': 3.8.1
- '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
+ dependencies:
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/mdx-loader': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/module-type-aliases': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-common': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@types/react-router-config': 5.0.11
combine-promises: 1.2.0
fs-extra: 11.3.2
js-yaml: 4.1.0
lodash: 4.17.21
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
schema-dts: 1.1.5
tslib: 2.8.1
utility-types: 3.11.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- '@docusaurus/faster'
- '@mdx-js/react'
@@ -12266,18 +12487,18 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-content-pages@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/plugin-content-pages@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/mdx-loader': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
fs-extra: 11.3.2
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
tslib: 2.8.1
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- '@docusaurus/faster'
- '@mdx-js/react'
@@ -12296,12 +12517,12 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-css-cascade-layers@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/plugin-css-cascade-layers@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
tslib: 2.8.1
transitivePeerDependencies:
- '@docusaurus/faster'
@@ -12323,15 +12544,15 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-debug@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/plugin-debug@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
fs-extra: 11.3.2
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-json-view-lite: 2.5.0(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-json-view-lite: 2.5.0(react@19.2.0)
tslib: 2.8.1
transitivePeerDependencies:
- '@docusaurus/faster'
@@ -12351,13 +12572,13 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-google-analytics@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/plugin-google-analytics@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
tslib: 2.8.1
transitivePeerDependencies:
- '@docusaurus/faster'
@@ -12377,14 +12598,14 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-google-gtag@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/plugin-google-gtag@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@types/gtag.js': 0.0.12
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
tslib: 2.8.1
transitivePeerDependencies:
- '@docusaurus/faster'
@@ -12404,13 +12625,13 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-google-tag-manager@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/plugin-google-tag-manager@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
tslib: 2.8.1
transitivePeerDependencies:
- '@docusaurus/faster'
@@ -12430,17 +12651,17 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-sitemap@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/plugin-sitemap@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/logger': 3.8.1
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-common': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
fs-extra: 11.3.2
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
sitemap: 7.1.2
tslib: 2.8.1
transitivePeerDependencies:
@@ -12461,18 +12682,18 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/plugin-svgr@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
+ '@docusaurus/plugin-svgr@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@svgr/core': 8.1.0(typescript@5.9.2)
- '@svgr/webpack': 8.1.0(typescript@5.9.2)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@svgr/core': 8.1.0(typescript@5.9.3)
+ '@svgr/webpack': 8.1.0(typescript@5.9.3)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
tslib: 2.8.1
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- '@docusaurus/faster'
- '@mdx-js/react'
@@ -12491,25 +12712,25 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/preset-classic@3.8.1(@algolia/client-search@5.37.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(search-insights@2.17.3)(typescript@5.9.2)':
- dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-content-pages': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-css-cascade-layers': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-debug': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-google-analytics': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-google-gtag': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-google-tag-manager': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-sitemap': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-svgr': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/theme-classic': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@rspack/core@1.5.5)(@swc/core@1.13.5)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/theme-search-algolia': 3.8.1(@algolia/client-search@5.37.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(search-insights@2.17.3)(typescript@5.9.2)
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@docusaurus/preset-classic@3.9.1(@algolia/client-search@5.41.0)(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)':
+ dependencies:
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-content-blog': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-content-docs': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-content-pages': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-css-cascade-layers': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-debug': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-google-analytics': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-google-gtag': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-google-tag-manager': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-sitemap': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-svgr': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/theme-classic': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@rspack/core@1.5.8)(@swc/core@1.13.21)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/theme-search-algolia': 3.9.1(@algolia/client-search@5.41.0)(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
transitivePeerDependencies:
- '@algolia/client-search'
- '@docusaurus/faster'
@@ -12531,38 +12752,37 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/react-loadable@6.0.0(react@19.1.1)':
- dependencies:
- '@types/react': 19.1.13
- react: 19.1.1
-
- '@docusaurus/theme-classic@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@rspack/core@1.5.5)(@swc/core@1.13.5)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)':
- dependencies:
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/logger': 3.8.1
- '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/plugin-content-pages': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/theme-translations': 3.8.1
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@docusaurus/react-loadable@6.0.0(react@19.2.0)':
+ dependencies:
+ '@types/react': 19.2.2
+ react: 19.2.0
+
+ '@docusaurus/theme-classic@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@rspack/core@1.5.8)(@swc/core@1.13.21)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)':
+ dependencies:
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/mdx-loader': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/module-type-aliases': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/plugin-content-blog': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-content-docs': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/plugin-content-pages': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/theme-translations': 3.9.1
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-common': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0)
clsx: 2.1.1
- copy-text-to-clipboard: 3.2.1
infima: 0.2.0-alpha.45
lodash: 4.17.21
nprogress: 0.2.0
postcss: 8.5.6
- prism-react-renderer: 2.4.1(react@19.1.1)
+ prism-react-renderer: 2.4.1(react@19.2.0)
prismjs: 1.30.0
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-router-dom: 5.3.4(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-router-dom: 5.3.4(react@19.2.0)
rtlcss: 4.3.0
tslib: 2.8.1
utility-types: 3.11.0
@@ -12584,21 +12804,21 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@docusaurus/theme-common@3.9.1(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/mdx-loader': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/module-type-aliases': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/plugin-content-docs': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-common': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@types/history': 4.7.11
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
'@types/react-router-config': 5.0.11
clsx: 2.1.1
parse-numeric-range: 1.3.0
- prism-react-renderer: 2.4.1(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ prism-react-renderer: 2.4.1(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
tslib: 2.8.1
utility-types: 3.11.0
transitivePeerDependencies:
@@ -12608,24 +12828,24 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/theme-search-algolia@3.8.1(@algolia/client-search@5.37.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(search-insights@2.17.3)(typescript@5.9.2)':
- dependencies:
- '@docsearch/react': 3.9.0(@algolia/client-search@5.37.0)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(search-insights@2.17.3)
- '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/logger': 3.8.1
- '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)
- '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)))(@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1))(@rspack/core@1.5.5)(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2))(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/theme-translations': 3.8.1
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- algoliasearch: 5.37.0
- algoliasearch-helper: 3.26.0(algoliasearch@5.37.0)
+ '@docusaurus/theme-search-algolia@3.9.1(@algolia/client-search@5.41.0)(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)(typescript@5.9.3)':
+ dependencies:
+ '@docsearch/react': 4.2.0(@algolia/client-search@5.41.0)(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(search-insights@2.17.3)
+ '@docusaurus/core': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/plugin-content-docs': 3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3)
+ '@docusaurus/theme-common': 3.9.1(@docusaurus/plugin-content-docs@3.9.1(@docusaurus/faster@3.9.1(@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)))(@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0))(@rspack/core@1.5.8)(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3))(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/theme-translations': 3.9.1
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-validation': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ algoliasearch: 5.41.0
+ algoliasearch-helper: 3.26.0(algoliasearch@5.41.0)
clsx: 2.1.1
eta: 2.2.0
fs-extra: 11.3.2
lodash: 4.17.21
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
tslib: 2.8.1
utility-types: 3.11.0
transitivePeerDependencies:
@@ -12649,25 +12869,26 @@ snapshots:
- utf-8-validate
- webpack-cli
- '@docusaurus/theme-translations@3.8.1':
+ '@docusaurus/theme-translations@3.9.1':
dependencies:
fs-extra: 11.3.2
tslib: 2.8.1
- '@docusaurus/tsconfig@3.8.1': {}
+ '@docusaurus/tsconfig@3.9.1': {}
- '@docusaurus/types@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@docusaurus/types@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@mdx-js/mdx': 3.1.1
'@types/history': 4.7.11
- '@types/react': 19.1.13
+ '@types/mdast': 4.0.4
+ '@types/react': 19.2.2
commander: 5.1.0
joi: 17.13.3
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)'
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)'
utility-types: 3.11.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
webpack-merge: 5.10.0
transitivePeerDependencies:
- '@swc/core'
@@ -12676,9 +12897,9 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/utils-common@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@docusaurus/utils-common@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
tslib: 2.8.1
transitivePeerDependencies:
- '@swc/core'
@@ -12689,11 +12910,11 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/utils-validation@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@docusaurus/utils-validation@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@docusaurus/logger': 3.8.1
- '@docusaurus/utils': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/utils': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-common': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
fs-extra: 11.3.2
joi: 17.13.3
js-yaml: 4.1.0
@@ -12708,14 +12929,14 @@ snapshots:
- uglify-js
- webpack-cli
- '@docusaurus/utils@3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@docusaurus/utils@3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@docusaurus/logger': 3.8.1
- '@docusaurus/types': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.5)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@docusaurus/logger': 3.9.1
+ '@docusaurus/types': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@docusaurus/utils-common': 3.9.1(@swc/core@1.13.21)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
escape-string-regexp: 4.0.0
execa: 5.1.1
- file-loader: 6.2.0(webpack@5.101.3(@swc/core@1.13.5))
+ file-loader: 6.2.0(webpack@5.102.1(@swc/core@1.13.21))
fs-extra: 11.3.2
github-slugger: 1.5.0
globby: 11.1.0
@@ -12728,9 +12949,9 @@ snapshots:
prompts: 2.4.2
resolve-pathname: 3.0.0
tslib: 2.8.1
- url-loader: 4.1.1(file-loader@6.2.0(webpack@5.101.3(@swc/core@1.13.5)))(webpack@5.101.3(@swc/core@1.13.5))
+ url-loader: 4.1.1(file-loader@6.2.0(webpack@5.102.1(@swc/core@1.13.21)))(webpack@5.102.1(@swc/core@1.13.21))
utility-types: 3.11.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -12740,11 +12961,11 @@ snapshots:
- uglify-js
- webpack-cli
- '@dotenvx/dotenvx@1.48.4':
+ '@dotenvx/dotenvx@1.51.0':
dependencies:
commander: 11.1.0
- dotenv: 17.2.2
- eciesjs: 0.4.15
+ dotenv: 17.2.3
+ eciesjs: 0.4.16
execa: 5.1.1
fdir: 6.5.0(picomatch@4.0.3)
ignore: 5.3.2
@@ -12758,15 +12979,15 @@ snapshots:
dependencies:
'@noble/ciphers': 1.3.0
- '@electric-sql/pglite@0.3.8': {}
+ '@electric-sql/pglite@0.3.11': {}
- '@emnapi/core@1.5.0':
+ '@emnapi/core@1.6.0':
dependencies:
'@emnapi/wasi-threads': 1.1.0
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.5.0':
+ '@emnapi/runtime@1.6.0':
dependencies:
tslib: 2.8.1
optional: true
@@ -12784,150 +13005,150 @@ snapshots:
'@esbuild-kit/esm-loader@2.6.5':
dependencies:
'@esbuild-kit/core-utils': 3.3.2
- get-tsconfig: 4.10.1
+ get-tsconfig: 4.13.0
- '@esbuild/aix-ppc64@0.25.10':
+ '@esbuild/aix-ppc64@0.25.11':
optional: true
'@esbuild/android-arm64@0.18.20':
optional: true
- '@esbuild/android-arm64@0.25.10':
+ '@esbuild/android-arm64@0.25.11':
optional: true
'@esbuild/android-arm@0.18.20':
optional: true
- '@esbuild/android-arm@0.25.10':
+ '@esbuild/android-arm@0.25.11':
optional: true
'@esbuild/android-x64@0.18.20':
optional: true
- '@esbuild/android-x64@0.25.10':
+ '@esbuild/android-x64@0.25.11':
optional: true
'@esbuild/darwin-arm64@0.18.20':
optional: true
- '@esbuild/darwin-arm64@0.25.10':
+ '@esbuild/darwin-arm64@0.25.11':
optional: true
'@esbuild/darwin-x64@0.18.20':
optional: true
- '@esbuild/darwin-x64@0.25.10':
+ '@esbuild/darwin-x64@0.25.11':
optional: true
'@esbuild/freebsd-arm64@0.18.20':
optional: true
- '@esbuild/freebsd-arm64@0.25.10':
+ '@esbuild/freebsd-arm64@0.25.11':
optional: true
'@esbuild/freebsd-x64@0.18.20':
optional: true
- '@esbuild/freebsd-x64@0.25.10':
+ '@esbuild/freebsd-x64@0.25.11':
optional: true
'@esbuild/linux-arm64@0.18.20':
optional: true
- '@esbuild/linux-arm64@0.25.10':
+ '@esbuild/linux-arm64@0.25.11':
optional: true
'@esbuild/linux-arm@0.18.20':
optional: true
- '@esbuild/linux-arm@0.25.10':
+ '@esbuild/linux-arm@0.25.11':
optional: true
'@esbuild/linux-ia32@0.18.20':
optional: true
- '@esbuild/linux-ia32@0.25.10':
+ '@esbuild/linux-ia32@0.25.11':
optional: true
'@esbuild/linux-loong64@0.18.20':
optional: true
- '@esbuild/linux-loong64@0.25.10':
+ '@esbuild/linux-loong64@0.25.11':
optional: true
'@esbuild/linux-mips64el@0.18.20':
optional: true
- '@esbuild/linux-mips64el@0.25.10':
+ '@esbuild/linux-mips64el@0.25.11':
optional: true
'@esbuild/linux-ppc64@0.18.20':
optional: true
- '@esbuild/linux-ppc64@0.25.10':
+ '@esbuild/linux-ppc64@0.25.11':
optional: true
'@esbuild/linux-riscv64@0.18.20':
optional: true
- '@esbuild/linux-riscv64@0.25.10':
+ '@esbuild/linux-riscv64@0.25.11':
optional: true
'@esbuild/linux-s390x@0.18.20':
optional: true
- '@esbuild/linux-s390x@0.25.10':
+ '@esbuild/linux-s390x@0.25.11':
optional: true
'@esbuild/linux-x64@0.18.20':
optional: true
- '@esbuild/linux-x64@0.25.10':
+ '@esbuild/linux-x64@0.25.11':
optional: true
- '@esbuild/netbsd-arm64@0.25.10':
+ '@esbuild/netbsd-arm64@0.25.11':
optional: true
'@esbuild/netbsd-x64@0.18.20':
optional: true
- '@esbuild/netbsd-x64@0.25.10':
+ '@esbuild/netbsd-x64@0.25.11':
optional: true
- '@esbuild/openbsd-arm64@0.25.10':
+ '@esbuild/openbsd-arm64@0.25.11':
optional: true
'@esbuild/openbsd-x64@0.18.20':
optional: true
- '@esbuild/openbsd-x64@0.25.10':
+ '@esbuild/openbsd-x64@0.25.11':
optional: true
- '@esbuild/openharmony-arm64@0.25.10':
+ '@esbuild/openharmony-arm64@0.25.11':
optional: true
'@esbuild/sunos-x64@0.18.20':
optional: true
- '@esbuild/sunos-x64@0.25.10':
+ '@esbuild/sunos-x64@0.25.11':
optional: true
'@esbuild/win32-arm64@0.18.20':
optional: true
- '@esbuild/win32-arm64@0.25.10':
+ '@esbuild/win32-arm64@0.25.11':
optional: true
'@esbuild/win32-ia32@0.18.20':
optional: true
- '@esbuild/win32-ia32@0.25.10':
+ '@esbuild/win32-ia32@0.25.11':
optional: true
'@esbuild/win32-x64@0.18.20':
optional: true
- '@esbuild/win32-x64@0.25.10':
+ '@esbuild/win32-x64@0.25.11':
optional: true
'@floating-ui/core@1.7.3':
@@ -12939,20 +13160,20 @@ snapshots:
'@floating-ui/core': 1.7.3
'@floating-ui/utils': 0.2.10
- '@floating-ui/react-dom@2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@floating-ui/react-dom@2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@floating-ui/dom': 1.7.4
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
'@floating-ui/utils@0.2.10': {}
- '@gerrit0/mini-shiki@3.12.2':
+ '@gerrit0/mini-shiki@3.13.1':
dependencies:
- '@shikijs/engine-oniguruma': 3.12.2
- '@shikijs/langs': 3.12.2
- '@shikijs/themes': 3.12.2
- '@shikijs/types': 3.12.2
+ '@shikijs/engine-oniguruma': 3.13.0
+ '@shikijs/langs': 3.13.0
+ '@shikijs/themes': 3.13.0
+ '@shikijs/types': 3.13.0
'@shikijs/vscode-textmate': 10.0.2
'@hapi/hoek@9.3.0': {}
@@ -12963,17 +13184,17 @@ snapshots:
'@hexagon/base64@1.1.28': {}
- '@hookform/resolvers@5.2.2(react-hook-form@7.62.0(react@19.1.1))':
+ '@hookform/resolvers@5.2.2(react-hook-form@7.65.0(react@19.2.0))':
dependencies:
'@standard-schema/utils': 0.3.0
- react-hook-form: 7.62.0(react@19.1.1)
+ react-hook-form: 7.65.0(react@19.2.0)
- '@inquirer/external-editor@1.0.2(@types/node@24.5.2)':
+ '@inquirer/external-editor@1.0.2(@types/node@24.9.1)':
dependencies:
chardet: 2.1.0
iconv-lite: 0.7.0
optionalDependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@isaacs/balanced-match@4.0.1': {}
@@ -12990,10 +13211,6 @@ snapshots:
wrap-ansi: 8.1.0
wrap-ansi-cjs: wrap-ansi@7.0.0
- '@isaacs/fs-minipass@4.0.1':
- dependencies:
- minipass: 7.1.2
-
'@istanbuljs/schema@0.1.3': {}
'@jest/schemas@29.6.3':
@@ -13005,8 +13222,8 @@ snapshots:
'@jest/schemas': 29.6.3
'@types/istanbul-lib-coverage': 2.0.6
'@types/istanbul-reports': 3.0.4
- '@types/node': 24.5.2
- '@types/yargs': 17.0.33
+ '@types/node': 24.9.1
+ '@types/yargs': 17.0.34
chalk: 4.1.2
'@jridgewell/gen-mapping@0.3.13':
@@ -13033,10 +13250,48 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/buffers@1.2.1(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/codegen@1.0.0(tslib@2.8.1)':
+ dependencies:
+ tslib: 2.8.1
+
+ '@jsonjoy.com/json-pack@1.21.0(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1)
+ '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1)
+ '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
+ '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1)
+ '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
+ hyperdyperid: 1.2.0
+ thingies: 2.5.0(tslib@2.8.1)
+ tree-dump: 1.1.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/json-pointer@1.0.2(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
+ '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
+ tslib: 2.8.1
+
+ '@jsonjoy.com/util@1.9.0(tslib@2.8.1)':
+ dependencies:
+ '@jsonjoy.com/buffers': 1.2.1(tslib@2.8.1)
+ '@jsonjoy.com/codegen': 1.0.0(tslib@2.8.1)
+ tslib: 2.8.1
+
'@leichtgewicht/ip-codec@2.0.5': {}
'@levischuck/tiny-cbor@0.2.11': {}
+ '@lucide/lab@0.1.2': {}
+
'@manypkg/find-root@1.1.0':
dependencies:
'@babel/runtime': 7.28.4
@@ -13160,17 +13415,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
'@types/mdx': 2.0.13
- '@types/react': 19.1.13
- react: 19.1.1
+ '@types/react': 19.2.2
+ react: 19.2.0
'@mjackson/node-fetch-server@0.2.0': {}
- '@mjackson/node-fetch-server@0.7.0':
- optional: true
-
'@module-federation/error-codes@0.18.0': {}
'@module-federation/runtime-core@0.18.0':
@@ -13196,23 +13448,25 @@ snapshots:
'@module-federation/runtime': 0.18.0
'@module-federation/sdk': 0.18.0
- '@napi-rs/wasm-runtime@1.0.5':
+ '@napi-rs/wasm-runtime@1.0.7':
dependencies:
- '@emnapi/core': 1.5.0
- '@emnapi/runtime': 1.5.0
+ '@emnapi/core': 1.6.0
+ '@emnapi/runtime': 1.6.0
'@tybys/wasm-util': 0.10.1
optional: true
- '@noble/ciphers@0.6.0': {}
-
'@noble/ciphers@1.3.0': {}
+ '@noble/ciphers@2.0.1': {}
+
'@noble/curves@1.9.7':
dependencies:
'@noble/hashes': 1.8.0
'@noble/hashes@1.8.0': {}
+ '@noble/hashes@2.0.1': {}
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -13233,7 +13487,7 @@ snapshots:
proc-log: 3.0.0
promise-inflight: 1.0.1
promise-retry: 2.0.1
- semver: 7.7.2
+ semver: 7.7.3
which: 3.0.1
transitivePeerDependencies:
- bluebird
@@ -13246,7 +13500,7 @@ snapshots:
json-parse-even-better-errors: 3.0.2
normalize-package-data: 5.0.0
proc-log: 3.0.0
- semver: 7.7.2
+ semver: 7.7.3
transitivePeerDependencies:
- bluebird
@@ -13264,7 +13518,7 @@ snapshots:
'@opentelemetry/api@1.9.0': {}
- '@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
@@ -13273,10 +13527,15 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/semantic-conventions': 1.37.0
+ '@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0)':
+ dependencies:
+ '@opentelemetry/api': 1.9.0
+ '@opentelemetry/semantic-conventions': 1.37.0
+
'@opentelemetry/instrumentation-amqplib@0.51.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
transitivePeerDependencies:
@@ -13285,7 +13544,7 @@ snapshots:
'@opentelemetry/instrumentation-connect@0.48.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
'@types/connect': 3.4.38
@@ -13302,7 +13561,7 @@ snapshots:
'@opentelemetry/instrumentation-express@0.53.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
transitivePeerDependencies:
@@ -13311,7 +13570,7 @@ snapshots:
'@opentelemetry/instrumentation-fs@0.24.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
@@ -13333,7 +13592,7 @@ snapshots:
'@opentelemetry/instrumentation-hapi@0.51.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
transitivePeerDependencies:
@@ -13353,7 +13612,7 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/redis-common': 0.38.0
+ '@opentelemetry/redis-common': 0.38.2
'@opentelemetry/semantic-conventions': 1.37.0
transitivePeerDependencies:
- supports-color
@@ -13377,7 +13636,7 @@ snapshots:
'@opentelemetry/instrumentation-koa@0.52.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
transitivePeerDependencies:
@@ -13401,7 +13660,7 @@ snapshots:
'@opentelemetry/instrumentation-mongoose@0.51.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
transitivePeerDependencies:
@@ -13412,7 +13671,7 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
- '@opentelemetry/sql-common': 0.41.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
@@ -13428,10 +13687,10 @@ snapshots:
'@opentelemetry/instrumentation-pg@0.57.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
- '@opentelemetry/sql-common': 0.41.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sql-common': 0.41.2(@opentelemetry/api@1.9.0)
'@types/pg': 8.15.5
'@types/pg-pool': 2.0.6
transitivePeerDependencies:
@@ -13441,7 +13700,7 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/redis-common': 0.38.0
+ '@opentelemetry/redis-common': 0.38.2
'@opentelemetry/semantic-conventions': 1.37.0
transitivePeerDependencies:
- supports-color
@@ -13458,7 +13717,7 @@ snapshots:
'@opentelemetry/instrumentation-undici@0.15.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
transitivePeerDependencies:
- supports-color
@@ -13467,7 +13726,7 @@ snapshots:
dependencies:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.204.0
- import-in-the-middle: 1.14.2
+ import-in-the-middle: 1.15.0
require-in-the-middle: 7.5.2
transitivePeerDependencies:
- supports-color
@@ -13477,34 +13736,34 @@ snapshots:
'@opentelemetry/api': 1.9.0
'@opentelemetry/api-logs': 0.57.2
'@types/shimmer': 1.2.0
- import-in-the-middle: 1.14.2
+ import-in-the-middle: 1.15.0
require-in-the-middle: 7.5.2
- semver: 7.7.2
+ semver: 7.7.3
shimmer: 1.2.1
transitivePeerDependencies:
- supports-color
- '@opentelemetry/redis-common@0.38.0': {}
+ '@opentelemetry/redis-common@0.38.2': {}
- '@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
- '@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
'@opentelemetry/semantic-conventions@1.37.0': {}
- '@opentelemetry/sql-common@0.41.0(@opentelemetry/api@1.9.0)':
+ '@opentelemetry/sql-common@0.41.2(@opentelemetry/api@1.9.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@peculiar/asn1-android@2.5.0':
dependencies:
@@ -13602,7 +13861,7 @@ snapshots:
tslib: 2.8.1
tsyringe: 4.10.0
- '@petamoriken/float16@3.9.2': {}
+ '@petamoriken/float16@3.9.3': {}
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -13621,7 +13880,7 @@ snapshots:
'@polka/url@1.0.0-next.29': {}
- '@posthog/core@1.0.2': {}
+ '@posthog/core@1.5.0': {}
'@prisma/instrumentation@6.15.0(@opentelemetry/api@1.9.0)':
dependencies:
@@ -13634,900 +13893,899 @@ snapshots:
'@radix-ui/primitive@1.1.3': {}
- '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-accessible-icon@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-accordion@1.2.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-aspect-ratio@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
-
- '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
- dependencies:
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
+
+ '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-collection@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-compose-refs@1.1.2(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-context-menu@2.2.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-context@1.1.2(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-context@1.1.2(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
aria-hidden: 1.2.6
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-direction@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-direction@1.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-focus-guards@1.1.3(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-form@0.1.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-form@0.1.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-label': 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-hover-card@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-icons@1.3.2(react@19.1.1)':
+ '@radix-ui/react-icons@1.3.2(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@radix-ui/react-id@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-id@1.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-label@2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-menu@2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
aria-hidden: 1.2.6
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-menubar@1.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-navigation-menu@1.2.14(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-one-time-password-field@0.1.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-password-toggle-field@0.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-popover@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-popover@1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
aria-hidden: 1.2.6
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
-
- '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
- dependencies:
- '@floating-ui/react-dom': 2.1.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
+
+ '@radix-ui/react-popper@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@floating-ui/react-dom': 2.1.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-rect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0)
'@radix-ui/rect': 1.1.1
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-portal@1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-presence@1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-progress@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-progress@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-radio-group@1.3.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-scroll-area@1.2.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-select@2.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-select@2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
aria-hidden: 1.2.6
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-remove-scroll: 2.7.1(@types/react@19.2.2)(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-separator@1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-slider@1.3.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-slider@1.3.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/number': 1.1.1
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-slot@1.2.3(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-slot@1.2.3(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-switch@1.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-switch@1.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-previous': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-tabs@1.1.13(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-toast@1.2.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-toast@1.2.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-toolbar@1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
- '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- react: 19.1.1
- use-sync-external-store: 1.5.0(react@19.1.1)
+ react: 19.2.0
+ use-sync-external-store: 1.6.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-previous@1.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-rect@1.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
'@radix-ui/rect': 1.1.1
- react: 19.1.1
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-use-size@1.1.1(@types/react@19.1.13)(react@19.1.1)':
+ '@radix-ui/react-use-size@1.1.1(@types/react@19.2.2)(react@19.2.0)':
dependencies:
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- react: 19.1.1
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ react: 19.2.0
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
'@radix-ui/rect@1.1.1': {}
- '@react-email/body@0.1.0(react@19.1.1)':
+ '@react-email/body@0.1.0(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/button@0.2.0(react@19.1.1)':
+ '@react-email/button@0.2.0(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/code-block@0.1.0(react@19.1.1)':
+ '@react-email/code-block@0.1.0(react@19.2.0)':
dependencies:
prismjs: 1.30.0
- react: 19.1.1
-
- '@react-email/code-inline@0.0.5(react@19.1.1)':
- dependencies:
- react: 19.1.1
-
- '@react-email/column@0.0.13(react@19.1.1)':
- dependencies:
- react: 19.1.1
-
- '@react-email/components@0.5.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
- dependencies:
- '@react-email/body': 0.1.0(react@19.1.1)
- '@react-email/button': 0.2.0(react@19.1.1)
- '@react-email/code-block': 0.1.0(react@19.1.1)
- '@react-email/code-inline': 0.0.5(react@19.1.1)
- '@react-email/column': 0.0.13(react@19.1.1)
- '@react-email/container': 0.0.15(react@19.1.1)
- '@react-email/font': 0.0.9(react@19.1.1)
- '@react-email/head': 0.0.12(react@19.1.1)
- '@react-email/heading': 0.0.15(react@19.1.1)
- '@react-email/hr': 0.0.11(react@19.1.1)
- '@react-email/html': 0.0.11(react@19.1.1)
- '@react-email/img': 0.0.11(react@19.1.1)
- '@react-email/link': 0.0.12(react@19.1.1)
- '@react-email/markdown': 0.0.15(react@19.1.1)
- '@react-email/preview': 0.0.13(react@19.1.1)
- '@react-email/render': 1.2.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@react-email/row': 0.0.12(react@19.1.1)
- '@react-email/section': 0.0.16(react@19.1.1)
- '@react-email/tailwind': 1.2.2(react@19.1.1)
- '@react-email/text': 0.1.5(react@19.1.1)
- react: 19.1.1
+ react: 19.2.0
+
+ '@react-email/code-inline@0.0.5(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+
+ '@react-email/column@0.0.13(react@19.2.0)':
+ dependencies:
+ react: 19.2.0
+
+ '@react-email/components@0.5.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
+ dependencies:
+ '@react-email/body': 0.1.0(react@19.2.0)
+ '@react-email/button': 0.2.0(react@19.2.0)
+ '@react-email/code-block': 0.1.0(react@19.2.0)
+ '@react-email/code-inline': 0.0.5(react@19.2.0)
+ '@react-email/column': 0.0.13(react@19.2.0)
+ '@react-email/container': 0.0.15(react@19.2.0)
+ '@react-email/font': 0.0.9(react@19.2.0)
+ '@react-email/head': 0.0.12(react@19.2.0)
+ '@react-email/heading': 0.0.15(react@19.2.0)
+ '@react-email/hr': 0.0.11(react@19.2.0)
+ '@react-email/html': 0.0.11(react@19.2.0)
+ '@react-email/img': 0.0.11(react@19.2.0)
+ '@react-email/link': 0.0.12(react@19.2.0)
+ '@react-email/markdown': 0.0.16(react@19.2.0)
+ '@react-email/preview': 0.0.13(react@19.2.0)
+ '@react-email/render': 1.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@react-email/row': 0.0.12(react@19.2.0)
+ '@react-email/section': 0.0.16(react@19.2.0)
+ '@react-email/tailwind': 1.2.2(react@19.2.0)
+ '@react-email/text': 0.1.5(react@19.2.0)
+ react: 19.2.0
transitivePeerDependencies:
- react-dom
- '@react-email/container@0.0.15(react@19.1.1)':
+ '@react-email/container@0.0.15(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/font@0.0.9(react@19.1.1)':
+ '@react-email/font@0.0.9(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/head@0.0.12(react@19.1.1)':
+ '@react-email/head@0.0.12(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/heading@0.0.15(react@19.1.1)':
+ '@react-email/heading@0.0.15(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/hr@0.0.11(react@19.1.1)':
+ '@react-email/hr@0.0.11(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/html@0.0.11(react@19.1.1)':
+ '@react-email/html@0.0.11(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/img@0.0.11(react@19.1.1)':
+ '@react-email/img@0.0.11(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/link@0.0.12(react@19.1.1)':
+ '@react-email/link@0.0.12(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/markdown@0.0.15(react@19.1.1)':
+ '@react-email/markdown@0.0.16(react@19.2.0)':
dependencies:
- md-to-react-email: 5.0.5(react@19.1.1)
- react: 19.1.1
+ marked: 15.0.12
+ react: 19.2.0
- '@react-email/preview@0.0.13(react@19.1.1)':
+ '@react-email/preview@0.0.13(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/render@1.2.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@react-email/render@1.4.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
html-to-text: 9.0.5
prettier: 3.6.2
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
react-promise-suspense: 0.3.4
- '@react-email/row@0.0.12(react@19.1.1)':
+ '@react-email/row@0.0.12(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/section@0.0.16(react@19.1.1)':
+ '@react-email/section@0.0.16(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/tailwind@1.2.2(react@19.1.1)':
+ '@react-email/tailwind@1.2.2(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-email/text@0.1.5(react@19.1.1)':
+ '@react-email/text@0.1.5(react@19.2.0)':
dependencies:
- react: 19.1.1
+ react: 19.2.0
- '@react-router/dev@7.9.1(@react-router/serve@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2))(@types/node@24.5.2)(@vitejs/plugin-rsc@0.4.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)))(jiti@2.5.1)(lightningcss@1.30.1)(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)':
+ '@react-router/dev@7.9.4(@react-router/serve@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.44.0)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/generator': 7.28.3
- '@babel/parser': 7.28.4
- '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4)
- '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4)
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/parser': 7.28.5
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5)
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
'@npmcli/package-json': 4.0.1
- '@react-router/node': 7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)
+ '@react-router/node': 7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)
+ '@remix-run/node-fetch-server': 0.9.0
arg: 5.0.2
babel-dead-code-elimination: 1.0.10
chokidar: 4.0.3
dedent: 1.7.0
es-module-lexer: 1.7.0
exit-hook: 2.2.1
- isbot: 5.1.30
+ isbot: 5.1.31
jsesc: 3.0.2
lodash: 4.17.21
pathe: 1.1.2
picocolors: 1.1.1
prettier: 3.6.2
react-refresh: 0.14.2
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- semver: 7.7.2
- set-cookie-parser: 2.7.1
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ semver: 7.7.3
tinyglobby: 0.2.15
- valibot: 0.41.0(typescript@5.9.2)
- vite: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
- vite-node: 3.2.4(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ valibot: 1.1.0(typescript@5.9.3)
+ vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
+ vite-node: 3.2.4(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
optionalDependencies:
- '@react-router/serve': 7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)
- '@vitejs/plugin-rsc': 0.4.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))
- typescript: 5.9.2
+ '@react-router/serve': 7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)
+ typescript: 5.9.3
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -14544,37 +14802,38 @@ snapshots:
- tsx
- yaml
- '@react-router/express@7.9.1(express@4.21.2)(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)':
+ '@react-router/express@7.9.4(express@4.21.2)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)':
dependencies:
- '@react-router/node': 7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)
+ '@react-router/node': 7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)
express: 4.21.2
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
optionalDependencies:
- typescript: 5.9.2
+ typescript: 5.9.3
- '@react-router/fs-routes@7.9.1(@react-router/dev@7.9.1(@react-router/serve@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2))(@types/node@24.5.2)(@vitejs/plugin-rsc@0.4.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)))(jiti@2.5.1)(lightningcss@1.30.1)(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.2)':
+ '@react-router/fs-routes@7.9.4(@react-router/dev@7.9.4(@react-router/serve@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.44.0)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.3)':
dependencies:
- '@react-router/dev': 7.9.1(@react-router/serve@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2))(@types/node@24.5.2)(@vitejs/plugin-rsc@0.4.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)))(jiti@2.5.1)(lightningcss@1.30.1)(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(terser@5.44.0)(typescript@5.9.2)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)
+ '@react-router/dev': 7.9.4(@react-router/serve@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(terser@5.44.0)(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))(yaml@2.8.1)
minimatch: 9.0.5
optionalDependencies:
- typescript: 5.9.2
+ typescript: 5.9.3
- '@react-router/node@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)':
+ '@react-router/node@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)':
dependencies:
'@mjackson/node-fetch-server': 0.2.0
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
optionalDependencies:
- typescript: 5.9.2
+ typescript: 5.9.3
- '@react-router/serve@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)':
+ '@react-router/serve@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)':
dependencies:
- '@react-router/express': 7.9.1(express@4.21.2)(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)
- '@react-router/node': 7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)
+ '@mjackson/node-fetch-server': 0.2.0
+ '@react-router/express': 7.9.4(express@4.21.2)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)
+ '@react-router/node': 7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)
compression: 1.8.1
express: 4.21.2
get-port: 5.1.1
morgan: 1.10.1
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
source-map-support: 0.5.21
transitivePeerDependencies:
- supports-color
@@ -14582,7 +14841,7 @@ snapshots:
'@remix-run/file-storage@0.9.0':
dependencies:
- '@remix-run/lazy-file': 3.5.0
+ '@remix-run/lazy-file': 3.6.0
'@remix-run/form-data-parser@0.10.1':
dependencies:
@@ -14590,7 +14849,7 @@ snapshots:
'@remix-run/headers@0.12.0': {}
- '@remix-run/lazy-file@3.5.0':
+ '@remix-run/lazy-file@3.6.0':
dependencies:
mrmime: 2.0.1
@@ -14598,181 +14857,186 @@ snapshots:
dependencies:
'@remix-run/headers': 0.12.0
+ '@remix-run/node-fetch-server@0.9.0': {}
+
'@repeaterjs/repeater@3.0.6': {}
- '@rollup/plugin-commonjs@28.0.6(rollup@4.50.2)':
+ '@rollup/plugin-commonjs@28.0.8(rollup@4.52.5)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.5)
commondir: 1.0.1
estree-walker: 2.0.2
fdir: 6.5.0(picomatch@4.0.3)
is-reference: 1.2.1
- magic-string: 0.30.19
+ magic-string: 0.30.21
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.52.5
- '@rollup/plugin-inject@5.0.5(rollup@4.50.2)':
+ '@rollup/plugin-inject@5.0.5(rollup@4.52.5)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.5)
estree-walker: 2.0.2
- magic-string: 0.30.19
+ magic-string: 0.30.21
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.52.5
- '@rollup/plugin-json@6.1.0(rollup@4.50.2)':
+ '@rollup/plugin-json@6.1.0(rollup@4.52.5)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.5)
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.52.5
- '@rollup/plugin-node-resolve@16.0.1(rollup@4.50.2)':
+ '@rollup/plugin-node-resolve@16.0.3(rollup@4.52.5)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.5)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
- resolve: 1.22.10
+ resolve: 1.22.11
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.52.5
- '@rollup/plugin-terser@0.4.4(rollup@4.50.2)':
+ '@rollup/plugin-terser@0.4.4(rollup@4.52.5)':
dependencies:
serialize-javascript: 6.0.2
smob: 1.5.0
terser: 5.44.0
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.52.5
- '@rollup/plugin-typescript@12.1.4(rollup@4.50.2)(tslib@2.8.1)(typescript@5.9.2)':
+ '@rollup/plugin-typescript@12.3.0(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3)':
dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.50.2)
- resolve: 1.22.10
- typescript: 5.9.2
+ '@rollup/pluginutils': 5.3.0(rollup@4.52.5)
+ resolve: 1.22.11
+ typescript: 5.9.3
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.52.5
tslib: 2.8.1
- '@rollup/pluginutils@5.3.0(rollup@4.50.2)':
+ '@rollup/pluginutils@5.3.0(rollup@4.52.5)':
dependencies:
'@types/estree': 1.0.8
estree-walker: 2.0.2
picomatch: 4.0.3
optionalDependencies:
- rollup: 4.50.2
+ rollup: 4.52.5
- '@rollup/rollup-android-arm-eabi@4.50.2':
+ '@rollup/rollup-android-arm-eabi@4.52.5':
optional: true
- '@rollup/rollup-android-arm64@4.50.2':
+ '@rollup/rollup-android-arm64@4.52.5':
optional: true
- '@rollup/rollup-darwin-arm64@4.50.2':
+ '@rollup/rollup-darwin-arm64@4.52.5':
optional: true
- '@rollup/rollup-darwin-x64@4.50.2':
+ '@rollup/rollup-darwin-x64@4.52.5':
optional: true
- '@rollup/rollup-freebsd-arm64@4.50.2':
+ '@rollup/rollup-freebsd-arm64@4.52.5':
optional: true
- '@rollup/rollup-freebsd-x64@4.50.2':
+ '@rollup/rollup-freebsd-x64@4.52.5':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.50.2':
+ '@rollup/rollup-linux-arm-gnueabihf@4.52.5':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.50.2':
+ '@rollup/rollup-linux-arm-musleabihf@4.52.5':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.50.2':
+ '@rollup/rollup-linux-arm64-gnu@4.52.5':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.50.2':
+ '@rollup/rollup-linux-arm64-musl@4.52.5':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.50.2':
+ '@rollup/rollup-linux-loong64-gnu@4.52.5':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.50.2':
+ '@rollup/rollup-linux-ppc64-gnu@4.52.5':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.50.2':
+ '@rollup/rollup-linux-riscv64-gnu@4.52.5':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.50.2':
+ '@rollup/rollup-linux-riscv64-musl@4.52.5':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.50.2':
+ '@rollup/rollup-linux-s390x-gnu@4.52.5':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.50.2':
+ '@rollup/rollup-linux-x64-gnu@4.52.5':
optional: true
- '@rollup/rollup-linux-x64-musl@4.50.2':
+ '@rollup/rollup-linux-x64-musl@4.52.5':
optional: true
- '@rollup/rollup-openharmony-arm64@4.50.2':
+ '@rollup/rollup-openharmony-arm64@4.52.5':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.50.2':
+ '@rollup/rollup-win32-arm64-msvc@4.52.5':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.50.2':
+ '@rollup/rollup-win32-ia32-msvc@4.52.5':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.50.2':
+ '@rollup/rollup-win32-x64-gnu@4.52.5':
optional: true
- '@rspack/binding-darwin-arm64@1.5.5':
+ '@rollup/rollup-win32-x64-msvc@4.52.5':
optional: true
- '@rspack/binding-darwin-x64@1.5.5':
+ '@rspack/binding-darwin-arm64@1.5.8':
optional: true
- '@rspack/binding-linux-arm64-gnu@1.5.5':
+ '@rspack/binding-darwin-x64@1.5.8':
optional: true
- '@rspack/binding-linux-arm64-musl@1.5.5':
+ '@rspack/binding-linux-arm64-gnu@1.5.8':
optional: true
- '@rspack/binding-linux-x64-gnu@1.5.5':
+ '@rspack/binding-linux-arm64-musl@1.5.8':
optional: true
- '@rspack/binding-linux-x64-musl@1.5.5':
+ '@rspack/binding-linux-x64-gnu@1.5.8':
optional: true
- '@rspack/binding-wasm32-wasi@1.5.5':
+ '@rspack/binding-linux-x64-musl@1.5.8':
+ optional: true
+
+ '@rspack/binding-wasm32-wasi@1.5.8':
dependencies:
- '@napi-rs/wasm-runtime': 1.0.5
+ '@napi-rs/wasm-runtime': 1.0.7
optional: true
- '@rspack/binding-win32-arm64-msvc@1.5.5':
+ '@rspack/binding-win32-arm64-msvc@1.5.8':
optional: true
- '@rspack/binding-win32-ia32-msvc@1.5.5':
+ '@rspack/binding-win32-ia32-msvc@1.5.8':
optional: true
- '@rspack/binding-win32-x64-msvc@1.5.5':
+ '@rspack/binding-win32-x64-msvc@1.5.8':
optional: true
- '@rspack/binding@1.5.5':
+ '@rspack/binding@1.5.8':
optionalDependencies:
- '@rspack/binding-darwin-arm64': 1.5.5
- '@rspack/binding-darwin-x64': 1.5.5
- '@rspack/binding-linux-arm64-gnu': 1.5.5
- '@rspack/binding-linux-arm64-musl': 1.5.5
- '@rspack/binding-linux-x64-gnu': 1.5.5
- '@rspack/binding-linux-x64-musl': 1.5.5
- '@rspack/binding-wasm32-wasi': 1.5.5
- '@rspack/binding-win32-arm64-msvc': 1.5.5
- '@rspack/binding-win32-ia32-msvc': 1.5.5
- '@rspack/binding-win32-x64-msvc': 1.5.5
-
- '@rspack/core@1.5.5':
+ '@rspack/binding-darwin-arm64': 1.5.8
+ '@rspack/binding-darwin-x64': 1.5.8
+ '@rspack/binding-linux-arm64-gnu': 1.5.8
+ '@rspack/binding-linux-arm64-musl': 1.5.8
+ '@rspack/binding-linux-x64-gnu': 1.5.8
+ '@rspack/binding-linux-x64-musl': 1.5.8
+ '@rspack/binding-wasm32-wasi': 1.5.8
+ '@rspack/binding-win32-arm64-msvc': 1.5.8
+ '@rspack/binding-win32-ia32-msvc': 1.5.8
+ '@rspack/binding-win32-x64-msvc': 1.5.8
+
+ '@rspack/core@1.5.8':
dependencies:
'@module-federation/runtime-tools': 0.18.0
- '@rspack/binding': 1.5.5
+ '@rspack/binding': 1.5.8
'@rspack/lite-tapable': 1.0.1
'@rspack/lite-tapable@1.0.1': {}
@@ -14782,44 +15046,44 @@ snapshots:
domhandler: 5.0.3
selderee: 0.11.0
- '@sentry-internal/browser-utils@10.12.0':
+ '@sentry-internal/browser-utils@10.22.0':
dependencies:
- '@sentry/core': 10.12.0
+ '@sentry/core': 10.22.0
- '@sentry-internal/feedback@10.12.0':
+ '@sentry-internal/feedback@10.22.0':
dependencies:
- '@sentry/core': 10.12.0
+ '@sentry/core': 10.22.0
'@sentry-internal/node-cpu-profiler@2.2.0':
dependencies:
- detect-libc: 2.1.0
- node-abi: 3.77.0
+ detect-libc: 2.1.2
+ node-abi: 3.78.0
- '@sentry-internal/replay-canvas@10.12.0':
+ '@sentry-internal/replay-canvas@10.22.0':
dependencies:
- '@sentry-internal/replay': 10.12.0
- '@sentry/core': 10.12.0
+ '@sentry-internal/replay': 10.22.0
+ '@sentry/core': 10.22.0
- '@sentry-internal/replay@10.12.0':
+ '@sentry-internal/replay@10.22.0':
dependencies:
- '@sentry-internal/browser-utils': 10.12.0
- '@sentry/core': 10.12.0
+ '@sentry-internal/browser-utils': 10.22.0
+ '@sentry/core': 10.22.0
- '@sentry/babel-plugin-component-annotate@4.3.0': {}
+ '@sentry/babel-plugin-component-annotate@4.5.0': {}
- '@sentry/browser@10.12.0':
+ '@sentry/browser@10.22.0':
dependencies:
- '@sentry-internal/browser-utils': 10.12.0
- '@sentry-internal/feedback': 10.12.0
- '@sentry-internal/replay': 10.12.0
- '@sentry-internal/replay-canvas': 10.12.0
- '@sentry/core': 10.12.0
+ '@sentry-internal/browser-utils': 10.22.0
+ '@sentry-internal/feedback': 10.22.0
+ '@sentry-internal/replay': 10.22.0
+ '@sentry-internal/replay-canvas': 10.22.0
+ '@sentry/core': 10.22.0
- '@sentry/bundler-plugin-core@4.3.0':
+ '@sentry/bundler-plugin-core@4.5.0':
dependencies:
- '@babel/core': 7.28.4
- '@sentry/babel-plugin-component-annotate': 4.3.0
- '@sentry/cli': 2.53.0
+ '@babel/core': 7.28.5
+ '@sentry/babel-plugin-component-annotate': 4.5.0
+ '@sentry/cli': 2.57.0
dotenv: 16.6.1
find-up: 5.0.0
glob: 9.3.5
@@ -14829,31 +15093,31 @@ snapshots:
- encoding
- supports-color
- '@sentry/cli-darwin@2.53.0':
+ '@sentry/cli-darwin@2.57.0':
optional: true
- '@sentry/cli-linux-arm64@2.53.0':
+ '@sentry/cli-linux-arm64@2.57.0':
optional: true
- '@sentry/cli-linux-arm@2.53.0':
+ '@sentry/cli-linux-arm@2.57.0':
optional: true
- '@sentry/cli-linux-i686@2.53.0':
+ '@sentry/cli-linux-i686@2.57.0':
optional: true
- '@sentry/cli-linux-x64@2.53.0':
+ '@sentry/cli-linux-x64@2.57.0':
optional: true
- '@sentry/cli-win32-arm64@2.53.0':
+ '@sentry/cli-win32-arm64@2.57.0':
optional: true
- '@sentry/cli-win32-i686@2.53.0':
+ '@sentry/cli-win32-i686@2.57.0':
optional: true
- '@sentry/cli-win32-x64@2.53.0':
+ '@sentry/cli-win32-x64@2.57.0':
optional: true
- '@sentry/cli@2.53.0':
+ '@sentry/cli@2.57.0':
dependencies:
https-proxy-agent: 5.0.1
node-fetch: 2.7.0
@@ -14861,38 +15125,41 @@ snapshots:
proxy-from-env: 1.1.0
which: 2.0.2
optionalDependencies:
- '@sentry/cli-darwin': 2.53.0
- '@sentry/cli-linux-arm': 2.53.0
- '@sentry/cli-linux-arm64': 2.53.0
- '@sentry/cli-linux-i686': 2.53.0
- '@sentry/cli-linux-x64': 2.53.0
- '@sentry/cli-win32-arm64': 2.53.0
- '@sentry/cli-win32-i686': 2.53.0
- '@sentry/cli-win32-x64': 2.53.0
+ '@sentry/cli-darwin': 2.57.0
+ '@sentry/cli-linux-arm': 2.57.0
+ '@sentry/cli-linux-arm64': 2.57.0
+ '@sentry/cli-linux-i686': 2.57.0
+ '@sentry/cli-linux-x64': 2.57.0
+ '@sentry/cli-win32-arm64': 2.57.0
+ '@sentry/cli-win32-i686': 2.57.0
+ '@sentry/cli-win32-x64': 2.57.0
transitivePeerDependencies:
- encoding
- supports-color
- '@sentry/core@10.12.0': {}
+ '@sentry/core@10.22.0': {}
- '@sentry/node-core@10.12.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)':
+ '@sentry/node-core@10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)':
dependencies:
+ '@apm-js-collab/tracing-hooks': 0.3.1
'@opentelemetry/api': 1.9.0
- '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
- '@sentry/core': 10.12.0
- '@sentry/opentelemetry': 10.12.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
- import-in-the-middle: 1.14.2
+ '@sentry/core': 10.22.0
+ '@sentry/opentelemetry': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
+ import-in-the-middle: 1.15.0
+ transitivePeerDependencies:
+ - supports-color
- '@sentry/node@10.12.0':
+ '@sentry/node@10.22.0':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-amqplib': 0.51.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-connect': 0.48.0(@opentelemetry/api@1.9.0)
@@ -14916,84 +15183,84 @@ snapshots:
'@opentelemetry/instrumentation-redis': 0.53.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-tedious': 0.23.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation-undici': 0.15.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/resources': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/resources': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
'@prisma/instrumentation': 6.15.0(@opentelemetry/api@1.9.0)
- '@sentry/core': 10.12.0
- '@sentry/node-core': 10.12.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
- '@sentry/opentelemetry': 10.12.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
- import-in-the-middle: 1.14.2
+ '@sentry/core': 10.22.0
+ '@sentry/node-core': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.204.0(@opentelemetry/api@1.9.0))(@opentelemetry/resources@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
+ '@sentry/opentelemetry': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)
+ import-in-the-middle: 1.15.0
minimatch: 9.0.5
transitivePeerDependencies:
- supports-color
- '@sentry/opentelemetry@10.12.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.1.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)':
+ '@sentry/opentelemetry@10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/context-async-hooks': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
- '@opentelemetry/sdk-trace-base': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/context-async-hooks': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/sdk-trace-base': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
- '@sentry/core': 10.12.0
+ '@sentry/core': 10.22.0
- '@sentry/profiling-node@10.12.0':
+ '@sentry/profiling-node@10.22.0':
dependencies:
'@sentry-internal/node-cpu-profiler': 2.2.0
- '@sentry/core': 10.12.0
- '@sentry/node': 10.12.0
+ '@sentry/core': 10.22.0
+ '@sentry/node': 10.22.0
transitivePeerDependencies:
- supports-color
- '@sentry/react-router@10.12.0(@react-router/node@7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2))(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)':
+ '@sentry/react-router@10.22.0(@react-router/node@7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3))(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)':
dependencies:
'@opentelemetry/api': 1.9.0
- '@opentelemetry/core': 2.1.0(@opentelemetry/api@1.9.0)
+ '@opentelemetry/core': 2.2.0(@opentelemetry/api@1.9.0)
'@opentelemetry/instrumentation': 0.204.0(@opentelemetry/api@1.9.0)
'@opentelemetry/semantic-conventions': 1.37.0
- '@react-router/node': 7.9.1(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(typescript@5.9.2)
- '@sentry/browser': 10.12.0
- '@sentry/cli': 2.53.0
- '@sentry/core': 10.12.0
- '@sentry/node': 10.12.0
- '@sentry/react': 10.12.0(react@19.1.1)
- '@sentry/vite-plugin': 4.3.0
+ '@react-router/node': 7.9.4(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(typescript@5.9.3)
+ '@sentry/browser': 10.22.0
+ '@sentry/cli': 2.57.0
+ '@sentry/core': 10.22.0
+ '@sentry/node': 10.22.0
+ '@sentry/react': 10.22.0(react@19.2.0)
+ '@sentry/vite-plugin': 4.5.0
glob: 11.0.1
- react: 19.1.1
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react: 19.2.0
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
transitivePeerDependencies:
- encoding
- supports-color
- '@sentry/react@10.12.0(react@19.1.1)':
+ '@sentry/react@10.22.0(react@19.2.0)':
dependencies:
- '@sentry/browser': 10.12.0
- '@sentry/core': 10.12.0
+ '@sentry/browser': 10.22.0
+ '@sentry/core': 10.22.0
hoist-non-react-statics: 3.3.2
- react: 19.1.1
+ react: 19.2.0
- '@sentry/vite-plugin@4.3.0':
+ '@sentry/vite-plugin@4.5.0':
dependencies:
- '@sentry/bundler-plugin-core': 4.3.0
+ '@sentry/bundler-plugin-core': 4.5.0
unplugin: 1.0.1
transitivePeerDependencies:
- encoding
- supports-color
- '@shikijs/engine-oniguruma@3.12.2':
+ '@shikijs/engine-oniguruma@3.13.0':
dependencies:
- '@shikijs/types': 3.12.2
+ '@shikijs/types': 3.13.0
'@shikijs/vscode-textmate': 10.0.2
- '@shikijs/langs@3.12.2':
+ '@shikijs/langs@3.13.0':
dependencies:
- '@shikijs/types': 3.12.2
+ '@shikijs/types': 3.13.0
- '@shikijs/themes@3.12.2':
+ '@shikijs/themes@3.13.0':
dependencies:
- '@shikijs/types': 3.12.2
+ '@shikijs/types': 3.13.0
- '@shikijs/types@3.12.2':
+ '@shikijs/types@3.13.0':
dependencies:
'@shikijs/vscode-textmate': 10.0.2
'@types/hast': 3.0.4
@@ -15008,9 +15275,9 @@ snapshots:
'@sideway/pinpoint@2.0.0': {}
- '@simplewebauthn/browser@13.2.0': {}
+ '@simplewebauthn/browser@13.2.2': {}
- '@simplewebauthn/server@13.2.1':
+ '@simplewebauthn/server@13.2.2':
dependencies:
'@hexagon/base64': 1.1.28
'@levischuck/tiny-cbor': 0.2.11
@@ -15027,13 +15294,13 @@ snapshots:
'@sindresorhus/is@5.6.0': {}
- '@slorber/react-helmet-async@1.3.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@slorber/react-helmet-async@1.3.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@babel/runtime': 7.28.4
invariant: 2.2.4
prop-types: 15.8.1
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
react-fast-compare: 3.2.2
shallowequal: 1.1.0
@@ -15043,58 +15310,60 @@ snapshots:
micromark-util-character: 1.2.0
micromark-util-symbol: 1.1.0
+ '@standard-schema/spec@1.0.0': {}
+
'@standard-schema/utils@0.3.0': {}
- '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.4)':
+ '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.4)':
+ '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.4)':
+ '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.4)':
+ '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.4)':
+ '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.4)':
+ '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.4)':
+ '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.4)':
+ '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
- '@svgr/babel-preset@8.1.0(@babel/core@7.28.4)':
+ '@svgr/babel-preset@8.1.0(@babel/core@7.28.5)':
dependencies:
- '@babel/core': 7.28.4
- '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.4)
- '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.4)
- '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.4)
- '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.4)
- '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.4)
- '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.4)
- '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.4)
- '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.28.5)
+ '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.28.5)
- '@svgr/core@8.1.0(typescript@5.9.2)':
+ '@svgr/core@8.1.0(typescript@5.9.3)':
dependencies:
- '@babel/core': 7.28.4
- '@svgr/babel-preset': 8.1.0(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@svgr/babel-preset': 8.1.0(@babel/core@7.28.5)
camelcase: 6.3.0
- cosmiconfig: 8.3.6(typescript@5.9.2)
+ cosmiconfig: 8.3.6(typescript@5.9.3)
snake-case: 3.0.4
transitivePeerDependencies:
- supports-color
@@ -15102,134 +15371,134 @@ snapshots:
'@svgr/hast-util-to-babel-ast@8.0.0':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
entities: 4.5.0
- '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.2))':
+ '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))':
dependencies:
- '@babel/core': 7.28.4
- '@svgr/babel-preset': 8.1.0(@babel/core@7.28.4)
- '@svgr/core': 8.1.0(typescript@5.9.2)
+ '@babel/core': 7.28.5
+ '@svgr/babel-preset': 8.1.0(@babel/core@7.28.5)
+ '@svgr/core': 8.1.0(typescript@5.9.3)
'@svgr/hast-util-to-babel-ast': 8.0.0
svg-parser: 2.0.4
transitivePeerDependencies:
- supports-color
- '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.2))(typescript@5.9.2)':
+ '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)':
dependencies:
- '@svgr/core': 8.1.0(typescript@5.9.2)
- cosmiconfig: 8.3.6(typescript@5.9.2)
+ '@svgr/core': 8.1.0(typescript@5.9.3)
+ cosmiconfig: 8.3.6(typescript@5.9.3)
deepmerge: 4.3.1
svgo: 3.3.2
transitivePeerDependencies:
- typescript
- '@svgr/webpack@8.1.0(typescript@5.9.2)':
+ '@svgr/webpack@8.1.0(typescript@5.9.3)':
dependencies:
- '@babel/core': 7.28.4
- '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.28.4)
- '@babel/preset-env': 7.28.3(@babel/core@7.28.4)
- '@babel/preset-react': 7.27.1(@babel/core@7.28.4)
- '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4)
- '@svgr/core': 8.1.0(typescript@5.9.2)
- '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.2))
- '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.2))(typescript@5.9.2)
+ '@babel/core': 7.28.5
+ '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.28.5)
+ '@babel/preset-env': 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-react': 7.28.5(@babel/core@7.28.5)
+ '@babel/preset-typescript': 7.28.5(@babel/core@7.28.5)
+ '@svgr/core': 8.1.0(typescript@5.9.3)
+ '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))
+ '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3))(typescript@5.9.3)
transitivePeerDependencies:
- supports-color
- typescript
- '@swc/core-darwin-arm64@1.13.5':
+ '@swc/core-darwin-arm64@1.13.21':
optional: true
- '@swc/core-darwin-x64@1.13.5':
+ '@swc/core-darwin-x64@1.13.21':
optional: true
- '@swc/core-linux-arm-gnueabihf@1.13.5':
+ '@swc/core-linux-arm-gnueabihf@1.13.21':
optional: true
- '@swc/core-linux-arm64-gnu@1.13.5':
+ '@swc/core-linux-arm64-gnu@1.13.21':
optional: true
- '@swc/core-linux-arm64-musl@1.13.5':
+ '@swc/core-linux-arm64-musl@1.13.21':
optional: true
- '@swc/core-linux-x64-gnu@1.13.5':
+ '@swc/core-linux-x64-gnu@1.13.21':
optional: true
- '@swc/core-linux-x64-musl@1.13.5':
+ '@swc/core-linux-x64-musl@1.13.21':
optional: true
- '@swc/core-win32-arm64-msvc@1.13.5':
+ '@swc/core-win32-arm64-msvc@1.13.21':
optional: true
- '@swc/core-win32-ia32-msvc@1.13.5':
+ '@swc/core-win32-ia32-msvc@1.13.21':
optional: true
- '@swc/core-win32-x64-msvc@1.13.5':
+ '@swc/core-win32-x64-msvc@1.13.21':
optional: true
- '@swc/core@1.13.5':
+ '@swc/core@1.13.21':
dependencies:
'@swc/counter': 0.1.3
'@swc/types': 0.1.25
optionalDependencies:
- '@swc/core-darwin-arm64': 1.13.5
- '@swc/core-darwin-x64': 1.13.5
- '@swc/core-linux-arm-gnueabihf': 1.13.5
- '@swc/core-linux-arm64-gnu': 1.13.5
- '@swc/core-linux-arm64-musl': 1.13.5
- '@swc/core-linux-x64-gnu': 1.13.5
- '@swc/core-linux-x64-musl': 1.13.5
- '@swc/core-win32-arm64-msvc': 1.13.5
- '@swc/core-win32-ia32-msvc': 1.13.5
- '@swc/core-win32-x64-msvc': 1.13.5
+ '@swc/core-darwin-arm64': 1.13.21
+ '@swc/core-darwin-x64': 1.13.21
+ '@swc/core-linux-arm-gnueabihf': 1.13.21
+ '@swc/core-linux-arm64-gnu': 1.13.21
+ '@swc/core-linux-arm64-musl': 1.13.21
+ '@swc/core-linux-x64-gnu': 1.13.21
+ '@swc/core-linux-x64-musl': 1.13.21
+ '@swc/core-win32-arm64-msvc': 1.13.21
+ '@swc/core-win32-ia32-msvc': 1.13.21
+ '@swc/core-win32-x64-msvc': 1.13.21
'@swc/counter@0.1.3': {}
- '@swc/html-darwin-arm64@1.13.5':
+ '@swc/html-darwin-arm64@1.13.21':
optional: true
- '@swc/html-darwin-x64@1.13.5':
+ '@swc/html-darwin-x64@1.13.21':
optional: true
- '@swc/html-linux-arm-gnueabihf@1.13.5':
+ '@swc/html-linux-arm-gnueabihf@1.13.21':
optional: true
- '@swc/html-linux-arm64-gnu@1.13.5':
+ '@swc/html-linux-arm64-gnu@1.13.21':
optional: true
- '@swc/html-linux-arm64-musl@1.13.5':
+ '@swc/html-linux-arm64-musl@1.13.21':
optional: true
- '@swc/html-linux-x64-gnu@1.13.5':
+ '@swc/html-linux-x64-gnu@1.13.21':
optional: true
- '@swc/html-linux-x64-musl@1.13.5':
+ '@swc/html-linux-x64-musl@1.13.21':
optional: true
- '@swc/html-win32-arm64-msvc@1.13.5':
+ '@swc/html-win32-arm64-msvc@1.13.21':
optional: true
- '@swc/html-win32-ia32-msvc@1.13.5':
+ '@swc/html-win32-ia32-msvc@1.13.21':
optional: true
- '@swc/html-win32-x64-msvc@1.13.5':
+ '@swc/html-win32-x64-msvc@1.13.21':
optional: true
- '@swc/html@1.13.5':
+ '@swc/html@1.13.21':
dependencies:
'@swc/counter': 0.1.3
optionalDependencies:
- '@swc/html-darwin-arm64': 1.13.5
- '@swc/html-darwin-x64': 1.13.5
- '@swc/html-linux-arm-gnueabihf': 1.13.5
- '@swc/html-linux-arm64-gnu': 1.13.5
- '@swc/html-linux-arm64-musl': 1.13.5
- '@swc/html-linux-x64-gnu': 1.13.5
- '@swc/html-linux-x64-musl': 1.13.5
- '@swc/html-win32-arm64-msvc': 1.13.5
- '@swc/html-win32-ia32-msvc': 1.13.5
- '@swc/html-win32-x64-msvc': 1.13.5
+ '@swc/html-darwin-arm64': 1.13.21
+ '@swc/html-darwin-x64': 1.13.21
+ '@swc/html-linux-arm-gnueabihf': 1.13.21
+ '@swc/html-linux-arm64-gnu': 1.13.21
+ '@swc/html-linux-arm64-musl': 1.13.21
+ '@swc/html-linux-x64-gnu': 1.13.21
+ '@swc/html-linux-x64-musl': 1.13.21
+ '@swc/html-win32-arm64-msvc': 1.13.21
+ '@swc/html-win32-ia32-msvc': 1.13.21
+ '@swc/html-win32-x64-msvc': 1.13.21
'@swc/types@0.1.25':
dependencies:
@@ -15243,90 +15512,87 @@ snapshots:
dependencies:
defer-to-connect: 2.0.1
- '@tailwindcss/node@4.1.13':
+ '@tailwindcss/node@4.1.16':
dependencies:
'@jridgewell/remapping': 2.3.5
enhanced-resolve: 5.18.3
- jiti: 2.5.1
- lightningcss: 1.30.1
- magic-string: 0.30.19
+ jiti: 2.6.1
+ lightningcss: 1.30.2
+ magic-string: 0.30.21
source-map-js: 1.2.1
- tailwindcss: 4.1.13
+ tailwindcss: 4.1.16
- '@tailwindcss/oxide-android-arm64@4.1.13':
+ '@tailwindcss/oxide-android-arm64@4.1.16':
optional: true
- '@tailwindcss/oxide-darwin-arm64@4.1.13':
+ '@tailwindcss/oxide-darwin-arm64@4.1.16':
optional: true
- '@tailwindcss/oxide-darwin-x64@4.1.13':
+ '@tailwindcss/oxide-darwin-x64@4.1.16':
optional: true
- '@tailwindcss/oxide-freebsd-x64@4.1.13':
+ '@tailwindcss/oxide-freebsd-x64@4.1.16':
optional: true
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.13':
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.16':
optional: true
- '@tailwindcss/oxide-linux-arm64-gnu@4.1.13':
+ '@tailwindcss/oxide-linux-arm64-gnu@4.1.16':
optional: true
- '@tailwindcss/oxide-linux-arm64-musl@4.1.13':
+ '@tailwindcss/oxide-linux-arm64-musl@4.1.16':
optional: true
- '@tailwindcss/oxide-linux-x64-gnu@4.1.13':
+ '@tailwindcss/oxide-linux-x64-gnu@4.1.16':
optional: true
- '@tailwindcss/oxide-linux-x64-musl@4.1.13':
+ '@tailwindcss/oxide-linux-x64-musl@4.1.16':
optional: true
- '@tailwindcss/oxide-wasm32-wasi@4.1.13':
+ '@tailwindcss/oxide-wasm32-wasi@4.1.16':
optional: true
- '@tailwindcss/oxide-win32-arm64-msvc@4.1.13':
+ '@tailwindcss/oxide-win32-arm64-msvc@4.1.16':
optional: true
- '@tailwindcss/oxide-win32-x64-msvc@4.1.13':
+ '@tailwindcss/oxide-win32-x64-msvc@4.1.16':
optional: true
- '@tailwindcss/oxide@4.1.13':
- dependencies:
- detect-libc: 2.1.0
- tar: 7.4.3
+ '@tailwindcss/oxide@4.1.16':
optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.1.13
- '@tailwindcss/oxide-darwin-arm64': 4.1.13
- '@tailwindcss/oxide-darwin-x64': 4.1.13
- '@tailwindcss/oxide-freebsd-x64': 4.1.13
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.13
- '@tailwindcss/oxide-linux-arm64-gnu': 4.1.13
- '@tailwindcss/oxide-linux-arm64-musl': 4.1.13
- '@tailwindcss/oxide-linux-x64-gnu': 4.1.13
- '@tailwindcss/oxide-linux-x64-musl': 4.1.13
- '@tailwindcss/oxide-wasm32-wasi': 4.1.13
- '@tailwindcss/oxide-win32-arm64-msvc': 4.1.13
- '@tailwindcss/oxide-win32-x64-msvc': 4.1.13
-
- '@tailwindcss/postcss@4.1.13':
+ '@tailwindcss/oxide-android-arm64': 4.1.16
+ '@tailwindcss/oxide-darwin-arm64': 4.1.16
+ '@tailwindcss/oxide-darwin-x64': 4.1.16
+ '@tailwindcss/oxide-freebsd-x64': 4.1.16
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.16
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.1.16
+ '@tailwindcss/oxide-linux-arm64-musl': 4.1.16
+ '@tailwindcss/oxide-linux-x64-gnu': 4.1.16
+ '@tailwindcss/oxide-linux-x64-musl': 4.1.16
+ '@tailwindcss/oxide-wasm32-wasi': 4.1.16
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.1.16
+ '@tailwindcss/oxide-win32-x64-msvc': 4.1.16
+
+ '@tailwindcss/postcss@4.1.16':
dependencies:
'@alloc/quick-lru': 5.2.0
- '@tailwindcss/node': 4.1.13
- '@tailwindcss/oxide': 4.1.13
+ '@tailwindcss/node': 4.1.16
+ '@tailwindcss/oxide': 4.1.16
postcss: 8.5.6
- tailwindcss: 4.1.13
+ tailwindcss: 4.1.16
- '@tailwindcss/vite@4.1.13(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))':
+ '@tailwindcss/vite@4.1.16(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))':
dependencies:
- '@tailwindcss/node': 4.1.13
- '@tailwindcss/oxide': 4.1.13
- tailwindcss: 4.1.13
- vite: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ '@tailwindcss/node': 4.1.16
+ '@tailwindcss/oxide': 4.1.16
+ tailwindcss: 4.1.16
+ vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
- '@tanstack/react-table@8.21.3(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@tanstack/react-table@8.21.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@tanstack/table-core': 8.21.3
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
'@tanstack/table-core@8.21.3': {}
@@ -16460,31 +16726,32 @@ snapshots:
'@types/body-parser@1.19.6':
dependencies:
'@types/connect': 3.4.38
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/bonjour@3.5.13':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/cacheable-request@6.0.3':
dependencies:
'@types/http-cache-semantics': 4.0.4
'@types/keyv': 3.1.4
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/responselike': 1.0.3
- '@types/chai@5.2.2':
+ '@types/chai@5.2.3':
dependencies:
'@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
'@types/connect-history-api-fallback@1.5.4':
dependencies:
- '@types/express-serve-static-core': 5.0.7
- '@types/node': 24.5.2
+ '@types/express-serve-static-core': 4.19.7
+ '@types/node': 24.9.1
'@types/connect@3.4.38':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/d3-array@3.2.2': {}
@@ -16534,26 +16801,19 @@ snapshots:
'@types/estree@1.0.8': {}
- '@types/express-serve-static-core@4.19.6':
- dependencies:
- '@types/node': 24.5.2
- '@types/qs': 6.14.0
- '@types/range-parser': 1.2.7
- '@types/send': 0.17.5
-
- '@types/express-serve-static-core@5.0.7':
+ '@types/express-serve-static-core@4.19.7':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/qs': 6.14.0
'@types/range-parser': 1.2.7
- '@types/send': 0.17.5
+ '@types/send': 1.2.1
- '@types/express@4.17.23':
+ '@types/express@4.17.24':
dependencies:
'@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 4.19.6
+ '@types/express-serve-static-core': 4.19.7
'@types/qs': 6.14.0
- '@types/serve-static': 1.15.8
+ '@types/serve-static': 1.15.10
'@types/geojson-vt@3.2.5':
dependencies:
@@ -16575,9 +16835,9 @@ snapshots:
'@types/http-errors@2.0.5': {}
- '@types/http-proxy@1.17.16':
+ '@types/http-proxy@1.17.17':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/istanbul-lib-coverage@2.0.6': {}
@@ -16593,7 +16853,7 @@ snapshots:
'@types/keyv@3.1.4':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/lodash.throttle@4.1.9':
dependencies:
@@ -16609,7 +16869,7 @@ snapshots:
dependencies:
'@types/geojson': 7946.0.16
- '@types/mapbox__mapbox-gl-geocoder@5.0.0':
+ '@types/mapbox__mapbox-gl-geocoder@5.1.0':
dependencies:
'@types/geojson': 7946.0.16
'@types/mapbox-gl': 3.4.1
@@ -16630,19 +16890,19 @@ snapshots:
'@types/mysql@2.15.27':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/node-forge@1.3.14':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/node@12.20.55': {}
'@types/node@17.0.45': {}
- '@types/node@24.5.2':
+ '@types/node@24.9.1':
dependencies:
- undici-types: 7.12.0
+ undici-types: 7.16.0
'@types/normalize-package-data@2.4.4': {}
@@ -16654,7 +16914,7 @@ snapshots:
'@types/pg@8.15.5':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
pg-protocol: 1.10.3
pg-types: 2.2.0
@@ -16667,35 +16927,35 @@ snapshots:
'@types/rbush@4.0.0':
optional: true
- '@types/react-dom@19.1.9(@types/react@19.1.13)':
+ '@types/react-dom@19.2.2(@types/react@19.2.2)':
dependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
'@types/react-map-gl@6.1.7':
dependencies:
'@types/geojson': 7946.0.16
'@types/mapbox-gl': 3.4.1
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
'@types/viewport-mercator-project': 6.1.6
'@types/react-router-config@5.0.11':
dependencies:
'@types/history': 4.7.11
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
'@types/react-router': 5.1.20
'@types/react-router-dom@5.3.3':
dependencies:
'@types/history': 4.7.11
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
'@types/react-router': 5.1.20
'@types/react-router@5.1.20':
dependencies:
'@types/history': 4.7.11
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- '@types/react@19.1.13':
+ '@types/react@19.2.2':
dependencies:
csstype: 3.1.3
@@ -16703,34 +16963,38 @@ snapshots:
'@types/responselike@1.0.3':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
- '@types/retry@0.12.0': {}
+ '@types/retry@0.12.2': {}
'@types/sax@1.2.7':
dependencies:
- '@types/node': 17.0.45
+ '@types/node': 24.9.1
- '@types/send@0.17.5':
+ '@types/send@0.17.6':
dependencies:
'@types/mime': 1.3.5
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
+
+ '@types/send@1.2.1':
+ dependencies:
+ '@types/node': 24.9.1
'@types/serve-index@1.9.4':
dependencies:
- '@types/express': 4.17.23
+ '@types/express': 4.17.24
- '@types/serve-static@1.15.8':
+ '@types/serve-static@1.15.10':
dependencies:
'@types/http-errors': 2.0.5
- '@types/node': 24.5.2
- '@types/send': 0.17.5
+ '@types/node': 24.9.1
+ '@types/send': 0.17.6
'@types/shimmer@1.2.0': {}
'@types/sockjs@0.3.36':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/supercluster@7.1.3':
dependencies:
@@ -16738,7 +17002,7 @@ snapshots:
'@types/tedious@4.0.14':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/unist@2.0.11': {}
@@ -16752,77 +17016,65 @@ snapshots:
'@types/ws@8.18.1':
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
'@types/yargs-parser@21.0.3': {}
- '@types/yargs@17.0.33':
+ '@types/yargs@17.0.34':
dependencies:
'@types/yargs-parser': 21.0.3
'@ungap/structured-clone@1.3.0': {}
- '@vis.gl/react-mapbox@8.0.4(mapbox-gl@3.15.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@vercel/oidc@3.0.3': {}
+
+ '@vis.gl/react-mapbox@8.1.0(mapbox-gl@3.16.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- mapbox-gl: 3.15.0
+ mapbox-gl: 3.16.0
- '@vis.gl/react-maplibre@8.0.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)':
+ '@vis.gl/react-maplibre@8.1.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)':
dependencies:
'@maplibre/maplibre-gl-style-spec': 19.3.3
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
-
- '@vitejs/plugin-rsc@0.4.11(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))':
- dependencies:
- '@mjackson/node-fetch-server': 0.7.0
- es-module-lexer: 1.7.0
- estree-walker: 3.0.3
- magic-string: 0.30.19
- periscopic: 4.0.2
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- turbo-stream: 3.1.0
- vite: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
- vitefu: 1.1.1(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))
- optional: true
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
- '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))':
+ '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))':
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 1.0.2
- ast-v8-to-istanbul: 0.3.5
+ ast-v8-to-istanbul: 0.3.8
debug: 4.4.3
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.6
istanbul-reports: 3.2.0
- magic-string: 0.30.19
+ magic-string: 0.30.21
magicast: 0.3.5
- std-env: 3.9.0
+ std-env: 3.10.0
test-exclude: 7.0.1
tinyrainbow: 2.0.0
- vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
'@vitest/expect@3.2.4':
dependencies:
- '@types/chai': 5.2.2
+ '@types/chai': 5.2.3
'@vitest/spy': 3.2.4
'@vitest/utils': 3.2.4
chai: 5.3.3
tinyrainbow: 2.0.0
- '@vitest/mocker@3.2.4(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))':
+ '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
- magic-string: 0.30.19
+ magic-string: 0.30.21
optionalDependencies:
- vite: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -16832,17 +17084,17 @@ snapshots:
dependencies:
'@vitest/utils': 3.2.4
pathe: 2.0.3
- strip-literal: 3.0.0
+ strip-literal: 3.1.0
'@vitest/snapshot@3.2.4':
dependencies:
'@vitest/pretty-format': 3.2.4
- magic-string: 0.30.19
+ magic-string: 0.30.21
pathe: 2.0.3
'@vitest/spy@3.2.4':
dependencies:
- tinyspy: 4.0.3
+ tinyspy: 4.0.4
'@vitest/utils@3.2.4':
dependencies:
@@ -16966,6 +17218,14 @@ snapshots:
clean-stack: 2.2.0
indent-string: 4.0.0
+ ai@5.0.78(zod@4.1.12):
+ dependencies:
+ '@ai-sdk/gateway': 2.0.1(zod@4.1.12)
+ '@ai-sdk/provider': 2.0.0
+ '@ai-sdk/provider-utils': 3.0.12(zod@4.1.12)
+ '@opentelemetry/api': 1.9.0
+ zod: 4.1.12
+
ajv-formats@2.1.1(ajv@8.17.1):
optionalDependencies:
ajv: 8.17.1
@@ -16993,27 +17253,27 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
- algoliasearch-helper@3.26.0(algoliasearch@5.37.0):
+ algoliasearch-helper@3.26.0(algoliasearch@5.41.0):
dependencies:
'@algolia/events': 4.0.1
- algoliasearch: 5.37.0
-
- algoliasearch@5.37.0:
- dependencies:
- '@algolia/abtesting': 1.3.0
- '@algolia/client-abtesting': 5.37.0
- '@algolia/client-analytics': 5.37.0
- '@algolia/client-common': 5.37.0
- '@algolia/client-insights': 5.37.0
- '@algolia/client-personalization': 5.37.0
- '@algolia/client-query-suggestions': 5.37.0
- '@algolia/client-search': 5.37.0
- '@algolia/ingestion': 1.37.0
- '@algolia/monitoring': 1.37.0
- '@algolia/recommend': 5.37.0
- '@algolia/requester-browser-xhr': 5.37.0
- '@algolia/requester-fetch': 5.37.0
- '@algolia/requester-node-http': 5.37.0
+ algoliasearch: 5.41.0
+
+ algoliasearch@5.41.0:
+ dependencies:
+ '@algolia/abtesting': 1.7.0
+ '@algolia/client-abtesting': 5.41.0
+ '@algolia/client-analytics': 5.41.0
+ '@algolia/client-common': 5.41.0
+ '@algolia/client-insights': 5.41.0
+ '@algolia/client-personalization': 5.41.0
+ '@algolia/client-query-suggestions': 5.41.0
+ '@algolia/client-search': 5.41.0
+ '@algolia/ingestion': 1.41.0
+ '@algolia/monitoring': 1.41.0
+ '@algolia/recommend': 5.41.0
+ '@algolia/requester-browser-xhr': 5.41.0
+ '@algolia/requester-fetch': 5.41.0
+ '@algolia/requester-node-http': 5.41.0
ansi-align@3.0.1:
dependencies:
@@ -17087,7 +17347,7 @@ snapshots:
assign-symbols@1.0.0: {}
- ast-v8-to-istanbul@0.3.5:
+ ast-v8-to-istanbul@0.3.8:
dependencies:
'@jridgewell/trace-mapping': 0.3.31
estree-walker: 3.0.3
@@ -17101,8 +17361,8 @@ snapshots:
autoprefixer@10.4.21(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
- caniuse-lite: 1.0.30001743
+ browserslist: 4.27.0
+ caniuse-lite: 1.0.30001751
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
@@ -17123,45 +17383,45 @@ snapshots:
babel-dead-code-elimination@1.0.10:
dependencies:
- '@babel/core': 7.28.4
- '@babel/parser': 7.28.4
- '@babel/traverse': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/core': 7.28.5
+ '@babel/parser': 7.28.5
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
transitivePeerDependencies:
- supports-color
- babel-loader@9.2.1(@babel/core@7.28.4)(webpack@5.101.3(@swc/core@1.13.5)):
+ babel-loader@9.2.1(@babel/core@7.28.5)(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
- '@babel/core': 7.28.4
+ '@babel/core': 7.28.5
find-cache-dir: 4.0.0
- schema-utils: 4.3.2
- webpack: 5.101.3(@swc/core@1.13.5)
+ schema-utils: 4.3.3
+ webpack: 5.102.1(@swc/core@1.13.21)
babel-plugin-dynamic-import-node@2.3.3:
dependencies:
object.assign: 4.1.7
- babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.4):
+ babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5):
dependencies:
- '@babel/compat-data': 7.28.4
- '@babel/core': 7.28.4
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4)
+ '@babel/compat-data': 7.28.5
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.4):
+ babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.28.5):
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4)
- core-js-compat: 3.45.1
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
+ core-js-compat: 3.46.0
transitivePeerDependencies:
- supports-color
- babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.4):
+ babel-plugin-polyfill-regenerator@0.6.5(@babel/core@7.28.5):
dependencies:
- '@babel/core': 7.28.4
- '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.4)
+ '@babel/core': 7.28.5
+ '@babel/helper-define-polyfill-provider': 0.6.5(@babel/core@7.28.5)
transitivePeerDependencies:
- supports-color
@@ -17171,7 +17431,7 @@ snapshots:
base-64@0.1.0: {}
- baseline-browser-mapping@2.8.5: {}
+ baseline-browser-mapping@2.8.20: {}
basic-auth@2.0.1:
dependencies:
@@ -17179,41 +17439,25 @@ snapshots:
batch@0.6.1: {}
- better-auth@1.3.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(zod@3.25.76):
+ better-auth@1.3.29(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- '@better-auth/utils': 0.2.6
- '@better-fetch/fetch': 1.1.18
- '@noble/ciphers': 0.6.0
- '@noble/hashes': 1.8.0
- '@simplewebauthn/browser': 13.2.0
- '@simplewebauthn/server': 13.2.1
- better-call: 1.0.19
- defu: 6.1.4
- jose: 5.10.0
- kysely: 0.28.7
- nanostores: 0.11.4
- zod: 3.25.76
- optionalDependencies:
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
-
- better-auth@1.3.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(zod@4.1.9):
- dependencies:
- '@better-auth/utils': 0.2.6
+ '@better-auth/core': 1.3.29(@better-auth/utils@0.3.0)(@better-fetch/fetch@1.1.18)(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
+ '@better-auth/telemetry': 1.3.29(better-call@1.0.19)(jose@6.1.0)(kysely@0.28.8)(nanostores@1.0.1)
+ '@better-auth/utils': 0.3.0
'@better-fetch/fetch': 1.1.18
- '@noble/ciphers': 0.6.0
- '@noble/hashes': 1.8.0
- '@simplewebauthn/browser': 13.2.0
- '@simplewebauthn/server': 13.2.1
+ '@noble/ciphers': 2.0.1
+ '@noble/hashes': 2.0.1
+ '@simplewebauthn/browser': 13.2.2
+ '@simplewebauthn/server': 13.2.2
better-call: 1.0.19
defu: 6.1.4
- jose: 5.10.0
- kysely: 0.28.7
- nanostores: 0.11.4
- zod: 4.1.9
+ jose: 6.1.0
+ kysely: 0.28.8
+ nanostores: 1.0.1
+ zod: 4.1.12
optionalDependencies:
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
better-call@1.0.19:
dependencies:
@@ -17292,16 +17536,20 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.26.2:
+ browserslist@4.27.0:
dependencies:
- baseline-browser-mapping: 2.8.5
- caniuse-lite: 1.0.30001743
- electron-to-chromium: 1.5.221
- node-releases: 2.0.21
- update-browserslist-db: 1.1.3(browserslist@4.26.2)
+ baseline-browser-mapping: 2.8.20
+ caniuse-lite: 1.0.30001751
+ electron-to-chromium: 1.5.240
+ node-releases: 2.0.26
+ update-browserslist-db: 1.1.4(browserslist@4.27.0)
buffer-from@1.1.2: {}
+ bundle-name@4.1.0:
+ dependencies:
+ run-applescript: 7.1.0
+
but-unzip@0.1.7: {}
bytes@3.0.0: {}
@@ -17381,12 +17629,12 @@ snapshots:
caniuse-api@3.0.0:
dependencies:
- browserslist: 4.26.2
- caniuse-lite: 1.0.30001743
+ browserslist: 4.27.0
+ caniuse-lite: 1.0.30001751
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
- caniuse-lite@1.0.30001743: {}
+ caniuse-lite@1.0.30001751: {}
ccount@2.0.1: {}
@@ -17456,8 +17704,6 @@ snapshots:
dependencies:
readdirp: 4.1.2
- chownr@3.0.0: {}
-
chrome-trace-event@1.0.4: {}
ci-info@3.9.0: {}
@@ -17494,14 +17740,14 @@ snapshots:
clsx@2.1.1: {}
- cmdk@1.1.1(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ cmdk@1.1.1(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-id': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
transitivePeerDependencies:
- '@types/react'
- '@types/react-dom'
@@ -17600,36 +17846,34 @@ snapshots:
cookie@1.0.2: {}
- copy-text-to-clipboard@3.2.1: {}
-
- copy-webpack-plugin@11.0.0(webpack@5.101.3(@swc/core@1.13.5)):
+ copy-webpack-plugin@11.0.0(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
fast-glob: 3.3.3
glob-parent: 6.0.2
globby: 13.2.2
normalize-path: 3.0.0
- schema-utils: 4.3.2
+ schema-utils: 4.3.3
serialize-javascript: 6.0.2
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
- core-js-compat@3.45.1:
+ core-js-compat@3.46.0:
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
- core-js-pure@3.45.1: {}
+ core-js-pure@3.46.0: {}
- core-js@3.45.1: {}
+ core-js@3.46.0: {}
core-util-is@1.0.3: {}
- cosmiconfig@8.3.6(typescript@5.9.2):
+ cosmiconfig@8.3.6(typescript@5.9.3):
dependencies:
import-fresh: 3.3.1
js-yaml: 4.1.0
parse-json: 5.2.0
path-type: 4.0.0
optionalDependencies:
- typescript: 5.9.2
+ typescript: 5.9.3
cross-spawn@7.0.6:
dependencies:
@@ -17646,7 +17890,7 @@ snapshots:
postcss: 8.5.6
postcss-selector-parser: 7.1.0
- css-declaration-sorter@7.2.0(postcss@8.5.6):
+ css-declaration-sorter@7.3.0(postcss@8.5.6):
dependencies:
postcss: 8.5.6
@@ -17657,7 +17901,7 @@ snapshots:
postcss-selector-parser: 7.1.0
postcss-value-parser: 4.2.0
- css-loader@6.11.0(@rspack/core@1.5.5)(webpack@5.101.3(@swc/core@1.13.5)):
+ css-loader@6.11.0(@rspack/core@1.5.8)(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
icss-utils: 5.1.0(postcss@8.5.6)
postcss: 8.5.6
@@ -17666,20 +17910,20 @@ snapshots:
postcss-modules-scope: 3.2.1(postcss@8.5.6)
postcss-modules-values: 4.0.0(postcss@8.5.6)
postcss-value-parser: 4.2.0
- semver: 7.7.2
+ semver: 7.7.3
optionalDependencies:
- '@rspack/core': 1.5.5
- webpack: 5.101.3(@swc/core@1.13.5)
+ '@rspack/core': 1.5.8
+ webpack: 5.102.1(@swc/core@1.13.21)
- css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.101.3(@swc/core@1.13.5)):
+ css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
cssnano: 6.1.2(postcss@8.5.6)
jest-worker: 29.7.0
postcss: 8.5.6
- schema-utils: 4.3.2
+ schema-utils: 4.3.3
serialize-javascript: 6.0.2
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
optionalDependencies:
clean-css: 5.3.3
@@ -17717,14 +17961,14 @@ snapshots:
csscolorparser@1.0.3: {}
- cssdb@8.4.0: {}
+ cssdb@8.4.2: {}
cssesc@3.0.0: {}
cssnano-preset-advanced@6.1.2(postcss@8.5.6):
dependencies:
autoprefixer: 10.4.21(postcss@8.5.6)
- browserslist: 4.26.2
+ browserslist: 4.27.0
cssnano-preset-default: 6.1.2(postcss@8.5.6)
postcss: 8.5.6
postcss-discard-unused: 6.0.5(postcss@8.5.6)
@@ -17734,8 +17978,8 @@ snapshots:
cssnano-preset-default@6.1.2(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
- css-declaration-sorter: 7.2.0(postcss@8.5.6)
+ browserslist: 4.27.0
+ css-declaration-sorter: 7.3.0(postcss@8.5.6)
cssnano-utils: 4.0.2(postcss@8.5.6)
postcss: 8.5.6
postcss-calc: 9.0.1(postcss@8.5.6)
@@ -17887,9 +18131,12 @@ snapshots:
deepmerge@4.3.1: {}
- default-gateway@6.0.3:
+ default-browser-id@5.0.0: {}
+
+ default-browser@5.2.1:
dependencies:
- execa: 5.1.1
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.0
defer-to-connect@2.0.1: {}
@@ -17901,6 +18148,8 @@ snapshots:
define-lazy-prop@2.0.0: {}
+ define-lazy-prop@3.0.0: {}
+
define-properties@1.2.1:
dependencies:
define-data-property: 1.1.4
@@ -17921,7 +18170,7 @@ snapshots:
detect-indent@6.1.0: {}
- detect-libc@2.1.0: {}
+ detect-libc@2.1.2: {}
detect-node-es@1.1.0: {}
@@ -17946,10 +18195,10 @@ snapshots:
dependencies:
'@leichtgewicht/ip-codec': 2.0.5
- docusaurus-plugin-typedoc@1.4.2(typedoc-plugin-markdown@4.8.1(typedoc@0.28.13(typescript@5.9.2))):
+ docusaurus-plugin-typedoc@1.4.2(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3))):
dependencies:
- typedoc-docusaurus-theme: 1.4.2(typedoc-plugin-markdown@4.8.1(typedoc@0.28.13(typescript@5.9.2)))
- typedoc-plugin-markdown: 4.8.1(typedoc@0.28.13(typescript@5.9.2))
+ typedoc-docusaurus-theme: 1.4.2(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3)))
+ typedoc-plugin-markdown: 4.9.0(typedoc@0.28.14(typescript@5.9.3))
dom-converter@0.2.0:
dependencies:
@@ -18005,23 +18254,23 @@ snapshots:
dotenv@16.6.1: {}
- dotenv@17.2.2: {}
+ dotenv@17.2.3: {}
- drizzle-kit@0.31.4:
+ drizzle-kit@0.31.5:
dependencies:
'@drizzle-team/brocli': 0.10.2
'@esbuild-kit/esm-loader': 2.6.5
- esbuild: 0.25.10
- esbuild-register: 3.6.0(esbuild@0.25.10)
+ esbuild: 0.25.11
+ esbuild-register: 3.6.0(esbuild@0.25.11)
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.44.4(@electric-sql/pglite@0.3.8)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.7)(postgres@3.4.7):
+ drizzle-orm@0.44.7(@electric-sql/pglite@0.3.11)(@opentelemetry/api@1.9.0)(@types/pg@8.15.5)(kysely@0.28.8)(postgres@3.4.7):
optionalDependencies:
- '@electric-sql/pglite': 0.3.8
+ '@electric-sql/pglite': 0.3.11
'@opentelemetry/api': 1.9.0
'@types/pg': 8.15.5
- kysely: 0.28.7
+ kysely: 0.28.8
postgres: 3.4.7
dunder-proto@1.0.1:
@@ -18038,7 +18287,7 @@ snapshots:
eastasianwidth@0.2.0: {}
- eciesjs@0.4.15:
+ eciesjs@0.4.16:
dependencies:
'@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0)
'@noble/ciphers': 1.3.0
@@ -18047,7 +18296,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.221: {}
+ electron-to-chromium@1.5.240: {}
emoji-regex@8.0.0: {}
@@ -18070,7 +18319,7 @@ snapshots:
enhanced-resolve@5.18.3:
dependencies:
graceful-fs: 4.2.11
- tapable: 2.2.3
+ tapable: 2.3.0
enquirer@2.4.1:
dependencies:
@@ -18183,10 +18432,10 @@ snapshots:
esast-util-from-estree: 2.0.0
vfile-message: 4.0.3
- esbuild-register@3.6.0(esbuild@0.25.10):
+ esbuild-register@3.6.0(esbuild@0.25.11):
dependencies:
debug: 4.4.3
- esbuild: 0.25.10
+ esbuild: 0.25.11
transitivePeerDependencies:
- supports-color
@@ -18215,34 +18464,34 @@ snapshots:
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
- esbuild@0.25.10:
+ esbuild@0.25.11:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.10
- '@esbuild/android-arm': 0.25.10
- '@esbuild/android-arm64': 0.25.10
- '@esbuild/android-x64': 0.25.10
- '@esbuild/darwin-arm64': 0.25.10
- '@esbuild/darwin-x64': 0.25.10
- '@esbuild/freebsd-arm64': 0.25.10
- '@esbuild/freebsd-x64': 0.25.10
- '@esbuild/linux-arm': 0.25.10
- '@esbuild/linux-arm64': 0.25.10
- '@esbuild/linux-ia32': 0.25.10
- '@esbuild/linux-loong64': 0.25.10
- '@esbuild/linux-mips64el': 0.25.10
- '@esbuild/linux-ppc64': 0.25.10
- '@esbuild/linux-riscv64': 0.25.10
- '@esbuild/linux-s390x': 0.25.10
- '@esbuild/linux-x64': 0.25.10
- '@esbuild/netbsd-arm64': 0.25.10
- '@esbuild/netbsd-x64': 0.25.10
- '@esbuild/openbsd-arm64': 0.25.10
- '@esbuild/openbsd-x64': 0.25.10
- '@esbuild/openharmony-arm64': 0.25.10
- '@esbuild/sunos-x64': 0.25.10
- '@esbuild/win32-arm64': 0.25.10
- '@esbuild/win32-ia32': 0.25.10
- '@esbuild/win32-x64': 0.25.10
+ '@esbuild/aix-ppc64': 0.25.11
+ '@esbuild/android-arm': 0.25.11
+ '@esbuild/android-arm64': 0.25.11
+ '@esbuild/android-x64': 0.25.11
+ '@esbuild/darwin-arm64': 0.25.11
+ '@esbuild/darwin-x64': 0.25.11
+ '@esbuild/freebsd-arm64': 0.25.11
+ '@esbuild/freebsd-x64': 0.25.11
+ '@esbuild/linux-arm': 0.25.11
+ '@esbuild/linux-arm64': 0.25.11
+ '@esbuild/linux-ia32': 0.25.11
+ '@esbuild/linux-loong64': 0.25.11
+ '@esbuild/linux-mips64el': 0.25.11
+ '@esbuild/linux-ppc64': 0.25.11
+ '@esbuild/linux-riscv64': 0.25.11
+ '@esbuild/linux-s390x': 0.25.11
+ '@esbuild/linux-x64': 0.25.11
+ '@esbuild/netbsd-arm64': 0.25.11
+ '@esbuild/netbsd-x64': 0.25.11
+ '@esbuild/openbsd-arm64': 0.25.11
+ '@esbuild/openbsd-x64': 0.25.11
+ '@esbuild/openharmony-arm64': 0.25.11
+ '@esbuild/sunos-x64': 0.25.11
+ '@esbuild/win32-arm64': 0.25.11
+ '@esbuild/win32-ia32': 0.25.11
+ '@esbuild/win32-x64': 0.25.11
escalade@3.2.0: {}
@@ -18295,7 +18544,7 @@ snapshots:
astring: 1.9.0
source-map: 0.7.6
- estree-util-value-to-estree@3.4.0:
+ estree-util-value-to-estree@3.5.0:
dependencies:
'@types/estree': 1.0.8
@@ -18318,7 +18567,7 @@ snapshots:
eval@0.1.8:
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
require-like: 0.1.2
eventemitter3@3.1.2: {}
@@ -18327,6 +18576,8 @@ snapshots:
events@3.3.0: {}
+ eventsource-parser@3.0.6: {}
+
execa@5.1.1:
dependencies:
cross-spawn: 7.0.6
@@ -18396,7 +18647,7 @@ snapshots:
fast-deep-equal@3.1.3: {}
- fast-equals@5.2.2: {}
+ fast-equals@5.3.2: {}
fast-glob@3.3.3:
dependencies:
@@ -18438,11 +18689,11 @@ snapshots:
dependencies:
escape-string-regexp: 1.0.5
- file-loader@6.2.0(webpack@5.101.3(@swc/core@1.13.5)):
+ file-loader@6.2.0(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
loader-utils: 2.0.4
schema-utils: 3.3.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
file-type@21.0.0:
dependencies:
@@ -18493,7 +18744,7 @@ snapshots:
flatbuffers@24.12.23: {}
- flatgeobuf@4.2.0:
+ flatgeobuf@4.3.1:
dependencies:
'@repeaterjs/repeater': 3.0.6
flatbuffers: 24.12.23
@@ -18538,14 +18789,14 @@ snapshots:
fraction.js@4.3.7: {}
- framer-motion@12.23.14(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ framer-motion@12.23.24(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- motion-dom: 12.23.12
+ motion-dom: 12.23.23
motion-utils: 12.23.6
tslib: 2.8.1
optionalDependencies:
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
fresh@0.5.2: {}
@@ -18567,8 +18818,6 @@ snapshots:
jsonfile: 4.0.0
universalify: 0.1.2
- fs-monkey@1.1.0: {}
-
fs.realpath@1.0.0: {}
fsevents@2.3.3:
@@ -18591,6 +18840,8 @@ snapshots:
fuzzysort@3.1.0: {}
+ generator-function@2.0.1: {}
+
gensync@1.0.0-beta.2: {}
geojson-equality-ts@1.0.2:
@@ -18607,7 +18858,7 @@ snapshots:
geotiff@2.1.3:
dependencies:
- '@petamoriken/float16': 3.9.2
+ '@petamoriken/float16': 3.9.3
lerc: 3.0.0
pako: 2.1.0
parse-headers: 2.0.6
@@ -18652,7 +18903,7 @@ snapshots:
es-errors: 1.3.0
get-intrinsic: 1.3.0
- get-tsconfig@4.10.1:
+ get-tsconfig@4.13.0:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -18670,6 +18921,10 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob-to-regex.js@1.2.0(tslib@2.8.1):
+ dependencies:
+ tslib: 2.8.1
+
glob-to-regexp@0.4.1: {}
glob@10.4.5:
@@ -18690,15 +18945,6 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 2.0.0
- glob@7.2.3:
- dependencies:
- fs.realpath: 1.0.0
- inflight: 1.0.6
- inherits: 2.0.4
- minimatch: 3.1.2
- once: 1.4.0
- path-is-absolute: 1.0.1
-
glob@9.3.5:
dependencies:
fs.realpath: 1.0.0
@@ -18857,7 +19103,7 @@ snapshots:
mdast-util-mdxjs-esm: 2.0.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
- style-to-js: 1.1.17
+ style-to-js: 1.1.18
unist-util-position: 5.0.0
zwitch: 2.0.4
transitivePeerDependencies:
@@ -18877,7 +19123,7 @@ snapshots:
mdast-util-mdxjs-esm: 2.0.1
property-information: 7.1.0
space-separated-tokens: 2.0.2
- style-to-js: 1.1.17
+ style-to-js: 1.1.18
unist-util-position: 5.0.0
vfile-message: 4.0.3
transitivePeerDependencies:
@@ -18937,8 +19183,6 @@ snapshots:
readable-stream: 2.3.8
wbuf: 1.7.3
- html-entities@2.6.0: {}
-
html-escaper@2.0.2: {}
html-minifier-terser@6.1.0:
@@ -18975,16 +19219,16 @@ snapshots:
html-void-elements@3.0.0: {}
- html-webpack-plugin@5.6.4(@rspack/core@1.5.5)(webpack@5.101.3(@swc/core@1.13.5)):
+ html-webpack-plugin@5.6.4(@rspack/core@1.5.8)(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
'@types/html-minifier-terser': 6.1.0
html-minifier-terser: 6.1.0
lodash: 4.17.21
pretty-error: 4.0.0
- tapable: 2.2.3
+ tapable: 2.3.0
optionalDependencies:
- '@rspack/core': 1.5.5
- webpack: 5.101.3(@swc/core@1.13.5)
+ '@rspack/core': 1.5.8
+ webpack: 5.102.1(@swc/core@1.13.21)
htmlparser2@6.1.0:
dependencies:
@@ -19021,15 +19265,15 @@ snapshots:
http-parser-js@0.5.10: {}
- http-proxy-middleware@2.0.9(@types/express@4.17.23):
+ http-proxy-middleware@2.0.9(@types/express@4.17.24):
dependencies:
- '@types/http-proxy': 1.17.16
+ '@types/http-proxy': 1.17.17
http-proxy: 1.18.1
is-glob: 4.0.3
is-plain-obj: 3.0.0
micromatch: 4.0.8
optionalDependencies:
- '@types/express': 4.17.23
+ '@types/express': 4.17.24
transitivePeerDependencies:
- debug
@@ -19058,10 +19302,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- human-id@4.1.1: {}
+ human-id@4.1.2: {}
human-signals@2.1.0: {}
+ hyperdyperid@1.2.0: {}
+
iconv-lite@0.4.24:
dependencies:
safer-buffer: 2.1.2
@@ -19085,7 +19331,7 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
- import-in-the-middle@1.14.2:
+ import-in-the-middle@1.15.0:
dependencies:
acorn: 8.15.0
acorn-import-attributes: 1.9.5(acorn@8.15.0)
@@ -19100,11 +19346,6 @@ snapshots:
infima@0.2.0-alpha.45: {}
- inflight@1.0.6:
- dependencies:
- once: 1.4.0
- wrappy: 1.0.2
-
inherits@2.0.3: {}
inherits@2.0.4: {}
@@ -19192,6 +19433,8 @@ snapshots:
is-docker@2.2.1: {}
+ is-docker@3.0.0: {}
+
is-extendable@0.1.1: {}
is-extendable@1.0.1:
@@ -19206,9 +19449,10 @@ snapshots:
is-fullwidth-code-point@3.0.0: {}
- is-generator-function@1.1.0:
+ is-generator-function@1.1.2:
dependencies:
call-bound: 1.0.4
+ generator-function: 2.0.1
get-proto: 1.0.1
has-tostringtag: 1.0.2
safe-regex-test: 1.1.0
@@ -19219,6 +19463,10 @@ snapshots:
is-hexadecimal@2.0.1: {}
+ is-inside-container@1.0.0:
+ dependencies:
+ is-docker: 3.0.0
+
is-installed-globally@0.4.0:
dependencies:
global-dirs: 3.0.1
@@ -19230,6 +19478,8 @@ snapshots:
is-negative-zero@2.0.3: {}
+ is-network-error@1.3.0: {}
+
is-npm@6.1.0: {}
is-number-object@1.1.1:
@@ -19259,11 +19509,6 @@ snapshots:
dependencies:
'@types/estree': 1.0.8
- is-reference@3.0.3:
- dependencies:
- '@types/estree': 1.0.8
- optional: true
-
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
@@ -19319,6 +19564,10 @@ snapshots:
dependencies:
is-docker: 2.2.1
+ is-wsl@3.1.0:
+ dependencies:
+ is-inside-container: 1.0.0
+
is-yarn-global@0.4.1: {}
isarray@0.0.1: {}
@@ -19327,7 +19576,7 @@ snapshots:
isarray@2.0.5: {}
- isbot@5.1.30: {}
+ isbot@5.1.31: {}
isexe@2.0.0: {}
@@ -19369,7 +19618,7 @@ snapshots:
jest-util@29.7.0:
dependencies:
'@jest/types': 29.6.3
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
chalk: 4.1.2
ci-info: 3.9.0
graceful-fs: 4.2.11
@@ -19377,20 +19626,20 @@ snapshots:
jest-worker@27.5.1:
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
merge-stream: 2.0.0
supports-color: 8.1.1
jest-worker@29.7.0:
dependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
jest-util: 29.7.0
merge-stream: 2.0.0
supports-color: 8.1.1
jiti@1.21.7: {}
- jiti@2.5.1: {}
+ jiti@2.6.1: {}
joi@17.13.3:
dependencies:
@@ -19400,7 +19649,7 @@ snapshots:
'@sideway/formula': 3.0.1
'@sideway/pinpoint': 2.0.0
- jose@5.10.0: {}
+ jose@6.1.0: {}
js-tokens@4.0.0: {}
@@ -19417,6 +19666,8 @@ snapshots:
jsesc@3.0.2: {}
+ jsesc@3.1.0: {}
+
json-buffer@3.0.1: {}
json-parse-even-better-errors@2.3.1: {}
@@ -19427,6 +19678,8 @@ snapshots:
json-schema-traverse@1.0.0: {}
+ json-schema@0.4.0: {}
+
json-stringify-pretty-compact@3.0.0: {}
json5@2.2.3: {}
@@ -19453,7 +19706,7 @@ snapshots:
kleur@3.0.3: {}
- kysely@0.28.7: {}
+ kysely@0.28.8: {}
latest-version@7.0.0:
dependencies:
@@ -19470,50 +19723,54 @@ snapshots:
leven@3.1.0: {}
- lightningcss-darwin-arm64@1.30.1:
+ lightningcss-android-arm64@1.30.2:
+ optional: true
+
+ lightningcss-darwin-arm64@1.30.2:
optional: true
- lightningcss-darwin-x64@1.30.1:
+ lightningcss-darwin-x64@1.30.2:
optional: true
- lightningcss-freebsd-x64@1.30.1:
+ lightningcss-freebsd-x64@1.30.2:
optional: true
- lightningcss-linux-arm-gnueabihf@1.30.1:
+ lightningcss-linux-arm-gnueabihf@1.30.2:
optional: true
- lightningcss-linux-arm64-gnu@1.30.1:
+ lightningcss-linux-arm64-gnu@1.30.2:
optional: true
- lightningcss-linux-arm64-musl@1.30.1:
+ lightningcss-linux-arm64-musl@1.30.2:
optional: true
- lightningcss-linux-x64-gnu@1.30.1:
+ lightningcss-linux-x64-gnu@1.30.2:
optional: true
- lightningcss-linux-x64-musl@1.30.1:
+ lightningcss-linux-x64-musl@1.30.2:
optional: true
- lightningcss-win32-arm64-msvc@1.30.1:
+ lightningcss-win32-arm64-msvc@1.30.2:
optional: true
- lightningcss-win32-x64-msvc@1.30.1:
+ lightningcss-win32-x64-msvc@1.30.2:
optional: true
- lightningcss@1.30.1:
+ lightningcss@1.30.2:
dependencies:
- detect-libc: 2.1.0
+ detect-libc: 2.1.2
optionalDependencies:
- lightningcss-darwin-arm64: 1.30.1
- lightningcss-darwin-x64: 1.30.1
- lightningcss-freebsd-x64: 1.30.1
- lightningcss-linux-arm-gnueabihf: 1.30.1
- lightningcss-linux-arm64-gnu: 1.30.1
- lightningcss-linux-arm64-musl: 1.30.1
- lightningcss-linux-x64-gnu: 1.30.1
- lightningcss-linux-x64-musl: 1.30.1
- lightningcss-win32-arm64-msvc: 1.30.1
- lightningcss-win32-x64-msvc: 1.30.1
+ lightningcss-android-arm64: 1.30.2
+ lightningcss-darwin-arm64: 1.30.2
+ lightningcss-darwin-x64: 1.30.2
+ lightningcss-freebsd-x64: 1.30.2
+ lightningcss-linux-arm-gnueabihf: 1.30.2
+ lightningcss-linux-arm64-gnu: 1.30.2
+ lightningcss-linux-arm64-musl: 1.30.2
+ lightningcss-linux-x64-gnu: 1.30.2
+ lightningcss-linux-x64-musl: 1.30.2
+ lightningcss-win32-arm64-msvc: 1.30.2
+ lightningcss-win32-x64-msvc: 1.30.2
lilconfig@3.1.3: {}
@@ -19523,7 +19780,7 @@ snapshots:
dependencies:
uc.micro: 2.1.0
- loader-runner@4.3.0: {}
+ loader-runner@4.3.1: {}
loader-utils@2.0.4:
dependencies:
@@ -19573,7 +19830,7 @@ snapshots:
lru-cache@10.4.3: {}
- lru-cache@11.2.1: {}
+ lru-cache@11.2.2: {}
lru-cache@5.1.1:
dependencies:
@@ -19585,13 +19842,13 @@ snapshots:
lru-cache@7.18.3: {}
- lucide-react@0.544.0(react@19.1.1):
+ lucide-react@0.545.0(react@19.2.0):
dependencies:
- react: 19.1.1
+ react: 19.2.0
lunr@2.3.9: {}
- magic-string@0.30.19:
+ magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -19601,19 +19858,19 @@ snapshots:
magicast@0.3.5:
dependencies:
- '@babel/parser': 7.28.4
- '@babel/types': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
source-map-js: 1.2.1
make-dir@4.0.0:
dependencies:
- semver: 7.7.2
+ semver: 7.7.3
map-obj@1.0.1: {}
map-obj@4.3.0: {}
- mapbox-gl@3.15.0:
+ mapbox-gl@3.16.0:
dependencies:
'@mapbox/jsonlint-lines-primitives': 2.0.2
'@mapbox/mapbox-gl-supported': 3.0.0
@@ -19662,7 +19919,9 @@ snapshots:
markdown-table@3.0.4: {}
- marked@7.0.4: {}
+ marked@15.0.12: {}
+
+ marked@16.4.1: {}
martinez-polygon-clipping@0.7.4:
dependencies:
@@ -19672,11 +19931,6 @@ snapshots:
math-intrinsics@1.1.0: {}
- md-to-react-email@5.0.5(react@19.1.1):
- dependencies:
- marked: 7.0.4
- react: 19.1.1
-
mdast-util-directive@3.1.0:
dependencies:
'@types/mdast': 4.0.4
@@ -19687,7 +19941,7 @@ snapshots:
mdast-util-to-markdown: 2.1.2
parse-entities: 4.0.2
stringify-entities: 4.0.4
- unist-util-visit-parents: 6.0.1
+ unist-util-visit-parents: 6.0.2
transitivePeerDependencies:
- supports-color
@@ -19695,8 +19949,8 @@ snapshots:
dependencies:
'@types/mdast': 4.0.4
escape-string-regexp: 5.0.0
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
mdast-util-from-markdown@2.0.2:
dependencies:
@@ -19835,7 +20089,7 @@ snapshots:
mdast-util-phrasing@4.1.0:
dependencies:
'@types/mdast': 4.0.4
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
mdast-util-to-hast@13.2.0:
dependencies:
@@ -19873,9 +20127,14 @@ snapshots:
media-typer@0.3.0: {}
- memfs@3.5.3:
+ memfs@4.49.0:
dependencies:
- fs-monkey: 1.1.0
+ '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1)
+ '@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
+ glob-to-regex.js: 1.2.0(tslib@2.8.1)
+ thingies: 2.5.0(tslib@2.8.1)
+ tree-dump: 1.1.0(tslib@2.8.1)
+ tslib: 2.8.1
meow@9.0.0:
dependencies:
@@ -20216,6 +20475,10 @@ snapshots:
dependencies:
mime-db: 1.52.0
+ mime-types@3.0.1:
+ dependencies:
+ mime-db: 1.54.0
+
mime@1.6.0: {}
mimic-fn@2.1.0: {}
@@ -20228,11 +20491,11 @@ snapshots:
min-indent@1.0.1: {}
- mini-css-extract-plugin@2.9.4(webpack@5.101.3(@swc/core@1.13.5)):
+ mini-css-extract-plugin@2.9.4(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
- schema-utils: 4.3.2
- tapable: 2.2.3
- webpack: 5.101.3(@swc/core@1.13.5)
+ schema-utils: 4.3.3
+ tapable: 2.3.0
+ webpack: 5.102.1(@swc/core@1.13.21)
minimalistic-assert@1.0.1: {}
@@ -20264,12 +20527,6 @@ snapshots:
minipass@7.1.2: {}
- minizlib@3.0.2:
- dependencies:
- minipass: 7.1.2
-
- mkdirp@3.0.1: {}
-
module-details-from-path@1.0.4: {}
morgan@1.10.1:
@@ -20282,7 +20539,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- motion-dom@12.23.12:
+ motion-dom@12.23.23:
dependencies:
motion-utils: 12.23.6
@@ -20305,9 +20562,9 @@ snapshots:
nanoid@3.3.11: {}
- nanoid@5.1.5: {}
+ nanoid@5.1.6: {}
- nanostores@0.11.4: {}
+ nanostores@1.0.1: {}
negotiator@0.6.3: {}
@@ -20315,19 +20572,19 @@ snapshots:
neo-async@2.6.2: {}
- next-themes@0.4.6(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ next-themes@0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
no-case@3.0.4:
dependencies:
lower-case: 2.0.2
tslib: 2.8.1
- node-abi@3.77.0:
+ node-abi@3.78.0:
dependencies:
- semver: 7.7.2
+ semver: 7.7.3
node-emoji@2.2.0:
dependencies:
@@ -20342,12 +20599,12 @@ snapshots:
node-forge@1.3.1: {}
- node-releases@2.0.21: {}
+ node-releases@2.0.26: {}
normalize-package-data@2.5.0:
dependencies:
hosted-git-info: 2.8.9
- resolve: 1.22.10
+ resolve: 1.22.11
semver: 5.7.2
validate-npm-package-license: 3.0.4
@@ -20355,14 +20612,14 @@ snapshots:
dependencies:
hosted-git-info: 4.1.0
is-core-module: 2.16.1
- semver: 7.7.2
+ semver: 7.7.3
validate-npm-package-license: 3.0.4
normalize-package-data@5.0.0:
dependencies:
hosted-git-info: 6.1.3
is-core-module: 2.16.1
- semver: 7.7.2
+ semver: 7.7.3
validate-npm-package-license: 3.0.4
normalize-path@3.0.0: {}
@@ -20375,7 +20632,7 @@ snapshots:
npm-install-checks@6.3.0:
dependencies:
- semver: 7.7.2
+ semver: 7.7.3
npm-normalize-package-bin@3.0.1: {}
@@ -20383,7 +20640,7 @@ snapshots:
dependencies:
hosted-git-info: 6.1.3
proc-log: 3.0.0
- semver: 7.7.2
+ semver: 7.7.3
validate-npm-package-name: 5.0.1
npm-pick-manifest@8.0.2:
@@ -20391,7 +20648,7 @@ snapshots:
npm-install-checks: 6.3.0
npm-normalize-package-bin: 3.0.1
npm-package-arg: 10.1.0
- semver: 7.7.2
+ semver: 7.7.3
npm-run-path@4.0.1:
dependencies:
@@ -20403,11 +20660,11 @@ snapshots:
dependencies:
boolbase: 1.0.0
- null-loader@4.0.1(webpack@5.101.3(@swc/core@1.13.5)):
+ null-loader@4.0.1(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
loader-utils: 2.0.4
schema-utils: 3.3.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
object-assign@4.1.1: {}
@@ -20455,6 +20712,13 @@ snapshots:
dependencies:
mimic-fn: 2.1.0
+ open@10.2.0:
+ dependencies:
+ default-browser: 5.2.1
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ wsl-utils: 0.1.0
+
open@8.4.2:
dependencies:
define-lazy-prop: 2.0.0
@@ -20516,9 +20780,10 @@ snapshots:
eventemitter3: 4.0.7
p-timeout: 3.2.0
- p-retry@4.6.2:
+ p-retry@6.2.1:
dependencies:
- '@types/retry': 0.12.0
+ '@types/retry': 0.12.2
+ is-network-error: 1.3.0
retry: 0.13.1
p-timeout@3.2.0:
@@ -20534,7 +20799,7 @@ snapshots:
got: 12.6.1
registry-auth-token: 5.1.0
registry-url: 6.0.1
- semver: 7.7.2
+ semver: 7.7.3
package-manager-detector@0.2.11:
dependencies:
@@ -20599,8 +20864,6 @@ snapshots:
path-exists@5.0.0: {}
- path-is-absolute@1.0.1: {}
-
path-is-inside@1.0.2: {}
path-key@3.1.1: {}
@@ -20614,7 +20877,7 @@ snapshots:
path-scurry@2.0.0:
dependencies:
- lru-cache: 11.2.1
+ lru-cache: 11.2.2
minipass: 7.1.2
path-to-regexp@0.1.12: {}
@@ -20639,13 +20902,6 @@ snapshots:
peberminta@0.9.0: {}
- periscopic@4.0.2:
- dependencies:
- '@types/estree': 1.0.8
- is-reference: 3.0.3
- zimmerframe: 1.1.4
- optional: true
-
pg-int8@1.0.1: {}
pg-protocol@1.10.3: {}
@@ -20699,12 +20955,12 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-color-functional-notation@7.0.11(postcss@8.5.6):
+ postcss-color-functional-notation@7.0.12(postcss@8.5.6):
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
@@ -20722,7 +20978,7 @@ snapshots:
postcss-colormin@6.1.0(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
caniuse-api: 3.0.0
colord: 2.9.3
postcss: 8.5.6
@@ -20730,7 +20986,7 @@ snapshots:
postcss-convert-values@6.1.0(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -20785,9 +21041,9 @@ snapshots:
postcss: 8.5.6
postcss-selector-parser: 6.1.2
- postcss-double-position-gradients@6.0.3(postcss@8.5.6):
+ postcss-double-position-gradients@6.0.4(postcss@8.5.6):
dependencies:
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -20816,22 +21072,22 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-lab-function@7.0.11(postcss@8.5.6):
+ postcss-lab-function@7.0.12(postcss@8.5.6):
dependencies:
'@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/utilities': 2.0.0(postcss@8.5.6)
postcss: 8.5.6
- postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.9.2)(webpack@5.101.3(@swc/core@1.13.5)):
+ postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.9.3)(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
- cosmiconfig: 8.3.6(typescript@5.9.2)
+ cosmiconfig: 8.3.6(typescript@5.9.3)
jiti: 1.21.7
postcss: 8.5.6
- semver: 7.7.2
- webpack: 5.101.3(@swc/core@1.13.5)
+ semver: 7.7.3
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- typescript
@@ -20854,7 +21110,7 @@ snapshots:
postcss-merge-rules@6.1.1(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
caniuse-api: 3.0.0
cssnano-utils: 4.0.2(postcss@8.5.6)
postcss: 8.5.6
@@ -20874,7 +21130,7 @@ snapshots:
postcss-minify-params@6.1.0(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
cssnano-utils: 4.0.2(postcss@8.5.6)
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -20943,7 +21199,7 @@ snapshots:
postcss-normalize-unicode@6.1.0(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -20981,24 +21237,25 @@ snapshots:
postcss: 8.5.6
postcss-value-parser: 4.2.0
- postcss-preset-env@10.3.1(postcss@8.5.6):
+ postcss-preset-env@10.4.0(postcss@8.5.6):
dependencies:
- '@csstools/postcss-alpha-function': 1.0.0(postcss@8.5.6)
+ '@csstools/postcss-alpha-function': 1.0.1(postcss@8.5.6)
'@csstools/postcss-cascade-layers': 5.0.2(postcss@8.5.6)
- '@csstools/postcss-color-function': 4.0.11(postcss@8.5.6)
- '@csstools/postcss-color-function-display-p3-linear': 1.0.0(postcss@8.5.6)
- '@csstools/postcss-color-mix-function': 3.0.11(postcss@8.5.6)
- '@csstools/postcss-color-mix-variadic-function-arguments': 1.0.1(postcss@8.5.6)
- '@csstools/postcss-content-alt-text': 2.0.7(postcss@8.5.6)
+ '@csstools/postcss-color-function': 4.0.12(postcss@8.5.6)
+ '@csstools/postcss-color-function-display-p3-linear': 1.0.1(postcss@8.5.6)
+ '@csstools/postcss-color-mix-function': 3.0.12(postcss@8.5.6)
+ '@csstools/postcss-color-mix-variadic-function-arguments': 1.0.2(postcss@8.5.6)
+ '@csstools/postcss-content-alt-text': 2.0.8(postcss@8.5.6)
+ '@csstools/postcss-contrast-color-function': 2.0.12(postcss@8.5.6)
'@csstools/postcss-exponential-functions': 2.0.9(postcss@8.5.6)
'@csstools/postcss-font-format-keywords': 4.0.0(postcss@8.5.6)
'@csstools/postcss-gamut-mapping': 2.0.11(postcss@8.5.6)
- '@csstools/postcss-gradients-interpolation-method': 5.0.11(postcss@8.5.6)
- '@csstools/postcss-hwb-function': 4.0.11(postcss@8.5.6)
- '@csstools/postcss-ic-unit': 4.0.3(postcss@8.5.6)
+ '@csstools/postcss-gradients-interpolation-method': 5.0.12(postcss@8.5.6)
+ '@csstools/postcss-hwb-function': 4.0.12(postcss@8.5.6)
+ '@csstools/postcss-ic-unit': 4.0.4(postcss@8.5.6)
'@csstools/postcss-initial': 2.0.1(postcss@8.5.6)
'@csstools/postcss-is-pseudo-class': 5.0.3(postcss@8.5.6)
- '@csstools/postcss-light-dark-function': 2.0.10(postcss@8.5.6)
+ '@csstools/postcss-light-dark-function': 2.0.11(postcss@8.5.6)
'@csstools/postcss-logical-float-and-clear': 3.0.0(postcss@8.5.6)
'@csstools/postcss-logical-overflow': 2.0.0(postcss@8.5.6)
'@csstools/postcss-logical-overscroll-behavior': 2.0.0(postcss@8.5.6)
@@ -21008,10 +21265,10 @@ snapshots:
'@csstools/postcss-media-queries-aspect-ratio-number-values': 3.0.5(postcss@8.5.6)
'@csstools/postcss-nested-calc': 4.0.0(postcss@8.5.6)
'@csstools/postcss-normalize-display-values': 4.0.0(postcss@8.5.6)
- '@csstools/postcss-oklab-function': 4.0.11(postcss@8.5.6)
- '@csstools/postcss-progressive-custom-properties': 4.2.0(postcss@8.5.6)
+ '@csstools/postcss-oklab-function': 4.0.12(postcss@8.5.6)
+ '@csstools/postcss-progressive-custom-properties': 4.2.1(postcss@8.5.6)
'@csstools/postcss-random-function': 2.0.1(postcss@8.5.6)
- '@csstools/postcss-relative-color-syntax': 3.0.11(postcss@8.5.6)
+ '@csstools/postcss-relative-color-syntax': 3.0.12(postcss@8.5.6)
'@csstools/postcss-scope-pseudo-class': 4.0.1(postcss@8.5.6)
'@csstools/postcss-sign-functions': 1.1.4(postcss@8.5.6)
'@csstools/postcss-stepped-value-functions': 4.0.9(postcss@8.5.6)
@@ -21019,28 +21276,28 @@ snapshots:
'@csstools/postcss-trigonometric-functions': 4.0.9(postcss@8.5.6)
'@csstools/postcss-unset-value': 4.0.0(postcss@8.5.6)
autoprefixer: 10.4.21(postcss@8.5.6)
- browserslist: 4.26.2
+ browserslist: 4.27.0
css-blank-pseudo: 7.0.1(postcss@8.5.6)
css-has-pseudo: 7.0.3(postcss@8.5.6)
css-prefers-color-scheme: 10.0.0(postcss@8.5.6)
- cssdb: 8.4.0
+ cssdb: 8.4.2
postcss: 8.5.6
postcss-attribute-case-insensitive: 7.0.1(postcss@8.5.6)
postcss-clamp: 4.1.0(postcss@8.5.6)
- postcss-color-functional-notation: 7.0.11(postcss@8.5.6)
+ postcss-color-functional-notation: 7.0.12(postcss@8.5.6)
postcss-color-hex-alpha: 10.0.0(postcss@8.5.6)
postcss-color-rebeccapurple: 10.0.0(postcss@8.5.6)
postcss-custom-media: 11.0.6(postcss@8.5.6)
postcss-custom-properties: 14.0.6(postcss@8.5.6)
postcss-custom-selectors: 8.0.5(postcss@8.5.6)
postcss-dir-pseudo-class: 9.0.1(postcss@8.5.6)
- postcss-double-position-gradients: 6.0.3(postcss@8.5.6)
+ postcss-double-position-gradients: 6.0.4(postcss@8.5.6)
postcss-focus-visible: 10.0.1(postcss@8.5.6)
postcss-focus-within: 9.0.1(postcss@8.5.6)
postcss-font-variant: 5.0.0(postcss@8.5.6)
postcss-gap-properties: 6.0.0(postcss@8.5.6)
postcss-image-set-function: 7.0.0(postcss@8.5.6)
- postcss-lab-function: 7.0.11(postcss@8.5.6)
+ postcss-lab-function: 7.0.12(postcss@8.5.6)
postcss-logical: 8.1.0(postcss@8.5.6)
postcss-nesting: 13.0.2(postcss@8.5.6)
postcss-opacity-percentage: 3.0.0(postcss@8.5.6)
@@ -21063,7 +21320,7 @@ snapshots:
postcss-reduce-initial@6.1.0(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
caniuse-api: 3.0.0
postcss: 8.5.6
@@ -21131,17 +21388,17 @@ snapshots:
postgres@3.4.7: {}
- posthog-js@1.266.0:
+ posthog-js@1.284.0:
dependencies:
- '@posthog/core': 1.0.2
- core-js: 3.45.1
+ '@posthog/core': 1.5.0
+ core-js: 3.46.0
fflate: 0.4.8
preact: 10.27.2
web-vitals: 4.2.4
- posthog-node@5.8.4:
+ posthog-node@5.11.0:
dependencies:
- '@posthog/core': 1.0.2
+ '@posthog/core': 1.5.0
postmark@4.0.5:
dependencies:
@@ -21164,11 +21421,11 @@ snapshots:
pretty-time@1.1.0: {}
- prism-react-renderer@2.4.1(react@19.1.1):
+ prism-react-renderer@2.4.1(react@19.2.0):
dependencies:
'@types/prismjs': 1.26.5
clsx: 2.1.1
- react: 19.1.1
+ react: 19.2.0
prismjs@1.30.0: {}
@@ -21255,68 +21512,68 @@ snapshots:
quickselect@3.0.0: {}
- radix-ui@1.4.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ radix-ui@1.4.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
'@radix-ui/primitive': 1.1.3
- '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-form': 0.1.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-label': 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-select': 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1)
- '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@radix-ui/react-accessible-icon': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-accordion': 1.2.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-alert-dialog': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-aspect-ratio': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-avatar': 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-checkbox': 1.3.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-collapsible': 1.1.12(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context': 1.1.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-context-menu': 2.2.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-direction': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-dropdown-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-form': 0.1.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-hover-card': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-label': 2.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-menubar': 1.1.16(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-navigation-menu': 1.2.14(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-one-time-password-field': 0.1.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-password-toggle-field': 0.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-popover': 1.1.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-progress': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-radio-group': 1.3.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-scroll-area': 1.2.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-select': 2.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-separator': 1.1.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slider': 1.3.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-slot': 1.2.3(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-switch': 1.2.6(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-tabs': 1.1.13(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-toast': 1.2.15(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-toggle-group': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-toolbar': 1.1.11(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-tooltip': 1.2.8(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-use-size': 1.1.1(@types/react@19.2.2)(react@19.2.0)
+ '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
- '@types/react-dom': 19.1.9(@types/react@19.1.13)
+ '@types/react': 19.2.2
+ '@types/react-dom': 19.2.2(@types/react@19.2.2)
randombytes@2.1.0:
dependencies:
@@ -21353,57 +21610,57 @@ snapshots:
minimist: 1.2.8
strip-json-comments: 2.0.1
- react-day-picker@9.10.0(react@19.1.1):
+ react-day-picker@9.11.1(react@19.2.0):
dependencies:
'@date-fns/tz': 1.4.1
date-fns: 4.1.0
date-fns-jalali: 4.1.0-0
- react: 19.1.1
+ react: 19.2.0
- react-dom@19.1.1(react@19.1.1):
+ react-dom@19.2.0(react@19.2.0):
dependencies:
- react: 19.1.1
- scheduler: 0.26.0
+ react: 19.2.0
+ scheduler: 0.27.0
react-fast-compare@3.2.2: {}
- react-hook-form@7.62.0(react@19.1.1):
+ react-hook-form@7.65.0(react@19.2.0):
dependencies:
- react: 19.1.1
+ react: 19.2.0
react-is@16.13.1: {}
react-is@18.3.1: {}
- react-json-view-lite@2.5.0(react@19.1.1):
+ react-json-view-lite@2.5.0(react@19.2.0):
dependencies:
- react: 19.1.1
+ react: 19.2.0
- react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@19.1.1))(webpack@5.101.3(@swc/core@1.13.5)):
+ react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@19.2.0))(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
'@babel/runtime': 7.28.4
- react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.1.1)'
- webpack: 5.101.3(@swc/core@1.13.5)
+ react-loadable: '@docusaurus/react-loadable@6.0.0(react@19.2.0)'
+ webpack: 5.102.1(@swc/core@1.13.21)
- react-map-gl@8.0.4(mapbox-gl@3.15.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ react-map-gl@8.1.0(mapbox-gl@3.16.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- '@vis.gl/react-mapbox': 8.0.4(mapbox-gl@3.15.0)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- '@vis.gl/react-maplibre': 8.0.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ '@vis.gl/react-mapbox': 8.1.0(mapbox-gl@3.16.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ '@vis.gl/react-maplibre': 8.1.0(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
optionalDependencies:
- mapbox-gl: 3.15.0
+ mapbox-gl: 3.16.0
- react-markdown@10.1.0(@types/react@19.1.13)(react@19.1.1):
+ react-markdown@10.1.0(@types/react@19.2.2)(react@19.2.0):
dependencies:
'@types/hast': 3.0.4
'@types/mdast': 4.0.4
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
devlop: 1.1.0
hast-util-to-jsx-runtime: 2.3.6
html-url-attributes: 3.0.1
mdast-util-to-hast: 13.2.0
- react: 19.1.1
+ react: 19.2.0
remark-parse: 11.0.0
remark-rehype: 11.1.2
unified: 11.0.5
@@ -21418,49 +21675,49 @@ snapshots:
react-refresh@0.14.2: {}
- react-remove-scroll-bar@2.3.8(@types/react@19.1.13)(react@19.1.1):
+ react-remove-scroll-bar@2.3.8(@types/react@19.2.2)(react@19.2.0):
dependencies:
- react: 19.1.1
- react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1)
+ react: 19.2.0
+ react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.2.0)
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- react-remove-scroll@2.7.1(@types/react@19.1.13)(react@19.1.1):
+ react-remove-scroll@2.7.1(@types/react@19.2.2)(react@19.2.0):
dependencies:
- react: 19.1.1
- react-remove-scroll-bar: 2.3.8(@types/react@19.1.13)(react@19.1.1)
- react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1)
+ react: 19.2.0
+ react-remove-scroll-bar: 2.3.8(@types/react@19.2.2)(react@19.2.0)
+ react-style-singleton: 2.2.3(@types/react@19.2.2)(react@19.2.0)
tslib: 2.8.1
- use-callback-ref: 1.3.3(@types/react@19.1.13)(react@19.1.1)
- use-sidecar: 1.1.3(@types/react@19.1.13)(react@19.1.1)
+ use-callback-ref: 1.3.3(@types/react@19.2.2)(react@19.2.0)
+ use-sidecar: 1.1.3(@types/react@19.2.2)(react@19.2.0)
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- react-router-config@5.1.1(react-router@5.3.4(react@19.1.1))(react@19.1.1):
+ react-router-config@5.1.1(react-router@5.3.4(react@19.2.0))(react@19.2.0):
dependencies:
'@babel/runtime': 7.28.4
- react: 19.1.1
- react-router: 5.3.4(react@19.1.1)
+ react: 19.2.0
+ react-router: 5.3.4(react@19.2.0)
- react-router-dom@5.3.4(react@19.1.1):
+ react-router-dom@5.3.4(react@19.2.0):
dependencies:
'@babel/runtime': 7.28.4
history: 4.10.1
loose-envify: 1.4.0
prop-types: 15.8.1
- react: 19.1.1
- react-router: 5.3.4(react@19.1.1)
+ react: 19.2.0
+ react-router: 5.3.4(react@19.2.0)
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
- react-router-dom@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ react-router-dom@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- react-router@5.3.4(react@19.1.1):
+ react-router@5.3.4(react@19.2.0):
dependencies:
'@babel/runtime': 7.28.4
history: 4.10.1
@@ -21468,45 +21725,45 @@ snapshots:
loose-envify: 1.4.0
path-to-regexp: 1.9.0
prop-types: 15.8.1
- react: 19.1.1
+ react: 19.2.0
react-is: 16.13.1
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
- react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
cookie: 1.0.2
- react: 19.1.1
+ react: 19.2.0
set-cookie-parser: 2.7.1
optionalDependencies:
- react-dom: 19.1.1(react@19.1.1)
+ react-dom: 19.2.0(react@19.2.0)
- react-smooth@4.0.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ react-smooth@4.0.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- fast-equals: 5.2.2
+ fast-equals: 5.3.2
prop-types: 15.8.1
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-transition-group: 4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-transition-group: 4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- react-style-singleton@2.2.3(@types/react@19.1.13)(react@19.1.1):
+ react-style-singleton@2.2.3(@types/react@19.2.2)(react@19.2.0):
dependencies:
get-nonce: 1.0.1
- react: 19.1.1
+ react: 19.2.0
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- react-transition-group@4.4.5(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ react-transition-group@4.4.5(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
'@babel/runtime': 7.28.4
dom-helpers: 5.2.1
loose-envify: 1.4.0
prop-types: 15.8.1
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
- react@19.1.1: {}
+ react@19.2.0: {}
read-pkg-up@7.0.1:
dependencies:
@@ -21554,15 +21811,15 @@ snapshots:
dependencies:
decimal.js-light: 2.5.1
- recharts@2.15.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ recharts@2.15.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
clsx: 2.1.1
eventemitter3: 4.0.7
lodash: 4.17.21
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
react-is: 18.3.1
- react-smooth: 4.0.4(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react-smooth: 4.0.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
recharts-scale: 0.4.5
tiny-invariant: 1.3.3
victory-vendor: 36.9.2
@@ -21629,12 +21886,12 @@ snapshots:
gopd: 1.2.0
set-function-name: 2.0.2
- regexpu-core@6.3.1:
+ regexpu-core@6.4.0:
dependencies:
regenerate: 1.4.2
regenerate-unicode-properties: 10.2.2
regjsgen: 0.8.0
- regjsparser: 0.12.0
+ regjsparser: 0.13.0
unicode-match-property-ecmascript: 2.0.0
unicode-match-property-value-ecmascript: 2.2.1
@@ -21648,9 +21905,9 @@ snapshots:
regjsgen@0.8.0: {}
- regjsparser@0.12.0:
+ regjsparser@0.13.0:
dependencies:
- jsesc: 3.0.2
+ jsesc: 3.1.0
rehype-raw@7.0.0:
dependencies:
@@ -21735,25 +21992,25 @@ snapshots:
mdast-util-to-markdown: 2.1.2
unified: 11.0.5
- remix-hook-form@7.1.0(react-dom@19.1.1(react@19.1.1))(react-hook-form@7.62.0(react@19.1.1))(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1):
+ remix-hook-form@7.1.0(react-dom@19.2.0(react@19.2.0))(react-hook-form@7.65.0(react@19.2.0))(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0):
dependencies:
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
- react-hook-form: 7.62.0(react@19.1.1)
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
+ react-hook-form: 7.65.0(react@19.2.0)
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
- remix-toast@3.2.0(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)):
+ remix-toast@3.3.0(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)):
dependencies:
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
zod: 3.25.76
- remix-utils@8.8.0(react-router@7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)(zod@3.25.76):
+ remix-utils@9.0.0(@standard-schema/spec@1.0.0)(react-router@7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0):
dependencies:
type-fest: 4.41.0
optionalDependencies:
- react: 19.1.1
- react-router: 7.9.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1)
- zod: 3.25.76
+ '@standard-schema/spec': 1.0.0
+ react: 19.2.0
+ react-router: 7.9.4(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
renderkid@3.0.0:
dependencies:
@@ -21771,7 +22028,7 @@ snapshots:
dependencies:
debug: 4.4.3
module-details-from-path: 1.0.4
- resolve: 1.22.10
+ resolve: 1.22.11
transitivePeerDependencies:
- supports-color
@@ -21793,7 +22050,7 @@ snapshots:
dependencies:
protocol-buffers-schema: 3.6.0
- resolve@1.22.10:
+ resolve@1.22.11:
dependencies:
is-core-module: 2.16.1
path-parse: 1.0.7
@@ -21813,44 +22070,41 @@ snapshots:
reusify@1.1.0: {}
- rimraf@3.0.2:
- dependencies:
- glob: 7.2.3
-
robust-predicates@2.0.4: {}
robust-predicates@3.0.2: {}
- rollup-plugin-polyfill-node@0.13.0(rollup@4.50.2):
+ rollup-plugin-polyfill-node@0.13.0(rollup@4.52.5):
dependencies:
- '@rollup/plugin-inject': 5.0.5(rollup@4.50.2)
- rollup: 4.50.2
+ '@rollup/plugin-inject': 5.0.5(rollup@4.52.5)
+ rollup: 4.52.5
- rollup@4.50.2:
+ rollup@4.52.5:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.50.2
- '@rollup/rollup-android-arm64': 4.50.2
- '@rollup/rollup-darwin-arm64': 4.50.2
- '@rollup/rollup-darwin-x64': 4.50.2
- '@rollup/rollup-freebsd-arm64': 4.50.2
- '@rollup/rollup-freebsd-x64': 4.50.2
- '@rollup/rollup-linux-arm-gnueabihf': 4.50.2
- '@rollup/rollup-linux-arm-musleabihf': 4.50.2
- '@rollup/rollup-linux-arm64-gnu': 4.50.2
- '@rollup/rollup-linux-arm64-musl': 4.50.2
- '@rollup/rollup-linux-loong64-gnu': 4.50.2
- '@rollup/rollup-linux-ppc64-gnu': 4.50.2
- '@rollup/rollup-linux-riscv64-gnu': 4.50.2
- '@rollup/rollup-linux-riscv64-musl': 4.50.2
- '@rollup/rollup-linux-s390x-gnu': 4.50.2
- '@rollup/rollup-linux-x64-gnu': 4.50.2
- '@rollup/rollup-linux-x64-musl': 4.50.2
- '@rollup/rollup-openharmony-arm64': 4.50.2
- '@rollup/rollup-win32-arm64-msvc': 4.50.2
- '@rollup/rollup-win32-ia32-msvc': 4.50.2
- '@rollup/rollup-win32-x64-msvc': 4.50.2
+ '@rollup/rollup-android-arm-eabi': 4.52.5
+ '@rollup/rollup-android-arm64': 4.52.5
+ '@rollup/rollup-darwin-arm64': 4.52.5
+ '@rollup/rollup-darwin-x64': 4.52.5
+ '@rollup/rollup-freebsd-arm64': 4.52.5
+ '@rollup/rollup-freebsd-x64': 4.52.5
+ '@rollup/rollup-linux-arm-gnueabihf': 4.52.5
+ '@rollup/rollup-linux-arm-musleabihf': 4.52.5
+ '@rollup/rollup-linux-arm64-gnu': 4.52.5
+ '@rollup/rollup-linux-arm64-musl': 4.52.5
+ '@rollup/rollup-linux-loong64-gnu': 4.52.5
+ '@rollup/rollup-linux-ppc64-gnu': 4.52.5
+ '@rollup/rollup-linux-riscv64-gnu': 4.52.5
+ '@rollup/rollup-linux-riscv64-musl': 4.52.5
+ '@rollup/rollup-linux-s390x-gnu': 4.52.5
+ '@rollup/rollup-linux-x64-gnu': 4.52.5
+ '@rollup/rollup-linux-x64-musl': 4.52.5
+ '@rollup/rollup-openharmony-arm64': 4.52.5
+ '@rollup/rollup-win32-arm64-msvc': 4.52.5
+ '@rollup/rollup-win32-ia32-msvc': 4.52.5
+ '@rollup/rollup-win32-x64-gnu': 4.52.5
+ '@rollup/rollup-win32-x64-msvc': 4.52.5
fsevents: 2.3.3
rou3@0.5.1: {}
@@ -21862,6 +22116,8 @@ snapshots:
postcss: 8.5.6
strip-json-comments: 3.1.1
+ run-applescript@7.1.0: {}
+
run-parallel@1.2.0:
dependencies:
queue-microtask: 1.2.3
@@ -21893,11 +22149,13 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
+ safe-stable-stringify@2.5.0: {}
+
safer-buffer@2.1.2: {}
sax@1.4.1: {}
- scheduler@0.26.0: {}
+ scheduler@0.27.0: {}
schema-dts@1.1.5: {}
@@ -21907,7 +22165,7 @@ snapshots:
ajv: 6.12.6
ajv-keywords: 3.5.2(ajv@6.12.6)
- schema-utils@4.3.2:
+ schema-utils@4.3.3:
dependencies:
'@types/json-schema': 7.0.15
ajv: 8.17.1
@@ -21934,13 +22192,13 @@ snapshots:
semver-diff@4.0.0:
dependencies:
- semver: 7.7.2
+ semver: 7.7.3
semver@5.7.2: {}
semver@6.3.1: {}
- semver@7.7.2: {}
+ semver@7.7.3: {}
send@0.19.0:
dependencies:
@@ -22048,7 +22306,7 @@ snapshots:
shimmer@1.2.1: {}
- shpjs@6.1.0:
+ shpjs@6.2.0:
dependencies:
but-unzip: 0.1.7
parsedbf: 2.0.0
@@ -22128,10 +22386,10 @@ snapshots:
uuid: 8.3.2
websocket-driver: 0.7.4
- sonner@2.0.7(react-dom@19.1.1(react@19.1.1))(react@19.1.1):
+ sonner@2.0.7(react-dom@19.2.0(react@19.2.0))(react@19.2.0):
dependencies:
- react: 19.1.1
- react-dom: 19.1.1(react@19.1.1)
+ react: 19.2.0
+ react-dom: 19.2.0(react@19.2.0)
sort-asc@0.2.0: {}
@@ -22219,7 +22477,7 @@ snapshots:
statuses@2.0.1: {}
- std-env@3.9.0: {}
+ std-env@3.10.0: {}
stop-iteration-iterator@1.1.0:
dependencies:
@@ -22302,7 +22560,7 @@ snapshots:
strip-json-comments@3.1.1: {}
- strip-literal@3.0.0:
+ strip-literal@3.1.0:
dependencies:
js-tokens: 9.0.1
@@ -22310,17 +22568,17 @@ snapshots:
dependencies:
'@tokenizer/token': 0.3.0
- style-to-js@1.1.17:
+ style-to-js@1.1.18:
dependencies:
- style-to-object: 1.0.9
+ style-to-object: 1.0.11
- style-to-object@1.0.9:
+ style-to-object@1.0.11:
dependencies:
inline-style-parser: 0.2.4
stylehacks@6.1.1(postcss@8.5.6):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
postcss: 8.5.6
postcss-selector-parser: 6.1.2
@@ -22357,47 +22615,44 @@ snapshots:
csso: 5.0.5
picocolors: 1.1.1
- swc-loader@0.2.6(@swc/core@1.13.5)(webpack@5.101.3(@swc/core@1.13.5)):
+ swc-loader@0.2.6(@swc/core@1.13.21)(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
- '@swc/core': 1.13.5
+ '@swc/core': 1.13.21
'@swc/counter': 0.1.3
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
sweepline-intersections@1.5.0:
dependencies:
tinyqueue: 2.0.3
+ swr@2.3.6(react@19.2.0):
+ dependencies:
+ dequal: 2.0.3
+ react: 19.2.0
+ use-sync-external-store: 1.6.0(react@19.2.0)
+
tailwind-merge@3.3.1: {}
- tailwindcss-animate@1.0.7(tailwindcss@4.1.13):
+ tailwindcss-animate@1.0.7(tailwindcss@4.1.16):
dependencies:
- tailwindcss: 4.1.13
+ tailwindcss: 4.1.16
- tailwindcss@4.1.13: {}
+ tailwindcss@4.1.16: {}
- tapable@2.2.3: {}
-
- tar@7.4.3:
- dependencies:
- '@isaacs/fs-minipass': 4.0.1
- chownr: 3.0.0
- minipass: 7.1.2
- minizlib: 3.0.2
- mkdirp: 3.0.1
- yallist: 5.0.0
+ tapable@2.3.0: {}
term-size@2.2.1: {}
- terser-webpack-plugin@5.3.14(@swc/core@1.13.5)(webpack@5.101.3(@swc/core@1.13.5)):
+ terser-webpack-plugin@5.3.14(@swc/core@1.13.21)(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
- schema-utils: 4.3.2
+ schema-utils: 4.3.3
serialize-javascript: 6.0.2
terser: 5.44.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
optionalDependencies:
- '@swc/core': 1.13.5
+ '@swc/core': 1.13.21
terser@5.44.0:
dependencies:
@@ -22412,6 +22667,12 @@ snapshots:
glob: 10.4.5
minimatch: 9.0.5
+ thingies@2.5.0(tslib@2.8.1):
+ dependencies:
+ tslib: 2.8.1
+
+ throttleit@2.1.0: {}
+
thunky@1.1.0: {}
tiny-invariant@1.3.3: {}
@@ -22437,7 +22698,7 @@ snapshots:
tinyrainbow@2.0.0: {}
- tinyspy@4.0.3: {}
+ tinyspy@4.0.4: {}
to-regex-range@5.0.1:
dependencies:
@@ -22469,15 +22730,19 @@ snapshots:
typedarray.prototype.slice: 1.0.5
which-typed-array: 1.1.19
+ tree-dump@1.1.0(tslib@2.8.1):
+ dependencies:
+ tslib: 2.8.1
+
trim-lines@3.0.1: {}
trim-newlines@3.0.1: {}
trough@2.2.0: {}
- tsconfck@3.1.6(typescript@5.9.2):
+ tsconfck@3.1.6(typescript@5.9.3):
optionalDependencies:
- typescript: 5.9.2
+ typescript: 5.9.3
tslib@1.14.1: {}
@@ -22487,35 +22752,32 @@ snapshots:
dependencies:
tslib: 1.14.1
- turbo-darwin-64@2.5.6:
- optional: true
-
- turbo-darwin-arm64@2.5.6:
+ turbo-darwin-64@2.5.8:
optional: true
- turbo-linux-64@2.5.6:
+ turbo-darwin-arm64@2.5.8:
optional: true
- turbo-linux-arm64@2.5.6:
+ turbo-linux-64@2.5.8:
optional: true
- turbo-stream@3.1.0:
+ turbo-linux-arm64@2.5.8:
optional: true
- turbo-windows-64@2.5.6:
+ turbo-windows-64@2.5.8:
optional: true
- turbo-windows-arm64@2.5.6:
+ turbo-windows-arm64@2.5.8:
optional: true
- turbo@2.5.6:
+ turbo@2.5.8:
optionalDependencies:
- turbo-darwin-64: 2.5.6
- turbo-darwin-arm64: 2.5.6
- turbo-linux-64: 2.5.6
- turbo-linux-arm64: 2.5.6
- turbo-windows-64: 2.5.6
- turbo-windows-arm64: 2.5.6
+ turbo-darwin-64: 2.5.8
+ turbo-darwin-arm64: 2.5.8
+ turbo-linux-64: 2.5.8
+ turbo-linux-arm64: 2.5.8
+ turbo-windows-64: 2.5.8
+ turbo-windows-arm64: 2.5.8
type-fest@0.18.1: {}
@@ -22584,28 +22846,28 @@ snapshots:
typed-array-buffer: 1.0.3
typed-array-byte-offset: 1.0.4
- typedoc-docusaurus-theme@1.4.2(typedoc-plugin-markdown@4.8.1(typedoc@0.28.13(typescript@5.9.2))):
+ typedoc-docusaurus-theme@1.4.2(typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3))):
dependencies:
- typedoc-plugin-markdown: 4.8.1(typedoc@0.28.13(typescript@5.9.2))
+ typedoc-plugin-markdown: 4.9.0(typedoc@0.28.14(typescript@5.9.3))
- typedoc-plugin-markdown@4.8.1(typedoc@0.28.13(typescript@5.9.2)):
+ typedoc-plugin-markdown@4.9.0(typedoc@0.28.14(typescript@5.9.3)):
dependencies:
- typedoc: 0.28.13(typescript@5.9.2)
+ typedoc: 0.28.14(typescript@5.9.3)
- typedoc-plugin-missing-exports@4.1.0(typedoc@0.28.13(typescript@5.9.2)):
+ typedoc-plugin-missing-exports@4.1.2(typedoc@0.28.14(typescript@5.9.3)):
dependencies:
- typedoc: 0.28.13(typescript@5.9.2)
+ typedoc: 0.28.14(typescript@5.9.3)
- typedoc@0.28.13(typescript@5.9.2):
+ typedoc@0.28.14(typescript@5.9.3):
dependencies:
- '@gerrit0/mini-shiki': 3.12.2
+ '@gerrit0/mini-shiki': 3.13.1
lunr: 2.3.9
markdown-it: 14.1.0
minimatch: 9.0.5
- typescript: 5.9.2
+ typescript: 5.9.3
yaml: 2.8.1
- typescript@5.9.2: {}
+ typescript@5.9.3: {}
typewise-core@1.2.0: {}
@@ -22626,7 +22888,7 @@ snapshots:
uncrypto@0.1.3: {}
- undici-types@7.12.0: {}
+ undici-types@7.16.0: {}
unicode-canonical-property-names-ecmascript@2.0.1: {}
@@ -22664,7 +22926,7 @@ snapshots:
unique-username-generator@1.5.1: {}
- unist-util-is@6.0.0:
+ unist-util-is@6.0.1:
dependencies:
'@types/unist': 3.0.3
@@ -22680,16 +22942,16 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
- unist-util-visit-parents@6.0.1:
+ unist-util-visit-parents@6.0.2:
dependencies:
'@types/unist': 3.0.3
- unist-util-is: 6.0.0
+ unist-util-is: 6.0.1
unist-util-visit@5.0.0:
dependencies:
'@types/unist': 3.0.3
- unist-util-is: 6.0.0
- unist-util-visit-parents: 6.0.1
+ unist-util-is: 6.0.1
+ unist-util-visit-parents: 6.0.2
universalify@0.1.2: {}
@@ -22704,9 +22966,9 @@ snapshots:
webpack-sources: 3.3.3
webpack-virtual-modules: 0.5.0
- update-browserslist-db@1.1.3(browserslist@4.26.2):
+ update-browserslist-db@1.1.4(browserslist@4.27.0):
dependencies:
- browserslist: 4.26.2
+ browserslist: 4.27.0
escalade: 3.2.0
picocolors: 1.1.1
@@ -22723,7 +22985,7 @@ snapshots:
is-yarn-global: 0.4.1
latest-version: 7.0.0
pupa: 3.3.0
- semver: 7.7.2
+ semver: 7.7.3
semver-diff: 4.0.0
xdg-basedir: 5.1.0
@@ -22731,33 +22993,33 @@ snapshots:
dependencies:
punycode: 2.3.1
- url-loader@4.1.1(file-loader@6.2.0(webpack@5.101.3(@swc/core@1.13.5)))(webpack@5.101.3(@swc/core@1.13.5)):
+ url-loader@4.1.1(file-loader@6.2.0(webpack@5.102.1(@swc/core@1.13.21)))(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
loader-utils: 2.0.4
mime-types: 2.1.35
schema-utils: 3.3.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
optionalDependencies:
- file-loader: 6.2.0(webpack@5.101.3(@swc/core@1.13.5))
+ file-loader: 6.2.0(webpack@5.102.1(@swc/core@1.13.21))
- use-callback-ref@1.3.3(@types/react@19.1.13)(react@19.1.1):
+ use-callback-ref@1.3.3(@types/react@19.2.2)(react@19.2.0):
dependencies:
- react: 19.1.1
+ react: 19.2.0
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- use-sidecar@1.1.3(@types/react@19.1.13)(react@19.1.1):
+ use-sidecar@1.1.3(@types/react@19.2.2)(react@19.2.0):
dependencies:
detect-node-es: 1.1.0
- react: 19.1.1
+ react: 19.2.0
tslib: 2.8.1
optionalDependencies:
- '@types/react': 19.1.13
+ '@types/react': 19.2.2
- use-sync-external-store@1.5.0(react@19.1.1):
+ use-sync-external-store@1.6.0(react@19.2.0):
dependencies:
- react: 19.1.1
+ react: 19.2.0
util-deprecate@1.0.2: {}
@@ -22769,9 +23031,9 @@ snapshots:
uuid@8.3.2: {}
- valibot@0.41.0(typescript@5.9.2):
+ valibot@1.1.0(typescript@5.9.3):
optionalDependencies:
- typescript: 5.9.2
+ typescript: 5.9.3
validate-npm-package-license@3.0.4:
dependencies:
@@ -22780,7 +23042,7 @@ snapshots:
validate-npm-package-name@5.0.1: {}
- validator@13.15.15: {}
+ validator@13.15.20: {}
value-equal@1.0.1: {}
@@ -22818,13 +23080,13 @@ snapshots:
d3-time: 3.1.0
d3-timer: 3.0.1
- vite-node@3.2.4(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1):
+ vite-node@3.2.4(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 2.0.3
- vite: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -22839,43 +23101,38 @@ snapshots:
- tsx
- yaml
- vite-tsconfig-paths@5.1.4(typescript@5.9.2)(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)):
+ vite-tsconfig-paths@5.1.4(typescript@5.9.3)(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)):
dependencies:
debug: 4.4.3
globrex: 0.1.2
- tsconfck: 3.1.6(typescript@5.9.2)
+ tsconfck: 3.1.6(typescript@5.9.3)
optionalDependencies:
- vite: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
- typescript
- vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1):
+ vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1):
dependencies:
- esbuild: 0.25.10
+ esbuild: 0.25.11
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.50.2
+ rollup: 4.52.5
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
fsevents: 2.3.3
- jiti: 2.5.1
- lightningcss: 1.30.1
+ jiti: 2.6.1
+ lightningcss: 1.30.2
terser: 5.44.0
yaml: 2.8.1
- vitefu@1.1.1(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)):
- optionalDependencies:
- vite: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
- optional: true
-
- vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1):
+ vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1):
dependencies:
- '@types/chai': 5.2.2
+ '@types/chai': 5.2.3
'@vitest/expect': 3.2.4
- '@vitest/mocker': 3.2.4(vite@7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1))
+ '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -22884,21 +23141,21 @@ snapshots:
chai: 5.3.3
debug: 4.4.3
expect-type: 1.2.2
- magic-string: 0.30.19
+ magic-string: 0.30.21
pathe: 2.0.3
picomatch: 4.0.3
- std-env: 3.9.0
+ std-env: 3.10.0
tinybench: 2.9.0
tinyexec: 0.3.2
tinyglobby: 0.2.15
tinypool: 1.1.1
tinyrainbow: 2.0.0
- vite: 7.1.6(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
- vite-node: 3.2.4(@types/node@24.5.2)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.44.0)(yaml@2.8.1)
+ vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
+ vite-node: 3.2.4(@types/node@24.9.1)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(yaml@2.8.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/debug': 4.1.12
- '@types/node': 24.5.2
+ '@types/node': 24.9.1
transitivePeerDependencies:
- jiti
- less
@@ -22948,22 +23205,25 @@ snapshots:
- bufferutil
- utf-8-validate
- webpack-dev-middleware@5.3.4(webpack@5.101.3(@swc/core@1.13.5)):
+ webpack-dev-middleware@7.4.5(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
colorette: 2.0.20
- memfs: 3.5.3
- mime-types: 2.1.35
+ memfs: 4.49.0
+ mime-types: 3.0.1
+ on-finished: 2.4.1
range-parser: 1.2.1
- schema-utils: 4.3.2
- webpack: 5.101.3(@swc/core@1.13.5)
+ schema-utils: 4.3.3
+ optionalDependencies:
+ webpack: 5.102.1(@swc/core@1.13.21)
- webpack-dev-server@4.15.2(webpack@5.101.3(@swc/core@1.13.5)):
+ webpack-dev-server@5.2.2(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
'@types/bonjour': 3.5.13
'@types/connect-history-api-fallback': 1.5.4
- '@types/express': 4.17.23
+ '@types/express': 4.17.24
+ '@types/express-serve-static-core': 4.19.7
'@types/serve-index': 1.9.4
- '@types/serve-static': 1.15.8
+ '@types/serve-static': 1.15.10
'@types/sockjs': 0.3.36
'@types/ws': 8.18.1
ansi-html-community: 0.0.8
@@ -22972,25 +23232,22 @@ snapshots:
colorette: 2.0.20
compression: 1.8.1
connect-history-api-fallback: 2.0.0
- default-gateway: 6.0.3
express: 4.21.2
graceful-fs: 4.2.11
- html-entities: 2.6.0
- http-proxy-middleware: 2.0.9(@types/express@4.17.23)
+ http-proxy-middleware: 2.0.9(@types/express@4.17.24)
ipaddr.js: 2.2.0
launch-editor: 2.11.1
- open: 8.4.2
- p-retry: 4.6.2
- rimraf: 3.0.2
- schema-utils: 4.3.2
+ open: 10.2.0
+ p-retry: 6.2.1
+ schema-utils: 4.3.3
selfsigned: 2.4.1
serve-index: 1.9.1
sockjs: 0.3.24
spdy: 4.0.2
- webpack-dev-middleware: 5.3.4(webpack@5.101.3(@swc/core@1.13.5))
+ webpack-dev-middleware: 7.4.5(webpack@5.102.1(@swc/core@1.13.21))
ws: 8.18.3
optionalDependencies:
- webpack: 5.101.3(@swc/core@1.13.5)
+ webpack: 5.102.1(@swc/core@1.13.21)
transitivePeerDependencies:
- bufferutil
- debug
@@ -23013,7 +23270,7 @@ snapshots:
webpack-virtual-modules@0.5.0: {}
- webpack@5.101.3(@swc/core@1.13.5):
+ webpack@5.102.1(@swc/core@1.13.21):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -23023,7 +23280,7 @@ snapshots:
'@webassemblyjs/wasm-parser': 1.14.1
acorn: 8.15.0
acorn-import-phases: 1.0.4(acorn@8.15.0)
- browserslist: 4.26.2
+ browserslist: 4.27.0
chrome-trace-event: 1.0.4
enhanced-resolve: 5.18.3
es-module-lexer: 1.7.0
@@ -23032,12 +23289,12 @@ snapshots:
glob-to-regexp: 0.4.1
graceful-fs: 4.2.11
json-parse-even-better-errors: 2.3.1
- loader-runner: 4.3.0
+ loader-runner: 4.3.1
mime-types: 2.1.35
neo-async: 2.6.2
- schema-utils: 4.3.2
- tapable: 2.2.3
- terser-webpack-plugin: 5.3.14(@swc/core@1.13.5)(webpack@5.101.3(@swc/core@1.13.5))
+ schema-utils: 4.3.3
+ tapable: 2.3.0
+ terser-webpack-plugin: 5.3.14(@swc/core@1.13.21)(webpack@5.102.1(@swc/core@1.13.21))
watchpack: 2.4.4
webpack-sources: 3.3.3
transitivePeerDependencies:
@@ -23045,7 +23302,7 @@ snapshots:
- esbuild
- uglify-js
- webpackbar@6.0.1(webpack@5.101.3(@swc/core@1.13.5)):
+ webpackbar@6.0.1(webpack@5.102.1(@swc/core@1.13.21)):
dependencies:
ansi-escapes: 4.3.2
chalk: 4.1.2
@@ -23053,8 +23310,8 @@ snapshots:
figures: 3.2.0
markdown-table: 2.0.0
pretty-time: 1.1.0
- std-env: 3.9.0
- webpack: 5.101.3(@swc/core@1.13.5)
+ std-env: 3.10.0
+ webpack: 5.102.1(@swc/core@1.13.21)
wrap-ansi: 7.0.0
websocket-driver@0.7.4:
@@ -23086,7 +23343,7 @@ snapshots:
is-async-function: 2.1.1
is-date-object: 1.1.0
is-finalizationregistry: 1.1.1
- is-generator-function: 1.1.0
+ is-generator-function: 1.1.2
is-regex: 1.2.1
is-weakref: 1.1.1
isarray: 2.0.5
@@ -23161,6 +23418,10 @@ snapshots:
ws@8.18.3: {}
+ wsl-utils@0.1.0:
+ dependencies:
+ is-wsl: 3.1.0
+
xdg-basedir@5.1.0: {}
xml-js@1.6.11:
@@ -23177,8 +23438,6 @@ snapshots:
yallist@4.0.0: {}
- yallist@5.0.0: {}
-
yaml@2.8.1: {}
yargs-parser@20.2.9: {}
@@ -23187,19 +23446,16 @@ snapshots:
yocto-queue@1.2.1: {}
- zimmerframe@1.1.4:
- optional: true
-
zod@3.25.76: {}
- zod@4.1.9: {}
+ zod@4.1.12: {}
zstddec@0.1.0: {}
- zustand@5.0.8(@types/react@19.1.13)(react@19.1.1)(use-sync-external-store@1.5.0(react@19.1.1)):
+ zustand@5.0.8(@types/react@19.2.2)(react@19.2.0)(use-sync-external-store@1.6.0(react@19.2.0)):
optionalDependencies:
- '@types/react': 19.1.13
- react: 19.1.1
- use-sync-external-store: 1.5.0(react@19.1.1)
+ '@types/react': 19.2.2
+ react: 19.2.0
+ use-sync-external-store: 1.6.0(react@19.2.0)
zwitch@2.0.4: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 6251a646a..d561c9a6d 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -6,21 +6,21 @@ packages:
- fdm-app
catalog:
- '@dotenvx/dotenvx': ^1.49.1
+ '@dotenvx/dotenvx': ^1.51.0
'@rollup/plugin-commonjs': ^28.0.6
'@rollup/plugin-json': ^6.1.0
- '@rollup/plugin-node-resolve': ^16.0.1
+ '@rollup/plugin-node-resolve': ^16.0.3
'@rollup/plugin-terser': ^0.4.4
'@rollup/plugin-typescript': ^12.1.4
'@vitest/coverage-v8': 3.2.4
- better-auth: ^1.3.11
- drizzle-kit: ^0.31.4
- drizzle-orm: ^0.44.5
- rollup: ^4.50.2
+ better-auth: ^1.3.27
+ drizzle-kit: ^0.31.5
+ drizzle-orm: ^0.44.6
+ rollup: ^4.52.4
rollup-plugin-polyfill-node: ^0.13.0
- typedoc: ^0.28.13
- typedoc-plugin-missing-exports: ^4.1.0
- typescript: ^5.9.2
- vite: ^7.1.6
+ typedoc: ^0.28.14
+ typedoc-plugin-missing-exports: ^4.1.2
+ typescript: ^5.9.3
+ vite: ^7.1.11
vite-tsconfig-paths: ^5.1.4
vitest: ^3.2.4