diff --git a/apps/haddock3-download/integration-tests/dupheader.spec.ts b/apps/haddock3-download/integration-tests/dupheader.spec.ts index a4a703a..1c98eaa 100644 --- a/apps/haddock3-download/integration-tests/dupheader.spec.ts +++ b/apps/haddock3-download/integration-tests/dupheader.spec.ts @@ -14,7 +14,7 @@ test.describe('given an uploaded archive with a workflow.cfg file with a duplica molecules = [ 'some.pdb' ] - + [caprieval] [caprieval] @@ -23,30 +23,37 @@ test.describe('given an uploaded archive with a workflow.cfg file with a duplica // Upload workflow archive await page.locator('text="Upload" >> input[type="file"]') .setInputFiles({ name: 'workflow.zip', mimeType: 'application/zip', buffer: archive.toBuffer() }) + }) - // Click text=Text - await page.locator('text=Text').click() - + test('it should show uplaoded file', async ({ page }) => { + // Click Files tab + await page.locator('text=Files').click() + // validate file button is present await page.waitForSelector('button:has-text("some.pdb")') }) test('should have both headers and added index number', async ({ page }) => { + // Click Text tab + await page.locator('text=Text').click() + // debug + // await page.pause() + const highlightedCode = await page.locator('#highlightedcode pre') const lines = await highlightedCode.allTextContents() const content = lines.join('\n') const expected = dedent` - run_dir = 'run1' - molecules = [ - 'some.pdb', - ] - + molecules = [ + 'some.pdb', + ] - [caprieval] + run_dir = 'run1' + + [caprieval] - ['caprieval.2'] + ['caprieval.2'] - ` + ` expect(content).toEqual(expected) }) }) diff --git a/apps/haddock3-download/integration-tests/syntaxhighlighter.spec.ts b/apps/haddock3-download/integration-tests/syntaxhighlighter.spec.ts index b195994..59aa63a 100644 --- a/apps/haddock3-download/integration-tests/syntaxhighlighter.spec.ts +++ b/apps/haddock3-download/integration-tests/syntaxhighlighter.spec.ts @@ -3,13 +3,19 @@ import { test, expect } from '@playwright/test' test('Verify that [object Object] bug does not show up (issue #74)', async ({ page }) => { await page.goto('http://localhost:3000') + // debugger + // await page.pause() + // Load the example await page.locator('text=docking-protein-ligand').click() - // Click 'text' and ensure the files appear - await page.locator('text=Text').click() + // validate that file is used + await page.locator('text=Files').click() await page.waitForSelector('button:has-text("data/target.pdb")') + // change to 'text' tab + await page.locator('text=Text').click() + // verify that the [object Object] text does not show up // see https://github.com/i-VRESSE/workflow-builder/issues/74 const highlightedCode = await page.locator('#highlightedcode pre') diff --git a/apps/haddock3-download/integration-tests/topoaamol.spec.ts b/apps/haddock3-download/integration-tests/topoaamol.spec.ts index 5b2a54c..470aa8e 100644 --- a/apps/haddock3-download/integration-tests/topoaamol.spec.ts +++ b/apps/haddock3-download/integration-tests/topoaamol.spec.ts @@ -5,32 +5,38 @@ import { readFile } from 'fs/promises' test.describe('given 1 molecule and a topoaa node', () => { test.beforeEach(async ({ page }) => { await page.goto('http://localhost:3000') + + // Disable autosave + // await page.locator('text=Autosave').click(); + // Click input[type="text"] await page.locator('input[type="text"]').click() // Fill input[type="text"] await page.locator('input[type="text"]').fill('x') // Upload e2a-hpr_1GGR.pdb const file1 = await readFile('./integration-tests/data/e2a-hpr_1GGR.pdb') + + // Click text=Input MoleculesThe input molecules that will be used for docking. >> button + await page.locator('text=Input MoleculesThe input molecules that will be used for docking. >> button').click() await page.locator('text=1* >> input[type="file"]') .setInputFiles({ name: 'e2a-hpr_1GGR.pdb', mimeType: 'chemical/x-pdb', buffer: file1 }) - // Click text=Save - await page.locator('button:has-text("Save")').click() - // Click text=Cancel - await page.locator('button:has-text("Cancel")').click() - // Click button:has-text("topoaa") + + // add topoaa step to workflow await page.locator('button:has-text("topoaa")').click() + // select topoaa step + await page.locator('button:has-text("1. topoaa")').click() // Click #expander4molecule svg await page.locator('#expander4molecule svg').click() // Click #expander4input_molecules svg await page.locator('#expander4input_molecules svg').click() // Click text=Save - await page.locator('button:has-text("Save")').click() - // Click text=Text - await page.locator('text=Text').click() + // await page.locator('button:has-text("Save")').click() }) test('should have "[topoaa.mol1]" header', async ({ page }) => { + // select Text tab + await page.locator('text=Text').click() await expectHighlightedCodeToContain(page, '[topoaa.mol1]') }) @@ -41,7 +47,7 @@ test.describe('given 1 molecule and a topoaa node', () => { // It is important to call waitForEvent before click to set up waiting. page.waitForEvent('download'), // Triggers the download. - page.locator('text=Download archive').click() + page.locator('text=Download').click() ]) // wait for download to complete path = await download.path() ?? '' @@ -64,10 +70,16 @@ test.describe('given 1 molecule and a topoaa node', () => { await page.locator('text="Upload" >> input[type="file"]') .setInputFiles({ name: 'workflow.zip', mimeType: 'application/zip', buffer: file1 }) + // ensure file is uploaded + await page.locator('text=Files').click() await page.waitForSelector('button:has-text("e2a-hpr_1GGR.pdb")') }) test('should have "[topoaa.mol1]" header', async ({ page }) => { + // debugger + // await page.pause() + // change to Text tab + await page.locator('text=Text').click() await expectHighlightedCodeToContain(page, '[topoaa.mol1]') }) }) diff --git a/apps/haddock3-download/src/App.css b/apps/haddock3-download/src/App.css index 272122c..540fc9f 100644 --- a/apps/haddock3-download/src/App.css +++ b/apps/haddock3-download/src/App.css @@ -10,7 +10,7 @@ grid-template-areas: "head head head" "catalog workflow node" "catalog workflow-actions node-actions"; - grid-template-columns: min-content minmax(12rem,1fr) minmax(20rem,2fr); + grid-template-columns: min-content minmax(19rem,1fr) minmax(20rem,2fr); grid-template-rows: auto 1fr auto; column-gap: 1rem; } @@ -91,6 +91,7 @@ div[role="button"], display: flex; gap: 1rem; padding: 1rem 0rem; + align-items: baseline; } /* Show panel section is clickable */ diff --git a/apps/haddock3-download/src/App.tsx b/apps/haddock3-download/src/App.tsx index 7b34644..86f8e61 100644 --- a/apps/haddock3-download/src/App.tsx +++ b/apps/haddock3-download/src/App.tsx @@ -9,40 +9,75 @@ import { WorkflowDownloadButton, WorkflowPanel, WorkflowUploadButton, - Wrapper + Wrapper, + useAutosaveValue, + useSetAutosave } from '@i-vresse/wb-core' import '@i-vresse/wb-form/dist/index.css' import './App.css' -function App (): JSX.Element { +function AutosaveManagement (): JSX.Element { + const autosave = useAutosaveValue() + const setAutosave = useSetAutosave() + return ( - -
- -
- - - - - - - - - - - - - - - +
+ { + setAutosave(!autosave) + }} + /> + +
+ ) +} + +function PageContent (): JSX.Element { + const autosave = useAutosaveValue() + + return ( +
+ +
+ + + + + + + + + - - - - -
+ + +
+ + + {/* show form actions if autosave is OFF */} + {!autosave ? : null} + +
+ ) +} + +function App (): JSX.Element { + return ( + + ) } diff --git a/apps/haddock3-galaxy/src/App.tsx b/apps/haddock3-galaxy/src/App.tsx index 824be30..446fe80 100644 --- a/apps/haddock3-galaxy/src/App.tsx +++ b/apps/haddock3-galaxy/src/App.tsx @@ -7,14 +7,13 @@ import { NodePanel, CatalogPicker, WorkflowClear, - WorkflowPanel, - WorkflowUploadButton + WorkflowPanel } from '@i-vresse/wb-core' import './App.css' import '@i-vresse/wb-form/dist/index.css' import { WorkflowSubmitButton } from './WorkflowSubmitButton' import originalCatalogIndexURL from '../public/catalog/index.json' -import { useCatalog, useSetCatalog, useWorkflow } from '@i-vresse/wb-core/dist/store' +import { useAutosaveValue, useCatalog, useSetAutosave, useSetCatalog, useWorkflow } from '@i-vresse/wb-core/dist/store' import { useEffect } from 'react' import { toast } from 'react-toastify' @@ -26,9 +25,37 @@ const catalogIndexURL = `data:application/json,${JSON.stringify( // reverse to load guru catalog by default (as it now is first entry) so example zip file is compliant )}` +function AutosaveManagement (): JSX.Element { + const autosave = useAutosaveValue() + const setAutosave = useSetAutosave() + + return ( +
+ { + setAutosave(!autosave) + }} + /> + +
+ ) +} + function App (): JSX.Element { // Examples URLS need to prepended baseUrl const catalog = useCatalog() + const autosave = useAutosaveValue() const setCatalog = useSetCatalog() const { loadWorkflowArchive } = useWorkflow() @@ -45,7 +72,6 @@ function App (): JSX.Element { })) if (touched) { setCatalog({ ...catalog, examples }) - // Load from dataset addDatasetToBuilder(loadWorkflowArchive).catch((e) => console.error(e)) } @@ -64,18 +90,15 @@ function App (): JSX.Element { - + + + - - - - - - - + {/* show form actions if autosave is OFF */} + {!autosave ? : null} ) diff --git a/apps/haddock3-submit/src/App.tsx b/apps/haddock3-submit/src/App.tsx index ea47e87..46dcd8d 100644 --- a/apps/haddock3-submit/src/App.tsx +++ b/apps/haddock3-submit/src/App.tsx @@ -7,40 +7,66 @@ import { NodePanel, CatalogPicker, WorkflowClear, - Wrapper, - WorkflowPanel + WorkflowPanel, + useAutosaveValue, + useSetAutosave } from '@i-vresse/wb-core' import './App.css' import '@i-vresse/wb-form/dist/index.css' import { WorkflowSubmitButton } from './WorkflowSubmitButton' +function AutosaveManagement (): JSX.Element { + const autosave = useAutosaveValue() + const setAutosave = useSetAutosave() + + return ( +
+ { + setAutosave(!autosave) + }} + /> + +
+ ) +} + function App (): JSX.Element { + const autosave = useAutosaveValue() return ( - -
- -
- - - - - - - - - - - - - +
+ +
+ + + + + + + + - - - - -
- + + +
+ + + {/* show form actions if autosave is OFF */} + {!autosave ? : null} + +
) } diff --git a/apps/haddock3-submit/src/main.tsx b/apps/haddock3-submit/src/main.tsx index 606a3cf..92b31ef 100644 --- a/apps/haddock3-submit/src/main.tsx +++ b/apps/haddock3-submit/src/main.tsx @@ -1,11 +1,14 @@ import React from 'react' import ReactDOM from 'react-dom' +import { Wrapper } from '@i-vresse/wb-core' import './index.css' import App from './App' ReactDOM.render( - + + + , document.getElementById('root') ) diff --git a/apps/kitchensink/src/App.tsx b/apps/kitchensink/src/App.tsx index aa7e2ce..2166a05 100644 --- a/apps/kitchensink/src/App.tsx +++ b/apps/kitchensink/src/App.tsx @@ -10,7 +10,7 @@ import { WorkflowPanel, WorkflowUploadButton } from '@i-vresse/wb-core' -import { useSetCatalog } from '@i-vresse/wb-core/dist/store' +import { useAutosaveValue, useSetAutosave, useSetCatalog } from '@i-vresse/wb-core/dist/store' import { prepareCatalog } from '@i-vresse/wb-core/dist/catalog' import 'bootstrap/dist/css/bootstrap.min.css' @@ -18,8 +18,37 @@ import '@i-vresse/wb-form/dist/index.css' import './App.css' import kitchensinkCatalog from './kitchensink.json' +function AutosaveManagement (): JSX.Element { + const autosave = useAutosaveValue() + const setAutosave = useSetAutosave() + + return ( +
+ { + setAutosave(!autosave) + }} + /> + +
+ ) +} + function App (): JSX.Element { const setCatalog = useSetCatalog() + const autosave = useAutosaveValue() + useEffect(() => { const catalog = prepareCatalog(kitchensinkCatalog) setCatalog(catalog) @@ -34,19 +63,24 @@ function App (): JSX.Element { + + + + {/* show form actions if autosave is OFF */} + {!autosave ? : null} - + {/* - + */} ) } diff --git a/packages/core/package.json b/packages/core/package.json index abcbb7d..3710eb8 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -55,7 +55,7 @@ "c8": "^7.11.0", "jsdom": "^20.0.0", "ts-dedent": "^2.2.0", - "ts-standard": "^11.0.0", + "ts-standard": "^12.0.2", "tsup": "^6.1.3", "typedoc": "^0.23.7", "vite": "^3.0.4", diff --git a/packages/core/src/CatalogCategory.tsx b/packages/core/src/CatalogCategory.tsx index dc726fb..b810c4b 100644 --- a/packages/core/src/CatalogCategory.tsx +++ b/packages/core/src/CatalogCategory.tsx @@ -9,17 +9,16 @@ export const CatalogCategory = ({ name, description, collapsed: initiallyCollaps const style = { // TODO On https://developer.mozilla.org/en-US/docs/Web/CSS/list-style-type // disclosure-open/closed are said to be experimental, find how much compatibility there is. - listStyleType: collapsed ? 'disclosure-closed' : 'disclosure-open' + listStyleType: collapsed ? 'disclosure-closed' : 'disclosure-open', + cursor: 'pointer' // utf failed in chrome // listStyleType: collapsed ? '⏷' : '⏵' } return (
  • { - if (e.target === e.currentTarget) { - // only toggle when list marker is clicked - return setCollapsed((c) => !c) - } + style={style} + onClick={(e) => { + setCollapsed((c) => !c) }} > {name} diff --git a/packages/core/src/CatalogNode.tsx b/packages/core/src/CatalogNode.tsx index 76506ac..70e0a34 100644 --- a/packages/core/src/CatalogNode.tsx +++ b/packages/core/src/CatalogNode.tsx @@ -22,7 +22,12 @@ export const CatalogNode = ({ id, label }: ICatalogNode): JSX.Element => { {...attributes} title={label} className='btn btn-light btn-sm btn-catalog-node' - onClick={() => addNodeToWorkflow(id)} + onClick={(e) => { + // prevent bubbling click even to parent which toggles the group + e.stopPropagation() + // add node to workflow + addNodeToWorkflow(id) + }} > {id}
    ): JSX.Element { + return ( + + + + + + ) +} diff --git a/packages/core/src/Example.tsx b/packages/core/src/Example.tsx index 8568a51..35db799 100644 --- a/packages/core/src/Example.tsx +++ b/packages/core/src/Example.tsx @@ -30,7 +30,7 @@ export const Example = ({ name, workflow }: IProps): JSX.Element => {
  • )} diff --git a/packages/core/src/FormActions.stories.tsx b/packages/core/src/FormActions.stories.tsx index f06f895..aa860e6 100644 --- a/packages/core/src/FormActions.stories.tsx +++ b/packages/core/src/FormActions.stories.tsx @@ -23,9 +23,9 @@ export const NothingSelected: ComponentStory = () => { export const GlobalParametersSelected: ComponentStory = () => { - const { toggleGlobalEdit } = useWorkflow() + const { setEditingGlobal } = useWorkflow() const submitFormRefSetter = useSetActiveSubmitButton() - useEffect(toggleGlobalEdit, []) + useEffect(() => setEditingGlobal(true), []) return ( <> - + ) } diff --git a/packages/core/src/VisualNode.tsx b/packages/core/src/VisualNode.tsx index a7c08d5..064e010 100644 --- a/packages/core/src/VisualNode.tsx +++ b/packages/core/src/VisualNode.tsx @@ -4,9 +4,14 @@ import { BsX } from 'react-icons/bs' import { CSS } from '@dnd-kit/utilities' import { useSortable } from '@dnd-kit/sortable' -import { useDraggingWorkflowNodeState, useSelectNodeIndex, useWorkflow } from './store' +import { + useDraggingWorkflowNodeState, useSelectNodeIndex, + useNodeHasErrorsValue, useWorkflow +} from './store' import { GripVertical } from './GripVertical' +import ErrorIcon from './ErrorIcon' + interface IProp { type: string index: number @@ -14,6 +19,7 @@ interface IProp { } export const VisualNode = ({ type, index, id }: IProp): JSX.Element => { + const nodeHasErrors = useNodeHasErrorsValue(id) const selectedNodeIndex = useSelectNodeIndex() const { selectNode, deleteNode } = useWorkflow() const draggingWorkflowNodeCode = useDraggingWorkflowNodeState()[0] @@ -36,20 +42,30 @@ export const VisualNode = ({ type, index, id }: IProp): JSX.Element => { const selectedStyle = selectedNodeIndex === index ? { fontWeight: 'bold' } : {} + function onNodeChange (): void { + // change node only if different + if (selectedNodeIndex !== index) { + selectNode(index) + } + } + // TODO after clicking node the active styling is not removed unless you activate another element return (
    ) +} +function AppendZone (): JSX.Element { const appendZoneStyle: CSSProperties = { padding: '1rem', textAlign: 'center' } - const appendZone = ( + return (
    Append node to workflow by clicking node in catalog or by dragging node from catalog to here.
    ) +} - let listStyle: CSSProperties = { lineHeight: '2.5em', height: '100%' } - if (draggingWorkflowNodeCode !== null || draggingCatalogNode !== null || nodes.length === 0) { - listStyle = { - ...listStyle, - borderStyle: 'dashed', - borderWidth: 1 - } +function NodeList ({ showBorder = false }: { showBorder: boolean }): JSX.Element { + const { nodes } = useWorkflow() + + const listStyle: CSSProperties = { + lineHeight: '2.5em', + height: '100%' + } + // add dashed border + if (showBorder) { + listStyle.borderStyle = 'dashed' + listStyle.borderWidth = 1 } - const nodeList = ( + + return (
    {nodes.map((node, i) => ( ))} - {nodes.length === 0 ? appendZone : <>} + {nodes.length === 0 ? : null}
    ) +} +export const VisualPanel = (): JSX.Element => { + const { nodes } = useWorkflow() + const draggingCatalogNode = useDraggingCatalogNodeState()[0] + const draggingWorkflowNodeCode = useDraggingWorkflowNodeState()[0] + const draggingWorkflowNode = nodes.find( + (n) => n.id === draggingWorkflowNodeCode + ) const sortableItems = nodes.map((n) => n.id) if (draggingCatalogNode !== null) { sortableItems.push(draggingCatalogNode.toString()) } const { setNodeRef } = useDroppable({ id: 'catalog-dropzone' }) + return (
    + - {nodeList} + {/* {nodeList} */} + {draggingCatalogNode !== null diff --git a/packages/core/src/WorkflowDownloadButton.tsx b/packages/core/src/WorkflowDownloadButton.tsx index b82072e..b982d18 100644 --- a/packages/core/src/WorkflowDownloadButton.tsx +++ b/packages/core/src/WorkflowDownloadButton.tsx @@ -1,9 +1,10 @@ import React from 'react' import { toast } from 'react-toastify' -import { useWorkflow } from './store' +import { useWorkflow, useWorkflowHasErrors } from './store' export const WorkflowDownloadButton = (): JSX.Element => { const { save } = useWorkflow() + const hasErrors = useWorkflowHasErrors() async function downloadWorkflow (): Promise { await toast.promise( @@ -22,6 +23,6 @@ export const WorkflowDownloadButton = (): JSX.Element => { } return ( - + ) } diff --git a/packages/core/src/WorkflowPanel.tsx b/packages/core/src/WorkflowPanel.tsx index a830a6e..8c63ce0 100644 --- a/packages/core/src/WorkflowPanel.tsx +++ b/packages/core/src/WorkflowPanel.tsx @@ -1,22 +1,32 @@ import React, { PropsWithChildren, useState } from 'react' import { TextPanel } from './TextPanel' import { VisualPanel } from './VisualPanel' -import { useWorkflow } from './store' +import { FilesList } from './FilesList' -type ITab = 'text' | 'visual' +type ITab = 'text' | 'visual' | 'files' + +/** + * Return selected tab content + * @param tab ITab + * @returns JSX.Element + */ +function SelectedTab ({ tab }: { tab: ITab }): JSX.Element { + switch (tab) { + case 'text': + return + case 'files': + return + // visual panel is default + default: + return + } +} /** * Panel which renders the workflow. - * - * Used selected the node of which edit its parameters. */ export const WorkflowPanel = ({ children }: PropsWithChildren<{}>): JSX.Element => { const [tab, setTab] = useState('visual') - const { toggleGlobalEdit } = useWorkflow() - - const selectedPanel = tab === 'visual' ? : - const visualTabStyle = tab === 'visual' ? 'nav-link active' : 'nav-link' - const textTabStyle = tab === 'text' ? 'nav-link active' : 'nav-link' return (
    ): JSX.Element > Workflow
    - {children}
    -
      +
        +
      • + +
      • - +
      • - +
      - {selectedPanel} +
    ) } diff --git a/packages/core/src/WorkflowUploadButton.tsx b/packages/core/src/WorkflowUploadButton.tsx index 439f6bf..2be9ba5 100644 --- a/packages/core/src/WorkflowUploadButton.tsx +++ b/packages/core/src/WorkflowUploadButton.tsx @@ -1,6 +1,6 @@ import React, { useRef } from 'react' import { UpdateOptions, toast } from 'react-toastify' -import { useWorkflow } from './store' +import { useClearErrors, useWorkflow } from './store' import { ValidationError, flattenValidationErrors } from './validate' function ErrorsList ({ error }: { error: ValidationError }): JSX.Element { @@ -19,6 +19,7 @@ function ErrorsList ({ error }: { error: ValidationError }): JSX.Element { export const WorkflowUploadButton = (): JSX.Element => { const uploadRef = useRef(null) const { loadWorkflowArchive } = useWorkflow() + const { clearErrors } = useClearErrors() async function uploadWorkflow ( event: React.ChangeEvent @@ -29,6 +30,8 @@ export const WorkflowUploadButton = (): JSX.Element => { const file = event.target.files[0] const url = URL.createObjectURL(file) const toastId = toast.loading('Loading workfow ...') + // clear all form errors before loading different configuration + clearErrors() try { await loadWorkflowArchive(url) toast.update(toastId, { @@ -63,22 +66,32 @@ export const WorkflowUploadButton = (): JSX.Element => { } } finally { URL.revokeObjectURL(url) + if (uploadRef.current != null) { + // remove value in order to trigger on change event + // when uploading same file for the second time + uploadRef.current.value = '' + } } } return ( ) diff --git a/packages/core/src/index.tsx b/packages/core/src/index.tsx index 6c498c9..24af497 100644 --- a/packages/core/src/index.tsx +++ b/packages/core/src/index.tsx @@ -9,3 +9,4 @@ export { WorkflowUploadButton } from './WorkflowUploadButton' export { WorkflowClear } from './WorkflowClear' export { FormActions } from './FormActions' export { CatalogPicker } from './CatalogPicker' +export { useSetAutosave, useAutosaveValue, useWorkflowHasErrors } from './store' diff --git a/packages/core/src/molecule/addMoleculeValidation.test.ts b/packages/core/src/molecule/addMoleculeValidation.test.ts index fe2ed41..10ef3ba 100644 --- a/packages/core/src/molecule/addMoleculeValidation.test.ts +++ b/packages/core/src/molecule/addMoleculeValidation.test.ts @@ -1,6 +1,7 @@ import { UiSchema } from '@rjsf/core' import { JSONSchema7 } from 'json-schema' -import { beforeEach, describe, expect, it } from 'vitest' +import { beforeEach, describe, expect, it, beforeAll } from 'vitest' +import { init } from '@i-vresse/pdbtbx-ts' import { JSONSchema7WithMaxItemsFrom } from '../resolveMaxItemsFrom' import { IFiles, IParameters } from '../types' @@ -11,6 +12,10 @@ import { } from './addMoleculeValidation' import { MoleculeInfo } from './parse' +beforeAll(async () => { + await init() +}) + describe('parseMolecules()', () => { describe('given bad global schema or parameters', () => { const unchangedCases: Array< @@ -53,8 +58,8 @@ describe('parseMolecules()', () => { ] it.each(unchangedCases)( 'given %s should find zero files', - async (_description, globalSchema, globalParameters, files) => { - const actual = await parseMolecules( + (_description, globalSchema, globalParameters, files) => { + const actual = parseMolecules( globalParameters, globalSchema, files @@ -70,7 +75,7 @@ describe('addMoleculeValidation()', () => { let moleculeInfos: MoleculeInfo[] let moleculesPropName: string | undefined - beforeEach(async () => { + beforeEach(() => { const globalParameters = { molecules: ['a.pdb'] } @@ -94,14 +99,14 @@ describe('addMoleculeValidation()', () => { const files = { 'a.pdb': file }; - [moleculeInfos, moleculesPropName] = await parseMolecules( + [moleculeInfos, moleculesPropName] = parseMolecules( globalParameters, globalSchema, files ) }) - it('should return schema unchanged', async () => { + it('should return schema unchanged', () => { const itemsSchema: JSONSchema7 = { type: 'string' } @@ -115,7 +120,7 @@ describe('addMoleculeValidation()', () => { prop1: propSchema } } - const actual = await addMoleculeValidation( + const actual = addMoleculeValidation( schema, moleculeInfos, moleculesPropName @@ -124,7 +129,7 @@ describe('addMoleculeValidation()', () => { }) describe('in array of array of object with prop with format:chain', () => { - it('should set enum to [A]', async () => { + it('should set enum to [A]', () => { const propSchema: JSONSchema7WithMaxItemsFrom = { type: 'array', maxItemsFrom: 'molecules', @@ -147,7 +152,7 @@ describe('addMoleculeValidation()', () => { prop1: propSchema } } - const actual = await addMoleculeValidation( + const actual = addMoleculeValidation( schema, moleculeInfos, moleculesPropName @@ -182,7 +187,7 @@ describe('addMoleculeValidation()', () => { }) describe('in array of array of object with prop with format:residue', () => { - it('should set enum to [-3]', async () => { + it('should set enum to [-3]', () => { const propSchema: JSONSchema7WithMaxItemsFrom = { type: 'array', maxItemsFrom: 'molecules', @@ -205,7 +210,7 @@ describe('addMoleculeValidation()', () => { prop1: propSchema } } - const actual = await addMoleculeValidation( + const actual = addMoleculeValidation( schema, moleculeInfos, moleculesPropName @@ -241,7 +246,7 @@ describe('addMoleculeValidation()', () => { // Test for topoaa mol prop describe('in array of object of array of scalar with format:residue', () => { - it('should set enum to [-3]', async () => { + it('should set enum to [-3]', () => { const propSchema: JSONSchema7WithMaxItemsFrom = { type: 'array', maxItemsFrom: 'molecules', @@ -270,7 +275,7 @@ describe('addMoleculeValidation()', () => { } } } - const actual = await addMoleculeValidation( + const actual = addMoleculeValidation( schema, moleculeInfos, moleculesPropName @@ -311,7 +316,7 @@ describe('addMoleculeValidation()', () => { }) describe('in grouped object of array of array of object with prop with format:residue', () => { - it('should set enum to [-3]', async () => { + it('should set enum to [-3]', () => { const propSchema: JSONSchema7WithMaxItemsFrom = { type: 'array', maxItemsFrom: 'molecules', @@ -339,7 +344,7 @@ describe('addMoleculeValidation()', () => { } } } - const actual = await addMoleculeValidation( + const actual = addMoleculeValidation( schema, moleculeInfos, moleculesPropName @@ -464,7 +469,7 @@ describe('addMoleculeValidation()', () => { }) describe('given array of array of object with props with format:chain, format:residue and no format', () => { - it('should make items an array and set enums', async () => { + it('should make items an array and set enums', () => { const propSchema: JSONSchema7WithMaxItemsFrom = { type: 'array', maxItemsFrom: 'molecules', @@ -494,7 +499,7 @@ describe('addMoleculeValidation()', () => { prop1: propSchema } } - const actual = await addMoleculeValidation( + const actual = addMoleculeValidation( schema, moleculeInfos, moleculesPropName @@ -562,9 +567,10 @@ describe('addMoleculeValidation()', () => { let moleculeInfos: MoleculeInfo[] let moleculesPropName: string | undefined - beforeEach(async () => { + beforeEach(() => { const globalParameters = { - molecules: ['a.pdb'] + // ensure unique name due to local cache + molecules: ['xyz.pdb'] } const globalSchema: JSONSchema7 = { type: 'object', @@ -583,9 +589,10 @@ describe('addMoleculeValidation()', () => { 'data:text/plain;name=a.pdb;base64,' + Buffer.from(body).toString('base64') const files = { - 'a.pdb': file + // ensure unique name due to local cache + 'xyz.pdb': file }; - [moleculeInfos, moleculesPropName] = await parseMolecules( + [moleculeInfos, moleculesPropName] = parseMolecules( globalParameters, globalSchema, files @@ -596,7 +603,7 @@ describe('addMoleculeValidation()', () => { it.each([ ['residue', 'number'], ['chain', 'string'] - ] as const)('should make items an array and not set enums for %s format', async (moleculeformat, moleculeType) => { + ] as const)('should make items an array and not set enums for %s format', (moleculeformat, moleculeType) => { const propSchema: JSONSchema7WithMaxItemsFrom = { type: 'array', maxItemsFrom: 'molecules', @@ -619,7 +626,7 @@ describe('addMoleculeValidation()', () => { prop1: propSchema } } - const actual = await addMoleculeValidation( + const actual = addMoleculeValidation( schema, moleculeInfos, moleculesPropName diff --git a/packages/core/src/molecule/addMoleculeValidation.ts b/packages/core/src/molecule/addMoleculeValidation.ts index 69bde66..78b107f 100644 --- a/packages/core/src/molecule/addMoleculeValidation.ts +++ b/packages/core/src/molecule/addMoleculeValidation.ts @@ -6,12 +6,17 @@ import { IFiles, IParameters } from '../types' import { MoleculeInfo, parsePDB } from './parse' import { UiSchema, utils } from '@rjsf/core' -// TODO can be quite expensive to parse big molecules, should try to use memoization -export async function parseMolecules ( +// save in memory parsed molecule info +interface parsedMoleculeInfoProps { + [key: string]: Omit +} +const parsedMoleculeInfo: parsedMoleculeInfoProps = {} + +export function parseMolecules ( globalParameters: IParameters, globalSchema: JSONSchema7, files: IFiles -): Promise<[MoleculeInfo[], string | undefined]> { +): [MoleculeInfo[], string | undefined] { if (globalSchema.properties === undefined) { return [[], undefined] } @@ -33,20 +38,38 @@ export async function parseMolecules ( if (!Array.isArray(moleculeFilePaths)) { return [[], undefined] } + // find file of molecule path // TODO check whether files are actually PDB files using uiSchema.molecules..items.ui:options.accept: .pdb - const moleculeFiles = moleculeFilePaths.map((p) => files[p]) + const moleculeFiles = moleculeFilePaths + // ignore undefined entries (invalid entries) + .filter(file => file !== undefined) + .map((p) => files[p]) + // parse file - const moleculeInfos = await Promise.all( - moleculeFiles.map(async (f, i) => { - const body = dataURL2content(f) - const info = await parsePDB(body) + const moleculeInfos = moleculeFiles.map((f, i) => { + // debugger + // check if already parsed + const path = moleculeFilePaths[i] + if (Object.hasOwn(parsedMoleculeInfo, path)) { + // console.log("from memory...",path) return { - ...info, - path: moleculeFilePaths[i] + ...parsedMoleculeInfo[path], + path } - }) - ) + } + // else parse the info + const body = dataURL2content(f) + const info = parsePDB(body) + // save info in memory + parsedMoleculeInfo[path] = { ...info } + // return new info from memory + return { + ...parsedMoleculeInfo[path], + path + } + }) + return [moleculeInfos, moleculesPropName] } @@ -63,9 +86,8 @@ function walkSchemaForMoleculeFormats ( const entries = Object.entries(newSchema.properties).map(([k, v]) => { const s = v as JSONSchema7WithMaxItemsFrom const isArrayWithItems = s.type === 'array' && 'items' in s - const isObjectWithUserNames = + const isObjectWitAdditionalProps = s.type === 'object' && - s.additionalProperties && typeof s.additionalProperties === 'object' && !('properties' in s) if (isArrayWithItems && s.maxItemsFrom === moleculesPropName) { @@ -212,7 +234,7 @@ function walkSchemaForMoleculeFormats ( } } } else if ( - isObjectWithUserNames === true && + isObjectWitAdditionalProps && s.maxPropertiesFrom === moleculesPropName ) { // TODO implement diff --git a/packages/core/src/molecule/parse.test.ts b/packages/core/src/molecule/parse.test.ts index e197838..2a41818 100644 --- a/packages/core/src/molecule/parse.test.ts +++ b/packages/core/src/molecule/parse.test.ts @@ -1,7 +1,12 @@ -import { describe, expect, it } from 'vitest' +import { describe, expect, it, beforeAll } from 'vitest' +import { init } from '@i-vresse/pdbtbx-ts' import dedent from 'ts-dedent' import { parsePDB, MoleculeInfo } from './parse' +beforeAll(async () => { + await init() +}) + describe('parsePDB', () => { const cases: Array<[string, string, Omit]> = [ [ diff --git a/packages/core/src/molecule/parse.ts b/packages/core/src/molecule/parse.ts index 4b84998..170ca95 100644 --- a/packages/core/src/molecule/parse.ts +++ b/packages/core/src/molecule/parse.ts @@ -15,9 +15,15 @@ export interface MoleculeInfo { residueSequenceNumbers: number[] } -export async function parsePDB (content: string): Promise> { - // TODO do init only once - await init() +// use init only once +// NOTE! when init is in parseDB function is causes undesired page reloads +// when using autosave function. It results in the layout shift and lost +// of focus on the input element user is editing. +init() + .then(() => console.log('pdbtx...initialized')) + .catch(e => console.error(e.message)) + +export function parsePDB (content: string): Omit { try { const info = open_pdb(content) if (info.warnings.length > 0) { diff --git a/packages/core/src/store.test.tsx b/packages/core/src/store.test.tsx index 690ab65..b51a2be 100644 --- a/packages/core/src/store.test.tsx +++ b/packages/core/src/store.test.tsx @@ -1,4 +1,4 @@ -import { afterEach, describe, expect, it } from 'vitest' +import { afterEach, describe, expect, it, vi } from 'vitest' import { renderHook, act, cleanup } from '@testing-library/react-hooks' import { useGlobalFormData, @@ -17,6 +17,16 @@ import { prepareCatalog } from './catalog' afterEach(cleanup) +async function flushPromisesAndTimers (): Promise { + return await act( + async () => + await new Promise((resolve) => { + setTimeout(resolve, 100) + vi.runAllTimers() + }) + ) +} + describe('useSelectNodeIndex()', () => { it('should have -1 as initial value', () => { const { result } = renderHook(useSelectNodeIndex, { @@ -28,17 +38,10 @@ describe('useSelectNodeIndex()', () => { }) describe('useText()', () => { - describe('given empty catalog, no nodes and no global parameters', () => { - it('should return empty string', () => { - const { result } = renderHook(useText, { - wrapper: RecoilRoot - }) - expect(result.current).toEqual('') - }) - }) - describe('given catalog and a global parameter', () => { - it('should return global parameter as TOML formatted string', () => { + it('should return global parameter as TOML formatted string', async () => { + vi.useFakeTimers() + const { result } = renderHook( () => { // Custom hook to return hook under test and other hooks to fill global state @@ -57,6 +60,8 @@ describe('useText()', () => { } ) + await flushPromisesAndTimers() + act(() => { // Fill global state const catalog = { @@ -82,6 +87,8 @@ describe('useText()', () => { }) }) + await flushPromisesAndTimers() + const expected = ` parameterX = 'some value' ` @@ -92,10 +99,11 @@ parameterX = 'some value' describe('useSelectedCatalogNode()', () => { describe('given catalog and workflow with single node', () => { - it('should return catalog of selected node', () => { + it('should return catalog of selected node', async () => { + vi.useFakeTimers() + const { result } = renderHook( () => { - // TODO be able to use hooks with have async code const catalogNode = useSelectedCatalogNode() const setCatalog = useSetCatalog() const { addNodeToWorkflow, selectNode } = useWorkflow() @@ -153,6 +161,8 @@ describe('useSelectedCatalogNode()', () => { c.selectNode(0) }) + await flushPromisesAndTimers() + const expected = { type: 'object', properties: { diff --git a/packages/core/src/store.ts b/packages/core/src/store.ts index 753bb69..be8a150 100644 --- a/packages/core/src/store.ts +++ b/packages/core/src/store.ts @@ -24,13 +24,14 @@ import { IWorkflowNode, IFiles, IParameters, - ICatalogNode + ICatalogNode, + NodeErrorsType } from './types' import { catalog2tomlSchemas, workflow2tomltext } from './toml' import { dropUnusedFiles, loadWorkflowArchive, - emptyParams, + emptyGlobalParams, clearFiles } from './workflow' import { @@ -209,9 +210,16 @@ function parameters2formData ( const globalFormDataState = selector({ key: 'globalFormData', get: ({ get }) => { - const parameters = get(globalParametersState) const files = get(filesState) const catalog = get(catalogState) + let parameters = get(globalParametersState) + + if (Object.keys(parameters)?.length === 0 && + Object.keys(catalog?.global?.schema)?.length > 0) { + // get initial values only if global schema is loaded + // and parameters is empty object?s + parameters = emptyGlobalParams(catalog.global.schema) + } const formData = parameters2formData( parameters, files, @@ -227,8 +235,10 @@ const globalFormDataState = selector({ const newFiles = { ...files } const catalog = get(catalogState) let parameters: IParameters + // debugger if (formData instanceof DefaultValue) { - parameters = {} + // get default/inital state + parameters = emptyGlobalParams(catalog.global.schema) } else { parameters = formData2parameters( formData, @@ -259,6 +269,9 @@ const selectedNodeState = selector({ get: ({ get }) => { const index = get(selectedNodeIndexState) const nodes = get(workflowNodesState) + // console.group('selectedNodeState') + // console.log('index...', index) + // console.groupEnd() if (index in nodes) { return nodes[index] } @@ -323,8 +336,17 @@ const selectedNodeFormDataState = selector({ if (catalogNode === undefined) { return } + let formErrors = [] + if (Object.hasOwn(formData, 'formErrors')) { + // NOTE! 2024-04-11 + // extract form errors info from ajv validator + formErrors = (formData as any)?.formErrors + // remove hasErrors from formData because it is not part of "real" data + delete (formData as any).formErrors + } const files = get(filesState) const newFiles = { ...files } + // debugger let parameters: IParameters if (formData instanceof DefaultValue) { parameters = {} @@ -337,13 +359,26 @@ const selectedNodeFormDataState = selector({ ) } const nodes = get(workflowNodesState) + const errors = get(nodeErrors) const selectedNodeIndex = get(selectedNodeIndexState) - const newNode = { ...nodes[selectedNodeIndex], parameters } + const newNode = { + ...nodes[selectedNodeIndex], + parameters + } const newNodes = replaceItemAtIndex(nodes, selectedNodeIndex, newNode) const global = get(globalParametersState) const newUsedFiles = dropUnusedFiles(global, newNodes, newFiles) set(workflowNodesState, newNodes) set(filesState, newUsedFiles) + // save errors status of each node + const newErrors = { + ...errors, + [newNode.id]: { + hasErrors: formErrors?.length > 0, + errors: formErrors + } + } + set(nodeErrors, newErrors) } }) @@ -359,16 +394,19 @@ export function useSelectedNodeFormData (): [ const moleculeInfosState = selector<[MoleculeInfo[], string | undefined]>({ key: 'moleculeInfos', - get: async ({ get }) => { + // NOTE 2024-05-15! making get async causes page reload + get: ({ get }) => { const catalog = get(catalogState) const globalSchema = catalog.global.schema const globalParameters = get(globalParametersState) const files = get(filesState) - return await parseMolecules( + const moleculeInfo = parseMolecules( globalParameters, globalSchema, files ) + // debugger + return moleculeInfo } }) @@ -377,26 +415,44 @@ const selectedNodeFormSchemaState = selector({ get: ({ get }) => { const catalogNode = get(selectedCatalogNodeState) const globalParameters = get(globalParametersState) - if ( - catalogNode === undefined || - catalogNode.formSchema === undefined - ) { - return undefined - } - const schemaWithMaxItems = resolveMaxItemsFrom( - catalogNode.formSchema, - globalParameters - ) - const [moleculeInfos, moleculesPropName] = get(moleculeInfosState) - const schemaWithMolInfo = addMoleculeValidation( - schemaWithMaxItems, - moleculeInfos, - moleculesPropName - ) + const info = get(moleculeInfosState) + const schemaWithMolInfo = enrichSchemaWithMolInfo(catalogNode, globalParameters, info) return schemaWithMolInfo } }) +function enrichSchemaWithMolInfo (catalogNode: ICatalogNode | undefined, globalParameters: IParameters, info: [MoleculeInfo[], string | undefined]): JSONSchema7 | undefined { + if ( + catalogNode === undefined || + catalogNode.formSchema === undefined + ) { + return undefined + } + const schemaWithMaxItems = resolveMaxItemsFrom( + catalogNode.formSchema, + globalParameters + ) + const [moleculeInfos, moleculesPropName] = info + const schemaWithMolInfo = addMoleculeValidation( + schemaWithMaxItems, + moleculeInfos, + moleculesPropName + ) + return schemaWithMolInfo +} + +function emptyNodeParams (catalog: ICatalog, globalParameters: IParameters, info: [MoleculeInfo[], string | undefined], nodeType: string): IParameters { + const catalogNode = catalog.nodes.find((n) => n.id === nodeType) + if (catalogNode === undefined) { + return {} + } + const schemaWithMolInfo = enrichSchemaWithMolInfo(catalogNode, globalParameters, info) + if (schemaWithMolInfo === undefined) { + return emptyGlobalParams(catalogNode.schema) + } + return emptyGlobalParams(schemaWithMolInfo) +} + /** * Hook to get JSON schema for currently selected node that can be used in a rjsf form. */ @@ -437,7 +493,8 @@ export interface UseWorkflow { */ editingGlobal: boolean global: IParameters - toggleGlobalEdit: () => void + setEditingGlobal: (editing: boolean) => void + selectGlobalEdit: () => void /** * @param nodeType A {@link types!ICatalogNode.id | catalog node id} */ @@ -497,13 +554,17 @@ export function useWorkflow (): UseWorkflow { ) const [files, setFiles] = useRecoilState(filesState) const catalog = useCatalog() + // clear errors method + const { clearErrors } = useClearErrors() + const moleculeInfos = useRecoilValue(moleculeInfosState) return { nodes, editingGlobal, global, - toggleGlobalEdit () { - setEditingGlobal(!editingGlobal) + setEditingGlobal, + selectGlobalEdit () { + setEditingGlobal(true) setSelectedNodeIndex(-1) }, addNodeToWorkflowAt (nodeType: string, targetId: string) { @@ -515,24 +576,26 @@ export function useWorkflow (): UseWorkflow { ] return moveItem(newNodes, newNodes.length - 1, targetIndex) }) - if (selectedNodeIndex === -1 && !editingGlobal) { - setSelectedNodeIndex(targetIndex) - } + // debugger + setSelectedNodeIndex(targetIndex) }, addNodeToWorkflow (nodeType: string) { + const parameters = emptyNodeParams(catalog, global, moleculeInfos, nodeType) setNodes((oldNodes) => [ ...oldNodes, - { type: nodeType, parameters: {}, id: nanoid() } + { type: nodeType, parameters, id: nanoid() } ]) - if (selectedNodeIndex === -1 && !editingGlobal) { - setSelectedNodeIndex(nodes.length) - } + setSelectedNodeIndex(nodes.length) }, selectNode: (nodeIndex: number) => { + // console.group('selectNode') + // console.log('nodeIndex...', nodeIndex) + // console.groupEnd() + + setSelectedNodeIndex(nodeIndex) if (editingGlobal) { setEditingGlobal(false) } - setSelectedNodeIndex(nodeIndex) }, deleteNode (nodeIndex: number) { if (selectedNodeIndex !== -1) { @@ -550,11 +613,16 @@ export function useWorkflow (): UseWorkflow { clearNodeSelection: () => setSelectedNodeIndex(-1), clear () { const blankNodes = removeAllItems(nodes) - const blankGlobals = emptyParams() + const blankGlobals = emptyGlobalParams(catalog.global.schema) const blankFiles = clearFiles() setNodes(blankNodes) setGlobal(blankGlobals) setFiles(blankFiles) + // preselect global + setEditingGlobal(true) + setSelectedNodeIndex(-1) + // clear errors + clearErrors() }, async loadWorkflowArchive (archiveURL: string) { const r = await loadWorkflowArchive(archiveURL, catalog) @@ -591,3 +659,102 @@ export function useText (): string { const catalog = useCatalog() return workflow2tomltext(nodes, global, catalog2tomlSchemas(catalog)) } + +/** + * Autosave state and hooks + */ +const autosave = atom({ + key: 'autosave', + default: true +}) + +export function useAutosave (): [boolean, SetterOrUpdater] { + return useRecoilState(autosave) +} + +export function useSetAutosave (): SetterOrUpdater { + return useSetRecoilState(autosave) +} + +export function useAutosaveValue (): boolean { + return useRecoilValue(autosave) +} + +const nodeErrors = atom<{ + [key: string]: NodeErrorsType +}>({ + key: 'nodeErrors', + default: {} +}) + +export function useNodeHasErrors (): [{ + [key: string]: NodeErrorsType +}, SetterOrUpdater<{ + [key: string]: NodeErrorsType +}>] { + return useRecoilState(nodeErrors) +} + +export function useSetNodeErrors (): (key: string, value: NodeErrorsType) => void { + const [errorNodes, setErrorNodes] = useNodeHasErrors() + // return function to update single node state + return function setNodeHasErrors (key: string, value: NodeErrorsType) { + // debugger + if (errorNodes[key] !== value) { + const newValid = { + ...errorNodes, + [key]: value + } + setErrorNodes(newValid) + } + } +} + +export function useNodeHasErrorsValue (key: string): boolean { + const nodes = useRecoilValue(nodeErrors) + + // console.group("useNodeHasErrorsValue") + // console.log("key...", key) + // console.log("nodes...", nodes) + // console.groupEnd() + + // debugger + if (Object.hasOwn(nodes, key)) { + return nodes[key].hasErrors + } else { + return false + } +} + +export function useClearErrors (): { + clearErrors: () => void +} { + const setErrors = useSetRecoilState(nodeErrors) + // set to empty object + function clearErrors (): void { + setErrors({}) + } + return { + clearErrors + } +} + +export function useWorkflowHasErrors (): boolean { + const errors = useRecoilValue(nodeErrors) + const keys = Object.keys(errors) + + // at least one node has error + const errorKey = keys.find(key => { + return errors[key]?.hasErrors + }) + // if errorKey is found it has string type + const hasErrors = typeof errorKey === 'string' + + // console.group('useWorkflowHasErrors') + // console.log('errors...', errors) + // console.log('errorKey...', errorKey) + // console.log('hasErrors...', hasErrors) + // console.groupEnd() + + return hasErrors +} diff --git a/packages/core/src/toml.ts b/packages/core/src/toml.ts index 491981a..b6e36b2 100644 --- a/packages/core/src/toml.ts +++ b/packages/core/src/toml.ts @@ -80,13 +80,19 @@ function parameters2toml (parameters: IParameters, tomlSchema: TomlObjectSchema) const d2 = parameters2toml(d, nestedTomlSchema as TomlObjectSchema) return Section(d2) }) + } else if (isArray) { + // debugger + // clear array of undefined entries + tomledParameters[k] = v.filter(item => item !== undefined) } else if (isObject(v) && isSectioned) { tomledParameters[k] = Section(v as any) } else if (isObject(v) && isIndexed) { Object.entries(v).forEach(([k2, v2]) => { - tomledParameters[`${k}_${k2}`] = v2 + const v3 = Array.isArray(v2) ? v2.filter(item => item !== undefined) : v2 + tomledParameters[`${k}_${k2}`] = v3 }) - } else { + } else if (v !== undefined) { + // avoid params with undefined value tomledParameters[k] = v } }) diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 978be7f..367dad1 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -1,5 +1,5 @@ import { JSONSchema7 } from 'json-schema' -import { UiSchema } from '@rjsf/core' +import { UiSchema, AjvError } from '@rjsf/core' /** * Array of tuples. @@ -88,3 +88,8 @@ export interface IWorkflowSchema { global: IGlobal nodes: ICatalogNode[] } + +export interface NodeErrorsType { + hasErrors: boolean + errors: AjvError[] +} diff --git a/packages/core/src/validate.test.ts b/packages/core/src/validate.test.ts index 1db5170..235a221 100644 --- a/packages/core/src/validate.test.ts +++ b/packages/core/src/validate.test.ts @@ -312,7 +312,8 @@ describe('validateWorkflow()', () => { properties: { chain: { type: 'string', - format: 'chain' + format: 'chain', + enum: ['A'] } } } @@ -381,6 +382,7 @@ describe('validateWorkflow()', () => { } ] } + const errors = await validateWorkflow(workflow, schemas, files) const expected = [{ @@ -388,9 +390,7 @@ describe('validateWorkflow()', () => { keyword: 'enum', message: 'must be equal to one of the allowed values', params: { - allowedValues: [ - 'A' - ] + allowedValues: ['A'] }, schemaPath: '#/properties/seg/items/0/items/properties/chain/enum', workflowPath: 'nodes[0]' diff --git a/packages/core/src/validate.ts b/packages/core/src/validate.ts index 296c9ae..18fcb26 100644 --- a/packages/core/src/validate.ts +++ b/packages/core/src/validate.ts @@ -81,7 +81,7 @@ async function validateNodeFactory ( ): Promise< (value: IWorkflowNode, index: number, array: IWorkflowNode[]) => Errors > { - const [moleculeInfos, moleculesPropName] = await parseMolecules( + const [moleculeInfos, moleculesPropName] = parseMolecules( globalParameters, globalSchema, files diff --git a/packages/core/src/workflow.ts b/packages/core/src/workflow.ts index 97768bf..09fc2c5 100644 --- a/packages/core/src/workflow.ts +++ b/packages/core/src/workflow.ts @@ -1,3 +1,4 @@ +import { JSONSchema7 } from 'json-schema' import { readArchive } from './archive' import { parseWorkflow } from './toml' import { ICatalog, IFiles, IParameters, IWorkflow, IWorkflowNode } from './types' @@ -46,8 +47,22 @@ export function dropUnusedFiles (global: IParameters, nodes: IWorkflowNode[], fi return newFiles } -export function emptyParams (): IParameters { - return {} +export function emptyGlobalParams (schema: JSONSchema7): IParameters { + const parameters: IParameters = {} + for (const key in schema.properties) { + const propSchema = schema.properties[key] + if (typeof propSchema !== 'boolean' && propSchema.type === 'array') { + if (propSchema.maxItems !== undefined && propSchema.format !== 'moleculefilepaths' && ( + typeof propSchema.items === 'object' || + (Array.isArray(propSchema.items) && propSchema.items[0].type === 'object') + )) { + parameters[key] = new Array(propSchema.maxItems).fill({}) + } else { + parameters[key] = [] + } + } + } + return parameters } export function clearFiles (): IFiles { diff --git a/packages/form/package.json b/packages/form/package.json index f8b8eca..c167907 100644 --- a/packages/form/package.json +++ b/packages/form/package.json @@ -57,7 +57,7 @@ "babel-loader": "^8.2.5", "jsdom": "^20.0.0", "postcss": "^8.4.14", - "ts-standard": "^11.0.0", + "ts-standard": "^12.0.2", "tsup": "^6.1.3", "typedoc": "^0.23.7", "vitest": "^0.20.2" diff --git a/packages/form/src/ArrayFieldTemplate.tsx b/packages/form/src/ArrayFieldTemplate.tsx index 6052b20..647a07a 100644 --- a/packages/form/src/ArrayFieldTemplate.tsx +++ b/packages/form/src/ArrayFieldTemplate.tsx @@ -279,11 +279,10 @@ const DefaultNormalArrayFieldTemplate = (props: ArrayFieldTemplateProps) => { props.items.map((p) => DefaultArrayItem({ ...p, indexable, indexLookup }))} {props.canAdd && ( - + - {' '} ( ( const CaretDownSquare = (): JSX.Element => ( ( ) +// Error icon shown in error (comes from bootstrap.css) +const ErrorIcon = (): JSX.Element => { + return ( + + + + + + ) +} + const CollapsedIcon = CaretDownSquare const ExpandedIcon = CaretUpSquare @@ -46,40 +64,48 @@ export const CollapsibleField = (props: FieldProps): JSX.Element => { : true const [collapsed, setCollapsed] = useState(initialCollapsed) const title = extractTitle(props, uiOptions) - const expanderId = props.id ?? `expander4${props.name.replaceAll(' ', '_')}` // TODO find rjsf func to get more stable id + const expanderId = props.id ?? `expander4${props.name.replaceAll(' ', '_')}` // TODO find rjsf func to get more stable - // To render button + name use styling from https://github.com/rjsf-team/react-jsonschema-form/blob/master/packages/bootstrap-4/src/TitleField/TitleField.tsx - // Card styling from bootstrap 4.6 https://getbootstrap.com/docs/4.6/components/card/ - if (collapsed) { - return ( -
    -
    -
    setCollapsed(false)} - id={expanderId} - > - - {title} -
    -
    -
    - ) - } + // console.group('CollapsibleField') + // console.log('errorSchema...', props.errorSchema) + // console.groupEnd() + + // check for errors in the field. On error we show title in red and warning icon + const hasError = Object.keys(props.errorSchema).length > 0 - // TitleField inside the ObjectField is not rendered when there is no title or name - const oprops = dropTitle(props) return (
    -
    -
    setCollapsed(true)} id={expanderId}> - - {title} +
    { + setCollapsed(!collapsed) + }} + > + {/* icon */} + {collapsed ? : } + {/* title */} +
    + {title}
    + {/* error icon */} + {hasError ? : null}
    -
    - -
    + {/* show content when not collapsed */} + {/* TitleField inside the ObjectField is not rendered when there is no title or name */} + {!collapsed ?
    : null}
    ) } diff --git a/yarn.lock b/yarn.lock index 04d6bc0..f310720 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1909,6 +1909,24 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.10.0 + resolution: "@eslint-community/regexpp@npm:4.10.0" + checksum: 2a6e345429ea8382aaaf3a61f865cae16ed44d31ca917910033c02dc00d505d939f10b81e079fa14d43b51499c640138e153b7e40743c4c094d9df97d4e56f7b + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^0.4.3": version: 0.4.3 resolution: "@eslint/eslintrc@npm:0.4.3" @@ -1943,6 +1961,30 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: 10957c7592b20ca0089262d8c2a8accbad14b4f6507e35416c32ee6b4dbf9cad67dfb77096bbd405405e9ada2b107f3797fe94362e1c55e0b09d6e90dd149127 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.0": + version: 8.57.0 + resolution: "@eslint/js@npm:8.57.0" + checksum: 315dc65b0e9893e2bff139bddace7ea601ad77ed47b4550e73da8c9c2d2766c7a575c3cddf17ef85b8fd6a36ff34f91729d0dcca56e73ca887c10df91a41b0bb + languageName: node + linkType: hard + "@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" @@ -1950,6 +1992,17 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.11.14": + version: 0.11.14 + resolution: "@humanwhocodes/config-array@npm:0.11.14" + dependencies: + "@humanwhocodes/object-schema": ^2.0.2 + debug: ^4.3.1 + minimatch: ^3.0.5 + checksum: 861ccce9eaea5de19546653bccf75bf09fe878bc39c3aab00aeee2d2a0e654516adad38dd1098aab5e3af0145bbcbf3f309bdf4d964f8dab9dcd5834ae4c02f2 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.5.0": version: 0.5.0 resolution: "@humanwhocodes/config-array@npm:0.5.0" @@ -1972,6 +2025,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + "@humanwhocodes/object-schema@npm:^1.2.0, @humanwhocodes/object-schema@npm:^1.2.1": version: 1.2.1 resolution: "@humanwhocodes/object-schema@npm:1.2.1" @@ -1979,6 +2039,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/object-schema@npm:^2.0.2": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 + languageName: node + linkType: hard + "@i-vresse/haddock3-config-builder-download@workspace:apps/haddock3-download": version: 0.0.0-use.local resolution: "@i-vresse/haddock3-config-builder-download@workspace:apps/haddock3-download" @@ -2091,7 +2158,7 @@ __metadata: react-toastify: ^8.1.0 recoil: ^0.5.2 ts-dedent: ^2.2.0 - ts-standard: ^11.0.0 + ts-standard: ^12.0.2 tsup: ^6.1.3 typedoc: ^0.23.7 vite: ^3.0.4 @@ -2127,7 +2194,7 @@ __metadata: postcss: ^8.4.14 react-bootstrap: ^1 react-icons: ^3.10.0 - ts-standard: ^11.0.0 + ts-standard: ^12.0.2 tsup: ^6.1.3 typedoc: ^0.23.7 vitest: ^0.20.2 @@ -2386,7 +2453,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -4013,6 +4080,13 @@ __metadata: languageName: node linkType: hard +"@types/json-schema@npm:^7.0.9": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 + languageName: node + linkType: hard + "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -4179,6 +4253,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.3.12": + version: 7.5.8 + resolution: "@types/semver@npm:7.5.8" + checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 + languageName: node + linkType: hard + "@types/source-list-map@npm:*": version: 0.1.2 resolution: "@types/source-list-map@npm:0.1.2" @@ -4304,6 +4385,30 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:^5.0.0": + version: 5.62.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" + dependencies: + "@eslint-community/regexpp": ^4.4.0 + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/type-utils": 5.62.0 + "@typescript-eslint/utils": 5.62.0 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.0 + natural-compare-lite: ^1.4.0 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1 + languageName: node + linkType: hard + "@typescript-eslint/experimental-utils@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/experimental-utils@npm:4.33.0" @@ -4337,6 +4442,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:^5.0.0": + version: 5.62.0 + resolution: "@typescript-eslint/parser@npm:5.62.0" + dependencies: + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/typescript-estree": 5.62.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/scope-manager@npm:4.33.0" @@ -4347,6 +4469,33 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/type-utils@npm:5.62.0" + dependencies: + "@typescript-eslint/typescript-estree": 5.62.0 + "@typescript-eslint/utils": 5.62.0 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/types@npm:4.33.0" @@ -4354,6 +4503,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/typescript-estree@npm:4.33.0" @@ -4372,6 +4528,42 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/typescript-estree": 5.62.0 + eslint-scope: ^5.1.1 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:4.33.0": version: 4.33.0 resolution: "@typescript-eslint/visitor-keys@npm:4.33.0" @@ -4382,6 +4574,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + eslint-visitor-keys: ^3.3.0 + checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 4f656b7b4672f2ce6e272f2427d8b0824ed11546a601d8d5412b9d7704e83db38a8d9f402ecdf2b9063fc164af842ad0ec4a55819f621ed7e7ea4d1efcc74524 + languageName: node + linkType: hard + "@vitejs/plugin-react@npm:^2.0.0": version: 2.0.0 resolution: "@vitejs/plugin-react@npm:2.0.0" @@ -4845,6 +5054,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.9.0": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c + languageName: node + linkType: hard + "address@npm:^1.0.1": version: 1.2.0 resolution: "address@npm:1.2.0" @@ -5164,6 +5382,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.5 + is-array-buffer: ^3.0.4 + checksum: 53524e08f40867f6a9f35318fafe467c32e45e9c682ba67b11943e167344d2febc0f6977a17e699b05699e805c3e8f073d876f8bbf1b559ed494ad2cd0fae09e + languageName: node + linkType: hard + "array-find-index@npm:^1.0.1": version: 1.0.2 resolution: "array-find-index@npm:1.0.2" @@ -5191,6 +5419,20 @@ __metadata: languageName: node linkType: hard +"array-includes@npm:^3.1.7": + version: 3.1.8 + resolution: "array-includes@npm:3.1.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 + is-string: ^1.0.7 + checksum: eb39ba5530f64e4d8acab39297c11c1c5be2a4ea188ab2b34aba5fb7224d918f77717a9d57a3e2900caaa8440e59431bdaf5c974d5212ef65d97f132e38e2d91 + languageName: node + linkType: hard + "array-union@npm:^1.0.2": version: 1.0.2 resolution: "array-union@npm:1.0.2" @@ -5221,6 +5463,34 @@ __metadata: languageName: node linkType: hard +"array.prototype.findlast@npm:^1.2.4": + version: 1.2.5 + resolution: "array.prototype.findlast@npm:1.2.5" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-shim-unscopables: ^1.0.2 + checksum: 83ce4ad95bae07f136d316f5a7c3a5b911ac3296c3476abe60225bc4a17938bf37541972fcc37dd5adbc99cbb9c928c70bbbfc1c1ce549d41a415144030bb446 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.3": + version: 1.2.5 + resolution: "array.prototype.findlastindex@npm:1.2.5" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-shim-unscopables: ^1.0.2 + checksum: 2c81cff2a75deb95bf1ed89b6f5f2bfbfb882211e3b7cc59c3d6b87df774cd9d6b36949a8ae39ac476e092c1d4a4905f5ee11a86a456abb10f35f8211ae4e710 + languageName: node + linkType: hard + "array.prototype.flat@npm:^1.2.1, array.prototype.flat@npm:^1.2.5": version: 1.3.0 resolution: "array.prototype.flat@npm:1.3.0" @@ -5233,6 +5503,18 @@ __metadata: languageName: node linkType: hard +"array.prototype.flat@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b + languageName: node + linkType: hard + "array.prototype.flatmap@npm:^1.2.1, array.prototype.flatmap@npm:^1.3.0": version: 1.3.0 resolution: "array.prototype.flatmap@npm:1.3.0" @@ -5245,6 +5527,18 @@ __metadata: languageName: node linkType: hard +"array.prototype.flatmap@npm:^1.3.2": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 + languageName: node + linkType: hard + "array.prototype.map@npm:^1.0.4": version: 1.0.4 resolution: "array.prototype.map@npm:1.0.4" @@ -5271,6 +5565,47 @@ __metadata: languageName: node linkType: hard +"array.prototype.toreversed@npm:^1.1.2": + version: 1.1.2 + resolution: "array.prototype.toreversed@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 58598193426282155297bedf950dc8d464624a0d81659822fb73124286688644cb7e0e4927a07f3ab2daaeb6617b647736cc3a5e6ca7ade5bb8e573b284e6240 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.3": + version: 1.1.3 + resolution: "array.prototype.tosorted@npm:1.1.3" + dependencies: + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.1.0 + es-shim-unscopables: ^1.0.2 + checksum: 555e8808086bbde9e634c5dc5a8c0a2f1773075447b43b2fa76ab4f94f4e90f416d2a4f881024e1ce1a2931614caf76cd6b408af901c9d7cd13061d0d268f5af + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + call-bind: ^1.0.5 + define-properties: ^1.2.1 + es-abstract: ^1.22.3 + es-errors: ^1.2.1 + get-intrinsic: ^1.2.3 + is-array-buffer: ^3.0.4 + is-shared-array-buffer: ^1.0.2 + checksum: 352259cba534dcdd969c92ab002efd2ba5025b2e3b9bead3973150edbdf0696c629d7f4b3f061c5931511e8207bdc2306da614703c820b45dabce39e3daf7e3e + languageName: node + linkType: hard + "arrify@npm:^2.0.1": version: 2.0.1 resolution: "arrify@npm:2.0.1" @@ -5384,6 +5719,15 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: ^1.0.0 + checksum: 1aa3ffbfe6578276996de660848b6e95669d9a95ad149e3dd0c0cda77db6ee1dbd9d1dd723b65b6d277b882dd0c4b91a654ae9d3cf9e1254b7e93e4908d78fd3 + languageName: node + linkType: hard + "babel-loader@npm:^8.0.0, babel-loader@npm:^8.2.5": version: 8.2.5 resolution: "babel-loader@npm:8.2.5" @@ -5872,6 +6216,15 @@ __metadata: languageName: node linkType: hard +"builtins@npm:^5.0.1": + version: 5.1.0 + resolution: "builtins@npm:5.1.0" + dependencies: + semver: ^7.0.0 + checksum: 76327fa85b8e253b26e52f79988148013ea742691b4ab15f7228ebee47dd757832da308c9d4e4fc89763a1773e3f25a9836fff6315df85c7c6c72190436bf11d + languageName: node + linkType: hard + "bundle-require@npm:^3.0.2": version: 3.0.4 resolution: "bundle-require@npm:3.0.4" @@ -6028,6 +6381,19 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + set-function-length: ^1.2.1 + checksum: 295c0c62b90dd6522e6db3b0ab1ce26bdf9e7404215bda13cfee25b626b5ff1a7761324d58d38b1ef1607fc65aca2d06e44d2e18d0dfc6c14b465b00d8660029 + languageName: node + linkType: hard + "call-me-maybe@npm:^1.0.1": version: 1.0.1 resolution: "call-me-maybe@npm:1.0.1" @@ -6917,6 +7283,39 @@ __metadata: languageName: node linkType: hard +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: ce24348f3c6231223b216da92e7e6a57a12b4af81a23f27eff8feabdf06acfb16c00639c8b705ca4d167f761cfc756e27e5f065d0a1f840c10b907fdaf8b988c + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: dbb3200edcb7c1ef0d68979834f81d64fd8cab2f7691b3a4c6b97e67f22182f3ec2c8602efd7b76997b55af6ff8bce485829c1feda4fa2165a6b71fb7baa4269 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-data-view: ^1.0.1 + checksum: 7f0bf8720b7414ca719eedf1846aeec392f2054d7af707c5dc9a753cc77eb8625f067fa901e0b5127e831f9da9056138d894b9c2be79c27a21f6db5824f009c2 + languageName: node + linkType: hard + "debug@npm:2.6.9, debug@npm:^2.2.0, debug@npm:^2.3.3, debug@npm:^2.6.0, debug@npm:^2.6.9": version: 2.6.9 resolution: "debug@npm:2.6.9" @@ -7011,6 +7410,17 @@ __metadata: languageName: node linkType: hard +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + gopd: ^1.0.1 + checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b + languageName: node + linkType: hard + "define-lazy-prop@npm:^2.0.0": version: 2.0.0 resolution: "define-lazy-prop@npm:2.0.0" @@ -7028,6 +7438,17 @@ __metadata: languageName: node linkType: hard +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 + languageName: node + linkType: hard + "define-property@npm:^0.2.5": version: 0.2.5 resolution: "define-property@npm:0.2.5" @@ -7526,6 +7947,60 @@ __metadata: languageName: node linkType: hard +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.1, es-abstract@npm:^1.23.2, es-abstract@npm:^1.23.3": + version: 1.23.3 + resolution: "es-abstract@npm:1.23.3" + dependencies: + array-buffer-byte-length: ^1.0.1 + arraybuffer.prototype.slice: ^1.0.3 + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + data-view-buffer: ^1.0.1 + data-view-byte-length: ^1.0.1 + data-view-byte-offset: ^1.0.0 + es-define-property: ^1.0.0 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + es-set-tostringtag: ^2.0.3 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.4 + get-symbol-description: ^1.0.2 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + hasown: ^2.0.2 + internal-slot: ^1.0.7 + is-array-buffer: ^3.0.4 + is-callable: ^1.2.7 + is-data-view: ^1.0.1 + is-negative-zero: ^2.0.3 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.3 + is-string: ^1.0.7 + is-typed-array: ^1.1.13 + is-weakref: ^1.0.2 + object-inspect: ^1.13.1 + object-keys: ^1.1.1 + object.assign: ^4.1.5 + regexp.prototype.flags: ^1.5.2 + safe-array-concat: ^1.1.2 + safe-regex-test: ^1.0.3 + string.prototype.trim: ^1.2.9 + string.prototype.trimend: ^1.0.8 + string.prototype.trimstart: ^1.0.8 + typed-array-buffer: ^1.0.2 + typed-array-byte-length: ^1.0.1 + typed-array-byte-offset: ^1.0.2 + typed-array-length: ^1.0.6 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.15 + checksum: f840cf161224252512f9527306b57117192696571e07920f777cb893454e32999206198b4f075516112af6459daca282826d1735c450528470356d09eff3a9ae + languageName: node + linkType: hard + "es-array-method-boxes-properly@npm:^1.0.0": version: 1.0.0 resolution: "es-array-method-boxes-properly@npm:1.0.0" @@ -7533,6 +8008,22 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: ^1.2.4 + checksum: f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.1.0, es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 + languageName: node + linkType: hard + "es-get-iterator@npm:^1.0.2": version: 1.1.2 resolution: "es-get-iterator@npm:1.1.2" @@ -7549,6 +8040,28 @@ __metadata: languageName: node linkType: hard +"es-iterator-helpers@npm:^1.0.17": + version: 1.0.19 + resolution: "es-iterator-helpers@npm:1.0.19" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.3 + es-errors: ^1.3.0 + es-set-tostringtag: ^2.0.3 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + globalthis: ^1.0.3 + has-property-descriptors: ^1.0.2 + has-proto: ^1.0.3 + has-symbols: ^1.0.3 + internal-slot: ^1.0.7 + iterator.prototype: ^1.1.2 + safe-array-concat: ^1.1.2 + checksum: 7ae112b88359fbaf4b9d7d1d1358ae57c5138768c57ba3a8fb930393662653b0512bfd7917c15890d1471577fb012fee8b73b4465e59b331739e6ee94f961683 + languageName: node + linkType: hard + "es-module-lexer@npm:^0.9.0, es-module-lexer@npm:^0.9.3": version: 0.9.3 resolution: "es-module-lexer@npm:0.9.3" @@ -7556,6 +8069,26 @@ __metadata: languageName: node linkType: hard +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: ^1.3.0 + checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: ^1.2.4 + has-tostringtag: ^1.0.2 + hasown: ^2.0.1 + checksum: 7227fa48a41c0ce83e0377b11130d324ac797390688135b8da5c28994c0165be8b252e15cd1de41e1325e5a5412511586960213e88f9ab4a5e7d028895db5129 + languageName: node + linkType: hard + "es-shim-unscopables@npm:^1.0.0": version: 1.0.0 resolution: "es-shim-unscopables@npm:1.0.0" @@ -7565,6 +8098,15 @@ __metadata: languageName: node linkType: hard +"es-shim-unscopables@npm:^1.0.2": + version: 1.0.2 + resolution: "es-shim-unscopables@npm:1.0.2" + dependencies: + hasown: ^2.0.0 + checksum: 432bd527c62065da09ed1d37a3f8e623c423683285e6188108286f4a1e8e164a5bcbfbc0051557c7d14633cd2a41ce24c7048e6bbb66a985413fd32f1be72626 + languageName: node + linkType: hard + "es-to-primitive@npm:^1.2.1": version: 1.2.1 resolution: "es-to-primitive@npm:1.2.1" @@ -7858,6 +8400,16 @@ __metadata: languageName: node linkType: hard +"eslint-config-standard-jsx@npm:^11.0.0": + version: 11.0.0 + resolution: "eslint-config-standard-jsx@npm:11.0.0" + peerDependencies: + eslint: ^8.8.0 + eslint-plugin-react: ^7.28.0 + checksum: cc9e24b6f3289ac0ae1ca3ed1a6afdea4516471055b752d0e3ed863d7b0e711d290ee00d5d4ba33f2b3329303789e1ace705c9452c9ddce58187aebfb7f8d364 + languageName: node + linkType: hard + "eslint-config-standard-with-typescript@npm:^21.0.1": version: 21.0.1 resolution: "eslint-config-standard-with-typescript@npm:21.0.1" @@ -7875,6 +8427,35 @@ __metadata: languageName: node linkType: hard +"eslint-config-standard-with-typescript@npm:^23.0.0": + version: 23.0.0 + resolution: "eslint-config-standard-with-typescript@npm:23.0.0" + dependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint-config-standard: 17.0.0 + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: ^15.0.0 + eslint-plugin-promise: ^6.0.0 + typescript: "*" + checksum: a6bc6758e3e203721cfa38a6e5e1437b38016aa72bf2e2855581fa65c0cf96531a3433a3625703a3740c10e9d654c08a8d8b6cc6688b3e8b48259a9390a2fcd7 + languageName: node + linkType: hard + +"eslint-config-standard@npm:17.0.0": + version: 17.0.0 + resolution: "eslint-config-standard@npm:17.0.0" + peerDependencies: + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: ^15.0.0 + eslint-plugin-promise: ^6.0.0 + checksum: dc0ed51e186fd963ff2c0819d33ef580afce11b11036cbcf5e74427e26e514c2b1be96b8ffe74fd2fd00263554a0d49cc873fcf76f17c3dfdba614b45d7fd7da + languageName: node + linkType: hard + "eslint-config-standard@npm:^16.0.0, eslint-config-standard@npm:^16.0.3": version: 16.0.3 resolution: "eslint-config-standard@npm:16.0.3" @@ -7897,6 +8478,17 @@ __metadata: languageName: node linkType: hard +"eslint-import-resolver-node@npm:^0.3.9": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: ^3.2.7 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 + languageName: node + linkType: hard + "eslint-module-utils@npm:^2.7.3": version: 2.7.3 resolution: "eslint-module-utils@npm:2.7.3" @@ -7907,6 +8499,18 @@ __metadata: languageName: node linkType: hard +"eslint-module-utils@npm:^2.8.0": + version: 2.8.1 + resolution: "eslint-module-utils@npm:2.8.1" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 3cecd99b6baf45ffc269167da0f95dcb75e5aa67b93d73a3bab63e2a7eedd9cdd6f188eed048e2f57c1b77db82c9cbf2adac20b512fa70e597d863dd3720170d + languageName: node + linkType: hard + "eslint-plugin-es@npm:^3.0.0": version: 3.0.1 resolution: "eslint-plugin-es@npm:3.0.1" @@ -7919,6 +8523,18 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-es@npm:^4.1.0": + version: 4.1.0 + resolution: "eslint-plugin-es@npm:4.1.0" + dependencies: + eslint-utils: ^2.0.0 + regexpp: ^3.0.0 + peerDependencies: + eslint: ">=4.19.1" + checksum: 26b87a216d3625612b1d3ca8653ac8a1d261046d2a973bb0eb2759070267d2bfb0509051facdeb5ae03dc8dfb51a434be23aff7309a752ca901d637da535677f + languageName: node + linkType: hard + "eslint-plugin-import@npm:^2.23.4": version: 2.26.0 resolution: "eslint-plugin-import@npm:2.26.0" @@ -7942,6 +8558,51 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-import@npm:^2.25.2": + version: 2.29.1 + resolution: "eslint-plugin-import@npm:2.29.1" + dependencies: + array-includes: ^3.1.7 + array.prototype.findlastindex: ^1.2.3 + array.prototype.flat: ^1.3.2 + array.prototype.flatmap: ^1.3.2 + debug: ^3.2.7 + doctrine: ^2.1.0 + eslint-import-resolver-node: ^0.3.9 + eslint-module-utils: ^2.8.0 + hasown: ^2.0.0 + is-core-module: ^2.13.1 + is-glob: ^4.0.3 + minimatch: ^3.1.2 + object.fromentries: ^2.0.7 + object.groupby: ^1.0.1 + object.values: ^1.1.7 + semver: ^6.3.1 + tsconfig-paths: ^3.15.0 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: e65159aef808136d26d029b71c8c6e4cb5c628e65e5de77f1eb4c13a379315ae55c9c3afa847f43f4ff9df7e54515c77ffc6489c6a6f81f7dd7359267577468c + languageName: node + linkType: hard + +"eslint-plugin-n@npm:^15.0.0": + version: 15.7.0 + resolution: "eslint-plugin-n@npm:15.7.0" + dependencies: + builtins: ^5.0.1 + eslint-plugin-es: ^4.1.0 + eslint-utils: ^3.0.0 + ignore: ^5.1.1 + is-core-module: ^2.11.0 + minimatch: ^3.1.2 + resolve: ^1.22.1 + semver: ^7.3.8 + peerDependencies: + eslint: ">=7.0.0" + checksum: cfbcc67e62adf27712afdeadf13223cb9717f95d4af8442056d9d4c97a8b88af76b7969f75deaac26fa98481023d6b7c9e43a28909e7f0468f40b3024b7bcfae + languageName: node + linkType: hard + "eslint-plugin-node@npm:^11.1.0": version: 11.1.0 resolution: "eslint-plugin-node@npm:11.1.0" @@ -7967,6 +8628,15 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-promise@npm:^6.0.0": + version: 6.1.1 + resolution: "eslint-plugin-promise@npm:6.1.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 46b9a4f79dae5539987922afc27cc17cbccdecf4f0ba19c0ccbf911b0e31853e9f39d9959eefb9637461b52772afa1a482f1f87ff16c1ba38bdb6fcf21897e9a + languageName: node + linkType: hard + "eslint-plugin-react@npm:^7.24.0": version: 7.30.1 resolution: "eslint-plugin-react@npm:7.30.1" @@ -7991,6 +8661,34 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react@npm:^7.28.0": + version: 7.34.1 + resolution: "eslint-plugin-react@npm:7.34.1" + dependencies: + array-includes: ^3.1.7 + array.prototype.findlast: ^1.2.4 + array.prototype.flatmap: ^1.3.2 + array.prototype.toreversed: ^1.1.2 + array.prototype.tosorted: ^1.1.3 + doctrine: ^2.1.0 + es-iterator-helpers: ^1.0.17 + estraverse: ^5.3.0 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + minimatch: ^3.1.2 + object.entries: ^1.1.7 + object.fromentries: ^2.0.7 + object.hasown: ^1.1.3 + object.values: ^1.1.7 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.5 + semver: ^6.3.1 + string.prototype.matchall: ^4.0.10 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: 82f391c5a093235c3bc2f664c54e009c49460778ee7d1b86c1536df9ac4d2a80d1dedc9241ac797df4a9dced936e955d9c89042fb3ac8d017b5359d1320d3c0f + languageName: node + linkType: hard + "eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -8021,6 +8719,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + "eslint-utils@npm:^2.0.0, eslint-utils@npm:^2.1.0": version: 2.1.0 resolution: "eslint-utils@npm:2.1.0" @@ -8062,6 +8770,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + "eslint@npm:8.4.1": version: 8.4.1 resolution: "eslint@npm:8.4.1" @@ -8160,6 +8875,54 @@ __metadata: languageName: node linkType: hard +"eslint@npm:^8.0.1": + version: 8.57.0 + resolution: "eslint@npm:8.57.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.4 + "@eslint/js": 8.57.0 + "@humanwhocodes/config-array": ^0.11.14 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + "@ungap/structured-clone": ^1.2.0 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 3a48d7ff85ab420a8447e9810d8087aea5b1df9ef68c9151732b478de698389ee656fd895635b5f2871c89ee5a2652b3f343d11e9db6f8486880374ebc74a2d9 + languageName: node + linkType: hard + "espree@npm:9.2.0": version: 9.2.0 resolution: "espree@npm:9.2.0" @@ -8193,6 +8956,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + "esprima@npm:^4.0.0, esprima@npm:^4.0.1": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -8212,6 +8986,15 @@ __metadata: languageName: node linkType: hard +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + "esrecurse@npm:^4.1.0, esrecurse@npm:^4.3.0": version: 4.3.0 resolution: "esrecurse@npm:4.3.0" @@ -8674,6 +9457,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^6.0.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: ^7.1.0 + path-exists: ^5.0.0 + checksum: 9a21b7f9244a420e54c6df95b4f6fc3941efd3c3e5476f8274eb452f6a85706e7a6a90de71353ee4f091fcb4593271a6f92810a324ec542650398f928783c280 + languageName: node + linkType: hard + "flat-cache@npm:^3.0.4": version: 3.0.4 resolution: "flat-cache@npm:3.0.4" @@ -8949,6 +9742,13 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + "function.prototype.name@npm:^1.1.0, function.prototype.name@npm:^1.1.5": version: 1.1.5 resolution: "function.prototype.name@npm:1.1.5" @@ -8961,6 +9761,18 @@ __metadata: languageName: node linkType: hard +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + "functional-red-black-tree@npm:^1.0.1": version: 1.0.1 resolution: "functional-red-black-tree@npm:1.0.1" @@ -8968,7 +9780,7 @@ __metadata: languageName: node linkType: hard -"functions-have-names@npm:^1.2.2": +"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 @@ -9040,6 +9852,19 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: ^1.3.0 + function-bind: ^1.1.2 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + hasown: ^2.0.0 + checksum: 414e3cdf2c203d1b9d7d33111df746a4512a1aa622770b361dadddf8ed0b5aeb26c560f49ca077e24bfafb0acb55ca908d1f709216ccba33ffc548ec8a79a951 + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -9087,6 +9912,17 @@ __metadata: languageName: node linkType: hard +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: ^1.0.5 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + checksum: e1cb53bc211f9dbe9691a4f97a46837a553c4e7caadd0488dc24ac694db8a390b93edd412b48dcdd0b4bbb4c595de1709effc75fc87c0839deedc6968f5bd973 + languageName: node + linkType: hard + "get-value@npm:^2.0.3, get-value@npm:^2.0.6": version: 2.0.6 resolution: "get-value@npm:2.0.6" @@ -9120,7 +9956,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.1": +"glob-parent@npm:^6.0.1, glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" dependencies: @@ -9232,6 +10068,15 @@ __metadata: languageName: node linkType: hard +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: ^0.20.2 + checksum: 56066ef058f6867c04ff203b8a44c15b038346a62efbc3060052a1016be9f56f4cf0b2cd45b74b22b81e521a889fc7786c73691b0549c2f3a6e825b3d394f43c + languageName: node + linkType: hard + "globalthis@npm:^1.0.0": version: 1.0.3 resolution: "globalthis@npm:1.0.3" @@ -9241,7 +10086,17 @@ __metadata: languageName: node linkType: hard -"globby@npm:^11.0.2, globby@npm:^11.0.3": +"globalthis@npm:^1.0.3": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: ^1.2.1 + gopd: ^1.0.1 + checksum: 39ad667ad9f01476474633a1834a70842041f70a55571e8dcef5fb957980a92da5022db5430fca8aecc5d47704ae30618c0bc877a579c70710c904e9ef06108a + languageName: node + linkType: hard + +"globby@npm:^11.0.2, globby@npm:^11.0.3, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" dependencies: @@ -9271,6 +10126,15 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" @@ -9278,6 +10142,13 @@ __metadata: languageName: node linkType: hard +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + "hamt_plus@npm:1.0.2": version: 1.0.2 resolution: "hamt_plus@npm:1.0.2" @@ -9342,6 +10213,22 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: ^1.0.0 + checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: fe7c3d50b33f50f3933a04413ed1f69441d21d2d2944f81036276d30635cad9279f6b43bc8f32036c31ebdfcf6e731150f46c1907ad90c669ffe9b066c3ba5c4 + languageName: node + linkType: hard + "has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" @@ -9358,6 +10245,15 @@ __metadata: languageName: node linkType: hard +"has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: ^1.0.3 + checksum: 999d60bb753ad714356b2c6c87b7fb74f32463b8426e159397da4bde5bca7e598ab1073f4d8d4deafac297f2eb311484cd177af242776bf05f0d11565680468d + languageName: node + linkType: hard + "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" @@ -9434,6 +10330,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: ^1.1.2 + checksum: e8516f776a15149ca6c6ed2ae3110c417a00b62260e222590e54aa367cbcd6ed99122020b37b7fbdf05748df57b265e70095d7bf35a47660587619b15ffb93db + languageName: node + linkType: hard + "hast-to-hyperscript@npm:^9.0.0": version: 9.0.1 resolution: "hast-to-hyperscript@npm:9.0.1" @@ -9871,6 +10776,17 @@ __metadata: languageName: node linkType: hard +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: ^1.3.0 + hasown: ^2.0.0 + side-channel: ^1.0.4 + checksum: cadc5eea5d7d9bc2342e93aae9f31f04c196afebb11bde97448327049f492cd7081e18623ae71388aac9cd237b692ca3a105be9c68ac39c1dec679d7409e33eb + languageName: node + linkType: hard + "interpret@npm:^2.2.0": version: 2.2.0 resolution: "interpret@npm:2.2.0" @@ -9960,6 +10876,16 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + checksum: e4e3e6ef0ff2239e75371d221f74bc3c26a03564a22efb39f6bb02609b598917ddeecef4e8c877df2a25888f247a98198959842a5e73236bc7f22cabdf6351a7 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -9967,6 +10893,15 @@ __metadata: languageName: node linkType: hard +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: ^1.0.0 + checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd + languageName: node + linkType: hard + "is-bigint@npm:^1.0.1": version: 1.0.4 resolution: "is-bigint@npm:1.0.4" @@ -10025,6 +10960,13 @@ __metadata: languageName: node linkType: hard +"is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + "is-ci@npm:^2.0.0": version: 2.0.0 resolution: "is-ci@npm:2.0.0" @@ -10036,6 +10978,15 @@ __metadata: languageName: node linkType: hard +"is-core-module@npm:^2.11.0, is-core-module@npm:^2.13.0, is-core-module@npm:^2.13.1": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: ^2.0.0 + checksum: 256559ee8a9488af90e4bad16f5583c6d59e92f0742e9e8bb4331e758521ee86b810b93bae44f390766ffbc518a0488b18d9dab7da9a5ff997d499efc9403f7c + languageName: node + linkType: hard + "is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": version: 2.9.0 resolution: "is-core-module@npm:2.9.0" @@ -10063,7 +11014,16 @@ __metadata: languageName: node linkType: hard -"is-date-object@npm:^1.0.1": +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: ^1.1.13 + checksum: 4ba4562ac2b2ec005fefe48269d6bd0152785458cd253c746154ffb8a8ab506a29d0cfb3b74af87513843776a88e4981ae25c89457bf640a33748eab1a7216b5 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: @@ -10143,6 +11103,15 @@ __metadata: languageName: node linkType: hard +"is-finalizationregistry@npm:^1.0.2": + version: 1.0.2 + resolution: "is-finalizationregistry@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d + languageName: node + linkType: hard + "is-finite@npm:^1.0.0": version: 1.1.0 resolution: "is-finite@npm:1.1.0" @@ -10164,7 +11133,7 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.7": +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": version: 1.0.10 resolution: "is-generator-function@npm:1.0.10" dependencies: @@ -10212,6 +11181,13 @@ __metadata: languageName: node linkType: hard +"is-map@npm:^2.0.3": + version: 2.0.3 + resolution: "is-map@npm:2.0.3" + checksum: e6ce5f6380f32b141b3153e6ba9074892bbbbd655e92e7ba5ff195239777e767a976dcd4e22f864accaf30e53ebf961ab1995424aef91af68788f0591b7396cc + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -10219,6 +11195,13 @@ __metadata: languageName: node linkType: hard +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: c1e6b23d2070c0539d7b36022d5a94407132411d01aba39ec549af824231f3804b1aea90b5e4e58e807a65d23ceb538ed6e355ce76b267bdd86edb757ffcbdcd + languageName: node + linkType: hard + "is-number-object@npm:^1.0.4": version: 1.0.7 resolution: "is-number-object@npm:1.0.7" @@ -10251,6 +11234,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + "is-plain-obj@npm:^2.0.0": version: 2.1.0 resolution: "is-plain-obj@npm:2.1.0" @@ -10298,6 +11288,13 @@ __metadata: languageName: node linkType: hard +"is-set@npm:^2.0.3": + version: 2.0.3 + resolution: "is-set@npm:2.0.3" + checksum: 36e3f8c44bdbe9496c9689762cc4110f6a6a12b767c5d74c0398176aa2678d4467e3bf07595556f2dba897751bde1422480212b97d973c7b08a343100b0c0dfe + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" @@ -10307,6 +11304,15 @@ __metadata: languageName: node linkType: hard +"is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + checksum: a4fff602c309e64ccaa83b859255a43bb011145a42d3f56f67d9268b55bc7e6d98a5981a1d834186ad3105d6739d21547083fe7259c76c0468483fc538e716d8 + languageName: node + linkType: hard + "is-stream@npm:^1.1.0": version: 1.1.0 resolution: "is-stream@npm:1.1.0" @@ -10339,6 +11345,15 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: ^1.1.14 + checksum: 150f9ada183a61554c91e1c4290086d2c100b0dff45f60b028519be72a8db964da403c48760723bf5253979b8dffe7b544246e0e5351dcd05c5fdb1dcc1dc0f0 + languageName: node + linkType: hard + "is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": version: 1.1.9 resolution: "is-typed-array@npm:1.1.9" @@ -10366,6 +11381,13 @@ __metadata: languageName: node linkType: hard +"is-weakmap@npm:^2.0.2": + version: 2.0.2 + resolution: "is-weakmap@npm:2.0.2" + checksum: f36aef758b46990e0d3c37269619c0a08c5b29428c0bb11ecba7f75203442d6c7801239c2f31314bc79199217ef08263787f3837d9e22610ad1da62970d6616d + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -10375,6 +11397,16 @@ __metadata: languageName: node linkType: hard +"is-weakset@npm:^2.0.3": + version: 2.0.3 + resolution: "is-weakset@npm:2.0.3" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + checksum: 8b6a20ee9f844613ff8f10962cfee49d981d584525f2357fee0a04dfbcde9fd607ed60cb6dab626dbcc470018ae6392e1ff74c0c1aced2d487271411ad9d85ae + languageName: node + linkType: hard + "is-whitespace-character@npm:^1.0.0": version: 1.0.4 resolution: "is-whitespace-character@npm:1.0.4" @@ -10531,6 +11563,19 @@ __metadata: languageName: node linkType: hard +"iterator.prototype@npm:^1.1.2": + version: 1.1.2 + resolution: "iterator.prototype@npm:1.1.2" + dependencies: + define-properties: ^1.2.1 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + reflect.getprototypeof: ^1.0.4 + set-function-name: ^2.0.1 + checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 + languageName: node + linkType: hard + "jest-haste-map@npm:^26.6.2": version: 26.6.2 resolution: "jest-haste-map@npm:26.6.2" @@ -10797,7 +11842,18 @@ __metadata: minimist: ^1.2.0 bin: json5: lib/cli.js - checksum: e76ea23dbb8fc1348c143da628134a98adf4c5a4e8ea2adaa74a80c455fc2cdf0e2e13e6398ef819bfe92306b610ebb2002668ed9fc1af386d593691ef346fc3 + checksum: e76ea23dbb8fc1348c143da628134a98adf4c5a4e8ea2adaa74a80c455fc2cdf0e2e13e6398ef819bfe92306b610ebb2002668ed9fc1af386d593691ef346fc3 + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 languageName: node linkType: hard @@ -10973,6 +12029,13 @@ __metadata: languageName: node linkType: hard +"load-json-file@npm:^7.0.0": + version: 7.0.1 + resolution: "load-json-file@npm:7.0.1" + checksum: a560288da6891778321ef993e4bdbdf05374a4f3a3aeedd5ba6b64672798c830d748cfc59a2ec9891a3db30e78b3d04172e0dcb0d4828168289a393147ca0e74 + languageName: node + linkType: hard + "load-tsconfig@npm:^0.2.0": version: 0.2.3 resolution: "load-tsconfig@npm:0.2.3" @@ -11061,6 +12124,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: ^6.0.0 + checksum: c1b653bdf29beaecb3d307dfb7c44d98a2a98a02ebe353c9ad055d1ac45d6ed4e1142563d222df9b9efebc2bcb7d4c792b507fad9e7150a04c29530b7db570f8 + languageName: node + linkType: hard + "lodash-es@npm:^4.17.15": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" @@ -11644,7 +12716,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -11886,6 +12958,13 @@ __metadata: languageName: node linkType: hard +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -12155,6 +13234,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.13.1": + version: 1.13.1 + resolution: "object-inspect@npm:1.13.1" + checksum: 7d9fa9221de3311dcb5c7c307ee5dc011cdd31dc43624b7c184b3840514e118e05ef0002be5388304c416c0eb592feb46e983db12577fc47e47d5752fbbfb61f + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -12183,6 +13269,18 @@ __metadata: languageName: node linkType: hard +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: ^1.0.5 + define-properties: ^1.2.1 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: f9aeac0541661370a1fc86e6a8065eb1668d3e771f7dbb33ee54578201336c057b21ee61207a186dd42db0c62201d91aac703d20d12a79fc79c353eed44d4e25 + languageName: node + linkType: hard + "object.entries@npm:^1.1.0, object.entries@npm:^1.1.5": version: 1.1.5 resolution: "object.entries@npm:1.1.5" @@ -12194,6 +13292,17 @@ __metadata: languageName: node linkType: hard +"object.entries@npm:^1.1.7": + version: 1.1.8 + resolution: "object.entries@npm:1.1.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 5314877cb637ef3437a30bba61d9bacdb3ce74bf73ac101518be0633c37840c8cc67407edb341f766e8093b3d7516d5c3358f25adfee4a2c697c0ec4c8491907 + languageName: node + linkType: hard + "object.fromentries@npm:^2.0.0 || ^1.0.0, object.fromentries@npm:^2.0.5": version: 2.0.5 resolution: "object.fromentries@npm:2.0.5" @@ -12205,6 +13314,18 @@ __metadata: languageName: node linkType: hard +"object.fromentries@npm:^2.0.7": + version: 2.0.8 + resolution: "object.fromentries@npm:2.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: 29b2207a2db2782d7ced83f93b3ff5d425f901945f3665ffda1821e30a7253cd1fd6b891a64279976098137ddfa883d748787a6fea53ecdb51f8df8b8cec0ae1 + languageName: node + linkType: hard + "object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.2": version: 2.1.4 resolution: "object.getownpropertydescriptors@npm:2.1.4" @@ -12217,6 +13338,17 @@ __metadata: languageName: node linkType: hard +"object.groupby@npm:^1.0.1": + version: 1.0.3 + resolution: "object.groupby@npm:1.0.3" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + checksum: 0d30693ca3ace29720bffd20b3130451dca7a56c612e1926c0a1a15e4306061d84410bdb1456be2656c5aca53c81b7a3661eceaa362db1bba6669c2c9b6d1982 + languageName: node + linkType: hard + "object.hasown@npm:^1.1.1": version: 1.1.1 resolution: "object.hasown@npm:1.1.1" @@ -12227,6 +13359,17 @@ __metadata: languageName: node linkType: hard +"object.hasown@npm:^1.1.3": + version: 1.1.4 + resolution: "object.hasown@npm:1.1.4" + dependencies: + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-object-atoms: ^1.0.0 + checksum: bc46eb5ca22106fcd07aab1411508c2c68b7565fe8fb272f166fb9bf203972e8b5c86a5a4b2c86204beead0626a7a4119d32cefbaf7c5dd57b400bf9e6363cb6 + languageName: node + linkType: hard + "object.pick@npm:^1.3.0": version: 1.3.0 resolution: "object.pick@npm:1.3.0" @@ -12247,6 +13390,17 @@ __metadata: languageName: node linkType: hard +"object.values@npm:^1.1.7": + version: 1.2.0 + resolution: "object.values@npm:1.2.0" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: 51fef456c2a544275cb1766897f34ded968b22adfc13ba13b5e4815fdaf4304a90d42a3aee114b1f1ede048a4890381d47a5594d84296f2767c6a0364b9da8fa + languageName: node + linkType: hard + "objectorarray@npm:^1.0.5": version: 1.0.5 resolution: "objectorarray@npm:1.0.5" @@ -12337,6 +13491,20 @@ __metadata: languageName: node linkType: hard +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + word-wrap: ^1.2.5 + checksum: ecbd010e3dc73e05d239976422d9ef54a82a13f37c11ca5911dff41c98a6c7f0f163b27f922c37e7f8340af9d36febd3b6e9cef508f3339d4c393d7276d716bb + languageName: node + linkType: hard + "os-browserify@npm:^0.3.0": version: 0.3.0 resolution: "os-browserify@npm:0.3.0" @@ -12412,6 +13580,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: ^1.0.0 + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + "p-locate@npm:^2.0.0": version: 2.0.0 resolution: "p-locate@npm:2.0.0" @@ -12448,6 +13625,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: ^4.0.0 + checksum: 2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 + languageName: node + linkType: hard + "p-map@npm:^2.0.0": version: 2.1.0 resolution: "p-map@npm:2.1.0" @@ -12675,6 +13861,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -12832,6 +14025,16 @@ __metadata: languageName: node linkType: hard +"pkg-conf@npm:^4.0.0": + version: 4.0.0 + resolution: "pkg-conf@npm:4.0.0" + dependencies: + find-up: ^6.0.0 + load-json-file: ^7.0.0 + checksum: 6da0c064a74f6c7ae80d7d68c5853e14f7e762a2a80c6ca9e0aa827002b90b69c86fefe3bac830b10a6f1739e7f96a1f728637f2a141e50b0fdafe92a2c3eab6 + languageName: node + linkType: hard + "pkg-dir@npm:^3.0.0": version: 3.0.0 resolution: "pkg-dir@npm:3.0.0" @@ -12893,6 +14096,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: b32d403ece71e042385cc7856385cecf1cd8e144fa74d2f1de40d1e16035dba097bc189715925e79b67bdd1472796ff168d3a90d296356c9c94d272d5b95f3ae + languageName: node + linkType: hard + "postcss-flexbugs-fixes@npm:^4.2.1": version: 4.2.1 resolution: "postcss-flexbugs-fixes@npm:4.2.1" @@ -13788,6 +14998,21 @@ __metadata: languageName: node linkType: hard +"reflect.getprototypeof@npm:^1.0.4": + version: 1.0.6 + resolution: "reflect.getprototypeof@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.1 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + globalthis: ^1.0.3 + which-builtin-type: ^1.1.3 + checksum: 88e9e65a7eaa0bf8e9a8bbf8ac07571363bc333ba8b6769ed5e013e0042ed7c385e97fae9049510b3b5fe4b42472d8f32de9ce8ce84902bc4297d4bbe3777dba + languageName: node + linkType: hard + "refractor@npm:^3.6.0": version: 3.6.0 resolution: "refractor@npm:3.6.0" @@ -13859,6 +15084,18 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.2": + version: 1.5.2 + resolution: "regexp.prototype.flags@npm:1.5.2" + dependencies: + call-bind: ^1.0.6 + define-properties: ^1.2.1 + es-errors: ^1.3.0 + set-function-name: ^2.0.1 + checksum: d7f333667d5c564e2d7a97c56c3075d64c722c9bb51b2b4df6822b2e8096d623a5e63088fb4c83df919b6951ef8113841de8b47de7224872fa6838bc5d8a7d64 + languageName: node + linkType: hard + "regexpp@npm:^3.0.0, regexpp@npm:^3.1.0, regexpp@npm:^3.2.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" @@ -14083,6 +15320,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.22.4": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c + languageName: node + linkType: hard + "resolve@npm:^2.0.0-next.3": version: 2.0.0-next.4 resolution: "resolve@npm:2.0.0-next.4" @@ -14096,6 +15346,19 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f + languageName: node + linkType: hard + "resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.10.1#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" @@ -14109,6 +15372,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^1.22.4#~builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=07638b" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 + languageName: node + linkType: hard + "resolve@patch:resolve@^2.0.0-next.3#~builtin": version: 2.0.0-next.4 resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=07638b" @@ -14122,6 +15398,19 @@ __metadata: languageName: node linkType: hard +"resolve@patch:resolve@^2.0.0-next.5#~builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=07638b" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c + languageName: node + linkType: hard + "ret@npm:~0.1.10": version: 0.1.15 resolution: "ret@npm:0.1.15" @@ -14221,6 +15510,18 @@ __metadata: languageName: node linkType: hard +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: ^1.0.7 + get-intrinsic: ^1.2.4 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: a3b259694754ddfb73ae0663829e396977b99ff21cbe8607f35a469655656da8e271753497e59da8a7575baa94d2e684bea3e10ddd74ba046c0c9b4418ffa0c4 + languageName: node + linkType: hard + "safe-buffer@npm:5.1.1": version: 5.1.1 resolution: "safe-buffer@npm:5.1.1" @@ -14242,6 +15543,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: ^1.0.6 + es-errors: ^1.3.0 + is-regex: ^1.1.4 + checksum: 6c7d392ff1ae7a3ae85273450ed02d1d131f1d2c76e177d6b03eb88e6df8fa062639070e7d311802c1615f351f18dc58f9454501c58e28d5ffd9b8f502ba6489 + languageName: node + linkType: hard + "safe-regex@npm:^1.1.0": version: 1.1.0 resolution: "safe-regex@npm:1.1.0" @@ -14367,6 +15679,26 @@ __metadata: languageName: node linkType: hard +"semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.0.0, semver@npm:^7.3.7, semver@npm:^7.3.8": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 7427f05b70786c696640edc29fdd4bc33b2acf3bbe1740b955029044f80575fc664e1a512e4113c3af21e767154a94b4aa214bf6cd6e42a1f6dba5914e0b208c + languageName: node + linkType: hard + "semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5": version: 7.3.7 resolution: "semver@npm:7.3.7" @@ -14458,6 +15790,32 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + function-bind: ^1.1.2 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.2 + checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.1, set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: ^1.1.4 + es-errors: ^1.3.0 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.2 + checksum: d6229a71527fd0404399fc6227e0ff0652800362510822a291925c9d7b48a1ca1a468b11b281471c34cd5a2da0db4f5d7ff315a61d26655e77f6e971e6d0c80f + languageName: node + linkType: hard + "set-value@npm:^2.0.0, set-value@npm:^2.0.1": version: 2.0.1 resolution: "set-value@npm:2.0.1" @@ -14559,6 +15917,18 @@ __metadata: languageName: node linkType: hard +"side-channel@npm:^1.0.6": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + get-intrinsic: ^1.2.4 + object-inspect: ^1.13.1 + checksum: bfc1afc1827d712271453e91b7cd3878ac0efd767495fd4e594c4c2afaa7963b7b510e249572bfd54b0527e66e4a12b61b80c061389e129755f34c493aad9b97 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -14853,6 +16223,18 @@ __metadata: languageName: node linkType: hard +"standard-engine@npm:^15.0.0": + version: 15.1.0 + resolution: "standard-engine@npm:15.1.0" + dependencies: + get-stdin: ^8.0.0 + minimist: ^1.2.6 + pkg-conf: ^3.1.0 + xdg-basedir: ^4.0.0 + checksum: cd530a9711778b6d8c15f66cc12c4fb9583df7a641a523eb84acb9f706674d97fe33bc89d57e621aeea9e2e1f91fa44aca235f76e661b91eaf2b5911d6b2cb23 + languageName: node + linkType: hard + "state-toggle@npm:^1.0.0": version: 1.0.3 resolution: "state-toggle@npm:1.0.3" @@ -14951,6 +16333,26 @@ __metadata: languageName: node linkType: hard +"string.prototype.matchall@npm:^4.0.10": + version: 4.0.11 + resolution: "string.prototype.matchall@npm:4.0.11" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.2 + es-errors: ^1.3.0 + es-object-atoms: ^1.0.0 + get-intrinsic: ^1.2.4 + gopd: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.7 + regexp.prototype.flags: ^1.5.2 + set-function-name: ^2.0.2 + side-channel: ^1.0.6 + checksum: 6ac6566ed065c0c8489c91156078ca077db8ff64d683fda97ae652d00c52dfa5f39aaab0a710d8243031a857fd2c7c511e38b45524796764d25472d10d7075ae + languageName: node + linkType: hard + "string.prototype.padend@npm:^3.0.0": version: 3.1.3 resolution: "string.prototype.padend@npm:3.1.3" @@ -14973,6 +16375,18 @@ __metadata: languageName: node linkType: hard +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-abstract: ^1.23.0 + es-object-atoms: ^1.0.0 + checksum: ea2df6ec1e914c9d4e2dc856fa08228e8b1be59b59e50b17578c94a66a176888f417264bb763d4aac638ad3b3dad56e7a03d9317086a178078d131aa293ba193 + languageName: node + linkType: hard + "string.prototype.trimend@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimend@npm:1.0.5" @@ -14984,6 +16398,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: cc3bd2de08d8968a28787deba9a3cb3f17ca5f9f770c91e7e8fa3e7d47f079bad70fadce16f05dda9f261788be2c6e84a942f618c3bed31e42abc5c1084f8dfd + languageName: node + linkType: hard + "string.prototype.trimstart@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimstart@npm:1.0.5" @@ -14995,6 +16420,17 @@ __metadata: languageName: node linkType: hard +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: ^1.0.7 + define-properties: ^1.2.1 + es-object-atoms: ^1.0.0 + checksum: df1007a7f580a49d692375d996521dc14fd103acda7f3034b3c558a60b82beeed3a64fa91e494e164581793a8ab0ae2f59578a49896a7af6583c1f20472bce96 + languageName: node + linkType: hard + "string_decoder@npm:^1.0.0, string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -15607,6 +17043,30 @@ __metadata: languageName: node linkType: hard +"ts-standard@npm:^12.0.2": + version: 12.0.2 + resolution: "ts-standard@npm:12.0.2" + dependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 + "@typescript-eslint/parser": ^5.0.0 + eslint: ^8.0.1 + eslint-config-standard-jsx: ^11.0.0 + eslint-config-standard-with-typescript: ^23.0.0 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: ^15.0.0 + eslint-plugin-promise: ^6.0.0 + eslint-plugin-react: ^7.28.0 + minimist: ^1.2.6 + pkg-conf: ^4.0.0 + standard-engine: ^15.0.0 + peerDependencies: + typescript: "*" + bin: + ts-standard: cli.js + checksum: fb01e0a82abf3013b6b7be4513412a4af2eb9051c14a8bb1e96fb757a3992031201999926e6e4afd525eaf31ee08698944dbd1a3b0d10a4db3f0172bc4ee1ae5 + languageName: node + linkType: hard + "tsconfig-paths@npm:^3.14.1": version: 3.14.1 resolution: "tsconfig-paths@npm:3.14.1" @@ -15619,6 +17079,18 @@ __metadata: languageName: node linkType: hard +"tsconfig-paths@npm:^3.15.0": + version: 3.15.0 + resolution: "tsconfig-paths@npm:3.15.0" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 59f35407a390d9482b320451f52a411a256a130ff0e7543d18c6f20afab29ac19fbe55c360a93d6476213cc335a4d76ce90f67df54c4e9037f7d240920832201 + languageName: node + linkType: hard + "tslib@npm:^1.8.1, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -15906,6 +17378,58 @@ __metadata: languageName: node linkType: hard +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.7 + es-errors: ^1.3.0 + is-typed-array: ^1.1.13 + checksum: 02ffc185d29c6df07968272b15d5319a1610817916ec8d4cd670ded5d1efe72901541ff2202fcc622730d8a549c76e198a2f74e312eabbfb712ed907d45cbb0b + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: f65e5ecd1cf76b1a2d0d6f631f3ea3cdb5e08da106c6703ffe687d583e49954d570cc80434816d3746e18be889ffe53c58bf3e538081ea4077c26a41055b216d + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + checksum: c8645c8794a621a0adcc142e0e2c57b1823bbfa4d590ad2c76b266aa3823895cf7afb9a893bf6685e18454ab1b0241e1a8d885a2d1340948efa4b56add4b5f67 + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-proto: ^1.0.3 + is-typed-array: ^1.1.13 + possible-typed-array-names: ^1.0.0 + checksum: f0315e5b8f0168c29d390ff410ad13e4d511c78e6006df4a104576844812ee447fcc32daab1f3a76c9ef4f64eff808e134528b5b2439de335586b392e9750e5c + languageName: node + linkType: hard + "typedarray-to-buffer@npm:^3.1.5": version: 3.1.5 resolution: "typedarray-to-buffer@npm:3.1.5" @@ -16909,6 +18433,51 @@ __metadata: languageName: node linkType: hard +"which-builtin-type@npm:^1.1.3": + version: 1.1.3 + resolution: "which-builtin-type@npm:1.1.3" + dependencies: + function.prototype.name: ^1.1.5 + has-tostringtag: ^1.0.0 + is-async-function: ^2.0.0 + is-date-object: ^1.0.5 + is-finalizationregistry: ^1.0.2 + is-generator-function: ^1.0.10 + is-regex: ^1.1.4 + is-weakref: ^1.0.2 + isarray: ^2.0.5 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.1": + version: 1.0.2 + resolution: "which-collection@npm:1.0.2" + dependencies: + is-map: ^2.0.3 + is-set: ^2.0.3 + is-weakmap: ^2.0.2 + is-weakset: ^2.0.3 + checksum: c51821a331624c8197916598a738fc5aeb9a857f1e00d89f5e4c03dc7c60b4032822b8ec5696d28268bb83326456a8b8216344fb84270d18ff1d7628051879d9 + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15, which-typed-array@npm:^1.1.9": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: ^1.0.7 + call-bind: ^1.0.7 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.2 + checksum: 65227dcbfadf5677aacc43ec84356d17b5500cb8b8753059bb4397de5cd0c2de681d24e1a7bd575633f976a95f88233abfd6549c2105ef4ebd58af8aa1807c75 + languageName: node + linkType: hard + "which-typed-array@npm:^1.1.2": version: 1.1.8 resolution: "which-typed-array@npm:1.1.8" @@ -16970,6 +18539,13 @@ __metadata: languageName: node linkType: hard +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: f93ba3586fc181f94afdaff3a6fef27920b4b6d9eaefed0f428f8e07adea2a7f54a5f2830ce59406c8416f033f86902b91eb824072354645eea687dff3691ccb + languageName: node + linkType: hard + "wordwrap@npm:^1.0.0": version: 1.0.0 resolution: "wordwrap@npm:1.0.0" @@ -17170,6 +18746,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^1.0.0": + version: 1.0.0 + resolution: "yocto-queue@npm:1.0.0" + checksum: 2cac84540f65c64ccc1683c267edce396b26b1e931aa429660aefac8fbe0188167b7aee815a3c22fa59a28a58d898d1a2b1825048f834d8d629f4c2a5d443801 + languageName: node + linkType: hard + "zwitch@npm:^1.0.0": version: 1.0.5 resolution: "zwitch@npm:1.0.5"