This is an automated email from the ASF dual-hosted git repository. arosien pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/daffodil-vscode.git
commit ca7a12a5d01fd2dd3092f55949e2665411360140 Author: Robert Strickland <[email protected]> AuthorDate: Thu Aug 10 15:19:25 2023 -0500 Cleaning Data Editor Legacy Code - Removes lingering variables & functionality due to the rapid development of the data editor. - Fixes issue where the data view content control showed index of viewport container instead of file offset. Closes #771 Closes #773 --- .../DataDisplays/CustomByteDisplay/BinaryData.ts | 108 +------------- .../CustomByteDisplay/DataLineFeed.svelte | 18 +-- .../FileTraversalIndicator.svelte | 2 +- .../CustomByteDisplay/SelectedByteEdit.svelte | 67 +++++---- .../components/DataDisplays/DataViewports.svelte | 74 +--------- .../DataDisplays/Fieldsets/ContentControls.svelte | 2 +- .../DataDisplays/Fieldsets/DataView.svelte | 4 +- .../DataDisplays/Header/DisplayHeader.svelte | 7 +- .../DataMetrics/ByteFrequencyGraph.svelte | 14 +- src/svelte/src/components/Header/Header.svelte | 3 +- .../components/Header/fieldsets/FileMetrics.svelte | 5 +- .../src/components/Header/fieldsets/FileMetrics.ts | 4 +- .../Header/fieldsets/SearchReplace.svelte | 14 +- .../components/Header/fieldsets/SearchReplace.ts | 58 +------- .../components/Header/fieldsets/Settings.svelte | 7 +- .../src/components/Inputs/Buttons/Button.svelte | 8 +- .../Inputs/Buttons/ToggleableButton.svelte | 4 +- .../components/ServerMetrics/ServerMetrics.svelte | 4 +- src/svelte/src/components/dataEditor.svelte | 73 ++-------- src/svelte/src/components/layouts/Tooltip.svelte | 2 +- src/svelte/src/stores/configuration.ts | 4 - src/svelte/src/stores/index.ts | 156 ++++++++++++--------- src/svelte/src/utilities/display.ts | 30 +--- src/svelte/src/utilities/highlights.ts | 2 +- yarn.lock | 141 +++++++++---------- 25 files changed, 254 insertions(+), 557 deletions(-) diff --git a/src/svelte/src/components/DataDisplays/CustomByteDisplay/BinaryData.ts b/src/svelte/src/components/DataDisplays/CustomByteDisplay/BinaryData.ts index 4aa9cc2..e3f9e31 100644 --- a/src/svelte/src/components/DataDisplays/CustomByteDisplay/BinaryData.ts +++ b/src/svelte/src/components/DataDisplays/CustomByteDisplay/BinaryData.ts @@ -15,9 +15,8 @@ * limitations under the License. */ -import { writable, derived } from 'svelte/store' import { SimpleWritable } from '../../../stores/localStore' -import type { BytesPerRow, RadixValues } from '../../../stores/configuration' +import type { RadixValues } from '../../../stores/configuration' import { radixBytePad } from '../../../utilities/display' export const BYTE_ACTION_DIV_OFFSET: number = 24 @@ -53,17 +52,6 @@ export interface EditByteEvent extends EditEvent { targetByte: ByteValue } -export enum ViewportBoundaryTrigger { - SCROLL_TOP, - SCROLL_BOTTOM, -} - -export const scroll_boundary_event = (top: boolean, end: boolean) => { - return top - ? ViewportBoundaryTrigger.SCROLL_TOP - : ViewportBoundaryTrigger.SCROLL_BOTTOM -} - export const byte_value_string = (value: number, radix: RadixValues) => { if (value > 255) throw `Value {${value}} is larger than an unsigned int (255).` @@ -87,8 +75,6 @@ export const RADIX_REGEX_MATCH_STR = { 2: /[0-1]{8}/g, } -export const processingViewportRefresh = writable(false) - export class ViewportData_t { data = new Uint8Array(0) fileOffset = -1 @@ -160,98 +146,6 @@ export class ViewportDataStore_t extends SimpleWritable<ViewportData_t> { } } -export const viewport = new ViewportDataStore_t() - -export type ByteActionPxOffsets = { - insertBefore: { - left: number - top: number - } - insertAfter: { - left: number - top: number - } - delete: { - left: number - top: number - } - input: { - left: number - top: number - } -} - export function latin1Undefined(charCode: number): boolean { return charCode < 32 || (charCode > 126 && charCode < 160) } - -export function update_byte_action_offsets( - targetDiv: HTMLDivElement, - offsetTopBy: number = 0, - offsetLeftBy: number = 0 -) { - const targetWidth = parseInt(targetDiv.style.width.replace('px', '')) + 4 - byteActionPxOffsets.update((currentOffsets) => { - currentOffsets.delete = { - left: targetDiv.offsetLeft + offsetLeftBy, - top: targetDiv.offsetTop + BYTE_ACTION_DIV_OFFSET - offsetTopBy, - } - currentOffsets.input = { - left: targetDiv.offsetLeft + offsetLeftBy, - top: targetDiv.offsetTop - offsetTopBy, - } - currentOffsets.insertAfter = { - left: targetDiv.offsetLeft + targetWidth + offsetLeftBy, - top: targetDiv.offsetTop - offsetTopBy, - } - currentOffsets.insertBefore = { - left: targetDiv.offsetLeft - targetWidth + offsetLeftBy, - top: targetDiv.offsetTop - offsetTopBy, - } - - return currentOffsets - }) -} - -export enum ByteValuePxWidths { - DISPLAY = 20, - EDITING = 68, -} - -export let ByteValueArray: Array<ByteValue> = [] - -export const bytesPerRow = writable(16 as BytesPerRow) -export const editingByte = writable(false) -export const selectedByte = writable({ - text: '', - offset: -1, - value: -1, -} as ByteValue) -export const byteActionPxOffsets = writable({ - insertBefore: { - left: 0, - top: 0, - }, - insertAfter: { - left: 0, - top: 0, - }, - delete: { - left: 0, - top: 0, - }, - input: { - left: 0, - top: 0, - }, -} as ByteActionPxOffsets) -export const mouseSelectionBytes = writable({ mousedown: -1, mouseup: -1 }) - -// derived readable number whose value is the computed number of bytes in the edited file -export const offsetMax = derived(viewport, ($viewport) => { - // this should be the same as the computed file size - return $viewport.fileOffset + $viewport.length + $viewport.bytesLeft -}) -export function focus_byte_input() { - document.getElementById('byte-input').focus() -} diff --git a/src/svelte/src/components/DataDisplays/CustomByteDisplay/DataLineFeed.svelte b/src/svelte/src/components/DataDisplays/CustomByteDisplay/DataLineFeed.svelte index 8d70148..ebfe8b7 100644 --- a/src/svelte/src/components/DataDisplays/CustomByteDisplay/DataLineFeed.svelte +++ b/src/svelte/src/components/DataDisplays/CustomByteDisplay/DataLineFeed.svelte @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. --> <script lang="ts"> - import { createEventDispatcher, onMount, tick } from 'svelte' + import { createEventDispatcher, onMount } from 'svelte' import { editedDataSegment, editMode, @@ -24,6 +24,10 @@ limitations under the License. seekOffsetInput, selectionDataStore, selectionSize, + selectedByte, + fileMetrics, + searchQuery, + editorActionsAllowed, } from '../../../stores' import { EditByteModes, @@ -31,18 +35,15 @@ limitations under the License. VIEWPORT_CAPACITY_MAX, type BytesPerRow, type RadixValues, - editorActionsAllowed, EditActionRestrictions, } from '../../../stores/configuration' import { MessageCommand } from '../../../utilities/message' import { vscode } from '../../../utilities/vscode' - import { fileMetrics } from '../../Header/fieldsets/FileMetrics' import Button from '../../Inputs/Buttons/Button.svelte' import FlexContainer from '../../layouts/FlexContainer.svelte' import { byte_value_string, null_byte, - selectedByte, type ByteSelectionEvent, type ByteValue, type ViewportData_t, @@ -63,7 +64,6 @@ limitations under the License. searchResultsHighlights, updateSearchResultsHighlights, } from '../../../utilities/highlights' - import { searchQuery } from '../../Header/fieldsets/SearchReplace' export let lineTop: number export let awaitViewportScroll: boolean @@ -119,7 +119,6 @@ limitations under the License. let totalLinesPerViewport = 0 let lineTopMaxViewport = 64 let lineTopMaxFile = 64 - let viewportFileSegment = 1 let atViewportHead = true let atViewportTail = false let atFileHead = true @@ -168,7 +167,6 @@ limitations under the License. totalLinesPerViewport - NUM_LINES_DISPLAYED, 0 ) - viewportFileSegment = viewportData.fileOffset / viewportData.length + 1 atViewportHead = lineTop === 0 atViewportTail = lineTop === lineTopMaxViewport @@ -360,7 +358,6 @@ limitations under the License. ? selectionEvent.targetByte : null_byte() - // update_byte_action_offsets(selectionEvent.targetElement) selectedByteElement = selectionEvent.targetElement editedDataSegment.update(() => { @@ -468,10 +465,7 @@ limitations under the License. <div class="container" style:height id={CONTAINER_ID}> {#each viewportLines as viewportLine, i} - <div - class={`line ${viewportLine.highlight} ${themeClass}`} - title={`file line #${viewportLine.fileLine}`} - > + <div class={`line ${viewportLine.highlight} ${themeClass}`}> <div class="address" id="address"> <b>{viewportLine.offset}</b> </div> diff --git a/src/svelte/src/components/DataDisplays/CustomByteDisplay/FileTraversalIndicator.svelte b/src/svelte/src/components/DataDisplays/CustomByteDisplay/FileTraversalIndicator.svelte index 56c9142..7c7b8f4 100644 --- a/src/svelte/src/components/DataDisplays/CustomByteDisplay/FileTraversalIndicator.svelte +++ b/src/svelte/src/components/DataDisplays/CustomByteDisplay/FileTraversalIndicator.svelte @@ -25,7 +25,7 @@ limitations under the License. export let bytesPerRow = 16 export let percentageTraversed export let maxDisplayLines = 20 - export let selectionActive + export let selectionActive: boolean let indicatorContainer: HTMLElement let indicatorClickDisabled: boolean = false diff --git a/src/svelte/src/components/DataDisplays/CustomByteDisplay/SelectedByteEdit.svelte b/src/svelte/src/components/DataDisplays/CustomByteDisplay/SelectedByteEdit.svelte index 3b75540..b46adb4 100644 --- a/src/svelte/src/components/DataDisplays/CustomByteDisplay/SelectedByteEdit.svelte +++ b/src/svelte/src/components/DataDisplays/CustomByteDisplay/SelectedByteEdit.svelte @@ -32,17 +32,16 @@ limitations under the License. addressRadix, rerenderActionElements, focusedViewportId, + editorActionsAllowed, + bytesPerRow, } from '../../../stores' import { enterKeypressEvents } from '../../../utilities/enterKeypressEvents' - import { bytesPerRow, type ByteValue, type EditAction } from './BinaryData' + import type { ByteValue, EditAction } from './BinaryData' import { UIThemeCSSClass, type CSSThemeClass, } from '../../../utilities/colorScheme' - import { - EditActionRestrictions, - editorActionsAllowed, - } from '../../../stores/configuration' + import { EditActionRestrictions } from '../../../stores/configuration' const eventDispatcher = createEventDispatcher() @@ -55,6 +54,7 @@ limitations under the License. id: string position: ActionElementPosition HTMLRef: HTMLDivElement | HTMLInputElement + render: boolean } type ActionElements = { [k in Actions]: ActionElement @@ -63,21 +63,25 @@ limitations under the License. input: { id: 'binary-action-input', HTMLRef: undefined as HTMLInputElement, + render: true, position: { viewportLine: -1, viewportByteIndex: -1 }, }, 'insert-before': { id: 'binary-action-before', HTMLRef: undefined, + render: true, position: { viewportLine: -1, viewportByteIndex: -1 }, }, 'insert-after': { id: 'binary-action-after', HTMLRef: undefined, + render: true, position: { viewportLine: -1, viewportByteIndex: -1 }, }, delete: { id: 'binary-action-delete', HTMLRef: undefined, + render: true, position: { viewportLine: -1, viewportByteIndex: -1 }, }, } @@ -210,7 +214,10 @@ limitations under the License. previousByteId ) as HTMLDivElement - if (!elementToReplace) break + if (!elementToReplace) { + actionElements[element].render = false + break + } targetParent.contains(elementToReplace) ? apply_element_replacements( @@ -236,7 +243,10 @@ limitations under the License. nextByteId ) as HTMLDivElement - if (!elementToReplace) break + if (!elementToReplace) { + actionElements[element].render = false + break + } targetParent.contains(elementToReplace) ? apply_element_replacements( @@ -297,36 +307,33 @@ limitations under the License. function byteOffsetToElementId(byteOffset: number): string { return $focusedViewportId + '-' + byteOffset.toString() } - function element_byteline_position( - targetElement: HTMLDivElement - ): number | undefined { - const index = parseInt(targetElement.id) + 1 - return index % BPR - } </script> {#if $editorActionsAllowed == EditActionRestrictions.None} <!-- svelte-ignore a11y-click-events-have-key-events --> <!-- svelte-ignore a11y-no-static-element-interactions --> - <div - class="insert-before {themeClass}" - id={actionElements['insert-before'].id} - style:width={elementDivWidth} - on:click={send_insert} - > - ⇤ - </div> - + {#if actionElements['insert-before'].render} + <div + class="insert-before {themeClass}" + id={actionElements['insert-before'].id} + style:width={elementDivWidth} + on:click={send_insert} + > + ⇤ + </div> + {/if} <!-- svelte-ignore a11y-click-events-have-key-events --> <!-- svelte-ignore a11y-no-static-element-interactions --> - <div - class="insert-after {themeClass}" - id={actionElements['insert-after'].id} - style:width={elementDivWidth} - on:click={send_insert} - > - ⇥ - </div> + {#if actionElements['insert-after'].render} + <div + class="insert-after {themeClass}" + id={actionElements['insert-after'].id} + style:width={elementDivWidth} + on:click={send_insert} + > + ⇥ + </div> + {/if} <span> <input diff --git a/src/svelte/src/components/DataDisplays/DataViewports.svelte b/src/svelte/src/components/DataDisplays/DataViewports.svelte index 38ad6cc..b031f25 100644 --- a/src/svelte/src/components/DataDisplays/DataViewports.svelte +++ b/src/svelte/src/components/DataDisplays/DataViewports.svelte @@ -18,84 +18,12 @@ limitations under the License. import { addressRadix, bytesPerRow, - editMode, - editedDataSegment, - editorEncoding, - selectionDataStore, - selectionSize, - viewportClientHeight, - viewportLineHeight, - viewportScrollHeight, - viewportScrollTop, - viewportLength, displayRadix, dataFeedLineTop, dataFeedAwaitRefresh, + viewport, } from '../../stores' - import { - viewport_references, - type ViewportReferences, - } from '../../utilities/display' - import { MessageCommand } from '../../utilities/message' - import { onMount, tick } from 'svelte' - import { vscode } from '../../utilities/vscode' - import { EditByteModes } from '../../stores/configuration' - import { viewport } from './CustomByteDisplay/BinaryData' import DataLineFeed from './CustomByteDisplay/DataLineFeed.svelte' - - const viewportRefs = viewport_references() as ViewportReferences - - // - // reactive statements - // - - $: { - $editMode === EditByteModes.Single - ? postEditorOnChangeMsg('hex') - : postEditorOnChangeMsg($editorEncoding) - - // when the viewport length changes, update the viewport geometry - if ($viewportLength >= 0) { - // populateViewportGeometry() - } - } - - function populateViewportGeometry() { - // event handlers expect synchronous functions, so wrap the async function in a sync function - async function populateViewportGeometryOps_() { - if (viewportRefs.physical) { - // wait for the DOM to be updated before getting the viewport geometry - await tick() - $viewportScrollTop = viewportRefs.physical.scrollTop - $viewportScrollHeight = viewportRefs.physical.scrollHeight - $viewportClientHeight = viewportRefs.physical.clientHeight - $viewportLineHeight = parseFloat( - getComputedStyle(viewportRefs.physical).lineHeight - ) - } - } - - populateViewportGeometryOps_() - } - - function postEditorOnChangeMsg(forcedEncoding?: string) { - vscode.postMessage({ - command: MessageCommand.editorOnChange, - data: { - fileOffset: $selectionDataStore.startOffset, - selectionData: $editedDataSegment, - encoding: forcedEncoding ? forcedEncoding : $editorEncoding, - selectionSize: $selectionSize, - editMode: $editMode, - }, - }) - } - - onMount(() => { - // populateViewportGeometry() - // recalculate the viewport geometry when the window is resized - // window.addEventListener('resize', populateViewportGeometry) - }) </script> <DataLineFeed diff --git a/src/svelte/src/components/DataDisplays/Fieldsets/ContentControls.svelte b/src/svelte/src/components/DataDisplays/Fieldsets/ContentControls.svelte index d22aa6b..16ceef9 100644 --- a/src/svelte/src/components/DataDisplays/Fieldsets/ContentControls.svelte +++ b/src/svelte/src/components/DataDisplays/Fieldsets/ContentControls.svelte @@ -20,7 +20,7 @@ limitations under the License. import { createEventDispatcher } from 'svelte' import FlexContainer from '../../layouts/FlexContainer.svelte' import Button from '../../Inputs/Buttons/Button.svelte' - import { type EditEvent } from '../CustomByteDisplay/BinaryData' + import type { EditEvent } from '../CustomByteDisplay/BinaryData' const eventDispatcher = createEventDispatcher() function applyChanges(event: Event) { diff --git a/src/svelte/src/components/DataDisplays/Fieldsets/DataView.svelte b/src/svelte/src/components/DataDisplays/Fieldsets/DataView.svelte index dc75563..f648f20 100644 --- a/src/svelte/src/components/DataDisplays/Fieldsets/DataView.svelte +++ b/src/svelte/src/components/DataDisplays/Fieldsets/DataView.svelte @@ -30,12 +30,12 @@ limitations under the License. dvUint8, selectionDataStore, editedDataSegment, + selectedByte, } from '../../../stores' import { ENDIANNESS_OPTIONS } from '../../../stores/configuration' import { UIThemeCSSClass } from '../../../utilities/colorScheme' - import Input from '../../Inputs/Input/Input.svelte' import { createEventDispatcher } from 'svelte' - import { selectedByte } from '../CustomByteDisplay/BinaryData' + import Input from '../../Inputs/Input/Input.svelte' const eventDispatcher = createEventDispatcher() const ERROR_MESSAGE_TIMEOUT = 5000 diff --git a/src/svelte/src/components/DataDisplays/Header/DisplayHeader.svelte b/src/svelte/src/components/DataDisplays/Header/DisplayHeader.svelte index 2350ef0..28450cd 100644 --- a/src/svelte/src/components/DataDisplays/Header/DisplayHeader.svelte +++ b/src/svelte/src/components/DataDisplays/Header/DisplayHeader.svelte @@ -23,6 +23,8 @@ limitations under the License. seekOffsetInput, selectionDataStore, selectionSize, + bytesPerRow, + viewport, } from '../../../stores' import { EditByteModes, @@ -33,7 +35,6 @@ limitations under the License. } from '../../../stores/configuration' import { UIThemeCSSClass } from '../../../utilities/colorScheme' import { createEventDispatcher } from 'svelte' - import { bytesPerRow } from '../CustomByteDisplay/BinaryData' type ViewportDivSpread = '24px' | '28px' | '68px' @@ -60,8 +61,8 @@ limitations under the License. $: selectionOffsetText = setSelectionOffsetInfo( 'Selection', - $selectionDataStore.startOffset, - $selectionDataStore.endOffset, + $viewport.fileOffset + $selectionDataStore.startOffset, + $viewport.fileOffset + $selectionDataStore.endOffset, $selectionSize, $addressRadix ) diff --git a/src/svelte/src/components/DataMetrics/ByteFrequencyGraph.svelte b/src/svelte/src/components/DataMetrics/ByteFrequencyGraph.svelte index 2841ff4..cbbaa92 100644 --- a/src/svelte/src/components/DataMetrics/ByteFrequencyGraph.svelte +++ b/src/svelte/src/components/DataMetrics/ByteFrequencyGraph.svelte @@ -20,7 +20,7 @@ limitations under the License. import { MessageCommand } from '../../utilities/message' import { onMount } from 'svelte' import Input from '../Inputs/Input/Input.svelte' - import { offsetMax } from '../DataDisplays/CustomByteDisplay/BinaryData' + import { viewport } from '../../stores' import { DATA_PROFILE_MAX_LENGTH } from '../../stores/configuration' import { addressRadix } from '../../stores' import { radixToString, regexEditDataTest } from '../../utilities/display' @@ -179,9 +179,9 @@ limitations under the License. } else if (endOffsetTemp <= startOffset) { setErrorMessage('End offset must be greater than start offset') return - } else if (endOffsetTemp > $offsetMax) { + } else if (endOffsetTemp > viewport.offsetMax) { setErrorMessage( - `End offset must be less than or equal to ${$offsetMax}` + `End offset must be less than or equal to ${viewport.offsetMax}` ) return } @@ -211,9 +211,11 @@ limitations under the License. } else if (lengthTemp <= 0) { setErrorMessage('Length must be greater than 0') return - } else if (lengthTemp > $offsetMax - startOffset) { + } else if (lengthTemp > viewport.offsetMax - startOffset) { setErrorMessage( - `Length must be less than or equal to ${$offsetMax - startOffset}` + `Length must be less than or equal to ${ + viewport.offsetMax - startOffset + }` ) return } @@ -401,7 +403,7 @@ limitations under the License. <div class="stats"> <label for="computed-size" > Max Offset: <span id="computed-size" class="nowrap" - >{$offsetMax}</span + >{viewport.offsetMax}</span ></label > <label for="min-frequency" diff --git a/src/svelte/src/components/Header/Header.svelte b/src/svelte/src/components/Header/Header.svelte index 0a926ae..e04cbfd 100644 --- a/src/svelte/src/components/Header/Header.svelte +++ b/src/svelte/src/components/Header/Header.svelte @@ -16,11 +16,12 @@ limitations under the License. --> <script lang="ts"> import FileMetrics from './fieldsets/FileMetrics.svelte' - import { fileMetrics } from './fieldsets/FileMetrics' import SearchReplace from './fieldsets/SearchReplace.svelte' import Settings from './fieldsets/Settings.svelte' import FlexContainer from '../layouts/FlexContainer.svelte' import { UIThemeCSSClass } from '../../utilities/colorScheme' + import { fileMetrics } from '../../stores' + let hideChildren = false </script> diff --git a/src/svelte/src/components/Header/fieldsets/FileMetrics.svelte b/src/svelte/src/components/Header/fieldsets/FileMetrics.svelte index 429478c..ca5a559 100644 --- a/src/svelte/src/components/Header/fieldsets/FileMetrics.svelte +++ b/src/svelte/src/components/Header/fieldsets/FileMetrics.svelte @@ -17,14 +17,13 @@ limitations under the License. <script lang="ts"> import Button from '../../Inputs/Buttons/Button.svelte' import FlexContainer from '../../layouts/FlexContainer.svelte' - import { fileMetrics } from './FileMetrics' import { MessageCommand } from '../../../utilities/message' import { vscode } from '../../../utilities/vscode' - import { saveable } from '../../../stores' + import { saveable, fileMetrics } from '../../../stores' import { createEventDispatcher } from 'svelte' import SidePanel from '../../layouts/SidePanel.svelte' import ByteFrequencyGraph from '../../DataMetrics/ByteFrequencyGraph.svelte' - import { viewport } from '../../DataDisplays/CustomByteDisplay/BinaryData' + import { viewport } from '../../../stores' import { humanReadableByteLength } from '../../../utilities/display' import { DATA_PROFILE_MAX_LENGTH } from '../../../stores/configuration' import Tooltip from '../../layouts/Tooltip.svelte' diff --git a/src/svelte/src/components/Header/fieldsets/FileMetrics.ts b/src/svelte/src/components/Header/fieldsets/FileMetrics.ts index 45e64de..053f915 100644 --- a/src/svelte/src/components/Header/fieldsets/FileMetrics.ts +++ b/src/svelte/src/components/Header/fieldsets/FileMetrics.ts @@ -24,10 +24,8 @@ class FileMetricsData { undoCount: number = 0 } -class FileMetrics extends SimpleWritable<FileMetricsData> { +export class FileMetrics extends SimpleWritable<FileMetricsData> { protected init(): FileMetricsData { return new FileMetricsData() } } - -export const fileMetrics = new FileMetrics() diff --git a/src/svelte/src/components/Header/fieldsets/SearchReplace.svelte b/src/svelte/src/components/Header/fieldsets/SearchReplace.svelte index 36251a7..7f32d7a 100644 --- a/src/svelte/src/components/Header/fieldsets/SearchReplace.svelte +++ b/src/svelte/src/components/Header/fieldsets/SearchReplace.svelte @@ -18,11 +18,10 @@ limitations under the License. import { addressRadix, allowCaseInsensitiveSearch, + editorActionsAllowed, editorEncoding, seekable, seekOffsetInput, - } from '../../../stores' - import { replaceable, replaceErr, replaceQuery, @@ -30,7 +29,7 @@ limitations under the License. searchErr, searchQuery, seekErr, - } from './SearchReplace' + } from '../../../stores' import { vscode } from '../../../utilities/vscode' import { MessageCommand } from '../../../utilities/message' @@ -38,18 +37,15 @@ limitations under the License. import Button from '../../Inputs/Buttons/Button.svelte' import Input from '../../Inputs/Input/Input.svelte' import FlexContainer from '../../layouts/FlexContainer.svelte' - import { createEventDispatcher, tick } from 'svelte' + import { createEventDispatcher } from 'svelte' import { UIThemeCSSClass } from '../../../utilities/colorScheme' import ToggleableButton from '../../Inputs/Buttons/ToggleableButton.svelte' import { clearSearchResultsHighlights, updateSearchResultsHighlights, } from '../../../utilities/highlights' - import { viewport } from '../../DataDisplays/CustomByteDisplay/BinaryData' - import { - EditActionRestrictions, - editorActionsAllowed, - } from '../../../stores/configuration' + import { viewport } from '../../../stores' + import { EditActionRestrictions } from '../../../stores/configuration' const eventDispatcher = createEventDispatcher() diff --git a/src/svelte/src/components/Header/fieldsets/SearchReplace.ts b/src/svelte/src/components/Header/fieldsets/SearchReplace.ts index 45bdd7f..089ec07 100644 --- a/src/svelte/src/components/Header/fieldsets/SearchReplace.ts +++ b/src/svelte/src/components/Header/fieldsets/SearchReplace.ts @@ -18,10 +18,6 @@ import { SimpleWritable } from '../../../stores/localStore' import { addressRadix, seekOffsetInput } from '../../../stores' import { get } from 'svelte/store' -import { validateEncodingStr } from '../../../utilities/display' -import { ErrorStore, ErrorComponentType } from '../../Error/Error' -import { editorEncoding, selectionDataStore } from '../../../stores' -import { derived } from 'svelte/store' interface QueryableData { input: string @@ -37,7 +33,7 @@ class SearchData implements QueryableData { overflow: boolean = false byteLength: number = 0 } -class SearchQuery extends SimpleWritable<SearchData> { +export class SearchQuery extends SimpleWritable<SearchData> { protected init(): SearchData { return new SearchData() } @@ -80,55 +76,3 @@ export class ReplaceQuery extends SimpleWritable<ReplaceData> { return new ReplaceData() } } - -export const searchQuery = new SearchQuery() -export const replaceQuery = new ReplaceQuery() - -export const searchErr = new ErrorStore(ErrorComponentType.SYMBOL) -export const replaceErr = new ErrorStore(ErrorComponentType.SYMBOL) -export const seekErr = new ErrorStore(ErrorComponentType.SYMBOL) - -export const searchable = derived( - [searchQuery, editorEncoding], - ([$searchQuery, $editorEncoding]) => { - if ($searchQuery.input.length === 0 || $searchQuery.processing) { - searchErr.update(() => { - return '' - }) - return false - } - const ret = validateEncodingStr($searchQuery.input, $editorEncoding, 'full') - searchErr.update(() => { - return ret.errMsg - }) - return ret.valid - } -) - -export const replaceable = derived( - [replaceQuery, editorEncoding, searchable, selectionDataStore], - ([$replaceData, $editorEncoding, $searchable, $selectionData]) => { - if ( - $replaceData.input.length < 0 || - !$searchable || - $replaceData.processing - ) { - replaceErr.update(() => { - return '' - }) - return false - } - if ($selectionData.active) { - replaceErr.update(() => { - return 'Cannot replace while viewport data is selected' - }) - return false - } - - const ret = validateEncodingStr($replaceData.input, $editorEncoding) - replaceErr.update(() => { - return ret.errMsg - }) - return ret.valid - } -) diff --git a/src/svelte/src/components/Header/fieldsets/Settings.svelte b/src/svelte/src/components/Header/fieldsets/Settings.svelte index 298388e..2605a7e 100644 --- a/src/svelte/src/components/Header/fieldsets/Settings.svelte +++ b/src/svelte/src/components/Header/fieldsets/Settings.svelte @@ -19,9 +19,12 @@ limitations under the License. RADIX_OPTIONS, ENCODING_GROUPS, EDIT_ACTIONS, - editorActionsAllowed, } from '../../../stores/configuration' - import { displayRadix, editorEncoding } from '../../../stores' + import { + displayRadix, + editorEncoding, + editorActionsAllowed, + } from '../../../stores' import FlexContainer from '../../layouts/FlexContainer.svelte' import { UIThemeCSSClass } from '../../../utilities/colorScheme' </script> diff --git a/src/svelte/src/components/Inputs/Buttons/Button.svelte b/src/svelte/src/components/Inputs/Buttons/Button.svelte index acad004..1b624d6 100644 --- a/src/svelte/src/components/Inputs/Buttons/Button.svelte +++ b/src/svelte/src/components/Inputs/Buttons/Button.svelte @@ -15,14 +15,14 @@ See the License for the specific language governing permissions and limitations under the License. --> <script lang="ts"> + import Tooltip from '../../layouts/Tooltip.svelte' + import FlexContainer from '../../layouts/FlexContainer.svelte' import { onMount } from 'svelte' + import { UIThemeCSSClass } from '../../../utilities/colorScheme' + import { tooltipsEnabled } from '../../../stores' export let fn: (event?: Event) => void export let disabledBy = false export let width = '' - import { UIThemeCSSClass } from '../../../utilities/colorScheme' - import FlexContainer from '../../layouts/FlexContainer.svelte' - import Tooltip from '../../layouts/Tooltip.svelte' - import { tooltipsEnabled } from '../../../utilities/display' onMount(() => { collapseContent = document.body.clientWidth <= 1600 diff --git a/src/svelte/src/components/Inputs/Buttons/ToggleableButton.svelte b/src/svelte/src/components/Inputs/Buttons/ToggleableButton.svelte index dfd5079..388cccf 100644 --- a/src/svelte/src/components/Inputs/Buttons/ToggleableButton.svelte +++ b/src/svelte/src/components/Inputs/Buttons/ToggleableButton.svelte @@ -19,9 +19,9 @@ limitations under the License. export let disabledBy = false export let width = '' export let active = false - import { UIThemeCSSClass } from '../../../utilities/colorScheme' - import FlexContainer from '../../layouts/FlexContainer.svelte' import Tooltip from '../../layouts/Tooltip.svelte' + import FlexContainer from '../../layouts/FlexContainer.svelte' + import { UIThemeCSSClass } from '../../../utilities/colorScheme' export let description: string </script> diff --git a/src/svelte/src/components/ServerMetrics/ServerMetrics.svelte b/src/svelte/src/components/ServerMetrics/ServerMetrics.svelte index a8b98a4..e18bfc3 100644 --- a/src/svelte/src/components/ServerMetrics/ServerMetrics.svelte +++ b/src/svelte/src/components/ServerMetrics/ServerMetrics.svelte @@ -15,8 +15,8 @@ See the License for the specific language governing permissions and limitations under the License. --> <script lang="ts"> - import { MessageCommand } from '../../utilities/message' import FlexContainer from '../layouts/FlexContainer.svelte' + import { MessageCommand } from '../../utilities/message' let heartbeat = { latency: 0, @@ -28,7 +28,7 @@ limitations under the License. serverVersion: 'Unknown', sessionCount: 0, } - let timerId: number = 0 + let timerId: NodeJS.Timeout function showHeartbeatInfo(show: boolean) { const element = document.getElementsByClassName( diff --git a/src/svelte/src/components/dataEditor.svelte b/src/svelte/src/components/dataEditor.svelte index 47c799c..4cb9c24 100644 --- a/src/svelte/src/components/dataEditor.svelte +++ b/src/svelte/src/components/dataEditor.svelte @@ -29,14 +29,13 @@ limitations under the License. requestable, selectionDataStore, selectionSize, - viewportCapacity, - viewportEndOffset, - viewportFollowingByteCount, viewportNumLinesDisplayed, - viewportStartOffset, dataFeedLineTop, SelectionData_t, dataFeedAwaitRefresh, + fileMetrics, + viewport, + searchQuery, } from '../stores' import { CSSThemeClass, @@ -47,22 +46,18 @@ limitations under the License. import { vscode } from '../utilities/vscode' import Header from './Header/Header.svelte' import Main from './Main.svelte' - import { EditByteModes } from '../stores/configuration' + import { EditByteModes, NUM_LINES_DISPLAYED } from '../stores/configuration' import ServerMetrics from './ServerMetrics/ServerMetrics.svelte' import { enterKeypressEvents } from '../utilities/enterKeypressEvents' - import { - type EditEvent, - viewport, + import type { + EditEvent, ViewportData_t, } from './DataDisplays/CustomByteDisplay/BinaryData' - import { fileMetrics } from './Header/fieldsets/FileMetrics' import { - DISPLAYED_DATA_LINES, byte_count_divisible_offset, viewport_offset_to_line_num, } from '../utilities/display' import { clearSearchResultsHighlights } from '../utilities/highlights' - import { searchQuery } from './Header/fieldsets/SearchReplace' $: $UIThemeCSSClass = $darkUITheme ? CSSThemeClass.Dark : CSSThemeClass.Light @@ -124,7 +119,7 @@ limitations under the License. viewportStartOffset, $bytesPerRow ) - - (DISPLAYED_DATA_LINES - 1) + (NUM_LINES_DISPLAYED - 1) : viewport_offset_to_line_num(offset, viewportStartOffset, $bytesPerRow) $dataFeedAwaitRefresh = true @@ -144,47 +139,6 @@ limitations under the License. clearDataDisplays() } - function scrolledToEnd(_: Event) { - if ($viewportFollowingByteCount > 0) { - // top the display must be the last page of the current viewport, plus one line - const topOfLastPagePlusOneLine = - $viewportEndOffset + - $bytesPerRow - - $viewportNumLinesDisplayed * $bytesPerRow - - vscode.postMessage({ - command: MessageCommand.scrollViewport, - data: { - // scroll the viewport with the desired offset in the middle - scrollOffset: $viewportEndOffset - Math.floor($viewportCapacity / 2), - bytesPerRow: $bytesPerRow, - numLinesDisplayed: $viewportNumLinesDisplayed, - }, - }) - seek(topOfLastPagePlusOneLine) - } - } - - function scrolledToTop(_: Event) { - if ($viewportStartOffset > 0) { - // offset to scroll to after the viewport is scrolled, which should be the previous line in the file - const topOfFirstPageMinusOneLine = $viewportStartOffset - $bytesPerRow - vscode.postMessage({ - command: MessageCommand.scrollViewport, - data: { - // scroll the viewport with the desired offset in the middle - scrollOffset: Math.max( - topOfFirstPageMinusOneLine - Math.floor($viewportCapacity / 2), - 0 - ), - bytesPerRow: $bytesPerRow, - numLinesDisplayed: $viewportNumLinesDisplayed, - }, - }) - seek(topOfFirstPageMinusOneLine) - } - } - function seekEventHandler(_: CustomEvent) { seek($seekOffset) } @@ -278,6 +232,7 @@ limitations under the License. searchQuery.clear() clearSearchResultsHighlights() } + function handleKeyBind(event: Event) { const kbdEvent = event as KeyboardEvent if (kbdEvent.key === 'Enter') { @@ -325,15 +280,6 @@ limitations under the License. break } }) - - function scrollBoundaryEventHandler(e: CustomEvent) { - if (e.detail.scrolledTop) { - scrolledToTop(e) - } - if (e.detail.scrolledEnd) { - scrolledToEnd(e) - } - } </script> <svelte:window on:keydown|nonpassive={handleKeyBind} /> @@ -350,9 +296,6 @@ limitations under the License. on:clearDataDisplays={clearDataDisplays} on:applyChanges={custom_apply_changes} on:handleEditorEvent={handleEditorEvent} - on:scrolledToTop={scrolledToTop} - on:scrolledToEnd={scrolledToEnd} - on:scrollBoundary={scrollBoundaryEventHandler} on:traverse-file={traversalEventHandler} on:seek={seekEventHandler} /> diff --git a/src/svelte/src/components/layouts/Tooltip.svelte b/src/svelte/src/components/layouts/Tooltip.svelte index c4220f0..dc54251 100644 --- a/src/svelte/src/components/layouts/Tooltip.svelte +++ b/src/svelte/src/components/layouts/Tooltip.svelte @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. --> <script lang="ts"> - import { tooltipsEnabled } from '../../utilities/display' + import { tooltipsEnabled } from '../../stores' const NULL = () => {} diff --git a/src/svelte/src/stores/configuration.ts b/src/svelte/src/stores/configuration.ts index dc17d57..8b681a1 100644 --- a/src/svelte/src/stores/configuration.ts +++ b/src/svelte/src/stores/configuration.ts @@ -15,8 +15,6 @@ * limitations under the License. */ -import { writable } from 'svelte/store' - export type Radixes = 'Hexadecimal' | 'Decimal' | 'Octal' | 'Binary' export type RadixValues = 16 | 10 | 8 | 2 @@ -115,5 +113,3 @@ export const VIEWPORT_CAPACITY_MAX = 16 * 64 // 1024, Ωedit maximum viewport si export const NUM_LINES_DISPLAYED = 20 export const DATA_PROFILE_MAX_LENGTH = 10_000_000 - -export const editorActionsAllowed = writable(EditActionRestrictions.None) diff --git a/src/svelte/src/stores/index.ts b/src/svelte/src/stores/index.ts index f817c04..6723b89 100644 --- a/src/svelte/src/stores/index.ts +++ b/src/svelte/src/stores/index.ts @@ -16,28 +16,32 @@ */ import type { ValidationResponse } from '../utilities/display' -import { - EditByteModes, - UNPRINTABLE_CHAR_STAND_IN, - type RadixValues, - type BytesPerRow, - EditActionRestrictions, - editorActionsAllowed, -} from './configuration' import { ThemeType } from '../utilities/colorScheme' -import { fileMetrics } from '../components/Header/fieldsets/FileMetrics' +import { FileMetrics } from '../components/Header/fieldsets/FileMetrics' +import { derived, writable } from 'svelte/store' +import { SimpleWritable } from './localStore' +import { ErrorComponentType, ErrorStore } from '../components/Error/Error' import { radixBytePad, regexEditDataTest, validateEncodingStr, } from '../utilities/display' -import { derived, writable } from 'svelte/store' -import { SimpleWritable } from './localStore' import { BYTE_ACTION_DIV_OFFSET, - selectedByte, - viewport, + ViewportDataStore_t, + type ByteValue, } from '../components/DataDisplays/CustomByteDisplay/BinaryData' +import { + ReplaceQuery, + SearchQuery, +} from '../components/Header/fieldsets/SearchReplace' +import { + EditByteModes, + UNPRINTABLE_CHAR_STAND_IN, + type RadixValues, + type BytesPerRow, + EditActionRestrictions, +} from './configuration' export class SelectionData_t { startOffset = -1 @@ -107,22 +111,80 @@ export const searchCaseInsensitive = writable(false) export const dataFeedLineTop = writable(0) export const dataFeedAwaitRefresh = writable(false) export const rerenderActionElements = writable(false) -// data in the viewport -// export const viewportData = writable(new Uint8Array(0)) // Viewport properties -export const viewportStartOffset = writable(0) -export const viewportLength = writable(0) -export const viewportFollowingByteCount = writable(0) -export const viewportScrollTop = writable(0) -export const viewportScrollHeight = writable(0) -export const viewportClientHeight = writable(0) -export const viewportCapacity = writable(0) -export const viewportLineHeight = writable(0) +export const viewport = new ViewportDataStore_t() +export const viewportNumLinesDisplayed = writable(20) + +export const bytesPerRow = writable(16 as BytesPerRow) +export const editingByte = writable(false) +export const selectedByte = writable({ + text: '', + offset: -1, + value: -1, +} as ByteValue) + +export const fileMetrics = new FileMetrics() + +export const searchQuery = new SearchQuery() +export const replaceQuery = new ReplaceQuery() + +export const searchErr = new ErrorStore(ErrorComponentType.SYMBOL) +export const replaceErr = new ErrorStore(ErrorComponentType.SYMBOL) +export const seekErr = new ErrorStore(ErrorComponentType.SYMBOL) + +export const editorActionsAllowed = writable(EditActionRestrictions.None) +export const tooltipsEnabled = writable(false) +export const sizeHumanReadable = writable(false) // tracks the start and end offsets of the current selection export const selectionDataStore = new SelectionData() +export const searchable = derived( + [searchQuery, editorEncoding], + ([$searchQuery, $editorEncoding]) => { + if ($searchQuery.input.length === 0 || $searchQuery.processing) { + searchErr.update(() => { + return '' + }) + return false + } + const ret = validateEncodingStr($searchQuery.input, $editorEncoding, 'full') + searchErr.update(() => { + return ret.errMsg + }) + return ret.valid + } +) + +export const replaceable = derived( + [replaceQuery, editorEncoding, searchable, selectionDataStore], + ([$replaceData, $editorEncoding, $searchable, $selectionData]) => { + if ( + $replaceData.input.length < 0 || + !$searchable || + $replaceData.processing + ) { + replaceErr.update(() => { + return '' + }) + return false + } + if ($selectionData.active) { + replaceErr.update(() => { + return 'Cannot replace while viewport data is selected' + }) + return false + } + + const ret = validateEncodingStr($replaceData.input, $editorEncoding) + replaceErr.update(() => { + return ret.errMsg + }) + return ret.valid + } +) + // derived readable enumeration that indicates the edit mode (single byte or multiple bytes) export const editMode = derived( selectionDataStore, @@ -134,41 +196,6 @@ export const editMode = derived( EditByteModes.Single ) -// derived readable number whose value is the number of lines displayed in the viewport -export const viewportNumLinesDisplayed = derived( - [viewportClientHeight, viewportLineHeight], - ([$viewportClientHeight, $viewportLineHeight]) => { - return Math.floor($viewportClientHeight / $viewportLineHeight) + 1 - } -) - -// derived readable number whose value is the end offset of the current viewport -export const viewportEndOffset = derived( - [viewportStartOffset, viewportLength], - ([$viewportStartOffset, $viewportLength]) => { - return $viewportStartOffset + $viewportLength - } -) - -// derived readable boolean that indicates if the viewport is scrolled to the top -export const viewportScrolledToTop = derived( - [viewportScrollTop], - ([$viewportScrollTop]) => { - return $viewportScrollTop === 0 - } -) - -// derived readable boolean that indicates if the viewport is scrolled to the end -export const viewportScrolledToEnd = derived( - [viewportScrollTop, viewportScrollHeight, viewportClientHeight], - ([$viewportScrollTop, $viewportScrollHeight, $viewportClientHeight]) => { - return ( - Math.ceil($viewportScrollTop) + $viewportClientHeight >= - $viewportScrollHeight - ) - } -) - // derived readable number whose value is the size of the current data selection export const selectionSize = derived( [selectionDataStore, editorSelection], @@ -216,11 +243,6 @@ export const editedByteIsOriginalByte = derived( } ) -// derived readable number that indicates the number of encoded bytes per row in each viewport -export const bytesPerRow = derived(displayRadix, ($displayRadix) => { - return $displayRadix === 2 ? 8 : (16 as BytesPerRow) -}) - export const viewportColumnWidth = derived(bytesPerRow, (bytesPerRow) => { return bytesPerRow * BYTE_ACTION_DIV_OFFSET }) @@ -376,10 +398,12 @@ function validRequestableData( } export const dvOffset = derived( - [selectionDataStore, addressRadix], - ([$selectionData, $addressRadix]) => { + [selectionDataStore, addressRadix, viewport], + ([$selectionData, $addressRadix, $viewport]) => { return $selectionData.active - ? $selectionData.startOffset.toString($addressRadix).toUpperCase() + ? ($viewport.fileOffset + $selectionData.startOffset) + .toString($addressRadix) + .toUpperCase() : '' } ) diff --git a/src/svelte/src/utilities/display.ts b/src/svelte/src/utilities/display.ts index 4a9617e..0e2c14f 100644 --- a/src/svelte/src/utilities/display.ts +++ b/src/svelte/src/utilities/display.ts @@ -13,19 +13,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { writable } from 'svelte/store' import { EditByteModes, type BytesPerRow, type RadixValues, } from '../stores/configuration' -export type ViewportReferences = { - physical: HTMLTextAreaElement - address: HTMLTextAreaElement - logical: HTMLTextAreaElement -} - export type Viewport = 'physical' | 'address' | 'logical' export type ValidationResponse = { @@ -45,29 +38,8 @@ const ByteDivWidths = { } export type BinaryBytePrefix = 'B' | 'KB' | 'MB' | 'GB' | 'TB' | 'PB' -export type BinaryBitPrefix = 'b' | 'Kb' | 'Mb' | 'Gb' | 'Tb' | 'Pb' -type ValidByteOctetCount = 1 | 2 | 3 | 4 - -export const DISPLAYED_DATA_LINES = 20 - -export const tooltipsEnabled = writable(false) -export const sizeHumanReadable = writable(false) - -export function viewport_references( - viewport?: Viewport -): ViewportReferences | HTMLTextAreaElement { - return viewport - ? (document.getElementById(viewport) as HTMLTextAreaElement) - : { - physical: document.getElementById('physical') as HTMLTextAreaElement, - address: document.getElementById('address') as HTMLTextAreaElement, - logical: document.getElementById('logical') as HTMLTextAreaElement, - } -} -export function edit_byte_window_ref(): HTMLDivElement { - return document.getElementById('editByteWindow') as HTMLDivElement -} +export type BinaryBitPrefix = 'b' | 'Kb' | 'Mb' | 'Gb' | 'Tb' | 'Pb' export function radixBytePad(radix: RadixValues): number { switch (radix) { diff --git a/src/svelte/src/utilities/highlights.ts b/src/svelte/src/utilities/highlights.ts index 51966b0..1ceeb44 100644 --- a/src/svelte/src/utilities/highlights.ts +++ b/src/svelte/src/utilities/highlights.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { derived, get, readable, writable } from 'svelte/store' +import { derived, readable, writable } from 'svelte/store' import { selectionDataStore } from '../stores' let selectionHighlightLUT = new Uint8Array(1024) diff --git a/yarn.lock b/yarn.lock index c35256a..ab0a7b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,11 +3,11 @@ "@babel/runtime@^7.21.0": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" - integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" + integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== dependencies: - regenerator-runtime "^0.13.11" + regenerator-runtime "^0.14.0" "@cspotcode/source-map-support@^0.8.0": version "0.8.1" @@ -68,12 +68,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/[email protected]": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== - -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": version "3.1.1" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== @@ -91,11 +86,6 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/[email protected]": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" @@ -110,12 +100,12 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@nodelib/[email protected]": version "2.1.5" @@ -279,9 +269,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.44.1" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.1.tgz#d1811559bb6bcd1a76009e3f7883034b78a0415e" - integrity sha512-XpNDc4Z5Tb4x+SW1MriMVeIsMoONHCkWFMkR/aPJbzEsxqHy+4Glu/BqTdPrApfDeMaXbtNh6bseNgl5KaWrSg== + version "8.44.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" + integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -356,9 +346,9 @@ integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q== "@types/node@*", "@types/node@>=12.12.47", "@types/node@>=13.7.0", "@types/node@^20.4.1": - version "20.4.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.5.tgz#9dc0a5cb1ccce4f7a731660935ab70b9c00a5d69" - integrity sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg== + version "20.5.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.0.tgz#7fc8636d5f1aaa3b21e6245e97d56b7f56702313" + integrity sha512-Mgq7eCtoTjT89FqNoTzzXg2XvCi5VMhRV6+I2aYanc6kQCBImeNaAYRs/DyoVqk1YEUJK5gN9VO7HRIdz4Wo3Q== "@types/pug@^2.0.6": version "2.0.6" @@ -385,9 +375,9 @@ integrity sha512-ghW5SfuDmsGDS2A4xkvGsLwDRNc3Vj5rS6rPOyPm/IryZuf3wceZKxgYaUoW+k9f0f/CB7y2c1rRsdOWZWn0PQ== "@types/vscode@^1.60.2": - version "1.80.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.80.0.tgz#e004dd6cde74dafdb7fab64a6e1754bf8165b981" - integrity sha512-qK/CmOdS2o7ry3k6YqU4zD3R2AYlJfbwBoSbKpBoP+GpXNE+0NEgJOli4n0bm0diK5kfBnchgCEj4igQz/44Hg== + version "1.81.0" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.81.0.tgz#c27228dd063002e0e00611be70b0497beaa24d39" + integrity sha512-YIaCwpT+O2E7WOMq0eCgBEABE++SX3Yl/O02GoMIF2DO3qAtvw7m6BXFYsxnc6XyzwZgh6/s/UG78LSSombl2w== "@types/ws@*": version "8.5.5" @@ -466,9 +456,9 @@ keytar "^7.7.0" "@vscode/vsce@^2.18.0": - version "2.20.0" - resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.20.0.tgz#0e81dd9fcbd7ef35bb6aabb4b64aedfac58d9bf4" - integrity sha512-FR8Tq2WgGRi/Py5/9WUFG2DCxdqaHXyuhHXSP8hsNc1FsxNzAkqKqfvOUUGxA7gOytmc9s/000QA7wKVukMDbQ== + version "2.20.1" + resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.20.1.tgz#c37c5867d23667ea3a468d3ec0309c40ae434937" + integrity sha512-ilbvoqvR/1/zseRPBAzYR6aKqSJ+jvda4/BqIwOqTxajpvLtEpK3kMLs77+dJdrlygS+VrP7Yhad8j0ukyD96g== dependencies: azure-devops-node-api "^11.0.1" chalk "^2.4.2" @@ -980,9 +970,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001517: - version "1.0.30001518" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001518.tgz#b3ca93904cb4699c01218246c4d77a71dbe97150" - integrity sha512-rup09/e3I0BKjncL+FesTayKtPrdwKhUufQFd3riFw1hHg8JmIFoInYfB102cFcY/pPgGmdyl/iy+jgiDi2vdA== + version "1.0.30001520" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001520.tgz#62e2b7a1c7b35269594cf296a80bdf8cb9565006" + integrity sha512-tahF5O9EiiTzwTUqAeFjIZbn4Dnqxzz7ktrgGlMYNLH43Ul26IgTMH/zvL3DG0lZxBYnlT04axvInszUsZULdA== chai@^4.3.7: version "4.3.7" @@ -1183,11 +1173,16 @@ commander@^9.3.0: resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -compare-versions@^5.0.1, compare-versions@^5.0.3: +compare-versions@^5.0.1: version "5.0.3" resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-5.0.3.tgz#a9b34fea217472650ef4a2651d905f42c28ebfd7" integrity sha512-4UZlZP8Z99MGEY+Ovg/uJxJuvoXuN4M6B3hKaiackiHrgzQFEe3diJi1mf1PNHbFujM7FvLrK2bpgIaImbtZ1A== +compare-versions@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-6.1.0.tgz#3f2131e3ae93577df111dba133e6db876ffe127a" + integrity sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg== + [email protected]: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1477,9 +1472,9 @@ duplexer2@~0.1.4: readable-stream "^2.0.2" electron-to-chromium@^1.4.477: - version "1.4.477" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.477.tgz#05669aa6f161ee9076a6805457e9bd9fe6d0dfd1" - integrity sha512-shUVy6Eawp33dFBFIoYbIwLHrX0IZ857AlH9ug2o4rvbWmpaCUdBpQ5Zw39HRrfzAFm4APJE9V+E2A/WB0YqJw== + version "1.4.490" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz#d99286f6e915667fa18ea4554def1aa60eb4d5f1" + integrity sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A== emoji-regex@^8.0.0: version "8.0.0" @@ -1973,9 +1968,9 @@ immediate@~3.0.5: integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== immutable@^4.0.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.1.tgz#17988b356097ab0719e2f741d56f3ec6c317f9dc" - integrity sha512-lj9cnmB/kVS0QHsJnYKD1uo3o39nrbKxszjnqS9Fr6NB7bZzW45U6WSGBPKXDL/CvDKqDNPA4r3DoDQ8GTxo2A== + version "4.3.2" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.2.tgz#f89d910f8dfb6e15c03b2cae2faaf8c1f66455fe" + integrity sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA== import-fresh@^3.2.1: version "3.3.0" @@ -2023,10 +2018,10 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" @@ -2488,13 +2483,13 @@ [email protected]: yargs-unparser "2.0.0" monaco-page-objects@^3.5.1: - version "3.8.0" - resolved "https://registry.yarnpkg.com/monaco-page-objects/-/monaco-page-objects-3.8.0.tgz#2fac19b213e3adb59fdfe3eb3c38485d306dc68a" - integrity sha512-/bsrTHul7KsZ1SmdQFHIdVZTU2Nr+odGpxZAJddWxanX1uEAreqE4H758wI9Ie3mZLFO798lPjv2zaUAi+kDFw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/monaco-page-objects/-/monaco-page-objects-3.9.0.tgz#a01c5b6b52715d4b12eb8a7e111cbbc8705401ce" + integrity sha512-Hw5eJqYAhe/a83xziiIU113RVZ7vUOdyNCPxgjVN+JcKjuLzqgQcSRY0NRnQzfMmckpNUpNfcx6o1nKkiPZv4g== dependencies: clipboardy "^3.0.0" clone-deep "^4.0.1" - compare-versions "^5.0.3" + compare-versions "^6.0.0" fs-extra "^11.1.1" ts-essentials "^9.3.2" @@ -3218,10 +3213,10 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== require-directory@^2.1.1: version "2.1.1" @@ -3256,11 +3251,11 @@ resolve-from@^5.0.0: integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve@^1.20.0: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -3349,9 +3344,9 @@ sanitize-filename@^1.6.3: truncate-utf8-bytes "^1.0.0" sass@^1.57.1: - version "1.64.1" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.64.1.tgz#6a46f6d68e0fa5ad90aa59ce025673ddaa8441cf" - integrity sha512-16rRACSOFEE8VN7SCgBu1MpYCyN7urj9At898tyzdXFhC+a+yOX5dXwAR7L8/IdPJ1NB8OYoXmD55DM30B2kEQ== + version "1.65.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.65.1.tgz#8f283b0c26335a88246a448d22e1342ba2ea1432" + integrity sha512-9DINwtHmA41SEd36eVPQ9BJKpn7eKDQmUHmpI0y5Zv2Rcorrh0zS+cFrt050hdNbmmCNKTW3hV5mWfuegNRsEA== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" @@ -3382,9 +3377,9 @@ schema-utils@^4.0.0, schema-utils@^4.0.1: ajv-keywords "^5.1.0" selenium-webdriver@^4.8.1: - version "4.10.0" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.10.0.tgz#0508cdfbb5ad8470d8fd19db1a69d3e87f474b79" - integrity sha512-hSQPw6jgc+ej/UEcdQPG/iBwwMeCEgZr9HByY/J8ToyXztEqXzU9aLsIyrlj1BywBcStO4JQK/zMUWWrV8+riA== + version "4.11.1" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.11.1.tgz#6a84f68d06199d075e6c2a5448bf08f4249b98c8" + integrity sha512-bvrnr3UZlLScErOmn8gV6cqc+1PYDHn0575CxUR2U14fMWt7OKxSy0lAThhZq4sq4d1HqP8ebz11oiHSlAQ2WA== dependencies: jszip "^3.10.1" tmp "^0.2.1" @@ -3617,9 +3612,9 @@ supports-preserve-symlinks-flag@^1.0.0: integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== svelte-check@^3.0.2: - version "3.4.6" - resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.4.6.tgz#d43de724ad89d1198c96770e9d23965d3379ad44" - integrity sha512-OBlY8866Zh1zHQTkBMPS6psPi7o2umTUyj6JWm4SacnIHXpWFm658pG32m3dKvKFL49V4ntAkfFHKo4ztH07og== + version "3.5.0" + resolved "https://registry.yarnpkg.com/svelte-check/-/svelte-check-3.5.0.tgz#ebf2d29799bdd35d35d7c6298115726708e7e6e3" + integrity sha512-KHujbn4k17xKYLmtCwv0sKKM7uiHTYcQvXnvrCcNU6a7hcszh99zFTIoiu/Sp/ewAw5aJmillJ1Cs8gKLmcX4A== dependencies: "@jridgewell/trace-mapping" "^0.3.17" chokidar "^3.4.1" @@ -3755,9 +3750,9 @@ terser@^5.16.8: source-map-support "~0.5.20" thread-stream@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.3.0.tgz#4fc07fb39eff32ae7bad803cb7dd9598349fed33" - integrity sha512-kaDqm1DET9pp3NXwR8382WHbnpXnRkN9xGN9dQt3B2+dmXiW8X1SOwmFOxAErEQ47ObhZ96J6yhZNXuyCOL7KA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.4.0.tgz#5def29598d1d4171ba3bace7e023a71d87d99c07" + integrity sha512-xZYtOtmnA63zj04Q+F9bdEay5r47bvpo1CaNqsKi7TpoJHcotUez8Fkfo2RJWpW91lnnaApdpRbVwCWsy+ifcw== dependencies: real-require "^0.2.0" @@ -3959,9 +3954,9 @@ v8-compile-cache-lib@^3.0.1: integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== vscode-extension-tester-locators@^3.4.1: - version "3.6.0" - resolved "https://registry.yarnpkg.com/vscode-extension-tester-locators/-/vscode-extension-tester-locators-3.6.0.tgz#112f8173fd5d86c9e312a6eae16820ce9525608a" - integrity sha512-RjQf5XL33dJORl9ck5X0vhAHf93TOONPE4nb9nai/pDM15nYcD1TqMyzRGl/XxHpvBu/bP8MV/bHfCT6b8w2cQ== + version "3.7.0" + resolved "https://registry.yarnpkg.com/vscode-extension-tester-locators/-/vscode-extension-tester-locators-3.7.0.tgz#c48454b00a9db1a0c2aebb48f52e162fcb57707a" + integrity sha512-ML9RFOum8GoE4xggYNzUIanFOT4CWUDCK5LFraLEoJ+9rptA5PSLGC+uSPYVKNNU2pG946SPEC3ZJDetc/IeqA== [email protected]: version "5.5.3"
