diff --git a/app/components/Block.test.tsx b/__tests__/Block.test.tsx
similarity index 99%
rename from app/components/Block.test.tsx
rename to __tests__/Block.test.tsx
index 5052d8e..f786bd6 100644
--- a/app/components/Block.test.tsx
+++ b/__tests__/Block.test.tsx
@@ -1,6 +1,6 @@
import { fireEvent, render } from "@testing-library/react";
import Block from "@/app/components/Block";
-import { IfcBlock } from "@/app/types";
+import type { IfcBlock } from "@/app/types";
let tableBody: HTMLTableSectionElement;
beforeEach(() => {
diff --git a/app/components/CheckToggle.test.tsx b/__tests__/CheckToggle.test.tsx
similarity index 100%
rename from app/components/CheckToggle.test.tsx
rename to __tests__/CheckToggle.test.tsx
diff --git a/app/Footer.test.tsx b/__tests__/Footer.test.tsx
similarity index 100%
rename from app/Footer.test.tsx
rename to __tests__/Footer.test.tsx
diff --git a/app/components/GroupUtils.test.ts b/__tests__/GroupUtils.test.ts
similarity index 73%
rename from app/components/GroupUtils.test.ts
rename to __tests__/GroupUtils.test.ts
index e4601b3..3c51982 100644
--- a/app/components/GroupUtils.test.ts
+++ b/__tests__/GroupUtils.test.ts
@@ -1,22 +1,22 @@
-import { tBlockMapping } from "@/app/types";
-import { checkIfAllBlocksInGroupAreHidden } from "./GroupUtils";
+import { checkIfAllBlocksInGroupAreHidden } from "@/app/components/GroupUtils";
+import type { tBlockMapping } from "@/app/types";
test("group with all hidden blocks returns true", () => {
- let blocks: tBlockMapping = new Map();
+ const blocks: tBlockMapping = new Map();
blocks.set("testing", { pvaddress: "", visible: false });
const result = checkIfAllBlocksInGroupAreHidden(blocks);
expect(result).toBe(true);
});
test("group with all visible blocks returns false", () => {
- let blocks: tBlockMapping = new Map();
+ const blocks: tBlockMapping = new Map();
blocks.set("testing", { pvaddress: "testing", visible: true });
const result = checkIfAllBlocksInGroupAreHidden(blocks);
expect(result).toBe(false);
});
test("group with mixed visible blocks returns false", () => {
- let blocks: tBlockMapping = new Map();
+ const blocks: tBlockMapping = new Map();
blocks.set("block1", { pvaddress: "block1", visible: false });
blocks.set("block2", { pvaddress: "block2", visible: true });
const result = checkIfAllBlocksInGroupAreHidden(blocks);
diff --git a/app/components/Groups.test.tsx b/__tests__/Groups.test.tsx
similarity index 81%
rename from app/components/Groups.test.tsx
rename to __tests__/Groups.test.tsx
index e3652d0..a5d4570 100644
--- a/app/components/Groups.test.tsx
+++ b/__tests__/Groups.test.tsx
@@ -1,10 +1,10 @@
import { render } from "@testing-library/react";
import Groups from "@/app/components/Groups";
-import { tBlockMapping, tGroups } from "@/app/types";
+import type { tBlockMapping, tGroups } from "@/app/types";
it("renders groups correctly with hidden and non hidden groups", () => {
- let groups: tGroups = new Map();
- let blocksForGroup1: tBlockMapping = new Map();
+ const groups: tGroups = new Map();
+ const blocksForGroup1: tBlockMapping = new Map();
blocksForGroup1.set("A:SHOWN:BLOCK", {
pvaddress: "A:SHOWN:BLOCK",
human_readable_name: "aShownBlock",
@@ -19,7 +19,7 @@ it("renders groups correctly with hidden and non hidden groups", () => {
});
groups.set("group1", blocksForGroup1);
- let blocksForGroup2: tBlockMapping = new Map();
+ const blocksForGroup2: tBlockMapping = new Map();
blocksForGroup2.set("A:HIDDEN:BLOCK", {
pvaddress: "A:HIDDEN:BLOCK",
human_readable_name: "aHiddenBlock",
diff --git a/app/components/Instrument.test.ts b/__tests__/Instrument.test.ts
similarity index 93%
rename from app/components/Instrument.test.ts
rename to __tests__/Instrument.test.ts
index a51256d..1627bdc 100644
--- a/app/components/Instrument.test.ts
+++ b/__tests__/Instrument.test.ts
@@ -11,7 +11,7 @@ import {
toPrecision,
yesToBoolean,
} from "@/app/components/Instrument";
-import {
+import type {
ConfigOutput,
IfcBlock,
IfcPVWSMessage,
@@ -22,8 +22,8 @@ import {
test("findPVInGroups returns a block when it finds one", () => {
const blockName = "blockName";
const prefix = "IN:INSTRUMENT";
- let groups: tGroups = new Map();
- let group1Blocks: tBlockMapping = new Map();
+ const groups: tGroups = new Map();
+ const group1Blocks: tBlockMapping = new Map();
group1Blocks.set(blockName, {
human_readable_name: blockName,
pvaddress: "some:underlying:pv:name",
@@ -132,7 +132,7 @@ test("storePrecision adds precision to a block if it is the first update", () =>
pv: "",
precision: precision,
};
- let blockWithoutPrecision: IfcBlock = { pvaddress: "" };
+ const blockWithoutPrecision: IfcBlock = { pvaddress: "" };
storePrecision(message, blockWithoutPrecision);
expect(blockWithoutPrecision.precision).toEqual(precision);
});
@@ -142,16 +142,16 @@ test("getAllBlockPVs returns flat list of blocks, their RC and SPRBV pvs", () =>
const block1Name = prefix + CSSB + "blockName";
const block2Name = prefix + CSSB + "block2Name";
- let inst = new Instrument(prefix);
+ const inst = new Instrument(prefix);
- let group1Blocks: tBlockMapping = new Map();
+ const group1Blocks: tBlockMapping = new Map();
group1Blocks.set(block1Name, {
human_readable_name: block1Name,
pvaddress: "some:underlying:pv:name",
});
inst.groups.set("aGroup", group1Blocks);
- let group2Blocks: tBlockMapping = new Map();
+ const group2Blocks: tBlockMapping = new Map();
group2Blocks.set(block2Name, {
human_readable_name: block2Name,
pvaddress: "someother:underlying:pv:name",
diff --git a/app/components/InstrumentWallCard.test.tsx b/__tests__/InstrumentWallCard.test.tsx
similarity index 93%
rename from app/components/InstrumentWallCard.test.tsx
rename to __tests__/InstrumentWallCard.test.tsx
index 5b20900..a7f56d6 100644
--- a/app/components/InstrumentWallCard.test.tsx
+++ b/__tests__/InstrumentWallCard.test.tsx
@@ -1,6 +1,6 @@
import { render } from "@testing-library/react";
import InstrumentWallCard from "@/app/components/InstrumentWallCard";
-import { instListEntryWithRunstatePVandValue } from "@/app/types";
+import type { instListEntryWithRunstatePVandValue } from "@/app/types";
it("renders instrumentwallcard unchanged", () => {
const instrument: instListEntryWithRunstatePVandValue = {
diff --git a/app/components/InstrumentsDisplay.test.ts b/__tests__/InstrumentsDisplay.test.ts
similarity index 98%
rename from app/components/InstrumentsDisplay.test.ts
rename to __tests__/InstrumentsDisplay.test.ts
index b86c5aa..6671676 100644
--- a/app/components/InstrumentsDisplay.test.ts
+++ b/__tests__/InstrumentsDisplay.test.ts
@@ -1,5 +1,5 @@
import { createInstrumentGroups } from "@/app/components/InstrumentsDisplay";
-import { instList } from "@/app/types";
+import type { instList } from "@/app/types";
test("createInstrumentGroups adds two instruments from different target stations to the same science group", () => {
const instrument1Name = "INST1";
diff --git a/app/Navbar.test.tsx b/__tests__/Navbar.test.tsx
similarity index 100%
rename from app/Navbar.test.tsx
rename to __tests__/Navbar.test.tsx
diff --git a/app/components/PVutils.test.ts b/__tests__/PVutils.test.ts
similarity index 99%
rename from app/components/PVutils.test.ts
rename to __tests__/PVutils.test.ts
index a8ccd79..1989703 100644
--- a/app/components/PVutils.test.ts
+++ b/__tests__/PVutils.test.ts
@@ -3,7 +3,7 @@ import {
getPrefix,
getPvValue,
} from "@/app/components/PVutils";
-import { IfcPVWSMessage, instListEntry } from "@/app/types";
+import type { IfcPVWSMessage, instListEntry } from "@/app/types";
// Test of ExponentialOnThresholdFormat ported from ibex_gui Java code
test("GIVEN value 0.1 which is above lower threshold WHEN formatting with precision 3 THEN no exponential notation used", () => {
diff --git a/app/components/ScienceGroup.test.tsx b/__tests__/ScienceGroup.test.tsx
similarity index 100%
rename from app/components/ScienceGroup.test.tsx
rename to __tests__/ScienceGroup.test.tsx
diff --git a/app/components/TargetStation.test.tsx b/__tests__/TargetStation.test.tsx
similarity index 100%
rename from app/components/TargetStation.test.tsx
rename to __tests__/TargetStation.test.tsx
diff --git a/app/components/TopBar.test.ts b/__tests__/TopBar.test.ts
similarity index 87%
rename from app/components/TopBar.test.ts
rename to __tests__/TopBar.test.ts
index a64df2a..0f586cc 100644
--- a/app/components/TopBar.test.ts
+++ b/__tests__/TopBar.test.ts
@@ -1,13 +1,13 @@
import { render } from "@testing-library/react";
import { Instrument } from "@/app/components/Instrument";
import { exportedForTesting, getRunstate } from "@/app/components/TopBar";
-import { tBlockMapping } from "@/app/types";
+import type { tBlockMapping } from "@/app/types";
test("GetRunstate returns the runstate when it exists and is of string type", () => {
const prefix = "TESTING:";
const expected = "SETUP";
- let blocks: tBlockMapping = new Map();
+ const blocks: tBlockMapping = new Map();
blocks.set(prefix + "DAE:RUNSTATE_STR", {
pvaddress: prefix + "DAE:RUNSTATE_STR",
value: expected,
@@ -23,7 +23,7 @@ test("GetRunstate returns unknown when no runstate PV in array", () => {
it("renders topbar unchanged", () => {
const prefix = "TESTING:";
- let instrument = new Instrument(prefix);
+ const instrument = new Instrument(prefix);
const instName = "Instrument";
const { container } = render(
exportedForTesting({
@@ -39,7 +39,7 @@ it("renders topbar unchanged", () => {
it("draws instName expectedly", () => {
const prefix = "TESTING:";
- let instrument = new Instrument(prefix);
+ const instrument = new Instrument(prefix);
const instName = "Instrument";
const { container } = render(
exportedForTesting({
@@ -56,8 +56,8 @@ it("draws instName expectedly", () => {
it("draws configName expectedly", () => {
const prefix = "TESTING:";
- let instrument = new Instrument(prefix);
- let configNamePV = instrument.runInfoPVs.get(
+ const instrument = new Instrument(prefix);
+ const configNamePV = instrument.runInfoPVs.get(
prefix + "CS:BLOCKSERVER:CURR_CONFIG_NAME",
);
const expectedConfigName = "Aconfig";
diff --git a/app/components/__snapshots__/Block.test.tsx.snap b/__tests__/__snapshots__/Block.test.tsx.snap
similarity index 98%
rename from app/components/__snapshots__/Block.test.tsx.snap
rename to __tests__/__snapshots__/Block.test.tsx.snap
index bf4e4c3..8120b7a 100644
--- a/app/components/__snapshots__/Block.test.tsx.snap
+++ b/__tests__/__snapshots__/Block.test.tsx.snap
@@ -11,6 +11,7 @@ exports[`renders topbar unchanged 1`] = `
diff --git a/app/__snapshots__/Footer.test.tsx.snap b/__tests__/__snapshots__/Footer.test.tsx.snap
similarity index 100%
rename from app/__snapshots__/Footer.test.tsx.snap
rename to __tests__/__snapshots__/Footer.test.tsx.snap
diff --git a/app/components/__snapshots__/Groups.test.tsx.snap b/__tests__/__snapshots__/Groups.test.tsx.snap
similarity index 98%
rename from app/components/__snapshots__/Groups.test.tsx.snap
rename to __tests__/__snapshots__/Groups.test.tsx.snap
index cc5d8b9..201339f 100644
--- a/app/components/__snapshots__/Groups.test.tsx.snap
+++ b/__tests__/__snapshots__/Groups.test.tsx.snap
@@ -49,6 +49,7 @@ exports[`renders groups correctly with hidden and non hidden groups 1`] = `
aShownBlock
@@ -110,6 +111,7 @@ exports[`renders groups correctly with hidden and non hidden groups 1`] = `
aDifferentShownBlock
diff --git a/app/components/__snapshots__/InstrumentWallCard.test.tsx.snap b/__tests__/__snapshots__/InstrumentWallCard.test.tsx.snap
similarity index 100%
rename from app/components/__snapshots__/InstrumentWallCard.test.tsx.snap
rename to __tests__/__snapshots__/InstrumentWallCard.test.tsx.snap
diff --git a/app/__snapshots__/Navbar.test.tsx.snap b/__tests__/__snapshots__/Navbar.test.tsx.snap
similarity index 100%
rename from app/__snapshots__/Navbar.test.tsx.snap
rename to __tests__/__snapshots__/Navbar.test.tsx.snap
diff --git a/app/components/__snapshots__/ScienceGroup.test.tsx.snap b/__tests__/__snapshots__/ScienceGroup.test.tsx.snap
similarity index 100%
rename from app/components/__snapshots__/ScienceGroup.test.tsx.snap
rename to __tests__/__snapshots__/ScienceGroup.test.tsx.snap
diff --git a/app/components/__snapshots__/TargetStation.test.tsx.snap b/__tests__/__snapshots__/TargetStation.test.tsx.snap
similarity index 100%
rename from app/components/__snapshots__/TargetStation.test.tsx.snap
rename to __tests__/__snapshots__/TargetStation.test.tsx.snap
diff --git a/app/components/__snapshots__/TopBar.test.ts.snap b/__tests__/__snapshots__/TopBar.test.ts.snap
similarity index 100%
rename from app/components/__snapshots__/TopBar.test.ts.snap
rename to __tests__/__snapshots__/TopBar.test.ts.snap
diff --git a/app/__snapshots__/page.test.tsx.snap b/__tests__/__snapshots__/page.test.tsx.snap
similarity index 98%
rename from app/__snapshots__/page.test.tsx.snap
rename to __tests__/__snapshots__/page.test.tsx.snap
index d94f86b..7e00b82 100644
--- a/app/__snapshots__/page.test.tsx.snap
+++ b/__tests__/__snapshots__/page.test.tsx.snap
@@ -108,6 +108,7 @@ exports[`renders main page unchanged 1`] = `
@@ -92,6 +93,7 @@ export default function Block({
href="https://github.com/ISISComputingGroup/ibex_user_manual/wiki/Blocks#alarms"
className="text-red-400"
target="_blank"
+ rel="noopener"
>
Alarm: {pv.severity}
diff --git a/app/components/CheckToggle.tsx b/app/components/CheckToggle.tsx
index cac0046..f38f863 100644
--- a/app/components/CheckToggle.tsx
+++ b/app/components/CheckToggle.tsx
@@ -1,4 +1,4 @@
-import { Dispatch, memo, SetStateAction, useCallback } from "react";
+import { type Dispatch, memo, type SetStateAction, useCallback } from "react";
const CheckToggle = memo(function CheckToggle({
checked,
diff --git a/app/components/GithubActionsScheduledJobs.tsx b/app/components/GithubActionsScheduledJobs.tsx
index 6675b06..36a05ce 100644
--- a/app/components/GithubActionsScheduledJobs.tsx
+++ b/app/components/GithubActionsScheduledJobs.tsx
@@ -28,6 +28,7 @@ function GithubActionsJob({
"flex flex-row h-10 w-full rounded-lg bg-gray-800 border-2 border-black hover:border-white"
}
target={"_blank"}
+ rel="noopener"
>
{repo}
diff --git a/app/components/Group.tsx b/app/components/Group.tsx
index 7e16859..56e57a0 100644
--- a/app/components/Group.tsx
+++ b/app/components/Group.tsx
@@ -1,5 +1,5 @@
import { memo } from "react";
-import { tBlockMapping } from "@/app/types";
+import type { tBlockMapping } from "@/app/types";
import Block from "./Block";
import { checkIfAllBlocksInGroupAreHidden } from "./GroupUtils";
diff --git a/app/components/GroupUtils.ts b/app/components/GroupUtils.ts
index d2fdfa7..e3edd6a 100644
--- a/app/components/GroupUtils.ts
+++ b/app/components/GroupUtils.ts
@@ -1,4 +1,4 @@
-import { tBlockMapping } from "@/app/types";
+import type { tBlockMapping } from "@/app/types";
export function checkIfAllBlocksInGroupAreHidden(
blocks: tBlockMapping,
diff --git a/app/components/Groups.tsx b/app/components/Groups.tsx
index 0dacee4..971edae 100644
--- a/app/components/Groups.tsx
+++ b/app/components/Groups.tsx
@@ -1,4 +1,4 @@
-import { tGroups } from "@/app/types";
+import type { tGroups } from "@/app/types";
import Group from "./Group";
export default function Groups({
diff --git a/app/components/Instrument.ts b/app/components/Instrument.ts
index f0055f9..ad74d53 100644
--- a/app/components/Instrument.ts
+++ b/app/components/Instrument.ts
@@ -1,5 +1,5 @@
import { ExponentialOnThresholdFormat } from "@/app/components/PVutils";
-import {
+import type {
ConfigOutput,
ConfigOutputBlock,
IfcBlock,
@@ -176,7 +176,7 @@ export class Instrument {
}
clone(): Instrument {
- let cloned = new Instrument(this.prefix);
+ const cloned = new Instrument(this.prefix);
cloned.groups = structuredClone(this.groups);
cloned.runInfoPVs = structuredClone(this.runInfoPVs);
cloned.dashboard = structuredClone(this.dashboard);
@@ -241,10 +241,10 @@ export function getGroupsWithBlocksFromConfigOutput(
configOutput: ConfigOutput,
): tGroups {
const configOutputGroups = configOutput.groups;
- let newGroups: tGroups = new Map();
+ const newGroups: tGroups = new Map();
for (const configOutputGroup of configOutputGroups) {
const groupName = configOutputGroup.name;
- let blocks: tBlockMapping = new Map();
+ const blocks: tBlockMapping = new Map();
for (const configOutputBlock of configOutputGroup.blocks) {
const newBlock = configOutput.blocks.find(
(b: ConfigOutputBlock) => b.name === configOutputBlock,
diff --git a/app/components/InstrumentData.tsx b/app/components/InstrumentData.tsx
index 12a285e..48defe0 100644
--- a/app/components/InstrumentData.tsx
+++ b/app/components/InstrumentData.tsx
@@ -1,5 +1,5 @@
"use client";
-import { RefObject, useEffect, useRef, useState } from "react";
+import { type RefObject, useEffect, useRef, useState } from "react";
import useWebSocket from "react-use-websocket";
import {
instListPV,
@@ -27,7 +27,11 @@ import {
} from "@/app/components/Instrument";
import { getPrefix, getPvValue } from "@/app/components/PVutils";
import TopBar from "@/app/components/TopBar";
-import { IfcPVWSMessage, IfcPVWSRequest, PVWSRequestType } from "@/app/types";
+import {
+ type IfcPVWSMessage,
+ type IfcPVWSRequest,
+ PVWSRequestType,
+} from "@/app/types";
export function InstrumentData({ instrumentName }: { instrumentName: string }) {
const [showHiddenBlocks, setShowHiddenBlocks] = useState(false);
@@ -46,7 +50,7 @@ export function InstrumentData({ instrumentName }: { instrumentName: string }) {
}
}, [instName]);
- let messageQueue: RefObject
> = useRef([]);
+ const messageQueue: RefObject> = useRef([]);
const {
sendJsonMessage,
@@ -88,7 +92,7 @@ export function InstrumentData({ instrumentName }: { instrumentName: string }) {
// config hasnt actually changed so do nothing
return;
}
- let newInstrument = currentInstrument.clone();
+ const newInstrument = currentInstrument.clone();
newInstrument.groups = getGroupsWithBlocksFromConfigOutput(
newInstrument.prefix,
JSON.parse(dehex_and_decompress(atob(updatedPVbytes))),
@@ -130,7 +134,7 @@ export function InstrumentData({ instrumentName }: { instrumentName: string }) {
);
// Clone the instrument object here to avoid mutating the state without calling setState()
- let newInstrument = currentInstrument.clone();
+ const newInstrument = currentInstrument.clone();
while (true) {
const updatedPV = messageQueue.current.shift();
diff --git a/app/components/InstrumentWallCard.tsx b/app/components/InstrumentWallCard.tsx
index 283aa36..376c418 100644
--- a/app/components/InstrumentWallCard.tsx
+++ b/app/components/InstrumentWallCard.tsx
@@ -1,5 +1,5 @@
import Link from "next/link";
-import { instListEntryWithRunstatePVandValue } from "@/app/types";
+import type { instListEntryWithRunstatePVandValue } from "@/app/types";
import {
getForegroundColour,
getStatusColour,
diff --git a/app/components/InstrumentsDisplay.tsx b/app/components/InstrumentsDisplay.tsx
index 9a3a069..4d07e80 100644
--- a/app/components/InstrumentsDisplay.tsx
+++ b/app/components/InstrumentsDisplay.tsx
@@ -12,9 +12,9 @@ import { instListFromBytes } from "@/app/components/dehex_and_decompress";
import ScienceGroup from "@/app/components/ScienceGroup";
import TargetStation from "@/app/components/TargetStation";
import {
- IfcPVWSMessage,
- IfcPVWSRequest,
- instList,
+ type IfcPVWSMessage,
+ type IfcPVWSRequest,
+ type instList,
PVWSRequestType,
} from "@/app/types";
@@ -24,7 +24,7 @@ const instrumentsExcludeList = ["SUPPORT"];
export function createInstrumentGroups(
instruments: instList,
): Map {
- let newInstrumentGroups: Map = new Map();
+ const newInstrumentGroups: Map = new Map();
instruments.forEach((inst) => {
inst.groups
.filter((group) => !instrumentsExcludeList.includes(group))
diff --git a/app/components/PVutils.ts b/app/components/PVutils.ts
index 2d6d530..fa798fb 100644
--- a/app/components/PVutils.ts
+++ b/app/components/PVutils.ts
@@ -1,4 +1,4 @@
-import { IfcPVWSMessage, instListEntry } from "@/app/types";
+import type { IfcPVWSMessage, instListEntry } from "@/app/types";
/**
* Formats a given PV value input such that above or below a threshold value,
diff --git a/app/components/ScienceGroup.tsx b/app/components/ScienceGroup.tsx
index 64e2d9d..5c7c62d 100644
--- a/app/components/ScienceGroup.tsx
+++ b/app/components/ScienceGroup.tsx
@@ -1,5 +1,8 @@
import InstrumentWallCard from "@/app/components/InstrumentWallCard";
-import { instList, instListEntryWithRunstatePVandValue } from "@/app/types";
+import type {
+ instList,
+ instListEntryWithRunstatePVandValue,
+} from "@/app/types";
export default function ScienceGroup({
name,
diff --git a/app/components/TargetStation.tsx b/app/components/TargetStation.tsx
index 6ee0544..9a50401 100644
--- a/app/components/TargetStation.tsx
+++ b/app/components/TargetStation.tsx
@@ -1,4 +1,4 @@
-import { instListEntryWithRunstatePVandValue } from "@/app/types";
+import type { instListEntryWithRunstatePVandValue } from "@/app/types";
import InstrumentWallCard from "./InstrumentWallCard";
export default function TargetStation({
diff --git a/app/components/TopBar.tsx b/app/components/TopBar.tsx
index 4575236..6d0eb81 100644
--- a/app/components/TopBar.tsx
+++ b/app/components/TopBar.tsx
@@ -1,6 +1,6 @@
import { memo } from "react";
import { DASHBOARD } from "@/app/components/Instrument";
-import { tBlockMapping } from "@/app/types";
+import type { tBlockMapping } from "@/app/types";
import {
getForegroundColour,
getStatusColour,
diff --git a/app/components/dehex_and_decompress.ts b/app/components/dehex_and_decompress.ts
index ad051bf..28fc180 100644
--- a/app/components/dehex_and_decompress.ts
+++ b/app/components/dehex_and_decompress.ts
@@ -1,5 +1,5 @@
import { unzipSync } from "zlib";
-import { instList } from "@/app/types";
+import type { instList } from "@/app/types";
/**
* dehex_and_decompress
* - synonymous to dehex_and_decompress in inst_servers
diff --git a/app/page.tsx b/app/page.tsx
index 0a1d2f0..12287cc 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -84,6 +84,7 @@ export default function Home() {
href="https://stfc365.sharepoint.com/sites/isis-hub/SitePages/Instrument-Quick-Links.aspx"
className="inline-flex p-2 text-blue-500 capitalize transition-colors duration-200 transform bg-blue-100 rounded-full dark:bg-blue-500 dark:text-white hover:underline hover:bg-blue-400 dark:hover:bg-blue-400"
target="_blank"
+ rel="noopener"
>
Jenkins jobs (external)
diff --git a/biome.json b/biome.json
index 961a4db..978edae 100644
--- a/biome.json
+++ b/biome.json
@@ -1,11 +1,11 @@
{
- "$schema": "https://biomejs.dev/schemas/2.3.10/schema.json",
+ "$schema": "https://biomejs.dev/schemas/2.5.11/schema.json",
"vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
"files": { "ignoreUnknown": false },
"formatter": { "enabled": true, "indentStyle": "space", "indentWidth": 2 },
"linter": {
"enabled": true,
- "rules": { "recommended": false },
+ "rules": { "preset": "none" },
"includes": ["**", "!./node_modules", "!./out", "!./coverage"]
},
"javascript": { "formatter": { "quoteStyle": "double" } },
diff --git a/next-env.d.ts b/next-env.d.ts
index 9edff1c..ce4e94a 100644
--- a/next-env.d.ts
+++ b/next-env.d.ts
@@ -1,6 +1,7 @@
///
///
import "./.next/types/routes.d.ts";
+import "./.next/types/root-params.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.
diff --git a/next.config.ts b/next.config.ts
index 4293485..5602c8c 100644
--- a/next.config.ts
+++ b/next.config.ts
@@ -1,4 +1,4 @@
-import { NextConfig } from "next";
+import type { NextConfig } from "next";
const nextConfig: NextConfig = {
reactStrictMode: true,
diff --git a/package-lock.json b/package-lock.json
index 97244cc..573d056 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"@tailwindcss/postcss": "^4.3.3",
"@types/react": "19.2.17",
"@types/react-dom": "^19.2.3",
- "next": "^16.2.12",
+ "next": "^16.3.3",
"postcss": "^8.5.27",
"react": "^19.2.8",
"react-dom": "^19.2.8",
@@ -903,6 +903,7 @@
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz",
"integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==",
+ "dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
@@ -921,9 +922,9 @@
}
},
"node_modules/@img/colour": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.0.0.tgz",
- "integrity": "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz",
+ "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==",
"license": "MIT",
"optional": true,
"engines": {
@@ -931,9 +932,9 @@
}
},
"node_modules/@img/sharp-darwin-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz",
- "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.4.tgz",
+ "integrity": "sha512-Uhfl4V4lhP2nbUVF9+hyH1+luj86f1gUFeo8ALYxFoULoU+G87D43BfeMP8XHsk9boxAnCY/bf2EHwhA7MuGsA==",
"cpu": [
"arm64"
],
@@ -943,19 +944,19 @@
"darwin"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.2.4"
+ "@img/sharp-libvips-darwin-arm64": "1.3.3"
}
},
"node_modules/@img/sharp-darwin-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz",
- "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.4.tgz",
+ "integrity": "sha512-hWniXY3bG5qKpkKrAwPe4y+VTPmf086YQAnkxWh7uA1YrlRouWGa0M0Mxj3ZjnXFkv7/TD1bTy9lGUK26vRvWw==",
"cpu": [
"x64"
],
@@ -965,19 +966,38 @@
"darwin"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.2.4"
+ "@img/sharp-libvips-darwin-x64": "1.3.3"
+ }
+ },
+ "node_modules/@img/sharp-freebsd-wasm32": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.4.tgz",
+ "integrity": "sha512-lIsKw/BU+kjB4eZjxrYrZmwOJYi3Ajrv66iAlBmUPyKc3HpnloevB1g3wxGD9P/5BbQ1brBGl65VRRrCvQDEqA==",
+ "license": "Apache-2.0",
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "dependencies": {
+ "@img/sharp-wasm32": "0.35.4"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz",
- "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.3.tgz",
+ "integrity": "sha512-suTBPTDGrI9WodccaDdwZItTSaBYASlBk1NSfElSHrUfzu3szG6lvIF58+WiFvnfzuK8ZBFS5zE00PxqxnRiPg==",
"cpu": [
"arm64"
],
@@ -991,9 +1011,9 @@
}
},
"node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz",
- "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.3.tgz",
+ "integrity": "sha512-FVJZ5mITMobmXIz/hPDTw0EintTW5H3WfrxwLqEqjiIihlu+hVRyGrFQ60xl0Lxn7Bt3zdpevPaQi0HEzqz9fw==",
"cpu": [
"x64"
],
@@ -1007,12 +1027,15 @@
}
},
"node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz",
- "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.3.tgz",
+ "integrity": "sha512-3rbU4vqXXc3hY/OiXdl52xZvT0F1yEngWfvqudtPJg/KkyiaQw2DRsFrNzpmLvfavbwOq3qXn36GP8obHRULQA==",
"cpu": [
"arm"
],
+ "libc": [
+ "glibc"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -1023,12 +1046,15 @@
}
},
"node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz",
- "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.3.tgz",
+ "integrity": "sha512-0DaL0A6Xu6sQSQFwe4iVCrKWU2cCTItnRsYsCdxAMm9NF6twAA9BKnoqy4hqz4+azQ0JHuA26qiUKsf1XJ/v5A==",
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -1039,12 +1065,15 @@
}
},
"node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz",
- "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.3.tgz",
+ "integrity": "sha512-cdn1OvUBwsXhbC0zSzJnNzf5MZ/mTrobawDvNXBTxe8VtqKAm0sRuEY2Evzovb/w9JMk4TvRxqt1mekSuJz64w==",
"cpu": [
"ppc64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -1055,12 +1084,15 @@
}
},
"node_modules/@img/sharp-libvips-linux-riscv64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz",
- "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.3.tgz",
+ "integrity": "sha512-HjPVx7yKz+0lqdhDlTw1tt90wamBoxhiXpvl1XZpJLiHH4RCJ5yDTqH+VlYPv2fwFs89JFw4c1IexYOcQUi4IQ==",
"cpu": [
"riscv64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -1071,12 +1103,15 @@
}
},
"node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz",
- "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.3.tgz",
+ "integrity": "sha512-neWLh+3yCNThxnfy3c4BbVBeGgt9aftno+XbT56iK28RgeDs3UOFWviLWlUu0bArYVYJaFDK+RRohbicUNCm8Q==",
"cpu": [
"s390x"
],
+ "libc": [
+ "glibc"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -1087,12 +1122,15 @@
}
},
"node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz",
- "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.3.tgz",
+ "integrity": "sha512-4vKmvAst9nrowcqquKFAyZJUDolUaIp8uRiN0mWFguJ1IplC9/pitXtlnnlU4aa/eJw3J7i67V+pwUL+wZGdsA==",
"cpu": [
"x64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -1103,12 +1141,15 @@
}
},
"node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz",
- "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.3.tgz",
+ "integrity": "sha512-Y9kQaLMuNoB0bPYOOdcZMaseNrFpPodIWWMrx+CZyydf2xn68j9WYc6sWWRrDwNkzCQjKYfc68L7jKjGlHMibw==",
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -1119,12 +1160,15 @@
}
},
"node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz",
- "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.3.tgz",
+ "integrity": "sha512-fj8Mv0HHfD1Rr+4I68+3agJynxDWtBFgicTbSOb9Bke6pIwzGcJ+RX/yHjmiEGFMCavY/dxvem7MyNaJF+wDiw==",
"cpu": [
"x64"
],
+ "libc": [
+ "musl"
+ ],
"license": "LGPL-3.0-or-later",
"optional": true,
"os": [
@@ -1135,204 +1179,254 @@
}
},
"node_modules/@img/sharp-linux-arm": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz",
- "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.4.tgz",
+ "integrity": "sha512-7OAS8gI0EReKGVN2HssHlM6umJgxF5VI3xN0p9FA91p/YO+ou5hiNghLdZ5BEHztwaaK5+bLKRf8x/o2L2nk9A==",
"cpu": [
"arm"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.2.4"
+ "@img/sharp-libvips-linux-arm": "1.3.3"
}
},
"node_modules/@img/sharp-linux-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz",
- "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.4.tgz",
+ "integrity": "sha512-De4jpEnAU8Hd5oT0j1G3uL4ZvTuipVMn7YC6vPaJhy6/7EwEae0SVAoBrUMYQbkLGDm85taVWwuPc1a44LTzCQ==",
"cpu": [
"arm64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.2.4"
+ "@img/sharp-libvips-linux-arm64": "1.3.3"
}
},
"node_modules/@img/sharp-linux-ppc64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz",
- "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.4.tgz",
+ "integrity": "sha512-2oYZJeIl4kCcMGk4ouZVjnkCtFrpQFlNEtJ6GbxzhHQchwH0NH/qEb9ykmOl29dqwMq+JhFdZn+1ak2FKhI9fQ==",
"cpu": [
"ppc64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-ppc64": "1.2.4"
+ "@img/sharp-libvips-linux-ppc64": "1.3.3"
}
},
"node_modules/@img/sharp-linux-riscv64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz",
- "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.4.tgz",
+ "integrity": "sha512-cPbNChoRURAWdebDIHSenxRpgEdy7JkPydSnUxRm9VvKD7m0/xVaR/8Fzlu81pk5nHEvHH87UZUA7cTtwnbJSA==",
"cpu": [
"riscv64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-riscv64": "1.2.4"
+ "@img/sharp-libvips-linux-riscv64": "1.3.3"
}
},
"node_modules/@img/sharp-linux-s390x": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz",
- "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.4.tgz",
+ "integrity": "sha512-RY0JFY8Fd6RonCBtHz+DvadaPkXDSI1AUn6yWL9TipqkZ1vY8w8evqdgyDFnkm4/K1ve1TvZiaePP5oSd4+WVQ==",
"cpu": [
"s390x"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.2.4"
+ "@img/sharp-libvips-linux-s390x": "1.3.3"
}
},
"node_modules/@img/sharp-linux-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz",
- "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.4.tgz",
+ "integrity": "sha512-9qvvEAuk8k89TfWUoX2htWjbAMX8p+NxCppjpcg5k6xMsjhBQPTsoIh36h9Qde4WRuGpJeYnOjdosDn/cnv+OA==",
"cpu": [
"x64"
],
+ "libc": [
+ "glibc"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.2.4"
+ "@img/sharp-libvips-linux-x64": "1.3.3"
}
},
"node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz",
- "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.4.tgz",
+ "integrity": "sha512-KB5jxpfWQTr0nc3xdHtWChdbifHrBGsd2SM62Eyxrl8afikm+f5qGBU75SJIZBT/S1MC8XyacdlXBMSWq6OURA==",
"cpu": [
"arm64"
],
+ "libc": [
+ "musl"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.4"
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.3"
}
},
"node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz",
- "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.4.tgz",
+ "integrity": "sha512-f+eZJZIQNEEd26RPSW+76chwOf1XtA2Y/O+5ocVyLliHkeih3e+jhLVBdNTd2rS3IbNXK8+ug93Vf5ZXtF5Lxg==",
"cpu": [
"x64"
],
+ "libc": [
+ "musl"
+ ],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.2.4"
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.3"
}
},
"node_modules/@img/sharp-wasm32": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz",
- "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.4.tgz",
+ "integrity": "sha512-zQnl4Kwp7Q6NHsENtU2T/00Zi+w3AQNwz3+UaTyVBy2FpXrzXzGjndpK61onhZjRtRpQXxCTeqw19bVyXOh7jA==",
+ "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "optional": true,
+ "dependencies": {
+ "@emnapi/runtime": "^1.11.3"
+ },
+ "engines": {
+ "node": ">=20.9.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/libvips"
+ }
+ },
+ "node_modules/@img/sharp-wasm32/node_modules/@emnapi/runtime": {
+ "version": "1.11.3",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz",
+ "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==",
+ "license": "MIT",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "node_modules/@img/sharp-webcontainers-wasm32": {
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.4.tgz",
+ "integrity": "sha512-ESfNkywmCfPNyaZjxooddJQiQ+l/nTpGEOGthxiLnIHXC/CmcBixnfwUleX9mCz9ovrUUvKMap/pm8RYbzfwaA==",
"cpu": [
"wasm32"
],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
+ "license": "Apache-2.0",
"optional": true,
"dependencies": {
- "@emnapi/runtime": "^1.7.0"
+ "@img/sharp-wasm32": "0.35.4"
},
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-arm64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz",
- "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.4.tgz",
+ "integrity": "sha512-iNdlBX9gLVvqe2I3uIJSIKTq6wckP/DYxZtcqxm09x5Gi24DnFBmPAWZmr60ZyYMG0xlzo6goG3670ar+RXvRw==",
"cpu": [
"arm64"
],
@@ -1342,16 +1436,16 @@
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-ia32": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz",
- "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.4.tgz",
+ "integrity": "sha512-kqRsbaa5CS6KHlpxnN7WhE6vAAugXyZButpRdvDWetlv6Qv4N9WTcrWzF7tXfB9T7MsoadqdI8hmwLq6UlLvtw==",
"cpu": [
"ia32"
],
@@ -1361,16 +1455,16 @@
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": "^20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
}
},
"node_modules/@img/sharp-win32-x64": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz",
- "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==",
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.4.tgz",
+ "integrity": "sha512-XtmnYhBcrORsJ4XJngyzr/EWP0hRZLAZRFaApdKuviyqF78+ylxh2y06ZmtULAMOnObJ3ucpN0AcwSWnMowTRg==",
"cpu": [
"x64"
],
@@ -1380,7 +1474,7 @@
"win32"
],
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
@@ -2025,15 +2119,15 @@
}
},
"node_modules/@next/env": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-16.2.12.tgz",
- "integrity": "sha512-d0Z5Bc13Fa4nR8pFAKx2jay2yhJM16vlfHbTzYnUQAxlNb6B6lmn4hjt69lYNt4kRtyYP6gEM49lPRHNbIyneg==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.3.3.tgz",
+ "integrity": "sha512-U2eYQRwXj+dsqxV79zFqExDdatnNY/ZWc2nsJU1p/OgT7fd3dXwlF6OjYaFQCfMoeTA19PWq+wVmYgimVA+V+g==",
"license": "MIT"
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.2.12.tgz",
- "integrity": "sha512-0W1R0teHWJrqKX0FH20IzzIWAOuGtBxPGuObrxy1lE8hQvCFj49KE8a3WUg0D7sq6rn6zkM4c7YGUnhudBS6oA==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.3.3.tgz",
+ "integrity": "sha512-8Hiv32QJPwdV6KYJ8meR9SBA061tQqnIKTJDocvOXlEQqib0xMFpzArosuffFUUc0sslbh7QQ8a3Yey1QV8EIw==",
"cpu": [
"arm64"
],
@@ -2047,9 +2141,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.2.12.tgz",
- "integrity": "sha512-Hy5Ls099+aFUmOLmIgPfLqNi6iCwhL3uQCssz5rWk+5Nkc6TUKCE83DY5BbNylfm3+mfwcSFnLRfrZDJhVxdtw==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.3.3.tgz",
+ "integrity": "sha512-A1lgKgwVchRYmSe467zdwhxT9040dd8lH+o65sL5Jet8fjB4kegw/rDyPIpYVRb6jAqwXFOJpjIXJLxQKLiE3A==",
"cpu": [
"x64"
],
@@ -2063,9 +2157,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.2.12.tgz",
- "integrity": "sha512-+YqU2h1cQkHsGfvjAsrSmst8UIFBibBGm5x3Xgel8NLMiDQtNOM4sM2GOEMvG5YiOBNeN/Ykk8cQC2S0Xrqljg==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.3.3.tgz",
+ "integrity": "sha512-bf0FIssMFueU2dm7vQEWWxk0c8UjKTdW0yzuh0sQsD8pf1+KCLDdaqhYZNMYGmXwEOiHAUzgBKudovIlcvvBjg==",
"cpu": [
"arm64"
],
@@ -2082,9 +2176,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.2.12.tgz",
- "integrity": "sha512-0qjhiYBaKAqF63LA1ZWAAnKTzFUguAaZiRa5etMLGGPj/B6uEVjtIZldIzFEp3wHlB0koK6aTzqPtSdplTCjoA==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.3.3.tgz",
+ "integrity": "sha512-W7viwCk9JY/cAkdz/A273rd5bb3RgT/IHwR7Upv90tunjBWNtAAhGhoecHh+teRNRSinuAFmE+l7fwZ4YKkrXg==",
"cpu": [
"arm64"
],
@@ -2101,9 +2195,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.2.12.tgz",
- "integrity": "sha512-7A3q26W+h7gnA15uqBToNuDqBEFZZcqh0mW2mn4AJh/G5pdg2RVE3n4slzLEliASZFG3NmsbEzng/x2Sh09mBg==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.3.3.tgz",
+ "integrity": "sha512-0W46zw1N3ODpI6n0GeivHvvob1pooozgZVqy65k0mh4/7vr+FbY9+WpHzNVXjHipJf/A3FDheBG19H1s5A25rA==",
"cpu": [
"x64"
],
@@ -2120,9 +2214,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.2.12.tgz",
- "integrity": "sha512-qSjL/uppm+cbh21s72Ss8gkiOhQ4dExWHNGOWy6eZV7STj5WsKehgxT61beSsOj+YYQuTplL376lOCdMQU5T8w==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.3.3.tgz",
+ "integrity": "sha512-H4mBso8ZTMBPtdT0PN0pBx2ayTvQuTuvS6qT13d77yVFJXAPCxkyIhLTmdMaGTJs0krQYI/qpzdHijCeihXhbg==",
"cpu": [
"x64"
],
@@ -2139,9 +2233,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.2.12.tgz",
- "integrity": "sha512-X6hzsOUJac/e7AWSbn9gQ9nzHld1xWP5iyjHpYWvud8pufB679O1xg4JDyKr8Xd69Jvd+kM2Der6uftiZCmjYA==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.3.3.tgz",
+ "integrity": "sha512-cTMUJpcEGmeywofCUfhR+rSsoE33+rVPnPEYNTNdLNlsOeEg/vktOsKUSTb28vUGqD2jkm4Zaskcwn7OCI6FQg==",
"cpu": [
"arm64"
],
@@ -2155,9 +2249,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.2.12.tgz",
- "integrity": "sha512-F6fakeHuFTLOPt0bslQJdf+xtT+WIP9DVn/m4y1w1mRnVPyh3D/cNvzlRkxM444xfm+IvvYNSOrKiA2CDJ0Uxw==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.3.3.tgz",
+ "integrity": "sha512-2VR4cTBzHXaBjnGsuH6GyJjENzQOmHeAh11uY1iUhjm3j5dEUrVJuUj+VL78jaGi/Dik8xS76zEj18BsFhlVZQ==",
"cpu": [
"x64"
],
@@ -2527,9 +2621,9 @@
}
},
"node_modules/@swc/helpers": {
- "version": "0.5.15",
- "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
- "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==",
+ "version": "0.5.23",
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.23.tgz",
+ "integrity": "sha512-5lSsMOTXURePglDfvuAQUqkGek9Hg2kksOYay2m0+XR++b2NWYL/4sWyuvVBIs8oKnJaxkdi9whaL/sqN13afw==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^2.8.0"
@@ -6294,16 +6388,16 @@
"license": "MIT"
},
"node_modules/next": {
- "version": "16.2.12",
- "resolved": "https://registry.npmjs.org/next/-/next-16.2.12.tgz",
- "integrity": "sha512-iD59eYQWmbFcEbX7v/acG5DRym9iw1DdaPoD0WTA920naWsE25wShzJW4+UvAs8MK9EC2kBfIH6vtto1H1PHGw==",
+ "version": "16.3.3",
+ "resolved": "https://registry.npmjs.org/next/-/next-16.3.3.tgz",
+ "integrity": "sha512-tuRTx1nQ/yVw83cwJBo9F+njGUgMn3UHQycreWHB8XsStvvAh1AthbI8/4IpKnFaF58F+iSiHejYOlMQ/eq83g==",
"license": "MIT",
"dependencies": {
- "@next/env": "16.2.12",
- "@swc/helpers": "0.5.15",
+ "@next/env": "16.3.3",
+ "@swc/helpers": "0.5.23",
"baseline-browser-mapping": "^2.9.19",
"caniuse-lite": "^1.0.30001579",
- "postcss": "8.4.31",
+ "postcss": "8.5.23",
"styled-jsx": "5.1.6"
},
"bin": {
@@ -6313,15 +6407,15 @@
"node": ">=20.9.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "16.2.12",
- "@next/swc-darwin-x64": "16.2.12",
- "@next/swc-linux-arm64-gnu": "16.2.12",
- "@next/swc-linux-arm64-musl": "16.2.12",
- "@next/swc-linux-x64-gnu": "16.2.12",
- "@next/swc-linux-x64-musl": "16.2.12",
- "@next/swc-win32-arm64-msvc": "16.2.12",
- "@next/swc-win32-x64-msvc": "16.2.12",
- "sharp": "^0.34.5"
+ "@next/swc-darwin-arm64": "16.3.3",
+ "@next/swc-darwin-x64": "16.3.3",
+ "@next/swc-linux-arm64-gnu": "16.3.3",
+ "@next/swc-linux-arm64-musl": "16.3.3",
+ "@next/swc-linux-x64-gnu": "16.3.3",
+ "@next/swc-linux-x64-musl": "16.3.3",
+ "@next/swc-win32-arm64-msvc": "16.3.3",
+ "@next/swc-win32-x64-msvc": "16.3.3",
+ "sharp": "^0.35.3"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -6347,9 +6441,9 @@
}
},
"node_modules/next/node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.5.23",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz",
+ "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==",
"funding": [
{
"type": "opencollective",
@@ -6366,9 +6460,9 @@
],
"license": "MIT",
"dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
+ "nanoid": "^3.3.16",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -6838,54 +6932,59 @@
}
},
"node_modules/sharp": {
- "version": "0.34.5",
- "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz",
- "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==",
- "hasInstallScript": true,
+ "version": "0.35.4",
+ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.4.tgz",
+ "integrity": "sha512-n++8XWcj+jCOr2IOl7h8LbKnGBDY4aPbmprMONBNFdn0ImXqpGVv5zliDs0V9HbmbCQLpbuo2ej9rAoOQTvMDA==",
"license": "Apache-2.0",
"optional": true,
"dependencies": {
- "@img/colour": "^1.0.0",
+ "@img/colour": "^1.1.0",
"detect-libc": "^2.1.2",
- "semver": "^7.7.3"
+ "semver": "^7.8.5"
},
"engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
+ "node": ">=20.9.0"
},
"funding": {
"url": "https://opencollective.com/libvips"
},
"optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.34.5",
- "@img/sharp-darwin-x64": "0.34.5",
- "@img/sharp-libvips-darwin-arm64": "1.2.4",
- "@img/sharp-libvips-darwin-x64": "1.2.4",
- "@img/sharp-libvips-linux-arm": "1.2.4",
- "@img/sharp-libvips-linux-arm64": "1.2.4",
- "@img/sharp-libvips-linux-ppc64": "1.2.4",
- "@img/sharp-libvips-linux-riscv64": "1.2.4",
- "@img/sharp-libvips-linux-s390x": "1.2.4",
- "@img/sharp-libvips-linux-x64": "1.2.4",
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.4",
- "@img/sharp-libvips-linuxmusl-x64": "1.2.4",
- "@img/sharp-linux-arm": "0.34.5",
- "@img/sharp-linux-arm64": "0.34.5",
- "@img/sharp-linux-ppc64": "0.34.5",
- "@img/sharp-linux-riscv64": "0.34.5",
- "@img/sharp-linux-s390x": "0.34.5",
- "@img/sharp-linux-x64": "0.34.5",
- "@img/sharp-linuxmusl-arm64": "0.34.5",
- "@img/sharp-linuxmusl-x64": "0.34.5",
- "@img/sharp-wasm32": "0.34.5",
- "@img/sharp-win32-arm64": "0.34.5",
- "@img/sharp-win32-ia32": "0.34.5",
- "@img/sharp-win32-x64": "0.34.5"
+ "@img/sharp-darwin-arm64": "0.35.4",
+ "@img/sharp-darwin-x64": "0.35.4",
+ "@img/sharp-freebsd-wasm32": "0.35.4",
+ "@img/sharp-libvips-darwin-arm64": "1.3.3",
+ "@img/sharp-libvips-darwin-x64": "1.3.3",
+ "@img/sharp-libvips-linux-arm": "1.3.3",
+ "@img/sharp-libvips-linux-arm64": "1.3.3",
+ "@img/sharp-libvips-linux-ppc64": "1.3.3",
+ "@img/sharp-libvips-linux-riscv64": "1.3.3",
+ "@img/sharp-libvips-linux-s390x": "1.3.3",
+ "@img/sharp-libvips-linux-x64": "1.3.3",
+ "@img/sharp-libvips-linuxmusl-arm64": "1.3.3",
+ "@img/sharp-libvips-linuxmusl-x64": "1.3.3",
+ "@img/sharp-linux-arm": "0.35.4",
+ "@img/sharp-linux-arm64": "0.35.4",
+ "@img/sharp-linux-ppc64": "0.35.4",
+ "@img/sharp-linux-riscv64": "0.35.4",
+ "@img/sharp-linux-s390x": "0.35.4",
+ "@img/sharp-linux-x64": "0.35.4",
+ "@img/sharp-linuxmusl-arm64": "0.35.4",
+ "@img/sharp-linuxmusl-x64": "0.35.4",
+ "@img/sharp-webcontainers-wasm32": "0.35.4",
+ "@img/sharp-win32-arm64": "0.35.4",
+ "@img/sharp-win32-ia32": "0.35.4",
+ "@img/sharp-win32-x64": "0.35.4"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ }
}
},
"node_modules/sharp/node_modules/semver": {
- "version": "7.7.3",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
- "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
+ "version": "7.8.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
+ "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
"license": "ISC",
"optional": true,
"bin": {
diff --git a/package.json b/package.json
index d85d8c1..10768d6 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
"@tailwindcss/postcss": "^4.3.3",
"@types/react": "19.2.17",
"@types/react-dom": "^19.2.3",
- "next": "^16.2.12",
+ "next": "^16.3.3",
"postcss": "^8.5.27",
"react": "^19.2.8",
"react-dom": "^19.2.8",
diff --git a/tsconfig.json b/tsconfig.json
index 1519d6f..25ac232 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -29,5 +29,5 @@
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],
- "exclude": ["node_modules", "jest.*.ts"]
+ "exclude": ["node_modules"]
}