From fdecfa99c4b25c1e40b9cac9915e90bedb1dbec8 Mon Sep 17 00:00:00 2001 From: Lane Sawyer Date: Mon, 10 Feb 2025 13:02:08 -0800 Subject: [PATCH] chore: Biome linting with auto-fixes [DT-7060] (#53) --- .github/workflows/ci.yml | 4 +- biome.json | 2 +- examples/src/app.tsx | 2 +- examples/src/common/image-renderer.ts | 3 +- .../loaders/ome-zarr/fetchSlice.worker.ts | 4 +- .../loaders/ome-zarr/sliceWorkerPool.ts | 2 +- .../src/common/loaders/scatterplot/data.ts | 8 +- .../scatterplot/scatterbrain-loader.ts | 2 +- .../src/data-renderers/annotation-renderer.ts | 16 +- .../dynamicGridSlideRenderer.ts | 14 +- examples/src/data-renderers/lineRenderer.ts | 5 +- examples/src/data-renderers/mesh-renderer.ts | 4 +- examples/src/data-renderers/scatterplot.ts | 5 +- .../simpleAnnotationRenderer.ts | 10 +- examples/src/data-renderers/utils.ts | 2 +- examples/src/data-renderers/versa-renderer.ts | 11 +- .../src/data-renderers/volumeSliceRenderer.ts | 20 +- .../annotation/annotation-codec.ts | 2 +- .../annotation/annotation-to-mesh.ts | 2 +- examples/src/data-sources/annotation/types.ts | 2 +- .../src/data-sources/ome-zarr/planar-slice.ts | 2 +- .../src/data-sources/ome-zarr/slice-grid.ts | 2 +- .../data-sources/scatterplot/dynamic-grid.ts | 2 +- examples/src/dzi/dzi-demo.tsx | 10 +- examples/src/dzi/dzi-viewer.tsx | 15 +- examples/src/index.tsx | 9 +- examples/src/layers.ts | 72 ++--- examples/src/layers/layers.tsx | 4 +- examples/src/omezarr/omezarr-demo.tsx | 20 +- examples/src/omezarr/omezarr-viewer.tsx | 17 +- examples/src/omezarr/sliceview.tsx | 16 +- examples/src/types.ts | 20 +- examples/src/ui/annotation-grid.tsx | 2 +- examples/src/ui/contact-sheet.tsx | 5 +- examples/src/ui/scatterplot-ui.tsx | 8 +- examples/src/ui/slice-ui.tsx | 8 +- examples/tsconfig.json | 2 +- examples/vite.config.ts | 4 +- package.json | 1 - packages/dzi/src/loader.test.ts | 4 +- packages/dzi/src/loader.ts | 2 +- packages/dzi/src/renderer.ts | 6 +- packages/dzi/src/tile-renderer.ts | 2 +- packages/geometry/src/box2D.ts | 2 +- packages/geometry/src/box3D.ts | 2 +- packages/geometry/src/line.ts | 2 +- .../geometry/src/tests/Rectangle2D.test.ts | 6 +- packages/geometry/src/tests/box2D.test.ts | 6 +- packages/geometry/src/tests/box3D.test.ts | 8 +- packages/geometry/src/tests/interval.test.ts | 2 +- packages/geometry/src/tests/line.test.ts | 2 +- packages/geometry/src/tests/vec2.test.ts | 8 +- packages/geometry/src/tests/vec3.test.ts | 8 +- packages/geometry/src/tests/vec4.test.ts | 8 +- packages/omezarr/src/sliceview/loader.test.ts | 4 +- packages/omezarr/src/sliceview/loader.ts | 2 +- .../omezarr/src/sliceview/slice-renderer.ts | 8 +- .../omezarr/src/sliceview/tile-renderer.ts | 3 +- packages/omezarr/src/zarr-data.ts | 4 +- .../scatterbrain/src/abstract/async-frame.ts | 6 +- .../src/abstract/render-server.ts | 8 +- packages/scatterbrain/src/dataset-cache.ts | 2 +- packages/scatterbrain/src/layers/layer-2D.ts | 10 +- packages/scatterbrain/src/layers/types.ts | 2 +- packages/scatterbrain/src/render-queue.ts | 2 +- .../src/test/render-cache.test.ts | 18 +- .../src/test/render-queue.test.ts | 4 +- pnpm-lock.yaml | 296 ++++++++---------- 68 files changed, 372 insertions(+), 404 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7176b50..9ef4102 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -57,8 +57,6 @@ jobs: lint: name: Lint runs-on: ubuntu-latest - # Skip job until we get a linter added - if: false steps: - uses: actions/checkout@v4 @@ -77,7 +75,7 @@ jobs: run: pnpm install --frozen-lockfile - name: Lint - run: echo "Add pnpm lint command here" + run: pnpm lint:check test: name: Test diff --git a/biome.json b/biome.json index a002012..5e0be77 100644 --- a/biome.json +++ b/biome.json @@ -7,7 +7,7 @@ }, "files": { "ignoreUnknown": false, - "ignore": [] + "ignore": ["**/dist/*"] }, "formatter": { "enabled": true, diff --git a/examples/src/app.tsx b/examples/src/app.tsx index d629410..82b5804 100644 --- a/examples/src/app.tsx +++ b/examples/src/app.tsx @@ -1,8 +1,8 @@ import React from 'react'; import { BrowserRouter, Route, Routes } from 'react-router'; +import { DziDemo } from './dzi/dzi-demo'; import { Home } from './home'; import { OmezarrDemo } from './omezarr/omezarr-demo'; -import { DziDemo } from './dzi/dzi-demo'; export function App() { return ( diff --git a/examples/src/common/image-renderer.ts b/examples/src/common/image-renderer.ts index 0133cb7..b6ebffe 100644 --- a/examples/src/common/image-renderer.ts +++ b/examples/src/common/image-renderer.ts @@ -1,5 +1,6 @@ import type { vec2, vec4 } from '@alleninstitute/vis-geometry'; -import REGL, { type Framebuffer2D } from 'regl'; +import type REGL from 'regl'; +import type { Framebuffer2D } from 'regl'; type Props = { target: Framebuffer2D | null; diff --git a/examples/src/common/loaders/ome-zarr/fetchSlice.worker.ts b/examples/src/common/loaders/ome-zarr/fetchSlice.worker.ts index 23f5c15..7a6c715 100644 --- a/examples/src/common/loaders/ome-zarr/fetchSlice.worker.ts +++ b/examples/src/common/loaders/ome-zarr/fetchSlice.worker.ts @@ -1,6 +1,6 @@ +import { type ZarrDataset, type ZarrRequest, getSlice } from '@alleninstitute/vis-omezarr'; // a web-worker which fetches slices of data, decodes them, and returns the result as a flat float32 array, using transferables import type { Chunk } from 'zarrita'; -import { type ZarrDataset, type ZarrRequest, getSlice } from '@alleninstitute/vis-omezarr'; const ctx = self; type ZarrSliceRequest = { @@ -11,7 +11,7 @@ type ZarrSliceRequest = { layerIndex: number; }; function isSliceRequest(payload: any): payload is ZarrSliceRequest { - return typeof payload === 'object' && payload['type'] === 'ZarrSliceRequest'; + return typeof payload === 'object' && payload.type === 'ZarrSliceRequest'; } ctx.onmessage = (msg: MessageEvent) => { const { data } = msg; diff --git a/examples/src/common/loaders/ome-zarr/sliceWorkerPool.ts b/examples/src/common/loaders/ome-zarr/sliceWorkerPool.ts index e0a32d5..8650067 100644 --- a/examples/src/common/loaders/ome-zarr/sliceWorkerPool.ts +++ b/examples/src/common/loaders/ome-zarr/sliceWorkerPool.ts @@ -1,5 +1,5 @@ -import { uniqueId } from 'lodash'; import type { ZarrDataset, ZarrRequest } from '@alleninstitute/vis-omezarr'; +import { uniqueId } from 'lodash'; type PromisifiedMessage = { requestCacheKey: string; diff --git a/examples/src/common/loaders/scatterplot/data.ts b/examples/src/common/loaders/scatterplot/data.ts index 855540f..2e4e3da 100644 --- a/examples/src/common/loaders/scatterplot/data.ts +++ b/examples/src/common/loaders/scatterplot/data.ts @@ -1,16 +1,16 @@ // todo rename this file -import { Box2D, visitBFS, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; +import { Box2D, type box2D, type vec2, visitBFS } from '@alleninstitute/vis-geometry'; +import type REGL from 'regl'; import { - fetchColumn, type ColumnData, type ColumnRequest, type ColumnarNode, type ColumnarTree, type SlideViewDataset, + fetchColumn, type loadDataset, } from './scatterbrain-loader'; -import REGL from 'regl'; export type Dataset = ReturnType; export type RenderSettings = { dataset: Dataset; @@ -27,7 +27,7 @@ function isVisible(view: box2D, sizeLimit: number, tree: ColumnarTree) { } export function getVisibleItems(dataset: Dataset, view: box2D, sizeLimit: number) { const hits: ColumnarTree[] = []; - let tree = 'slides' in dataset ? Object.values(dataset.slides)[0].tree : dataset.tree; + const tree = 'slides' in dataset ? Object.values(dataset.slides)[0].tree : dataset.tree; visitBFS( tree, (t: ColumnarTree) => t.children, diff --git a/examples/src/common/loaders/scatterplot/scatterbrain-loader.ts b/examples/src/common/loaders/scatterplot/scatterbrain-loader.ts index 9206a58..2772de9 100644 --- a/examples/src/common/loaders/scatterplot/scatterbrain-loader.ts +++ b/examples/src/common/loaders/scatterplot/scatterbrain-loader.ts @@ -1,6 +1,6 @@ import { Box2D, Box3D, Vec3, type box, type box3D, type vec2, type vec3 } from '@alleninstitute/vis-geometry'; -import { MakeTaggedBufferView, type TaggedTypedArray, type WebGLSafeBasicType } from '../../typed-array'; import type REGL from 'regl'; +import { MakeTaggedBufferView, type TaggedTypedArray, type WebGLSafeBasicType } from '../../typed-array'; type volumeBound = { lx: number; diff --git a/examples/src/data-renderers/annotation-renderer.ts b/examples/src/data-renderers/annotation-renderer.ts index 2bfcd30..27466df 100644 --- a/examples/src/data-renderers/annotation-renderer.ts +++ b/examples/src/data-renderers/annotation-renderer.ts @@ -1,14 +1,14 @@ -import type REGL from 'regl'; -import type { RenderCallback } from './types'; import { Box2D, Vec2, type box2D, type vec2, type vec4 } from '@alleninstitute/vis-geometry'; +import { type AsyncDataCache, type FrameLifecycle, beginLongRunningFrame } from '@alleninstitute/vis-scatterbrain'; +import type REGL from 'regl'; +import type { Camera } from '~/common/camera'; +import type { AnnotationGrid } from '~/data-sources/annotation/annotation-grid'; +import { MeshFromAnnotation } from '~/data-sources/annotation/annotation-to-mesh'; +import { fetchAnnotation } from '~/data-sources/annotation/fetch-annotation'; import type { AnnotationMesh, GPUAnnotationMesh } from '~/data-sources/annotation/types'; -import type { buildLoopRenderer, buildMeshRenderer } from './mesh-renderer'; import type { OptionalTransform } from '~/data-sources/types'; -import { AsyncDataCache, beginLongRunningFrame, type FrameLifecycle } from '@alleninstitute/vis-scatterbrain'; -import { fetchAnnotation } from '~/data-sources/annotation/fetch-annotation'; -import { MeshFromAnnotation } from '~/data-sources/annotation/annotation-to-mesh'; -import type { AnnotationGrid } from '~/data-sources/annotation/annotation-grid'; -import type { Camera } from '~/common/camera'; +import type { buildLoopRenderer, buildMeshRenderer } from './mesh-renderer'; +import type { RenderCallback } from './types'; type SlideId = string; diff --git a/examples/src/data-renderers/dynamicGridSlideRenderer.ts b/examples/src/data-renderers/dynamicGridSlideRenderer.ts index ad63183..17c6e86 100644 --- a/examples/src/data-renderers/dynamicGridSlideRenderer.ts +++ b/examples/src/data-renderers/dynamicGridSlideRenderer.ts @@ -1,13 +1,13 @@ -import { beginLongRunningFrame, type AsyncDataCache } from '@alleninstitute/vis-scatterbrain'; -import type REGL from 'regl'; -import { buildRenderer as buildScatterplotRenderer } from './scatterplot'; import { Box2D, Vec2, type vec2 } from '@alleninstitute/vis-geometry'; -import { applyOptionalTrn } from './utils'; +import { type AsyncDataCache, beginLongRunningFrame } from '@alleninstitute/vis-scatterbrain'; +import type REGL from 'regl'; +import type { Camera } from '~/common/camera'; +import { fetchItem, getVisibleItemsInSlide } from '~/common/loaders/scatterplot/data'; +import type { ColumnRequest, ColumnarTree } from '~/common/loaders/scatterplot/scatterbrain-loader'; import type { DynamicGrid, DynamicGridSlide } from '../data-sources/scatterplot/dynamic-grid'; +import type { buildRenderer as buildScatterplotRenderer } from './scatterplot'; import type { RenderCallback } from './types'; -import { fetchItem, getVisibleItemsInSlide } from '~/common/loaders/scatterplot/data'; -import type { ColumnarTree, ColumnRequest } from '~/common/loaders/scatterplot/scatterbrain-loader'; -import type { Camera } from '~/common/camera'; +import { applyOptionalTrn } from './utils'; type CacheContentType = { type: 'vbo'; data: REGL.Buffer; diff --git a/examples/src/data-renderers/lineRenderer.ts b/examples/src/data-renderers/lineRenderer.ts index ba00b8f..584e7b6 100644 --- a/examples/src/data-renderers/lineRenderer.ts +++ b/examples/src/data-renderers/lineRenderer.ts @@ -1,5 +1,6 @@ import type { box2D, vec2, vec4 } from '@alleninstitute/vis-geometry'; -import REGL, { type AttributeConfig } from 'regl'; +import type REGL from 'regl'; +import type { AttributeConfig } from 'regl'; import type { ColumnData } from '~/common/loaders/scatterplot/scatterbrain-loader'; type Attrs = { pos: REGL.AttributeConfig }; @@ -75,7 +76,7 @@ export function buildPathRenderer(regl: REGL.Regl) { settings: { view: box2D; target: REGL.Framebuffer2D | null }, tasks: Record, ) => { - const pos = tasks['position']; + const pos = tasks.position; const { view, target } = settings; if (pos && 'type' in pos && pos.type === 'float') { cmd(pos.data, item.color, view, target); diff --git a/examples/src/data-renderers/mesh-renderer.ts b/examples/src/data-renderers/mesh-renderer.ts index 04ab333..0433d1e 100644 --- a/examples/src/data-renderers/mesh-renderer.ts +++ b/examples/src/data-renderers/mesh-renderer.ts @@ -1,5 +1,5 @@ -import type { vec4, vec2 } from '@alleninstitute/vis-geometry'; -import REGL from 'regl'; +import type { vec2, vec4 } from '@alleninstitute/vis-geometry'; +import type REGL from 'regl'; const frag = ` precision highp float; diff --git a/examples/src/data-renderers/scatterplot.ts b/examples/src/data-renderers/scatterplot.ts index 6e9a6e9..d82e7da 100644 --- a/examples/src/data-renderers/scatterplot.ts +++ b/examples/src/data-renderers/scatterplot.ts @@ -1,7 +1,8 @@ -import REGL, { type Framebuffer2D } from 'regl'; import { Box2D, type box2D, type vec2, type vec4 } from '@alleninstitute/vis-geometry'; -import type { ColumnarTree, ColumnBuffer } from '~/common/loaders/scatterplot/scatterbrain-loader'; +import type REGL from 'regl'; +import type { Framebuffer2D } from 'regl'; import type { RenderSettings } from '~/common/loaders/scatterplot/data'; +import type { ColumnBuffer, ColumnarTree } from '~/common/loaders/scatterplot/scatterbrain-loader'; type Props = { view: vec4; diff --git a/examples/src/data-renderers/simpleAnnotationRenderer.ts b/examples/src/data-renderers/simpleAnnotationRenderer.ts index 318284d..efc932b 100644 --- a/examples/src/data-renderers/simpleAnnotationRenderer.ts +++ b/examples/src/data-renderers/simpleAnnotationRenderer.ts @@ -1,12 +1,12 @@ -import type REGL from 'regl'; -import { beginLongRunningFrame, type AsyncDataCache } from '@alleninstitute/vis-scatterbrain'; -import type { RenderCallback } from './types'; import { Box2D, type box2D } from '@alleninstitute/vis-geometry'; -import type { Path, buildPathRenderer } from './lineRenderer'; +import { type AsyncDataCache, beginLongRunningFrame } from '@alleninstitute/vis-scatterbrain'; import { flatten } from 'lodash'; -import type { OptionalTransform } from '../data-sources/types'; +import type REGL from 'regl'; import type { Camera } from '~/common/camera'; import type { ColumnData } from '~/common/loaders/scatterplot/scatterbrain-loader'; +import type { OptionalTransform } from '../data-sources/types'; +import type { Path, buildPathRenderer } from './lineRenderer'; +import type { RenderCallback } from './types'; type Renderer = ReturnType; diff --git a/examples/src/data-renderers/utils.ts b/examples/src/data-renderers/utils.ts index 45dbe4d..abf3285 100644 --- a/examples/src/data-renderers/utils.ts +++ b/examples/src/data-renderers/utils.ts @@ -1,6 +1,6 @@ import { Box2D, Vec2, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; -export function applyOptionalTrn(box: box2D, trn: undefined | { offset: vec2 }, inv: boolean = false) { +export function applyOptionalTrn(box: box2D, trn: undefined | { offset: vec2 }, inv = false) { // todo scale... return trn ? Box2D.translate(box, Vec2.scale(trn.offset, inv ? -1 : 1)) : box; } diff --git a/examples/src/data-renderers/versa-renderer.ts b/examples/src/data-renderers/versa-renderer.ts index b887870..28900b9 100644 --- a/examples/src/data-renderers/versa-renderer.ts +++ b/examples/src/data-renderers/versa-renderer.ts @@ -1,15 +1,16 @@ -import REGL, { type Framebuffer2D } from 'regl'; import { Box2D, type Interval, Vec2, type box2D, type vec2, type vec4 } from '@alleninstitute/vis-geometry'; -import { omit } from 'lodash'; import { + type ZarrDataset, + type ZarrRequest, pickBestScale, planeSizeInVoxels, sizeInUnits, - type ZarrDataset, - type ZarrRequest, } from '@alleninstitute/vis-omezarr'; -import { getSlicePool } from '~/common/loaders/ome-zarr/sliceWorkerPool'; +import { omit } from 'lodash'; +import type REGL from 'regl'; +import type { Framebuffer2D } from 'regl'; import type { Camera } from '~/common/camera'; +import { getSlicePool } from '~/common/loaders/ome-zarr/sliceWorkerPool'; const TILE_SIZE = 256; diff --git a/examples/src/data-renderers/volumeSliceRenderer.ts b/examples/src/data-renderers/volumeSliceRenderer.ts index 15fe423..cd767dd 100644 --- a/examples/src/data-renderers/volumeSliceRenderer.ts +++ b/examples/src/data-renderers/volumeSliceRenderer.ts @@ -1,11 +1,8 @@ +import { type AsyncDataCache, beginLongRunningFrame } from '@alleninstitute/vis-scatterbrain'; import type REGL from 'regl'; -import { beginLongRunningFrame, type AsyncDataCache } from '@alleninstitute/vis-scatterbrain'; import type { RenderCallback } from './types'; -import { applyOptionalTrn } from './utils'; import { Box2D, Vec2, type vec2 } from '@alleninstitute/vis-geometry'; -import type { AxisAlignedZarrSlice } from '../data-sources/ome-zarr/planar-slice'; -import type { AxisAlignedZarrSliceGrid } from '../data-sources/ome-zarr/slice-grid'; import { pickBestScale, sizeInUnits, @@ -13,16 +10,19 @@ import { sliceDimensionForPlane, uvForPlane, } from '@alleninstitute/vis-omezarr'; +import type { Camera } from '~/common/camera'; +import type { AxisAlignedZarrSlice } from '../data-sources/ome-zarr/planar-slice'; +import type { AxisAlignedZarrSliceGrid } from '../data-sources/ome-zarr/slice-grid'; +import { applyOptionalTrn } from './utils'; import { - cacheKeyFactory, - getVisibleTiles, - requestsForTile, type AxisAlignedPlane, - type buildVersaRenderer, type VoxelSliceRenderSettings, type VoxelTile, + type buildVersaRenderer, + cacheKeyFactory, + getVisibleTiles, + requestsForTile, } from './versa-renderer'; -import type { Camera } from '~/common/camera'; type Renderer = ReturnType; type CacheContentType = { type: 'texture2D'; data: REGL.Texture2D }; @@ -113,7 +113,7 @@ export function renderGrid( for (let i = 0; i < slices; i++) { const gridIndex: vec2 = [i % rowSize, Math.floor(i / rowSize)]; - let param = i / slices; + const param = i / slices; const slice: AxisAlignedZarrSlice = { ...grid, type: 'AxisAlignedZarrSlice', diff --git a/examples/src/data-sources/annotation/annotation-codec.ts b/examples/src/data-sources/annotation/annotation-codec.ts index fd04f57..3a1f60a 100644 --- a/examples/src/data-sources/annotation/annotation-codec.ts +++ b/examples/src/data-sources/annotation/annotation-codec.ts @@ -1,5 +1,5 @@ +import { compileSchema, parseSchema } from 'kiwi-schema'; import type { AnnotationCodec } from './annotation-schema-type'; -import { parseSchema, compileSchema } from 'kiwi-schema'; export const AnnotationSchema = ` enum PathCommandType { diff --git a/examples/src/data-sources/annotation/annotation-to-mesh.ts b/examples/src/data-sources/annotation/annotation-to-mesh.ts index f1e5707..9a6701c 100644 --- a/examples/src/data-sources/annotation/annotation-to-mesh.ts +++ b/examples/src/data-sources/annotation/annotation-to-mesh.ts @@ -1,4 +1,4 @@ -import { type box2D, type vec2, Box2D, Vec2, Vec4 } from '@alleninstitute/vis-geometry'; +import { Box2D, Vec2, Vec4, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; import type { Annotation, Path, PathCommand } from './annotation-schema-type'; import type { AnnotationMesh, AnnotationPolygon, ClosedLoop } from './types'; // a helper function, which does a first path over commands, grouping them into closed loops diff --git a/examples/src/data-sources/annotation/types.ts b/examples/src/data-sources/annotation/types.ts index 79dd954..fa6161f 100644 --- a/examples/src/data-sources/annotation/types.ts +++ b/examples/src/data-sources/annotation/types.ts @@ -1,4 +1,4 @@ -import type { vec4, box2D } from '@alleninstitute/vis-geometry'; +import type { box2D, vec4 } from '@alleninstitute/vis-geometry'; import type REGL from 'regl'; export type ClosedLoop = { diff --git a/examples/src/data-sources/ome-zarr/planar-slice.ts b/examples/src/data-sources/ome-zarr/planar-slice.ts index 310041a..83f9f8e 100644 --- a/examples/src/data-sources/ome-zarr/planar-slice.ts +++ b/examples/src/data-sources/ome-zarr/planar-slice.ts @@ -1,4 +1,4 @@ -import { loadMetadata, type ZarrDataset } from '@alleninstitute/vis-omezarr'; +import { type ZarrDataset, loadMetadata } from '@alleninstitute/vis-omezarr'; import type { AxisAlignedPlane } from '~/data-renderers/versa-renderer'; import type { ColorMapping } from '../../data-renderers/types'; import type { OptionalTransform, Simple2DTransform } from '../types'; diff --git a/examples/src/data-sources/ome-zarr/slice-grid.ts b/examples/src/data-sources/ome-zarr/slice-grid.ts index 2baf963..c2ec114 100644 --- a/examples/src/data-sources/ome-zarr/slice-grid.ts +++ b/examples/src/data-sources/ome-zarr/slice-grid.ts @@ -1,4 +1,4 @@ -import { loadMetadata, type ZarrDataset } from '@alleninstitute/vis-omezarr'; +import { type ZarrDataset, loadMetadata } from '@alleninstitute/vis-omezarr'; import type { AxisAlignedPlane } from '~/data-renderers/versa-renderer'; import type { ColorMapping } from '../../data-renderers/types'; import type { OptionalTransform, Simple2DTransform } from '../types'; diff --git a/examples/src/data-sources/scatterplot/dynamic-grid.ts b/examples/src/data-sources/scatterplot/dynamic-grid.ts index 5163629..6fcf3ec 100644 --- a/examples/src/data-sources/scatterplot/dynamic-grid.ts +++ b/examples/src/data-sources/scatterplot/dynamic-grid.ts @@ -1,9 +1,9 @@ import { type ColumnRequest, type SlideViewDataset, - loadScatterbrainJson, isSlideViewData, loadDataset, + loadScatterbrainJson, } from '~/common/loaders/scatterplot/scatterbrain-loader'; import type { OptionalTransform, Simple2DTransform } from '../types'; diff --git a/examples/src/dzi/dzi-demo.tsx b/examples/src/dzi/dzi-demo.tsx index 84880c6..a6d23d0 100644 --- a/examples/src/dzi/dzi-demo.tsx +++ b/examples/src/dzi/dzi-demo.tsx @@ -1,10 +1,10 @@ +import type { DziImage, DziRenderSettings } from '@alleninstitute/vis-dzi'; +import { Box2D, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; import { useEffect, useMemo, useRef, useState } from 'react'; -import { RenderServerProvider } from '../common/react/render-server-provider'; import React from 'react'; -import type { DziImage, DziRenderSettings } from '@alleninstitute/vis-dzi'; -import { Box2D, Vec2, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; -import { DziViewer } from './dzi-viewer'; import { pan, zoom } from '~/common/camera'; +import { RenderServerProvider } from '../common/react/render-server-provider'; +import { DziViewer } from './dzi-viewer'; // We know the sizes and formats ahead of time for these examples, // if you'd like to see how to get this data from an endpoint with a dzi file check out use-dzi-image.ts @@ -90,7 +90,7 @@ export function DziDemo() {

Scroll below to view image

{images.map((v) => ( -
+
(); useEffect(() => { - if (server && server.regl) { + if (server?.regl) { renderer.current = buildAsyncDziRenderer(server.regl); } return () => { @@ -74,13 +73,13 @@ export function DziViewer(props: Props) { server.beginRendering( renderMyData, (e) => { - if (e.status == 'begin') { + if (e.status === 'begin') { server.regl?.clear({ framebuffer: e.target, color: [0, 0, 0, 0], depth: 1, }); - } else if (e.status == 'progress' || e.status == 'finished') { + } else if (e.status === 'progress' || e.status === 'finished') { e.server.copyToClient(compose); } }, diff --git a/examples/src/index.tsx b/examples/src/index.tsx index 7c1d2b0..de009fc 100644 --- a/examples/src/index.tsx +++ b/examples/src/index.tsx @@ -1,7 +1,12 @@ +import React from 'react'; import { createRoot } from 'react-dom/client'; import { App } from './app'; -import React from 'react'; const container = document.getElementById('app'); -const root = createRoot(container!); + +if (!container) { + throw new Error('container not found'); +} + +const root = createRoot(container); root.render(); diff --git a/examples/src/layers.ts b/examples/src/layers.ts index d600992..a23d2cc 100644 --- a/examples/src/layers.ts +++ b/examples/src/layers.ts @@ -1,56 +1,56 @@ import { Box2D, Vec2, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; +import { sizeInUnits } from '@alleninstitute/vis-omezarr'; +import { AsyncDataCache, type FrameLifecycle, type NormalStatus, ReglLayer2D } from '@alleninstitute/vis-scatterbrain'; +import { saveAs } from 'file-saver'; +import { createRoot } from 'react-dom/client'; import REGL from 'regl'; -import { AsyncDataCache, ReglLayer2D, type FrameLifecycle, type NormalStatus } from '@alleninstitute/vis-scatterbrain'; +import type { Camera } from './common/camera'; +import { buildImageRenderer } from './common/image-renderer'; +import type { ColumnRequest } from './common/loaders/scatterplot/scatterbrain-loader'; import { + type RenderSettings as AnnotationGridRenderSettings, + type LoopRenderer, + type MeshRenderer, + renderAnnotationGrid, +} from './data-renderers/annotation-renderer'; +import { + type RenderSettings as SlideRenderSettings, renderDynamicGrid, renderSlide, - type RenderSettings as SlideRenderSettings, } from './data-renderers/dynamicGridSlideRenderer'; +import { buildPathRenderer } from './data-renderers/lineRenderer'; +import { buildLoopRenderer, buildMeshRenderer } from './data-renderers/mesh-renderer'; +import { buildRenderer } from './data-renderers/scatterplot'; import { - renderGrid, - renderSlice, - type RenderSettings as SliceRenderSettings, -} from './data-renderers/volumeSliceRenderer'; -import { - renderAnnotationLayer, type RenderSettings as AnnotationRenderSettings, type SimpleAnnotation, + renderAnnotationLayer, } from './data-renderers/simpleAnnotationRenderer'; -import { buildPathRenderer } from './data-renderers/lineRenderer'; import type { ColorMapping, RenderCallback } from './data-renderers/types'; -import { createZarrSlice, type AxisAlignedZarrSlice, type ZarrSliceConfig } from './data-sources/ome-zarr/planar-slice'; +import { type AxisAlignedPlane, buildVersaRenderer } from './data-renderers/versa-renderer'; +import { + type RenderSettings as SliceRenderSettings, + renderGrid, + renderSlice, +} from './data-renderers/volumeSliceRenderer'; +import type { AnnotationGrid, AnnotationGridConfig } from './data-sources/annotation/annotation-grid'; +import { type AxisAlignedZarrSlice, type ZarrSliceConfig, createZarrSlice } from './data-sources/ome-zarr/planar-slice'; +import { + type AxisAlignedZarrSliceGrid, + type ZarrSliceGridConfig, + createZarrSliceGrid, +} from './data-sources/ome-zarr/slice-grid'; import { - createGridDataset, - createSlideDataset, type DynamicGrid, type DynamicGridSlide, type ScatterPlotGridSlideConfig, type ScatterplotGridConfig, + createGridDataset, + createSlideDataset, } from './data-sources/scatterplot/dynamic-grid'; import type { OptionalTransform } from './data-sources/types'; -import type { CacheEntry, AnnotationLayer, Layer } from './types'; import { AppUi } from './layers/layers'; -import { createRoot } from 'react-dom/client'; -import { - createZarrSliceGrid, - type AxisAlignedZarrSliceGrid, - type ZarrSliceGridConfig, -} from './data-sources/ome-zarr/slice-grid'; -import { - renderAnnotationGrid, - type LoopRenderer, - type MeshRenderer, - type RenderSettings as AnnotationGridRenderSettings, -} from './data-renderers/annotation-renderer'; -import { buildLoopRenderer, buildMeshRenderer } from './data-renderers/mesh-renderer'; -import { saveAs } from 'file-saver'; -import type { AnnotationGrid, AnnotationGridConfig } from './data-sources/annotation/annotation-grid'; -import { buildRenderer } from './data-renderers/scatterplot'; -import { sizeInUnits } from '@alleninstitute/vis-omezarr'; -import type { ColumnRequest } from './common/loaders/scatterplot/scatterbrain-loader'; -import { buildVersaRenderer, type AxisAlignedPlane } from './data-renderers/versa-renderer'; -import { buildImageRenderer } from './common/image-renderer'; -import type { Camera } from './common/camera'; +import type { AnnotationLayer, CacheEntry, Layer } from './types'; const KB = 1000; const MB = 1000 * KB; @@ -111,8 +111,8 @@ export class Demo { loopRenderer: LoopRenderer; meshRenderer: MeshRenderer; stencilMeshRenderer: MeshRenderer; - private refreshRequested: number = 0; - private redrawRequested: number = 0; + private refreshRequested = 0; + private redrawRequested = 0; constructor(canvas: HTMLCanvasElement, regl: REGL.Regl) { this.canvas = canvas; this.mouse = 'up'; diff --git a/examples/src/layers/layers.tsx b/examples/src/layers/layers.tsx index 15af41a..cd0b042 100644 --- a/examples/src/layers/layers.tsx +++ b/examples/src/layers/layers.tsx @@ -1,10 +1,10 @@ +import { Button } from '@czi-sds/components'; import React from 'react'; -import { SliceViewLayer } from '../ui/slice-ui'; import type { Demo } from '../layers'; import { AnnotationGrid } from '../ui/annotation-grid'; import { ContactSheetUI } from '../ui/contact-sheet'; import { ScatterplotUI } from '../ui/scatterplot-ui'; -import { Button } from '@czi-sds/components'; +import { SliceViewLayer } from '../ui/slice-ui'; export function AppUi(props: { demo: Demo }) { const { demo } = props; diff --git a/examples/src/omezarr/omezarr-demo.tsx b/examples/src/omezarr/omezarr-demo.tsx index 093cb0d..24c13f9 100644 --- a/examples/src/omezarr/omezarr-demo.tsx +++ b/examples/src/omezarr/omezarr-demo.tsx @@ -1,11 +1,11 @@ -import React, { useEffect, useMemo, useState } from 'react'; -import { RenderServerProvider } from '~/common/react/render-server-provider'; -import { SliceView } from './sliceview'; +import { Box2D, type Interval, Vec2, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; import { type OmeZarrDataset, loadOmeZarr, sizeInUnits } from '@alleninstitute/vis-omezarr'; -import { OmezarrViewer } from './omezarr-viewer'; -import { type RenderSettings } from '@alleninstitute/vis-omezarr'; -import { Box2D, Vec2, type box2D, type Interval, type vec2 } from '@alleninstitute/vis-geometry'; +import type { RenderSettings } from '@alleninstitute/vis-omezarr'; +import { useEffect, useMemo, useState } from 'react'; import { pan, zoom } from '~/common/camera'; +import { RenderServerProvider } from '~/common/react/render-server-provider'; +import { OmezarrViewer } from './omezarr-viewer'; +import { SliceView } from './sliceview'; const demo_versa = 'https://neuroglancer-vis-prototype.s3.amazonaws.com/VERSA/scratch/0500408166/'; @@ -81,8 +81,12 @@ export function OmezarrDemo() { {omezarr && settings ? ( <>
- - + +
{ const c = canvas?.current; - if (server && server.regl) { + if (server?.regl) { renderer.current = buildAsyncOmezarrRenderer(server.regl, defaultDecoder); } return () => { @@ -97,7 +96,7 @@ export function OmezarrViewer({ canvas.current, ); } - }, [server, renderer, canvas, omezarr, settings]); + }, [server, omezarr, settings]); // wheel event needs to be active for control + wheel zoom to work useEffect(() => { diff --git a/examples/src/omezarr/sliceview.tsx b/examples/src/omezarr/sliceview.tsx index 209f243..b2332b6 100644 --- a/examples/src/omezarr/sliceview.tsx +++ b/examples/src/omezarr/sliceview.tsx @@ -1,13 +1,13 @@ -import { type box2D, Box2D, Vec2 } from '@alleninstitute/vis-geometry'; +import { Box2D, Vec2, type box2D } from '@alleninstitute/vis-geometry'; import { - buildAsyncOmezarrRenderer, - defaultDecoder, + type RenderSettings, type VoxelTile, type ZarrDataset, - type RenderSettings, + buildAsyncOmezarrRenderer, + defaultDecoder, } from '@alleninstitute/vis-omezarr'; import type { RenderFrameFn } from '@alleninstitute/vis-scatterbrain'; -import React, { useCallback, useState } from 'react'; +import { useCallback, useState } from 'react'; import { useContext, useEffect, useRef } from 'react'; import { renderServerContext } from '~/common/react/render-server-provider'; type Props = { @@ -47,7 +47,7 @@ export function SliceView(props: Props) { const renderer = useRef>(); const [view, setView] = useState(Box2D.create([0, 0], [250, 120])); useEffect(() => { - if (server && server.regl) { + if (server?.regl) { renderer.current = buildAsyncOmezarrRenderer(server.regl, defaultDecoder); } return () => { @@ -95,7 +95,7 @@ export function SliceView(props: Props) { cnvs.current, ); } - }, [server, renderer.current, cnvs.current, omezarr, view]); + }, [server, omezarr, view]); const pan = useCallback( (e: React.MouseEvent) => { if (e.ctrlKey) { @@ -120,6 +120,6 @@ export function SliceView(props: Props) { }} width={settings.camera.screenSize[0]} height={settings.camera.screenSize[1]} - > + /> ); } diff --git a/examples/src/types.ts b/examples/src/types.ts index 2aa76af..b276734 100644 --- a/examples/src/types.ts +++ b/examples/src/types.ts @@ -1,20 +1,20 @@ import type { box2D } from '@alleninstitute/vis-geometry'; +import type { ReglLayer2D } from '@alleninstitute/vis-scatterbrain'; import type REGL from 'regl'; -import { type RenderSettings as SlideRenderSettings } from './data-renderers/dynamicGridSlideRenderer'; -import { type RenderSettings as SliceRenderSettings } from './data-renderers/volumeSliceRenderer'; -import { - type RenderSettings as AnnotationRenderSettings, - type SimpleAnnotation, -} from './data-renderers/simpleAnnotationRenderer'; -import type { AxisAlignedZarrSlice } from './data-sources/ome-zarr/planar-slice'; -import type { DynamicGrid, DynamicGridSlide } from './data-sources/scatterplot/dynamic-grid'; -import type { AxisAlignedZarrSliceGrid } from './data-sources/ome-zarr/slice-grid'; import type { RenderSettings as AnnotationGridRenderSettings, CacheContentType as GpuMesh, } from './data-renderers/annotation-renderer'; +import type { RenderSettings as SlideRenderSettings } from './data-renderers/dynamicGridSlideRenderer'; +import type { + RenderSettings as AnnotationRenderSettings, + SimpleAnnotation, +} from './data-renderers/simpleAnnotationRenderer'; +import type { RenderSettings as SliceRenderSettings } from './data-renderers/volumeSliceRenderer'; import type { AnnotationGrid } from './data-sources/annotation/annotation-grid'; -import type { ReglLayer2D } from '@alleninstitute/vis-scatterbrain'; +import type { AxisAlignedZarrSlice } from './data-sources/ome-zarr/planar-slice'; +import type { AxisAlignedZarrSliceGrid } from './data-sources/ome-zarr/slice-grid'; +import type { DynamicGrid, DynamicGridSlide } from './data-sources/scatterplot/dynamic-grid'; // note: right now, all layers should be considered 2D, and WebGL only... export type Image = { texture: REGL.Framebuffer2D; diff --git a/examples/src/ui/annotation-grid.tsx b/examples/src/ui/annotation-grid.tsx index 81f6efa..dc7369d 100644 --- a/examples/src/ui/annotation-grid.tsx +++ b/examples/src/ui/annotation-grid.tsx @@ -1,6 +1,6 @@ +import { InputSlider } from '@czi-sds/components'; import React from 'react'; import type { Demo } from 'src/layers'; -import { InputSlider } from '@czi-sds/components'; export function AnnotationGrid(props: { demo: Demo }) { const { demo } = props; // control the gamut with some sliders diff --git a/examples/src/ui/contact-sheet.tsx b/examples/src/ui/contact-sheet.tsx index ae8691f..2727d2d 100644 --- a/examples/src/ui/contact-sheet.tsx +++ b/examples/src/ui/contact-sheet.tsx @@ -1,6 +1,6 @@ +import { Button, InputSlider } from '@czi-sds/components'; import React from 'react'; import type { Demo } from 'src/layers'; -import { InputSlider, Button } from '@czi-sds/components'; export function ContactSheetUI(props: { demo: Demo }) { const { demo } = props; // control the gamut with some sliders @@ -8,8 +8,9 @@ export function ContactSheetUI(props: { demo: Demo }) { if (l && l.type === 'volumeGrid') { return (
- + - + - + - + - + { const highsmith: DziImage = { diff --git a/packages/dzi/src/loader.ts b/packages/dzi/src/loader.ts index 46bd883..a6eba23 100644 --- a/packages/dzi/src/loader.ts +++ b/packages/dzi/src/loader.ts @@ -1,4 +1,4 @@ -import { type vec2, type box2D, Box2D, type Interval, Vec2 } from '@alleninstitute/vis-geometry'; +import { Box2D, type Interval, Vec2, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; type DziTilesRoot = `${string}_files/`; // see https://learn.microsoft.com/en-us/previous-versions/windows/silverlight/dotnet-windows-silverlight/cc645077(v=vs.95)?redirectedfrom=MSDN diff --git a/packages/dzi/src/renderer.ts b/packages/dzi/src/renderer.ts index bbca5a6..2a3f91a 100644 --- a/packages/dzi/src/renderer.ts +++ b/packages/dzi/src/renderer.ts @@ -1,8 +1,8 @@ import { Box2D, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; import { - type Renderer, - type ReglCacheEntry, type CachedTexture, + type ReglCacheEntry, + type Renderer, buildAsyncRenderer, } from '@alleninstitute/vis-scatterbrain'; import type REGL from 'regl'; @@ -68,7 +68,7 @@ export function buildDziRenderer(regl: REGL.Regl): Renderer { - const pixels = cacheData['pixels']; + const pixels = cacheData.pixels; return !!pixels && pixels.type === 'texture'; }, renderItem: (target, tile, _dzi, settings, gpuData) => { diff --git a/packages/dzi/src/tile-renderer.ts b/packages/dzi/src/tile-renderer.ts index 6d2391f..5d60fd6 100644 --- a/packages/dzi/src/tile-renderer.ts +++ b/packages/dzi/src/tile-renderer.ts @@ -1,5 +1,5 @@ import type { vec4 } from '@alleninstitute/vis-geometry'; -import REGL from 'regl'; +import type REGL from 'regl'; type Props = { img: REGL.Texture2D; view: vec4; diff --git a/packages/geometry/src/box2D.ts b/packages/geometry/src/box2D.ts index 27e264f..2ca1a7e 100644 --- a/packages/geometry/src/box2D.ts +++ b/packages/geometry/src/box2D.ts @@ -1,6 +1,6 @@ import { BoxClassFactory, type box } from './BoundingBox'; import type { rectangle2D } from './Rectangle2D'; -import { type vec2, Vec2 } from './vec2'; +import { Vec2, type vec2 } from './vec2'; export type box2D = box; diff --git a/packages/geometry/src/box3D.ts b/packages/geometry/src/box3D.ts index 3d64bff..f5e77f7 100644 --- a/packages/geometry/src/box3D.ts +++ b/packages/geometry/src/box3D.ts @@ -1,6 +1,6 @@ import { BoxClassFactory, type box } from './BoundingBox'; import type { vec2 } from './vec2'; -import { type vec3, Vec3 } from './vec3'; +import { Vec3, type vec3 } from './vec3'; const isBox3D = (maybe: unknown): maybe is box3D => { if (typeof maybe === 'object' && maybe !== null && 'minCorner' in maybe && 'maxCorner' in maybe) { diff --git a/packages/geometry/src/line.ts b/packages/geometry/src/line.ts index 96c1451..32a8777 100644 --- a/packages/geometry/src/line.ts +++ b/packages/geometry/src/line.ts @@ -1,4 +1,4 @@ -import { Vec2, vec2 } from './vec2'; +import { Vec2, type vec2 } from './vec2'; export type line = { start: vec2; end: vec2 }; diff --git a/packages/geometry/src/tests/Rectangle2D.test.ts b/packages/geometry/src/tests/Rectangle2D.test.ts index 53643a3..5d62805 100644 --- a/packages/geometry/src/tests/Rectangle2D.test.ts +++ b/packages/geometry/src/tests/Rectangle2D.test.ts @@ -1,7 +1,7 @@ -import { getMinimumBoundingBox, rectangle2D, scaleFromPoint } from '../Rectangle2D'; -import { Box2D, box2D } from '../box2D'; -import { Vec2, vec2 } from '../vec2'; import { describe, expect, it, test } from 'vitest'; +import { getMinimumBoundingBox, type rectangle2D, scaleFromPoint } from '../Rectangle2D'; +import { Box2D, type box2D } from '../box2D'; +import { Vec2, type vec2 } from '../vec2'; function nearlyEqual(a: vec2, b: vec2, epsilon: number) { return Vec2.maxComponent(Vec2.map(Vec2.sub(a, b), Math.abs)) < epsilon; diff --git a/packages/geometry/src/tests/box2D.test.ts b/packages/geometry/src/tests/box2D.test.ts index 984d107..6dd5c79 100644 --- a/packages/geometry/src/tests/box2D.test.ts +++ b/packages/geometry/src/tests/box2D.test.ts @@ -1,6 +1,6 @@ +import { describe, expect, test } from 'vitest'; import { Box2D } from '../box2D'; import { Vec2 } from '../vec2'; -import { describe, expect, test } from 'vitest'; describe('box2D', () => { // Basic box to use throughout the tests const box = Box2D.create([1, 2], [3, 4]); @@ -32,10 +32,10 @@ describe('box2D', () => { const validBox = Box2D.isValid(box); expect(validBox).toBeTruthy(); - const nanBox = Box2D.isValid(Box2D.create([NaN, NaN], [1, 1])); + const nanBox = Box2D.isValid(Box2D.create([Number.NaN, Number.NaN], [1, 1])); expect(nanBox).toBeFalsy(); - const infinityBox = Box2D.isValid(Box2D.create([Infinity, Infinity], [1, 1])); + const infinityBox = Box2D.isValid(Box2D.create([Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY], [1, 1])); expect(infinityBox).toBeFalsy(); const noAreaPointBox = Box2D.isValid(Box2D.create([0, 0], [0, 0])); diff --git a/packages/geometry/src/tests/box3D.test.ts b/packages/geometry/src/tests/box3D.test.ts index 360aa85..006eb3d 100644 --- a/packages/geometry/src/tests/box3D.test.ts +++ b/packages/geometry/src/tests/box3D.test.ts @@ -1,6 +1,6 @@ +import { describe, expect, test } from 'vitest'; import { Box3D } from '../box3D'; import { Vec3 } from '../vec3'; -import { describe, expect, test } from 'vitest'; describe('Box3D', () => { // Basic box to use throughout the tests const box = Box3D.create([1, 2, 3], [3, 4, 5]); @@ -40,10 +40,12 @@ describe('Box3D', () => { const validBox = Box3D.isValid(box); expect(validBox).toBeTruthy(); - const nanBox = Box3D.isValid(Box3D.create([NaN, NaN, NaN], [1, 1, 1])); + const nanBox = Box3D.isValid(Box3D.create([Number.NaN, Number.NaN, Number.NaN], [1, 1, 1])); expect(nanBox).toBeFalsy(); - const infinityBox = Box3D.isValid(Box3D.create([Infinity, Infinity, Infinity], [1, 1, 1])); + const infinityBox = Box3D.isValid( + Box3D.create([Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY], [1, 1, 1]), + ); expect(infinityBox).toBeFalsy(); const noAreaBox = Box3D.isValid(Box3D.create([0, 0, 0], [0, 0, 0])); diff --git a/packages/geometry/src/tests/interval.test.ts b/packages/geometry/src/tests/interval.test.ts index 3d203e5..018c218 100644 --- a/packages/geometry/src/tests/interval.test.ts +++ b/packages/geometry/src/tests/interval.test.ts @@ -1,5 +1,5 @@ -import { fixOrder, intersection, Interval, isValid, limit, size, within } from '../interval'; import { describe, expect, it, test } from 'vitest'; +import { type Interval, fixOrder, intersection, isValid, limit, size, within } from '../interval'; function I(a: number, b: number): Interval { return { min: a, max: b }; } diff --git a/packages/geometry/src/tests/line.test.ts b/packages/geometry/src/tests/line.test.ts index 541902a..8a6859d 100644 --- a/packages/geometry/src/tests/line.test.ts +++ b/packages/geometry/src/tests/line.test.ts @@ -1,5 +1,5 @@ import { describe, expect, test } from 'vitest'; -import { line, lineSegmentsIntersect } from '../line'; +import { type line, lineSegmentsIntersect } from '../line'; describe('line', () => { test('lineSegmentsIntersect finds intersection', () => { diff --git a/packages/geometry/src/tests/vec2.test.ts b/packages/geometry/src/tests/vec2.test.ts index afecb78..10f44fe 100644 --- a/packages/geometry/src/tests/vec2.test.ts +++ b/packages/geometry/src/tests/vec2.test.ts @@ -1,5 +1,5 @@ -import { Vec2 } from '../vec2'; import { describe, expect, test } from 'vitest'; +import { Vec2 } from '../vec2'; describe('vec2', () => { test('add', () => { const result = Vec2.add([2, 3], [4, 5]); @@ -81,17 +81,17 @@ describe('vec2', () => { expect(result).toStrictEqual([2 / length, 3 / length]); const noLength = Vec2.normalize([0, 0]); - expect(noLength).toStrictEqual([NaN, NaN]); + expect(noLength).toStrictEqual([Number.NaN, Number.NaN]); }); test('finite', () => { const result = Vec2.finite([2, 3]); expect(result).toBeTruthy(); - const infinityResult = Vec2.finite([Infinity, 2]); + const infinityResult = Vec2.finite([Number.POSITIVE_INFINITY, 2]); expect(infinityResult).toBeFalsy(); - const nanResult = Vec2.finite([NaN, 2]); + const nanResult = Vec2.finite([Number.NaN, 2]); expect(nanResult).toBeFalsy(); }); diff --git a/packages/geometry/src/tests/vec3.test.ts b/packages/geometry/src/tests/vec3.test.ts index c986505..c292f47 100644 --- a/packages/geometry/src/tests/vec3.test.ts +++ b/packages/geometry/src/tests/vec3.test.ts @@ -1,5 +1,5 @@ -import { Vec3 } from '../vec3'; import { describe, expect, test } from 'vitest'; +import { Vec3 } from '../vec3'; describe('Vec3', () => { test('add', () => { const result = Vec3.add([2, 3, 4], [4, 5, 6]); @@ -79,17 +79,17 @@ describe('Vec3', () => { expect(result).toStrictEqual([2 / length, 3 / length, 4 / length]); const noLength = Vec3.normalize([0, 0, 0]); - expect(noLength).toStrictEqual([NaN, NaN, NaN]); + expect(noLength).toStrictEqual([Number.NaN, Number.NaN, Number.NaN]); }); test('finite', () => { const result = Vec3.finite([2, 3, 4]); expect(result).toBeTruthy(); - const infinityResult = Vec3.finite([Infinity, 2, 3]); + const infinityResult = Vec3.finite([Number.POSITIVE_INFINITY, 2, 3]); expect(infinityResult).toBeFalsy(); - const nanResult = Vec3.finite([NaN, 2, 3]); + const nanResult = Vec3.finite([Number.NaN, 2, 3]); expect(nanResult).toBeFalsy(); }); diff --git a/packages/geometry/src/tests/vec4.test.ts b/packages/geometry/src/tests/vec4.test.ts index e053f90..9eeae54 100644 --- a/packages/geometry/src/tests/vec4.test.ts +++ b/packages/geometry/src/tests/vec4.test.ts @@ -1,5 +1,5 @@ -import { Vec4 } from '../vec4'; import { describe, expect, test } from 'vitest'; +import { Vec4 } from '../vec4'; describe('Vec4', () => { test('add', () => { const result = Vec4.add([2, 3, 4, 5], [4, 5, 6, 7]); @@ -79,17 +79,17 @@ describe('Vec4', () => { expect(result).toStrictEqual([2 / length, 3 / length, 4 / length, 5 / length]); const noLength = Vec4.normalize([0, 0, 0, 0]); - expect(noLength).toStrictEqual([NaN, NaN, NaN, NaN]); + expect(noLength).toStrictEqual([Number.NaN, Number.NaN, Number.NaN, Number.NaN]); }); test('finite', () => { const result = Vec4.finite([2, 3, 4, 6]); expect(result).toBeTruthy(); - const infinityResult = Vec4.finite([Infinity, 2, 3, 4]); + const infinityResult = Vec4.finite([Number.POSITIVE_INFINITY, 2, 3, 4]); expect(infinityResult).toBeFalsy(); - const nanResult = Vec4.finite([NaN, 2, 3, 4]); + const nanResult = Vec4.finite([Number.NaN, 2, 3, 4]); expect(nanResult).toBeFalsy(); }); diff --git a/packages/omezarr/src/sliceview/loader.test.ts b/packages/omezarr/src/sliceview/loader.test.ts index 92aee82..2fa48b3 100644 --- a/packages/omezarr/src/sliceview/loader.test.ts +++ b/packages/omezarr/src/sliceview/loader.test.ts @@ -1,6 +1,6 @@ -import { sizeInUnits, type ZarrDataset } from '../zarr-data'; +import { Box2D, type box2D } from '@alleninstitute/vis-geometry'; import { describe, expect, it } from 'vitest'; -import { Box2D, box2D } from '@alleninstitute/vis-geometry'; +import { type ZarrDataset, sizeInUnits } from '../zarr-data'; import { getVisibleTiles } from './loader'; const exampleOmeZarr: ZarrDataset = { url: 'https://allen-genetic-tools.s3.us-west-2.amazonaws.com/tissuecyte/1263343692/ome-zarr/', diff --git a/packages/omezarr/src/sliceview/loader.ts b/packages/omezarr/src/sliceview/loader.ts index 2d766c2..4dc60ba 100644 --- a/packages/omezarr/src/sliceview/loader.ts +++ b/packages/omezarr/src/sliceview/loader.ts @@ -1,8 +1,8 @@ import { Box2D, Vec2, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; +import type { Chunk } from 'zarrita'; import type { AxisAlignedPlane, ZarrDataset, ZarrRequest } from '../zarr-data'; import { getSlice, pickBestScale, planeSizeInVoxels, sizeInUnits, uvForPlane } from '../zarr-data'; import type { VoxelTileImage } from './slice-renderer'; -import type { Chunk } from 'zarrita'; export type VoxelTile = { plane: AxisAlignedPlane; // the plane in which the tile sits diff --git a/packages/omezarr/src/sliceview/slice-renderer.ts b/packages/omezarr/src/sliceview/slice-renderer.ts index c32c55f..9bd7c13 100644 --- a/packages/omezarr/src/sliceview/slice-renderer.ts +++ b/packages/omezarr/src/sliceview/slice-renderer.ts @@ -1,14 +1,14 @@ -import REGL from 'regl'; import { Box2D, type Interval, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; import { - type Renderer, - type ReglCacheEntry, type CachedTexture, + type ReglCacheEntry, + type Renderer, buildAsyncRenderer, } from '@alleninstitute/vis-scatterbrain'; +import type REGL from 'regl'; import type { AxisAlignedPlane, ZarrDataset, ZarrRequest } from '../zarr-data'; -import { buildTileRenderer } from './tile-renderer'; import { type VoxelTile, getVisibleTiles } from './loader'; +import { buildTileRenderer } from './tile-renderer'; type RenderSettings = { camera: { diff --git a/packages/omezarr/src/sliceview/tile-renderer.ts b/packages/omezarr/src/sliceview/tile-renderer.ts index b12356d..43848b5 100644 --- a/packages/omezarr/src/sliceview/tile-renderer.ts +++ b/packages/omezarr/src/sliceview/tile-renderer.ts @@ -3,7 +3,8 @@ // the channels may be mapped to color-channels (RGB) with a basic 2-post gamut control import type { vec2, vec4 } from '@alleninstitute/vis-geometry'; -import REGL, { type Framebuffer2D } from 'regl'; +import type REGL from 'regl'; +import type { Framebuffer2D } from 'regl'; type Props = { target: Framebuffer2D | null; diff --git a/packages/omezarr/src/zarr-data.ts b/packages/omezarr/src/zarr-data.ts index e05fb3d..7605820 100644 --- a/packages/omezarr/src/zarr-data.ts +++ b/packages/omezarr/src/zarr-data.ts @@ -1,6 +1,6 @@ -import * as zarr from 'zarrita'; -import { some } from 'lodash'; import { Box2D, type Interval, Vec2, type box2D, limit, type vec2 } from '@alleninstitute/vis-geometry'; +import { some } from 'lodash'; +import * as zarr from 'zarrita'; // documentation for ome-zarr datasets (from which these types are built) // can be found here: diff --git a/packages/scatterbrain/src/abstract/async-frame.ts b/packages/scatterbrain/src/abstract/async-frame.ts index ca0a2d7..90bb565 100644 --- a/packages/scatterbrain/src/abstract/async-frame.ts +++ b/packages/scatterbrain/src/abstract/async-frame.ts @@ -1,7 +1,7 @@ import { partial } from 'lodash'; -import { AsyncDataCache } from '../dataset-cache'; -import type { ReglCacheEntry, Renderer } from './types'; import type REGL from 'regl'; +import type { AsyncDataCache } from '../dataset-cache'; +import type { ReglCacheEntry, Renderer } from './types'; /// THIS file is a copy of render-queue, but with some changes made that I hope will make the idea of beginLongRunningFrame easier to use /// // TODO: delete (or make deprecated) the old one @@ -113,7 +113,7 @@ export function beginFrame< } }; - const doWorkOnQueue = (intervalId: number, synchronous: boolean = false) => { + const doWorkOnQueue = (intervalId: number, synchronous = false) => { // try our best to cleanup if something goes awry const startWorkTime = performance.now(); const cleanupOnError = (err: unknown) => { diff --git a/packages/scatterbrain/src/abstract/render-server.ts b/packages/scatterbrain/src/abstract/render-server.ts index 1151f54..6f314a7 100644 --- a/packages/scatterbrain/src/abstract/render-server.ts +++ b/packages/scatterbrain/src/abstract/render-server.ts @@ -1,9 +1,9 @@ -import { AsyncDataCache } from '../dataset-cache'; -import type { ReglCacheEntry } from './types'; import { Vec2, type vec2 } from '@alleninstitute/vis-geometry'; import REGL from 'regl'; -import { type AsyncFrameEvent, type RenderCallback } from './async-frame'; -import { type FrameLifecycle } from '../render-queue'; +import { AsyncDataCache } from '../dataset-cache'; +import type { FrameLifecycle } from '../render-queue'; +import type { AsyncFrameEvent, RenderCallback } from './async-frame'; +import type { ReglCacheEntry } from './types'; function destroyer(item: ReglCacheEntry) { switch (item.type) { diff --git a/packages/scatterbrain/src/dataset-cache.ts b/packages/scatterbrain/src/dataset-cache.ts index 470a610..d7e0c16 100644 --- a/packages/scatterbrain/src/dataset-cache.ts +++ b/packages/scatterbrain/src/dataset-cache.ts @@ -205,7 +205,7 @@ export class AsyncDataCache Promise) { let promise: Promise; - let entry = this.entries.get(cacheKey); + const entry = this.entries.get(cacheKey); const data = entry?.data; // we either return early (data is cached) // or we initialize promise (either getter() or a pre-existing request for the same cachekey) diff --git a/packages/scatterbrain/src/layers/layer-2D.ts b/packages/scatterbrain/src/layers/layer-2D.ts index 5583549..54a8eec 100644 --- a/packages/scatterbrain/src/layers/layer-2D.ts +++ b/packages/scatterbrain/src/layers/layer-2D.ts @@ -1,9 +1,9 @@ -// a helper to render a 2D layer, using regl -import type { Image, ImageRenderer, RenderFn } from './types'; -import { type BufferPair, swapBuffers } from './buffer-pair'; +import { Box2D, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; import type REGL from 'regl'; import type { FrameLifecycle, RenderCallback } from '../render-queue'; -import { Box2D, type box2D, type vec2 } from '@alleninstitute/vis-geometry'; +import { type BufferPair, swapBuffers } from './buffer-pair'; +// a helper to render a 2D layer, using regl +import type { Image, ImageRenderer, RenderFn } from './types'; type EventType = Parameters[0]; type RequiredSettings = { camera: { view: box2D }; callback: RenderCallback }; @@ -54,7 +54,7 @@ export class ReglLayer2D { readonly data: Readonly; readonly settings: Readonly; }, - cancel: boolean = true, + cancel = true, ) { if (cancel && this.runningFrame) { this.runningFrame.cancelFrame(); diff --git a/packages/scatterbrain/src/layers/types.ts b/packages/scatterbrain/src/layers/types.ts index 0a2630d..749d4bf 100644 --- a/packages/scatterbrain/src/layers/types.ts +++ b/packages/scatterbrain/src/layers/types.ts @@ -1,6 +1,6 @@ import type { box2D, vec2, vec4 } from '@alleninstitute/vis-geometry'; -import type { FrameLifecycle } from '../render-queue'; import type REGL from 'regl'; +import type { FrameLifecycle } from '../render-queue'; export type RenderFn = ( target: REGL.Framebuffer2D | null, diff --git a/packages/scatterbrain/src/render-queue.ts b/packages/scatterbrain/src/render-queue.ts index f7f9d57..2ac1e09 100644 --- a/packages/scatterbrain/src/render-queue.ts +++ b/packages/scatterbrain/src/render-queue.ts @@ -1,5 +1,5 @@ import { partial } from 'lodash'; -import { AsyncDataCache } from './dataset-cache'; +import type { AsyncDataCache } from './dataset-cache'; /** * FrameLifecycle type that defines the functions a user can call to interact with the frame lifecycle. diff --git a/packages/scatterbrain/src/test/render-cache.test.ts b/packages/scatterbrain/src/test/render-cache.test.ts index 461f00e..9ab4b35 100644 --- a/packages/scatterbrain/src/test/render-cache.test.ts +++ b/packages/scatterbrain/src/test/render-cache.test.ts @@ -1,7 +1,7 @@ +import { delay, partial, partialRight, uniqueId } from 'lodash'; import { beforeEach, describe, expect, it } from 'vitest'; import { AsyncDataCache } from '../dataset-cache'; import { fakeFetch } from './test-utils'; -import { delay, partial, partialRight, uniqueId } from 'lodash'; type Columns = 'color' | 'position'; type vec3 = readonly [number, number, number]; type Data = { pretend: vec3 }; @@ -54,7 +54,7 @@ function cacheKey(item: { id: number }, rq: Columns) { return `api:4000/${rq}_${item.id}.bin`; } describe('async cache', () => { - let mockPromises = new PromiseFarm(); + const mockPromises = new PromiseFarm(); const fetchFakeItem = (id: number, color: vec3, pos: vec3) => { const c = mockPromises.promiseMe({ pretend: color }); const p = mockPromises.promiseMe({ pretend: pos }); @@ -146,7 +146,9 @@ describe('async cache', () => { // fail one, resolve the other let boom = false; // this little catch represents passing our deep error up to someone smarter: - spies[0].catch(() => (boom = true)); + spies[0].catch(() => { + boom = true; + }); mockPromises.mockResolve(spies[1]); // resolve one first so that we can be sure its value lives in the cache @@ -170,7 +172,7 @@ describe('async cache', () => { it('evicts data after the soft limit is hit', async () => { // each of our tasks requests two chunks of data // the cache has a limit of 10 items (see beforeEach) - let allKeysSoFar: string[] = []; + const allKeysSoFar: string[] = []; for (let i = 0; i < 5; i++) { const { fetchers, id, spies } = fetchFakeItem(i, [255, 0, i], [1, 2 * i, 3 * i]); const toCacheKey = partial(cacheKey, { id }); @@ -200,7 +202,7 @@ describe('async cache', () => { // each of our tasks requests two chunks of data // the cache has a limit of 10 items (see beforeEach) - let allKeysSoFar: string[] = []; + const allKeysSoFar: string[] = []; let reallySlowRequest: Promise; for (let i = 0; i < 6; i++) { const { fetchers, id, spies } = fetchFakeItem(i, [255, 0, i], [1, 2 * i, 3 * i]); @@ -250,7 +252,7 @@ describe('async cache', () => { it('evicts data after the soft limit is hit, while prioritizing Least-recently used entries', async () => { // each of our tasks requests two chunks of data // the cache has a limit of 10 items (see beforeEach) - let allKeysSoFar: string[] = []; + const allKeysSoFar: string[] = []; let first: ReturnType & { toCacheKey: (rq: Columns) => string; }; @@ -302,7 +304,7 @@ describe('async cache', () => { const clr: vec3 = [255, 0, 0]; const { fetchers, id, spies } = fetchTheSameThingTwice(1, clr, [1, 2, 3]); // in this case, we want to test what happens when one cache key is associated with multiple semantic keys: - const toCacheKey = () => `http://blah.channel0`; + const toCacheKey = () => 'http://blah.channel0'; const result = cache.cacheAndUse(fetchers, render, toCacheKey); expect(result).toBeDefined(); @@ -325,7 +327,7 @@ describe('async cache', () => { const clr: vec3 = [255, 0, 0]; const { fetchers, id, spies } = fetchTheSameThingTwiceOnePromise(1, clr, [1, 2, 3]); // in this case, we want to test what happens when one cache key is associated with multiple semantic keys: - const toCacheKey = () => `http://blah.channel0`; + const toCacheKey = () => 'http://blah.channel0'; const result = cache.cacheAndUse(fetchers, render, toCacheKey); expect(result).toBeDefined(); diff --git a/packages/scatterbrain/src/test/render-queue.test.ts b/packages/scatterbrain/src/test/render-queue.test.ts index 37c113a..c730d26 100644 --- a/packages/scatterbrain/src/test/render-queue.test.ts +++ b/packages/scatterbrain/src/test/render-queue.test.ts @@ -1,7 +1,7 @@ -import { beforeEach, describe, expect, it, vi } from 'vitest'; import delay from 'lodash/delay'; -import { beginLongRunningFrame, type NormalStatus } from '../render-queue'; +import { beforeEach, describe, expect, it, vi } from 'vitest'; import { AsyncDataCache } from '../dataset-cache'; +import { type NormalStatus, beginLongRunningFrame } from '../render-queue'; import { fakeFetch } from './test-utils'; type FakeTask = { id: number; color: string }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1cdb73c..5138d2d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,19 +13,16 @@ importers: version: 1.9.4 '@parcel/packager-ts': specifier: 2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/transformer-typescript-types': specifier: 2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(typescript@5.7.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(typescript@5.7.2) buffer: specifier: ^5.5.0||^6.0.0 version: 6.0.3 parcel: specifier: 2.12.0 version: 2.12.0(@swc/helpers@0.5.15)(postcss@8.4.49)(typescript@5.7.2) - prettier: - specifier: 3.3.2 - version: 3.3.2 process: specifier: ^0.11.10 version: 0.11.10 @@ -141,10 +138,10 @@ importers: devDependencies: '@parcel/packager-ts': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(typescript@5.7.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(typescript@5.7.2) '@types/lodash': specifier: ^4.14.202 version: 4.17.14 @@ -162,10 +159,10 @@ importers: devDependencies: '@parcel/packager-ts': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(typescript@5.7.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(typescript@5.7.2) parcel: specifier: 2.12.0 version: 2.12.0(@swc/helpers@0.5.15)(postcss@8.4.49)(typescript@5.7.2) @@ -196,10 +193,10 @@ importers: devDependencies: '@parcel/packager-ts': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(typescript@5.7.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(typescript@5.7.2) '@types/lodash': specifier: ^4.14.202 version: 4.17.14 @@ -224,10 +221,10 @@ importers: devDependencies: '@parcel/packager-ts': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/transformer-typescript-types': specifier: ^2.12.0 - version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(typescript@5.7.2) + version: 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(typescript@5.7.2) '@types/lodash': specifier: ^4.14.202 version: 4.17.14 @@ -1951,11 +1948,6 @@ packages: resolution: {integrity: sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==} engines: {node: '>=12.0.0'} - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} - engines: {node: '>=14'} - hasBin: true - pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2731,73 +2723,69 @@ snapshots: optionalDependencies: '@types/react': 18.3.18 - '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/bundler-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 '@parcel/graph': 3.2.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/cache@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/logger': 2.12.0 '@parcel/utils': 2.12.0 lmdb: 2.8.5 - transitivePeerDependencies: - - '@swc/helpers' '@parcel/codeframe@2.12.0': dependencies: chalk: 4.1.2 - '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/compressor-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/config-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(postcss@8.4.49)(typescript@5.7.2)': dependencies: - '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/bundler-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/compressor-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/core': 2.12.0(@swc/helpers@0.5.15) - '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(postcss@8.4.49)(typescript@5.7.2) - '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/namer-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/optimizer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/optimizer-htmlnano': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(postcss@8.4.49)(typescript@5.7.2) + '@parcel/optimizer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/optimizer-svgo': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/optimizer-swc': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/packager-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/packager-wasm': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/resolver-default': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/runtime-browser-hmr': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/runtime-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/runtime-react-refresh': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/runtime-service-worker': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-babel': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-css': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-html': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-image': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/transformer-js': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) - '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/transformer-json': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-postcss': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-posthtml': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-raw': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-react-refresh-wrap': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/transformer-svg': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@swc/helpers' - cssnano @@ -2812,20 +2800,20 @@ snapshots: '@parcel/core@2.12.0(@swc/helpers@0.5.15)': dependencies: '@mischnic/json-sourcemap': 0.1.1 - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/diagnostic': 2.12.0 '@parcel/events': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/graph': 3.2.0 '@parcel/logger': 2.12.0 '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/profiler': 2.12.0 '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) abortcontroller-polyfill: 1.7.8 base-x: 3.0.10 browserslist: 4.24.3 @@ -2853,7 +2841,7 @@ snapshots: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 '@parcel/watcher': 2.5.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@swc/helpers' @@ -2870,14 +2858,13 @@ snapshots: dependencies: chalk: 4.1.2 - '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/namer-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/node-resolver-core@3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: @@ -2891,10 +2878,10 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/optimizer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.3 @@ -2902,18 +2889,16 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(postcss@8.4.49)(typescript@5.7.2)': + '@parcel/optimizer-htmlnano@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(postcss@8.4.49)(typescript@5.7.2)': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) htmlnano: 2.1.1(postcss@8.4.49)(svgo@2.8.0)(typescript@5.7.2) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - cssnano - postcss - purgecss @@ -2923,31 +2908,28 @@ snapshots: - typescript - uncss - '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/optimizer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - transitivePeerDependencies: - - '@swc/helpers' + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) - '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/optimizer-svgo@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 svgo: 2.8.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/optimizer-swc@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 '@swc/core': 1.10.4(@swc/helpers@0.5.15) @@ -2965,39 +2947,37 @@ snapshots: '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@swc/core': 1.10.4(@swc/helpers@0.5.15) semver: 7.6.3 transitivePeerDependencies: - '@swc/helpers' - '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 lightningcss: 1.28.2 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) @@ -3006,45 +2986,39 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 posthtml: 0.16.6 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-ts@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-ts@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/packager-wasm@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/plugin@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/profiler@2.12.0': dependencies: @@ -3052,79 +3026,71 @@ snapshots: '@parcel/events': 2.12.0 chrome-trace-event: 1.0.4 - '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/reporter-cli@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 chalk: 4.1.2 term-size: 2.2.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/reporter-dev-server@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/reporter-tracer@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 chrome-trace-event: 1.0.4 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/resolver-default@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/node-resolver-core': 3.3.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/runtime-browser-hmr@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/runtime-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/runtime-react-refresh@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 react-error-overlay: 6.0.9 react-refresh: 0.9.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/runtime-service-worker@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/rust@2.12.0': {} @@ -3132,10 +3098,10 @@ snapshots: dependencies: detect-libc: 1.0.3 - '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-babel@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.3 @@ -3144,12 +3110,11 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-css@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 browserslist: 4.24.3 @@ -3157,12 +3122,11 @@ snapshots: nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-html@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -3172,45 +3136,41 @@ snapshots: srcset: 4.0.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-image@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) nullthrows: 1.1.1 - transitivePeerDependencies: - - '@swc/helpers' '@parcel/transformer-js@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/source-map': 2.1.1 '@parcel/utils': 2.12.0 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@swc/helpers': 0.5.15 browserslist: 4.24.3 nullthrows: 1.1.1 regenerator-runtime: 0.13.11 semver: 7.6.3 - '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-json@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) json5: 2.2.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-postcss@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 '@parcel/utils': 2.12.0 clone: 2.1.2 @@ -3219,11 +3179,10 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-posthtml@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -3232,28 +3191,25 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-raw@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-react-refresh-wrap@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 react-refresh: 0.9.0 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/transformer-svg@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/rust': 2.12.0 nullthrows: 1.1.1 posthtml: 0.16.6 @@ -3262,12 +3218,11 @@ snapshots: semver: 7.6.3 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' - '@parcel/transformer-typescript-types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)(typescript@5.7.2)': + '@parcel/transformer-typescript-types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(typescript@5.7.2)': dependencies: '@parcel/diagnostic': 2.12.0 - '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/plugin': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/source-map': 2.1.1 '@parcel/ts-utils': 2.12.0(typescript@5.7.2) '@parcel/utils': 2.12.0 @@ -3275,7 +3230,6 @@ snapshots: typescript: 5.7.2 transitivePeerDependencies: - '@parcel/core' - - '@swc/helpers' '@parcel/ts-utils@2.12.0(typescript@5.7.2)': dependencies: @@ -3284,12 +3238,12 @@ snapshots: '@parcel/types@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': dependencies: - '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/cache': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/diagnostic': 2.12.0 '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/source-map': 2.1.1 - '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/workers': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) utility-types: 3.11.0 transitivePeerDependencies: - '@parcel/core' @@ -3366,7 +3320,7 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.0 '@parcel/watcher-win32-x64': 2.5.0 - '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15)': + '@parcel/workers@2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))': dependencies: '@parcel/core': 2.12.0(@swc/helpers@0.5.15) '@parcel/diagnostic': 2.12.0 @@ -3375,8 +3329,6 @@ snapshots: '@parcel/types': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/utils': 2.12.0 nullthrows: 1.1.1 - transitivePeerDependencies: - - '@swc/helpers' '@popperjs/core@2.11.8': {} @@ -4087,9 +4039,9 @@ snapshots: '@parcel/fs': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) '@parcel/logger': 2.12.0 '@parcel/package-manager': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) - '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15))(@swc/helpers@0.5.15) + '@parcel/reporter-cli': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/reporter-dev-server': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) + '@parcel/reporter-tracer': 2.12.0(@parcel/core@2.12.0(@swc/helpers@0.5.15)) '@parcel/utils': 2.12.0 chalk: 4.1.2 commander: 7.2.0 @@ -4163,8 +4115,6 @@ snapshots: posthtml-parser: 0.11.0 posthtml-render: 3.0.0 - prettier@3.3.2: {} - pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3