@singapore-editor/minimap 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/assets/minimap.worker-i4S59IOV.js +1616 -0
- package/dist/assets/minimap.worker-i4S59IOV.js.map +1 -0
- package/dist/color.d.ts +11 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +83 -0
- package/dist/color.js.map +1 -0
- package/dist/decorationMerge.d.ts +10 -0
- package/dist/decorationMerge.d.ts.map +1 -0
- package/dist/decorationMerge.js +65 -0
- package/dist/decorationMerge.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/layout.d.ts +43 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +137 -0
- package/dist/layout.js.map +1 -0
- package/dist/minimap.worker.d.ts +2 -0
- package/dist/minimap.worker.d.ts.map +1 -0
- package/dist/minimapCharRenderer.d.ts +13 -0
- package/dist/minimapCharRenderer.d.ts.map +1 -0
- package/dist/minimapCharRendererFactory.d.ts +14 -0
- package/dist/minimapCharRendererFactory.d.ts.map +1 -0
- package/dist/minimapCharSheet.d.ts +15 -0
- package/dist/minimapCharSheet.d.ts.map +1 -0
- package/dist/minimapCharSheet.js +24 -0
- package/dist/minimapCharSheet.js.map +1 -0
- package/dist/options.d.ts +3 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +65 -0
- package/dist/options.js.map +1 -0
- package/dist/plugin.d.ts +4 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +415 -0
- package/dist/plugin.js.map +1 -0
- package/dist/raster.d.ts +10 -0
- package/dist/raster.d.ts.map +1 -0
- package/dist/renderer.d.ts +58 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/sectionHeaders.d.ts +13 -0
- package/dist/sectionHeaders.d.ts.map +1 -0
- package/dist/style.css +97 -0
- package/dist/types.d.ts +211 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +11 -0
- package/dist/types.js.map +1 -0
- package/dist/viewportGeometry.d.ts +28 -0
- package/dist/viewportGeometry.d.ts.map +1 -0
- package/dist/viewportGeometry.js +22 -0
- package/dist/viewportGeometry.js.map +1 -0
- package/dist/workerClient.d.ts +131 -0
- package/dist/workerClient.d.ts.map +1 -0
- package/dist/workerClient.js +1337 -0
- package/dist/workerClient.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workerClient.js","names":["import.meta.ROLLDOWN_FILE_URL_ogixIX1t6gclV7K9Vtlkgw"],"sources":["../src/workerClient.ts"],"sourcesContent":["import { computeFrameLayout, computeRenderLayout, visibleDocumentLineRange } from './layout'\nimport type { TextEdit } from '@singapore-editor/core/document'\nimport type { EditorTokenStore } from '@singapore-editor/core/syntax'\nimport { createError } from '@singapore-editor/core/logging/evlog'\nimport type {\n EditorContributionChange,\n EditorMinimapDecoration,\n EditorResolvedSelection,\n EditorViewportSnapshot,\n EditorViewSnapshot,\n} from '@singapore-editor/core/extensions'\nimport {\n createEditorSecondaryViewProjection,\n EditorSecondaryViewScheduler,\n type EditorSecondaryViewTextProjection,\n} from '@singapore-editor/core/secondary-views'\nimport { parseCssColor, RGBA_BLACK, RGBA_WHITE, transparent } from './color'\nimport type {\n MinimapBaseStyles,\n MinimapDocumentEditPayload,\n MinimapDocumentPayload,\n MinimapDocumentSummaryPatch,\n MinimapDocumentSummaryPayload,\n MinimapMetrics,\n MinimapSelection,\n MinimapToken,\n MinimapTokenPatch,\n MinimapViewport,\n MinimapWorkerRequest,\n MinimapWorkerResponse,\n ResolvedMinimapOptions,\n RGBA8,\n} from './types'\n\nconst MINIMAP_UPDATE_QUIET_DELAY_MS = 120\nconst MINIMAP_UPDATE_MAX_DELAY_MS = 300\nconst MINIMAP_FRAME_FLUSH_KEY = 'minimap.flush.frame'\nconst MINIMAP_QUIET_FLUSH_KEY = 'minimap.flush.quiet'\nconst MINIMAP_RENDER_KEY = 'minimap.render'\n\nexport type MinimapHost = {\n readonly root: HTMLDivElement\n readonly colorScope: HTMLElement\n readonly mainCanvas: HTMLCanvasElement\n readonly decorationsCanvas: HTMLCanvasElement\n readonly slider: HTMLDivElement\n readonly sliderHorizontal: HTMLDivElement\n readonly shadow: HTMLDivElement\n}\n\nexport type MinimapWorkerClientOptions = {\n readonly host: MinimapHost\n readonly options: ResolvedMinimapOptions\n readonly snapshot: EditorViewSnapshot\n readonly decorations: readonly EditorMinimapDecoration[]\n readonly onLayoutWidth: (width: number) => void\n readonly reservedLane: () => number\n}\n\nexport type MinimapWorkerLifecycleState = 'ready' | 'disposing' | 'disposed' | 'crashed'\n\nexport type MinimapWorkerOwnerSnapshot = {\n readonly lifecycle: MinimapWorkerLifecycleState\n readonly postedRequests: number\n readonly disposalAcknowledged: boolean\n readonly lastError: string | null\n}\n\nexport type MinimapWorkerOwnerOptions = {\n readonly onMessage: (response: MinimapWorkerResponse) => void\n readonly onError?: (error: Error) => void\n readonly workerFactory?: () => Worker\n}\n\nexport class MinimapWorkerOwner {\n private worker: Worker | null = null\n private lifecycle: MinimapWorkerLifecycleState = 'ready'\n private postedRequests = 0\n private disposalAcknowledged = false\n private lastError: Error | null = null\n private disposalPromise: Promise<void> | null = null\n private resolveDisposal: (() => void) | null = null\n private rejectDisposal: ((error: Error) => void) | null = null\n\n public constructor(private readonly options: MinimapWorkerOwnerOptions) {\n this.worker = this.createWorker()\n }\n\n public inspect(): MinimapWorkerOwnerSnapshot {\n return {\n lifecycle: this.lifecycle,\n postedRequests: this.postedRequests,\n disposalAcknowledged: this.disposalAcknowledged,\n lastError: this.lastError?.message ?? null,\n }\n }\n\n public post(request: MinimapWorkerRequest, transfer?: Transferable[]): boolean {\n const handle = this.worker\n if (!this.canPost(handle)) return false\n\n this.postedRequests += 1\n try {\n this.postToWorker(handle, request, transfer)\n return true\n } catch (error) {\n this.fail(workerRequestError(error))\n return false\n }\n }\n\n public dispose(): Promise<void> {\n if (this.lifecycle === 'disposed') return Promise.resolve()\n if (this.disposalPromise) return this.disposalPromise\n\n const handle = this.worker\n if (!handle) {\n this.finishDisposal()\n return Promise.resolve()\n }\n\n this.lifecycle = 'disposing'\n this.disposalPromise = new Promise((resolve, reject) => {\n this.resolveDisposal = resolve\n this.rejectDisposal = reject\n })\n if (!this.post({ type: 'dispose' }))\n this.rejectDisposal?.(this.lastError ?? workerDisposedError())\n return this.disposalPromise\n }\n\n private createWorker(): Worker {\n const handle =\n this.options.workerFactory?.() ??\n new Worker(new URL('./minimap.worker.ts', import.meta.url), { type: 'module' })\n handle.onmessage = this.handleWorkerMessage\n handle.onerror = this.handleWorkerError\n return handle\n }\n\n private canPost(handle: Worker | null): handle is Worker {\n if (!handle) return false\n if (this.lifecycle === 'disposed') return false\n return this.lifecycle !== 'crashed'\n }\n\n private postToWorker(\n handle: Worker,\n request: MinimapWorkerRequest,\n transfer?: Transferable[],\n ): void {\n if (transfer) {\n handle.postMessage(request, transfer)\n return\n }\n\n handle.postMessage(request)\n }\n\n private readonly handleWorkerMessage = (event: MessageEvent<MinimapWorkerResponse>): void => {\n const response = event.data\n if (response.type === 'disposed') {\n this.disposalAcknowledged = true\n this.finishDisposal()\n return\n }\n\n if (response.type === 'error') {\n this.recordError(createWorkerResponseError(response))\n return\n }\n\n this.options.onMessage(response)\n }\n\n private readonly handleWorkerError = (event: ErrorEvent): void => {\n this.fail(createNativeWorkerError(event))\n }\n\n private recordError(error: Error): void {\n this.lastError = error\n this.options.onError?.(error)\n }\n\n private fail(error: Error): void {\n this.lastError = error\n this.lifecycle = 'crashed'\n this.terminateWorker()\n this.rejectDisposal?.(error)\n this.clearDisposalHandlers()\n this.options.onError?.(error)\n }\n\n private finishDisposal(): void {\n this.lifecycle = 'disposed'\n this.terminateWorker()\n this.resolveDisposal?.()\n this.clearDisposalHandlers()\n }\n\n private terminateWorker(): void {\n this.worker?.terminate()\n this.worker = null\n }\n\n private clearDisposalHandlers(): void {\n this.resolveDisposal = null\n this.rejectDisposal = null\n }\n}\n\nexport class MinimapWorkerClient {\n private readonly host: MinimapHost\n private readonly options: ResolvedMinimapOptions\n private readonly workerOwner: MinimapWorkerOwner\n private readonly colorResolver: ColorResolver\n private readonly scheduler = new EditorSecondaryViewScheduler()\n private readonly onLayoutWidth: (width: number) => void\n private readonly reservedLane: () => number\n private externalDecorations: readonly EditorMinimapDecoration[]\n private pendingUpdate: PendingMinimapUpdate | null = null\n private pendingUpdateReady = false\n private pendingRender = false\n private activeRenderToken = 0\n private renderInFlight = false\n private latestBaseStyles: MinimapBaseStyles | null = null\n private latestBaseStylesSignature = ''\n private latestLayoutSignature = ''\n private latestThemeSignature = ''\n private latestSnapshot: EditorViewSnapshot\n private latestViewport: EditorViewportSnapshot\n private postedViewport: MinimapViewport | null = null\n private latestFullDocumentSnapshot: EditorViewSnapshot | null = null\n // Mirror of the worker's current document summary; the authoritative\n // pre-edit baseline for incremental patch accounting.\n private workerDocumentState: WorkerDocumentState | null = null\n private latestTokenSource: EditorTokenStore | null\n private disposed = false\n\n public constructor(options: MinimapWorkerClientOptions) {\n this.host = options.host\n this.options = options.options\n this.onLayoutWidth = options.onLayoutWidth\n this.reservedLane = options.reservedLane\n this.externalDecorations = options.decorations\n this.latestSnapshot = options.snapshot\n this.latestViewport = options.snapshot.viewport\n this.latestTokenSource = options.snapshot.tokens\n this.colorResolver = new ColorResolver(options.host.colorScope)\n this.workerOwner = new MinimapWorkerOwner({\n onError: this.handleWorkerError,\n onMessage: this.handleWorkerMessage,\n })\n this.init(options.snapshot)\n }\n\n public inspectWorker(): MinimapWorkerOwnerSnapshot {\n return this.workerOwner.inspect()\n }\n\n public update(\n snapshot: EditorViewSnapshot,\n kind: string,\n change?: EditorContributionChange | null,\n ): void {\n if (this.disposed) return\n if (this.shouldSkipDocumentUpdate(snapshot, kind)) {\n this.latestSnapshot = snapshot\n return\n }\n\n const previousSnapshot = this.latestSnapshot\n this.latestSnapshot = snapshot\n if (kind === 'viewport') {\n this.latestViewport = snapshot.viewport\n const layoutUpdated = this.postLayoutIfNeeded(snapshot)\n this.updateViewport(snapshot.viewport)\n if (layoutUpdated) this.requestRender()\n return\n }\n\n const update = createPendingUpdate(snapshot, kind, change, previousSnapshot)\n this.latestViewport = snapshot.viewport\n this.applyImmediateViewport()\n this.queueUpdate(update)\n }\n\n private queueUpdate(update: PendingMinimapUpdate): void {\n this.pendingUpdate = mergePendingUpdate(this.pendingUpdate, update)\n recordMinimapPerformanceDiagnostic('minimap.updateClassification', () =>\n pendingUpdateDiagnostics(update),\n )\n if (!this.renderInFlight) this.scheduleFlush()\n }\n\n public updateViewport(viewport: EditorViewportSnapshot): void {\n if (this.disposed) return\n\n this.latestViewport = viewport\n this.applyImmediateViewport()\n const next = this.viewport(this.latestSnapshot)\n if (sameViewport(this.postedViewport, next)) return\n\n this.postedViewport = next\n this.post({ type: 'updateViewport', viewport: next })\n this.requestRender()\n }\n\n public frameLayout() {\n const viewport = this.viewport(this.latestSnapshot)\n const metrics = this.metrics(this.latestSnapshot)\n const renderLayout = computeRenderLayout({\n minimap: this.options,\n metrics,\n viewport,\n lineCount: this.latestSnapshot.lineCount,\n })\n return computeFrameLayout({\n renderLayout,\n metrics,\n viewport,\n lineCount: this.latestSnapshot.lineCount,\n realLineCount: this.latestSnapshot.lineCount,\n previous: null,\n })\n }\n\n public setExternalDecorations(decorations: readonly EditorMinimapDecoration[]): void {\n if (this.disposed) return\n\n this.externalDecorations = decorations\n this.queueUpdate(\n createPendingUpdate(this.latestSnapshot, 'decorations', null, this.latestSnapshot),\n )\n }\n\n public dispose(): void {\n if (this.disposed) return\n\n this.disposed = true\n this.cancelScheduledFlush()\n this.scheduler.dispose()\n void this.workerOwner.dispose().catch(() => undefined)\n this.colorResolver.dispose()\n }\n\n private init(snapshot: EditorViewSnapshot): void {\n const mainCanvas = this.host.mainCanvas.transferControlToOffscreen()\n const decorationsCanvas = this.host.decorationsCanvas.transferControlToOffscreen()\n const baseStyles = this.baseStyles()\n this.latestBaseStyles = baseStyles\n this.latestBaseStylesSignature = baseStylesSignature(baseStyles)\n this.latestThemeSignature = themeSignature(snapshot)\n const request: MinimapWorkerRequest = {\n type: 'init',\n options: this.options,\n baseStyles,\n mainCanvas,\n decorationsCanvas,\n }\n\n this.post(request, [mainCanvas, decorationsCanvas])\n this.post({ type: 'openDocument', document: this.trackedDocumentPayload(snapshot) })\n this.latestFullDocumentSnapshot = snapshot\n this.postedViewport = this.viewport(snapshot)\n this.post({\n type: 'updateLayout',\n metrics: this.metrics(snapshot),\n viewport: this.postedViewport,\n })\n this.latestLayoutSignature = layoutSignature(snapshot, this.minimapHeight(snapshot))\n this.postRender(snapshot)\n }\n\n private scheduleFlush(): void {\n const pending = this.pendingUpdate\n if (!pending) return\n if (this.pendingUpdateReady) {\n this.scheduleFrameFlush()\n return\n }\n if (shouldDeferMinimapUpdate(pending)) {\n this.scheduleDeferredFlush()\n return\n }\n\n this.scheduleFrameFlush()\n }\n\n private scheduleFrameFlush(): void {\n this.scheduler.schedule({\n key: MINIMAP_FRAME_FLUSH_KEY,\n taskClass: 'visible-render',\n priority: 'high',\n tags: { configuration: 'frame', version: this.latestSnapshot.textVersion },\n run: () => this.flushPendingUpdate(),\n })\n }\n\n private scheduleDeferredFlush(): void {\n this.cancelScheduledFrame()\n // One key: the scheduler caps how long continuous edits may postpone the\n // quiet delay, which previously needed a second non-replacing key running\n // the same callback.\n this.scheduler.schedule({\n key: MINIMAP_QUIET_FLUSH_KEY,\n taskClass: 'background-derived',\n priority: 'low',\n delayMs: MINIMAP_UPDATE_QUIET_DELAY_MS,\n maxDelayMs: MINIMAP_UPDATE_MAX_DELAY_MS,\n tags: { configuration: 'quiet', version: this.latestSnapshot.textVersion },\n run: this.flushDeferredUpdate,\n })\n }\n\n private flushDeferredUpdate = (): void => {\n this.cancelDeferredFlush()\n this.pendingUpdateReady = true\n this.scheduleFrameFlush()\n }\n\n private flushPendingUpdate(): void {\n if (this.disposed) return\n if (this.renderInFlight) return\n\n const pending = this.pendingUpdate\n if (!pending) return\n\n measureMinimapPerformance(\n 'minimap.flushPendingUpdate',\n () => this.flushPendingUpdateNow(pending),\n () => pendingUpdateDiagnostics(pending),\n )\n }\n\n private flushPendingUpdateNow(pending: PendingMinimapUpdate): void {\n this.pendingUpdate = null\n this.pendingUpdateReady = false\n measureMinimapPerformance(\n 'minimap.postUpdate',\n () => this.postUpdate(pending),\n () => pendingUpdateDiagnostics(pending),\n )\n const layoutUpdated = this.postLayoutIfNeeded(pending.snapshot)\n this.postViewportIfNeeded(pending.snapshot, pending.syncViewport, layoutUpdated)\n this.postRender(pending.snapshot)\n }\n\n private postLayoutIfNeeded(snapshot: EditorViewSnapshot): boolean {\n const signature = layoutSignature(snapshot, this.minimapHeight(snapshot))\n if (signature === this.latestLayoutSignature) return false\n\n this.latestLayoutSignature = signature\n this.postedViewport = this.viewport(snapshot)\n this.post({\n type: 'updateLayout',\n metrics: this.metrics(snapshot),\n viewport: this.postedViewport,\n })\n return true\n }\n\n private postViewportIfNeeded(\n snapshot: EditorViewSnapshot,\n syncViewport: boolean,\n layoutUpdated: boolean,\n ): void {\n if (layoutUpdated) return\n if (!syncViewport) return\n\n this.postedViewport = this.viewport(snapshot)\n this.post({ type: 'updateViewport', viewport: this.postedViewport })\n }\n\n private postUpdate(update: PendingMinimapUpdate): void {\n const snapshot = update.snapshot\n let tokenColorsInvalidated = false\n if (update.syncBaseStyles) {\n tokenColorsInvalidated = this.refreshThemeColorCache(snapshot)\n tokenColorsInvalidated = this.syncBaseStyles() || tokenColorsInvalidated\n }\n\n if (update.replaceDocument) {\n this.post({ type: 'replaceDocument', document: this.trackedDocumentPayload(snapshot) })\n this.latestFullDocumentSnapshot = snapshot\n this.latestTokenSource = snapshot.tokens\n return\n }\n\n if (update.edits.length > 0) {\n this.latestFullDocumentSnapshot = null\n this.postEditUpdate(update)\n this.latestTokenSource = update.tokenSourceAfterEdits\n }\n if (update.syncTokens) {\n this.postTokenUpdate(snapshot, tokenColorsInvalidated)\n }\n if (update.syncSelection && update.edits.length === 0) {\n this.post({ type: 'updateSelection', selections: selections(snapshot.selections) })\n }\n if (update.syncExternalDecorations) {\n this.post({\n type: 'updateExternalDecorations',\n decorations: this.externalDecorations,\n })\n }\n }\n\n private postEditUpdate(update: PendingMinimapUpdate): void {\n const document = this.documentEditPayload(update, this.workerDocumentState)\n const patch = document.summaryPatch\n if (this.workerDocumentState) {\n this.workerDocumentState = {\n textLength: patch.textLength,\n lineCount: this.workerDocumentState.lineCount - patch.deleteCount + patch.lines.length,\n }\n }\n if (update.edits.length === 1) {\n this.post({ type: 'applyEdit', edit: update.edits[0]!, document })\n return\n }\n\n this.post({ type: 'applyEdits', edits: update.edits, document })\n }\n\n private trackedDocumentPayload(snapshot: EditorViewSnapshot): MinimapDocumentPayload {\n const document = this.documentPayload(snapshot)\n this.workerDocumentState = {\n textLength: document.textLength,\n lineCount: document.lines.length,\n }\n return document\n }\n\n private postTokenUpdate(snapshot: EditorViewSnapshot, forceFullUpdate: boolean): void {\n const sourceTokens = this.latestTokenSource\n if (forceFullUpdate || !sourceTokens) {\n this.postFullTokenUpdate(snapshot)\n return\n }\n\n const patch = this.tokenPatch(sourceTokens, snapshot.tokens)\n this.latestTokenSource = snapshot.tokens\n if (patch.deleteCount === 0 && patch.tokens.length === 0) return\n\n this.post({ type: 'updateTokenRange', patch })\n }\n\n private postFullTokenUpdate(snapshot: EditorViewSnapshot): void {\n this.post({ type: 'updateTokens', tokens: this.tokens(snapshot.tokens) })\n this.latestTokenSource = snapshot.tokens\n }\n\n private tokenPatch(previous: EditorTokenStore, next: EditorTokenStore): MinimapTokenPatch {\n const range = previous.changedRangeTo(next)\n return {\n start: range.start,\n deleteCount: range.deleteCount,\n tokens: this.tokens(next, range.start, range.insertEnd),\n }\n }\n\n private syncBaseStyles(): boolean {\n const styles = this.baseStyles()\n const signature = baseStylesSignature(styles)\n if (signature === this.latestBaseStylesSignature) return false\n\n this.latestBaseStyles = styles\n this.latestBaseStylesSignature = signature\n this.colorResolver.clear()\n this.post({ type: 'updateBaseStyles', baseStyles: styles })\n return true\n }\n\n private refreshThemeColorCache(snapshot: EditorViewSnapshot): boolean {\n const signature = themeSignature(snapshot)\n if (signature === this.latestThemeSignature) return false\n\n this.latestThemeSignature = signature\n this.colorResolver.clear()\n return true\n }\n\n private shouldSkipDocumentUpdate(snapshot: EditorViewSnapshot, kind: string): boolean {\n if (kind !== 'document') return false\n const latest = this.latestFullDocumentSnapshot\n if (!latest) return false\n return latest === snapshot\n }\n\n private requestRender(): void {\n if (this.renderInFlight) {\n this.pendingRender = true\n return\n }\n this.postRender(this.latestSnapshot)\n }\n\n private postRender(snapshot: EditorViewSnapshot): void {\n this.pendingRender = false\n let renderToken = 0\n const handle = this.scheduler.schedule({\n key: MINIMAP_RENDER_KEY,\n taskClass: 'visible-render',\n priority: 'high',\n defer: true,\n tags: {\n configuration: 'render',\n snapshotVersion: snapshot.textVersion,\n viewport: snapshot.viewport.visibleRange.start,\n },\n run: (context) => this.postScheduledRender(snapshot, context.token),\n cancel: () => this.cancelScheduledRender(renderToken),\n })\n\n renderToken = handle.token\n this.activeRenderToken = handle.token\n this.renderInFlight = true\n }\n\n private postScheduledRender(snapshot: EditorViewSnapshot, token: number): void {\n if (token !== this.activeRenderToken) return\n\n this.pendingRender = false\n this.sizeCanvasElements(snapshot)\n this.post({ type: 'render', sequence: token })\n }\n\n private cancelScheduledRender(token: number): void {\n if (token !== this.activeRenderToken) return\n\n this.activeRenderToken = 0\n this.renderInFlight = false\n }\n\n private applyImmediateViewport(): void {\n const frame = this.frameLayout()\n setStyleValue(this.host.slider, 'display', frame.sliderNeeded ? 'block' : 'none')\n setStyleValue(this.host.slider, 'transform', `translate3d(0, ${frame.sliderTop}px, 0)`)\n setStyleValue(this.host.slider, 'height', `${frame.sliderHeight}px`)\n setStyleValue(this.host.sliderHorizontal, 'height', `${frame.sliderHeight}px`)\n setClassName(\n this.host.shadow,\n shadowVisible(this.latestViewport)\n ? 'editor-minimap-shadow editor-minimap-shadow-visible'\n : 'editor-minimap-shadow editor-minimap-shadow-hidden',\n )\n }\n\n private documentPayload(snapshot: EditorViewSnapshot): MinimapDocumentPayload {\n const projection = createEditorSecondaryViewProjection(snapshot)\n let payload: MinimapDocumentPayload | null = null\n return measureMinimapPerformance(\n 'minimap.documentPayload',\n () => {\n payload = {\n ...documentSummaryPayload(projection.text, this.options.maxColumn),\n tokens: this.tokens(projection.syntaxColors.tokens),\n selections: selections(projection.selections),\n decorations: this.externalDecorations,\n externalDecorations: this.externalDecorations,\n }\n return payload\n },\n () => documentPayloadDiagnostics(payload),\n )\n }\n\n private documentEditPayload(\n update: PendingMinimapUpdate,\n workerDocument: WorkerDocumentState | null,\n ): MinimapDocumentEditPayload {\n const snapshot = update.snapshot\n const projection = createEditorSecondaryViewProjection(snapshot)\n let payload: MinimapDocumentEditPayload | null = null\n return measureMinimapPerformance(\n 'minimap.documentEditPayload',\n () => {\n payload = {\n selections: selections(projection.selections),\n summaryPatch: documentSummaryPatchPayload(\n projection.text,\n previousDocumentSummary(update),\n update.edits,\n this.options.maxColumn,\n workerDocument,\n ),\n }\n return payload\n },\n () => documentEditPayloadDiagnostics(payload),\n )\n }\n\n private tokens(tokens: EditorTokenStore, from = 0, to = tokens.length): readonly MinimapToken[] {\n return measureMinimapPerformance(\n 'minimap.tokens',\n () => {\n const foreground = this.latestBaseStyles?.foreground ?? this.baseStyles().foreground\n // One colour per palette entry, not per token.\n const colors = tokens.styles.map((style) =>\n this.colorResolver.resolve(style.color, foreground),\n )\n const projected: MinimapToken[] = []\n tokens.forEachInRange(from, to, (start, end, styleId) => {\n projected.push({ start, end, color: colors[styleId]! })\n })\n return projected\n },\n () => ({ inputTokens: tokens.length, outputTokens: Math.max(0, to - from) }),\n )\n }\n\n private metrics(snapshot: EditorViewSnapshot): MinimapMetrics {\n return {\n rowHeight: snapshot.metrics.rowHeight,\n characterWidth: snapshot.metrics.characterWidth,\n devicePixelRatio: globalThis.devicePixelRatio || 1,\n }\n }\n\n private viewport(snapshot: EditorViewSnapshot): MinimapViewport {\n const snapshotViewport = this.latestViewport\n const fallbackClientHeight =\n snapshotViewport.clientHeight > 0 ? 0 : this.host.colorScope.clientHeight\n const fallbackClientWidth =\n snapshotViewport.clientWidth > 0\n ? 0\n : Math.max(0, this.host.colorScope.clientWidth - this.reservedLane())\n const clientHeight = positiveOrFallback(snapshotViewport.clientHeight, fallbackClientHeight)\n const clientWidth = positiveOrFallback(snapshotViewport.clientWidth, fallbackClientWidth)\n const fallbackScrollHeight =\n snapshotViewport.scrollHeight > 0 ? 0 : this.host.colorScope.scrollHeight\n const fallbackScrollWidth =\n snapshotViewport.scrollWidth > 0 ? 0 : this.host.colorScope.scrollWidth\n\n const range = visibleDocumentLineRange(snapshot, snapshotViewport)\n return {\n scrollTop: snapshotViewport.scrollTop,\n scrollRow: snapshotViewport.scrollRow,\n scrollLeft: snapshotViewport.scrollLeft,\n scrollHeight: Math.max(snapshotViewport.scrollHeight, fallbackScrollHeight, clientHeight),\n scrollWidth: Math.max(snapshotViewport.scrollWidth, fallbackScrollWidth, clientWidth),\n clientHeight,\n clientWidth,\n minimapHeight: this.minimapHeight(snapshot),\n reservedWidth: Math.max(0, this.reservedLane()),\n visibleStart: range.start,\n visibleEnd: range.end,\n }\n }\n\n private minimapHeight(snapshot: EditorViewSnapshot): number {\n const height = Number.parseFloat(this.host.root.style.height)\n if (Number.isFinite(height)) return Math.max(0, height)\n if (snapshot.viewport.clientHeight > 0) return snapshot.viewport.clientHeight\n return this.host.colorScope.clientHeight\n }\n\n private baseStyles(): MinimapBaseStyles {\n const style = getComputedStyle(this.host.colorScope)\n const foreground = this.colorResolver.resolve(style.color, RGBA_WHITE)\n const background = this.colorResolver.resolve(style.backgroundColor, RGBA_BLACK)\n\n return {\n foreground,\n background,\n minimapBackground: transparent(\n this.colorResolver.resolve(\n style.getPropertyValue('--editor-minimap-background'),\n background,\n ),\n minimapBackgroundOpacity(style),\n ),\n foregroundOpacity: 255,\n selection: this.colorResolver.resolve(\n style.getPropertyValue('--editor-minimap-selection-highlight'),\n { r: 56, g: 189, b: 248, a: 128 },\n ),\n slider:\n style.getPropertyValue('--editor-minimap-slider-background') || 'rgba(121,121,121,.2)',\n sliderHover:\n style.getPropertyValue('--editor-minimap-slider-hover-background') ||\n 'rgba(121,121,121,.35)',\n sliderActive:\n style.getPropertyValue('--editor-minimap-slider-active-background') ||\n 'rgba(121,121,121,.5)',\n fontFamily: style.fontFamily || 'monospace',\n }\n }\n\n private sizeCanvasElements(snapshot: EditorViewSnapshot): void {\n const height = `${this.minimapHeight(snapshot)}px`\n setStyleValue(this.host.mainCanvas, 'height', height)\n setStyleValue(this.host.decorationsCanvas, 'height', height)\n }\n\n private handleWorkerMessage = (response: MinimapWorkerResponse): void => {\n if (this.disposed) return\n\n if (response.type === 'layout') {\n this.applyLayout(\n response.layout.width,\n response.layout.canvasOuterWidth,\n response.layout.canvasOuterHeight,\n )\n return\n }\n if (response.type === 'rendered') {\n if (!this.isCurrentRenderResponse(response)) return\n\n this.scheduler.cancel(MINIMAP_RENDER_KEY)\n this.renderInFlight = false\n this.activeRenderToken = 0\n if (this.pendingUpdate) this.scheduleFlush()\n if (this.renderInFlight) return\n if (this.pendingRender) this.requestRender()\n\n this.applyImmediateViewport()\n return\n }\n }\n\n private applyLayout(width: number, canvasWidth: number, canvasHeight: number): void {\n this.onLayoutWidth(width)\n setStyleValue(this.host.mainCanvas, 'width', `${canvasWidth}px`)\n setStyleValue(this.host.decorationsCanvas, 'width', `${canvasWidth}px`)\n setStyleValue(this.host.sliderHorizontal, 'width', `${canvasWidth}px`)\n setStyleValue(this.host.mainCanvas, 'height', `${canvasHeight}px`)\n setStyleValue(this.host.decorationsCanvas, 'height', `${canvasHeight}px`)\n }\n\n private handleWorkerError = (error: Error): void => {\n console.warn(error.toString(), error)\n }\n\n private post(request: MinimapWorkerRequest, transfer?: Transferable[]): void {\n measureMinimapPerformance(\n 'minimap.post',\n () => {\n this.workerOwner.post(request, transfer)\n },\n () => requestDiagnostics(request),\n )\n }\n\n private cancelScheduledFlush(): void {\n this.cancelScheduledFrame()\n this.cancelDeferredFlush()\n }\n\n private cancelScheduledFrame(): void {\n this.scheduler.cancel(MINIMAP_FRAME_FLUSH_KEY)\n }\n\n private cancelDeferredFlush(): void {\n this.scheduler.cancel(MINIMAP_QUIET_FLUSH_KEY)\n }\n\n private isCurrentRenderResponse(\n response: Extract<MinimapWorkerResponse, { type: 'rendered' }>,\n ): boolean {\n return response.sequence === this.activeRenderToken\n }\n}\n\ntype PendingMinimapUpdate = {\n readonly snapshot: EditorViewSnapshot\n readonly replaceDocument: boolean\n readonly edits: readonly TextEdit[]\n readonly previousDocumentSummary: MinimapDocumentSummaryBaseline | null\n readonly syncTokens: boolean\n readonly syncSelection: boolean\n readonly syncExternalDecorations: boolean\n readonly syncViewport: boolean\n readonly syncBaseStyles: boolean\n readonly tokenSourceAfterEdits: EditorTokenStore | null\n readonly reason: string\n}\n\ntype MinimapDocumentSummaryBaseline = {\n readonly textLength: number\n readonly lineStarts: MinimapLineStarts\n}\n\nexport function canUseMinimapWorker(): boolean {\n if (typeof Worker === 'undefined') return false\n if (typeof OffscreenCanvas === 'undefined') return false\n return (\n typeof HTMLCanvasElement !== 'undefined' &&\n 'transferControlToOffscreen' in HTMLCanvasElement.prototype\n )\n}\n\nfunction workerRequestError(error: unknown): Error {\n if (error instanceof Error) return error\n return new Error(String(error))\n}\n\nfunction createWorkerResponseError(\n response: Extract<MinimapWorkerResponse, { readonly type: 'error' }>,\n): Error {\n const workerMessage = nonEmptyString(response.message)\n return createError({\n code: 'minimap.WORKER_REQUEST_FAILED',\n message: messageWithDetail('Minimap worker request failed', workerMessage),\n why: workerMessage ?? 'The minimap worker reported an error without details.',\n fix: 'The editor keeps running; inspect the minimap worker request and renderer state if the minimap stops updating.',\n internal: {\n responseType: response.type,\n sequence: response.sequence ?? null,\n workerMessage: response.message,\n },\n })\n}\n\nfunction createNativeWorkerError(event: ErrorEvent): Error {\n const browserMessage = nonEmptyString(event.message)\n return createError({\n code: 'minimap.WORKER_CRASHED',\n message: messageWithDetail('Minimap worker crashed', browserMessage),\n why: nativeWorkerFailureReason(browserMessage),\n fix: 'The editor keeps running without the minimap for this worker generation. Check the worker script request, CSP, MIME type, and browser worker support.',\n cause: event.error instanceof Error ? event.error : undefined,\n internal: workerErrorEventInternal(event),\n })\n}\n\nfunction nativeWorkerFailureReason(browserMessage: string | null): string {\n if (browserMessage) return `The browser reported: ${browserMessage}`\n return 'The browser reported a native worker failure without an error message. This usually means the worker script failed to load or crashed before its own error handler ran.'\n}\n\nfunction workerErrorEventInternal(event: ErrorEvent): Record<string, unknown> {\n const error = event.error\n return {\n browserMessage: nonEmptyString(event.message),\n filename: nonEmptyString(event.filename),\n lineNumber: positiveNumberOrNull(event.lineno),\n columnNumber: positiveNumberOrNull(event.colno),\n errorName: error instanceof Error ? error.name : null,\n errorMessage: errorMessage(error),\n errorStack: error instanceof Error ? error.stack : null,\n rawErrorType: rawErrorType(error),\n }\n}\n\nfunction errorMessage(error: unknown): string | null {\n if (error instanceof Error) return error.message\n if (typeof error === 'string') return error\n return null\n}\n\nfunction rawErrorType(error: unknown): string | null {\n if (error === null || error === undefined) return null\n if (error instanceof Error) return error.name\n return Object.prototype.toString.call(error)\n}\n\nfunction messageWithDetail(summary: string, detail: string | null): string {\n if (!detail) return summary\n return `${summary}: ${detail}`\n}\n\nfunction nonEmptyString(value: string | undefined): string | null {\n const trimmed = value?.trim() ?? ''\n if (trimmed.length === 0) return null\n return trimmed\n}\n\nfunction positiveNumberOrNull(value: number): number | null {\n if (value > 0) return value\n return null\n}\n\nfunction workerDisposedError(): Error {\n return new Error('Minimap worker is disposed')\n}\n\nfunction selections(selections: readonly EditorResolvedSelection[]): readonly MinimapSelection[] {\n return selections.map((selection) => minimapSelection(selection))\n}\n\nfunction minimapSelection(selection: EditorResolvedSelection): MinimapSelection {\n return {\n startOffset: selection.startOffset,\n endOffset: selection.endOffset,\n }\n}\n\n// Structural match for EditorLineStartsView so plain arrays (tests, string\n// fallback paths) and snapshot views share one access surface.\ntype MinimapLineStarts = {\n readonly length: number\n at(index: number): number | undefined\n indexForOffset(offset: number): number\n firstIndexAtOrAfter(offset: number): number\n toArray(): readonly number[]\n}\n\nfunction arrayLineStarts(lineStarts: readonly number[]): MinimapLineStarts {\n return {\n length: lineStarts.length,\n at: (index) => lineStarts[index],\n indexForOffset: (offset) => arrayLineIndexForOffset(lineStarts, offset),\n firstIndexAtOrAfter: (target) => arrayFirstLineStartAtOrAfter(lineStarts, target),\n toArray: () => lineStarts,\n }\n}\n\nfunction documentSummaryPayload(\n text: EditorSecondaryViewTextProjection,\n maxColumn: number,\n): MinimapDocumentSummaryPayload {\n const textLength = text.length\n const lineStarts = text.lineStartsView.toArray()\n return {\n textLength,\n lineStarts,\n lines: lineStarts.map((startOffset, index) =>\n lineSummaryFromSnapshot(\n text,\n startOffset,\n lineEndOffset(arrayLineStarts(lineStarts), index, textLength),\n maxColumn,\n ),\n ),\n }\n}\n\ntype WorkerDocumentState = { readonly textLength: number; readonly lineCount: number }\n\nfunction documentSummaryPatchPayload(\n text: EditorSecondaryViewTextProjection,\n previous: MinimapDocumentSummaryBaseline,\n edits: readonly TextEdit[],\n maxColumn: number,\n workerDocument: WorkerDocumentState | null,\n): MinimapDocumentSummaryPatch {\n const textLength = text.length\n const lineStarts = text.lineStartsView\n const range = documentSummaryPatchRange(previous, lineStarts, textLength, edits, workerDocument)\n const lines = []\n for (let lineIndex = range.startLine; lineIndex < range.insertEndLine; lineIndex += 1) {\n lines.push(\n lineSummaryFromSnapshot(\n text,\n lineStarts.at(lineIndex) ?? textLength,\n lineEndOffset(lineStarts, lineIndex, textLength),\n maxColumn,\n ),\n )\n }\n\n return {\n textLength,\n startLine: range.startLine,\n deleteCount: range.deleteCount,\n lines,\n }\n}\n\nfunction lineSummaryFromSnapshot(\n text: EditorSecondaryViewTextProjection,\n startOffset: number,\n endOffset: number,\n maxColumn: number,\n): MinimapDocumentSummaryPayload['lines'][number] {\n const length = Math.max(0, endOffset - startOffset)\n const clippedEnd = startOffset + Math.min(length, maxColumn)\n return {\n text: text.snapshot.readRange(startOffset, clippedEnd),\n length,\n }\n}\n\nfunction lineEndOffset(lineStarts: MinimapLineStarts, index: number, textLength: number): number {\n const startOffset = lineStarts.at(index) ?? textLength\n const nextStart = lineStarts.at(index + 1)\n if (nextStart === undefined) return textLength\n return Math.max(startOffset, nextStart - 1)\n}\n\ntype SummaryLineChangeRange = {\n readonly startLine: number\n readonly previousEndLine: number\n readonly nextEndLine: number\n}\n\ntype DocumentSummaryPatchRange = {\n readonly startLine: number\n readonly deleteCount: number\n readonly insertEndLine: number\n}\n\nfunction documentSummaryPatchRange(\n previous: MinimapDocumentSummaryBaseline,\n nextLineStarts: MinimapLineStarts,\n nextTextLength: number,\n edits: readonly TextEdit[],\n workerDocument: WorkerDocumentState | null,\n): DocumentSummaryPatchRange {\n const edited = editSummaryPatchRange(previous.lineStarts, nextLineStarts, edits)\n // When line-break-free edits fully account for the worker document's\n // length transition and the line count is unchanged, every boundary change\n // lies inside the edited range and the O(lines) structural verification\n // can be skipped. Newline edits and projection changes (e.g. fold toggles)\n // fall through to the full scan.\n if (\n edited &&\n workerDocument &&\n editsExplainTransition(workerDocument, nextLineStarts, nextTextLength, edits)\n ) {\n return normalizeSummaryPatchRange(edited, previous.lineStarts.length, nextLineStarts.length)\n }\n\n const structural = lineStartSummaryPatchRange(\n previous.lineStarts,\n previous.textLength,\n nextLineStarts,\n nextTextLength,\n )\n const changed = mergeSummaryPatchRanges(structural, edited)\n if (!changed) return { startLine: 0, deleteCount: 0, insertEndLine: 0 }\n\n return normalizeSummaryPatchRange(changed, previous.lineStarts.length, nextLineStarts.length)\n}\n\nfunction editsExplainTransition(\n workerDocument: WorkerDocumentState,\n nextLineStarts: MinimapLineStarts,\n nextTextLength: number,\n edits: readonly TextEdit[],\n): boolean {\n if (nextLineStarts.length !== workerDocument.lineCount) return false\n\n let textDelta = 0\n for (const edit of edits) {\n // With no inserted breaks and an unchanged line count, no breaks were\n // removed either; the math below is exact, not heuristic.\n if (edit.text.includes('\\n')) return false\n textDelta += edit.text.length - (Math.max(edit.from, edit.to) - Math.min(edit.from, edit.to))\n }\n\n return workerDocument.textLength + textDelta === nextTextLength\n}\n\nfunction arrayFirstLineStartAtOrAfter(lineStarts: readonly number[], target: number): number {\n let low = 0\n let high = lineStarts.length\n while (low < high) {\n const middle = (low + high) >> 1\n if (lineStarts[middle]! < target) low = middle + 1\n else high = middle\n }\n return low\n}\n\nfunction lineStartSummaryPatchRange(\n previousLineStarts: MinimapLineStarts,\n previousTextLength: number,\n nextLineStarts: MinimapLineStarts,\n nextTextLength: number,\n): SummaryLineChangeRange | null {\n const prefix = commonLineSummaryPrefix(\n previousLineStarts,\n previousTextLength,\n nextLineStarts,\n nextTextLength,\n )\n const suffix = commonLineSummarySuffix(\n previousLineStarts,\n previousTextLength,\n nextLineStarts,\n nextTextLength,\n prefix,\n )\n if (prefix + suffix >= previousLineStarts.length && prefix + suffix >= nextLineStarts.length) {\n return null\n }\n\n return {\n startLine: prefix,\n previousEndLine: previousLineStarts.length - suffix,\n nextEndLine: nextLineStarts.length - suffix,\n }\n}\n\nfunction commonLineSummaryPrefix(\n previousLineStarts: MinimapLineStarts,\n previousTextLength: number,\n nextLineStarts: MinimapLineStarts,\n nextTextLength: number,\n): number {\n let count = 0\n const limit = Math.min(previousLineStarts.length, nextLineStarts.length)\n while (\n count < limit &&\n lineSummaryBoundariesMatch(\n previousLineStarts,\n previousTextLength,\n count,\n nextLineStarts,\n nextTextLength,\n count,\n 0,\n )\n ) {\n count += 1\n }\n\n return count\n}\n\nfunction commonLineSummarySuffix(\n previousLineStarts: MinimapLineStarts,\n previousTextLength: number,\n nextLineStarts: MinimapLineStarts,\n nextTextLength: number,\n prefix: number,\n): number {\n let count = 0\n const delta = nextTextLength - previousTextLength\n const previousLimit = previousLineStarts.length - prefix\n const nextLimit = nextLineStarts.length - prefix\n\n while (count < previousLimit && count < nextLimit) {\n const previousIndex = previousLineStarts.length - count - 1\n const nextIndex = nextLineStarts.length - count - 1\n if (\n !lineSummaryBoundariesMatch(\n previousLineStarts,\n previousTextLength,\n previousIndex,\n nextLineStarts,\n nextTextLength,\n nextIndex,\n delta,\n )\n ) {\n return count\n }\n count += 1\n }\n\n return count\n}\n\nfunction lineSummaryBoundariesMatch(\n previousLineStarts: MinimapLineStarts,\n previousTextLength: number,\n previousIndex: number,\n nextLineStarts: MinimapLineStarts,\n nextTextLength: number,\n nextIndex: number,\n offsetDelta: number,\n): boolean {\n const previousStart = previousLineStarts.at(previousIndex) ?? previousTextLength\n const nextStart = nextLineStarts.at(nextIndex) ?? nextTextLength\n if (previousStart + offsetDelta !== nextStart) return false\n\n return (\n lineEndOffset(previousLineStarts, previousIndex, previousTextLength) + offsetDelta ===\n lineEndOffset(nextLineStarts, nextIndex, nextTextLength)\n )\n}\n\nfunction editSummaryPatchRange(\n previousLineStarts: MinimapLineStarts,\n nextLineStarts: MinimapLineStarts,\n edits: readonly TextEdit[],\n): SummaryLineChangeRange | null {\n let startLine = Number.POSITIVE_INFINITY\n let previousEndLine = 0\n let nextEndLine = 0\n\n for (const edit of edits) {\n if (editIsEmpty(edit)) continue\n const previousRange = previousLineRangeForEdit(previousLineStarts, nextLineStarts, edit)\n const nextRange = lineRangeForEdit(nextLineStarts, edit.from, edit.from + edit.text.length)\n startLine = Math.min(startLine, previousRange.startLine, nextRange.startLine)\n previousEndLine = Math.max(previousEndLine, previousRange.endLine)\n nextEndLine = Math.max(nextEndLine, nextRange.endLine)\n }\n\n if (startLine === Number.POSITIVE_INFINITY) return null\n return { startLine, previousEndLine, nextEndLine }\n}\n\nfunction editIsEmpty(edit: TextEdit): boolean {\n return edit.from === edit.to && edit.text.length === 0\n}\n\nfunction previousLineRangeForEdit(\n previousLineStarts: MinimapLineStarts,\n nextLineStarts: MinimapLineStarts,\n edit: TextEdit,\n): { readonly startLine: number; readonly endLine: number } {\n if (edit.from !== edit.to || edit.text.includes('\\n')) {\n return lineRangeForEdit(previousLineStarts, edit.from, edit.to)\n }\n\n const line = nextLineStarts.indexForOffset(edit.from)\n return { startLine: line, endLine: line + 1 }\n}\n\nfunction lineRangeForEdit(\n lineStarts: MinimapLineStarts,\n from: number,\n to: number,\n): { readonly startLine: number; readonly endLine: number } {\n const startOffset = Math.min(from, to)\n const endOffset = Math.max(from, to)\n const startLine = lineStarts.indexForOffset(startOffset)\n const endLine = lineStarts.indexForOffset(endOffset) + 1\n return { startLine, endLine }\n}\n\nfunction mergeSummaryPatchRanges(\n left: SummaryLineChangeRange | null,\n right: SummaryLineChangeRange | null,\n): SummaryLineChangeRange | null {\n if (!left) return right\n if (!right) return left\n\n return {\n startLine: Math.min(left.startLine, right.startLine),\n previousEndLine: Math.max(left.previousEndLine, right.previousEndLine),\n nextEndLine: Math.max(left.nextEndLine, right.nextEndLine),\n }\n}\n\nfunction normalizeSummaryPatchRange(\n range: SummaryLineChangeRange,\n previousLineCount: number,\n nextLineCount: number,\n): DocumentSummaryPatchRange {\n const startLine = Math.min(\n Math.max(0, range.startLine),\n Math.max(previousLineCount, nextLineCount),\n )\n const previousEndLine = Math.min(Math.max(startLine, range.previousEndLine), previousLineCount)\n const nextEndLine = Math.min(Math.max(startLine, range.nextEndLine), nextLineCount)\n return {\n startLine,\n deleteCount: previousEndLine - startLine,\n insertEndLine: nextEndLine,\n }\n}\n\nfunction incrementalTextEdits(\n change: EditorContributionChange | null | undefined,\n): readonly TextEdit[] | null {\n if (!change || change.edits.length === 0) return null\n\n const sorted = change.edits.toSorted(compareTextEdits)\n return sequentialTextEdits(sorted)\n}\n\nfunction sameViewport(previous: MinimapViewport | null, next: MinimapViewport): boolean {\n if (!previous) return false\n return (\n previous.scrollTop === next.scrollTop &&\n previous.scrollRow === next.scrollRow &&\n previous.scrollLeft === next.scrollLeft &&\n previous.scrollHeight === next.scrollHeight &&\n previous.scrollWidth === next.scrollWidth &&\n previous.clientHeight === next.clientHeight &&\n previous.clientWidth === next.clientWidth &&\n previous.minimapHeight === next.minimapHeight &&\n previous.reservedWidth === next.reservedWidth &&\n previous.visibleStart === next.visibleStart &&\n previous.visibleEnd === next.visibleEnd\n )\n}\n\nfunction shadowVisible(viewport: EditorViewportSnapshot): boolean {\n return viewport.scrollLeft + viewport.clientWidth < viewport.scrollWidth\n}\n\nfunction positiveOrFallback(value: number, fallback: number): number {\n if (value > 0) return value\n return Math.max(0, fallback)\n}\n\nfunction baseStylesSignature(styles: MinimapBaseStyles): string {\n return JSON.stringify(styles)\n}\n\nfunction layoutSignature(snapshot: EditorViewSnapshot, minimapHeight: number): string {\n return [\n snapshot.metrics.rowHeight,\n snapshot.metrics.characterWidth,\n globalThis.devicePixelRatio || 1,\n snapshot.viewport.clientHeight,\n snapshot.viewport.clientWidth,\n minimapHeight,\n snapshot.lineCount,\n ].join(':')\n}\n\nfunction createPendingUpdate(\n snapshot: EditorViewSnapshot,\n kind: string,\n change: EditorContributionChange | null | undefined,\n previousSnapshot: EditorViewSnapshot,\n): PendingMinimapUpdate {\n const base = basePendingUpdate(snapshot, kind)\n if (kind === 'content') return contentPendingUpdate(base, change, previousSnapshot)\n if (kind === 'document' || kind === 'clear') {\n return { ...base, replaceDocument: true, reason: kind }\n }\n if (kind === 'tokens') return { ...base, syncTokens: true, reason: 'tokens' }\n if (kind === 'selection') return { ...base, syncSelection: true, reason: 'selection' }\n if (kind === 'decorations') {\n return { ...base, syncExternalDecorations: true, reason: 'decorations' }\n }\n\n return { ...base, reason: kind }\n}\n\nfunction mergePendingUpdate(\n current: PendingMinimapUpdate | null,\n next: PendingMinimapUpdate,\n): PendingMinimapUpdate {\n if (!current) return next\n if (current.replaceDocument || next.replaceDocument) return mergeReplacementUpdate(current, next)\n\n const edits = current.edits.concat(next.edits)\n const contentChangedAfterTokens = next.edits.length > 0\n return {\n snapshot: next.snapshot,\n replaceDocument: false,\n edits,\n previousDocumentSummary: current.previousDocumentSummary ?? next.previousDocumentSummary,\n syncTokens: contentChangedAfterTokens ? next.syncTokens : current.syncTokens || next.syncTokens,\n syncSelection: current.syncSelection || next.syncSelection,\n syncExternalDecorations: current.syncExternalDecorations || next.syncExternalDecorations,\n syncViewport: current.syncViewport || next.syncViewport,\n syncBaseStyles: current.syncBaseStyles || next.syncBaseStyles,\n tokenSourceAfterEdits: mergedTokenSourceAfterEdits(current, next),\n reason: mergeReasons(current.reason, next.reason),\n }\n}\n\nfunction mergeReplacementUpdate(\n current: PendingMinimapUpdate,\n next: PendingMinimapUpdate,\n): PendingMinimapUpdate {\n return {\n snapshot: next.snapshot,\n replaceDocument: true,\n edits: [],\n previousDocumentSummary: null,\n syncTokens: false,\n syncSelection: false,\n syncExternalDecorations: false,\n syncViewport: current.syncViewport || next.syncViewport,\n syncBaseStyles: current.syncBaseStyles || next.syncBaseStyles,\n tokenSourceAfterEdits: null,\n reason: mergeReasons(current.reason, next.reason),\n }\n}\n\nfunction mergedTokenSourceAfterEdits(\n current: PendingMinimapUpdate,\n next: PendingMinimapUpdate,\n): EditorTokenStore | null {\n if (next.edits.length === 0) return current.tokenSourceAfterEdits\n if (current.syncTokens) return null\n return next.tokenSourceAfterEdits\n}\n\nfunction shouldSyncBaseStyles(kind: string): boolean {\n if (kind === 'tokens') return true\n if (kind === 'document') return true\n return kind === 'clear'\n}\n\nfunction basePendingUpdate(snapshot: EditorViewSnapshot, kind: string): PendingMinimapUpdate {\n return {\n snapshot,\n replaceDocument: false,\n edits: [],\n previousDocumentSummary: null,\n syncTokens: false,\n syncSelection: false,\n syncExternalDecorations: false,\n syncViewport: shouldSyncViewport(kind),\n syncBaseStyles: shouldSyncBaseStyles(kind),\n tokenSourceAfterEdits: null,\n reason: 'metadata',\n }\n}\n\nfunction contentPendingUpdate(\n base: PendingMinimapUpdate,\n change: EditorContributionChange | null | undefined,\n previousSnapshot: EditorViewSnapshot,\n): PendingMinimapUpdate {\n const edits = incrementalTextEdits(change)\n if (!edits) {\n return { ...base, replaceDocument: true, reason: 'content.replaceDocument' }\n }\n\n return {\n ...base,\n edits,\n previousDocumentSummary: snapshotSummaryBaseline(previousSnapshot),\n syncSelection: true,\n tokenSourceAfterEdits: tokenSourceAfterEdits(change, previousSnapshot, base.snapshot),\n reason: edits.length === 1 ? 'content.edit' : 'content.edits',\n }\n}\n\nfunction previousDocumentSummary(update: PendingMinimapUpdate): MinimapDocumentSummaryBaseline {\n return update.previousDocumentSummary ?? snapshotSummaryBaseline(update.snapshot)\n}\n\nfunction snapshotSummaryBaseline(snapshot: EditorViewSnapshot): MinimapDocumentSummaryBaseline {\n return {\n textLength: snapshot.textSnapshot.length,\n lineStarts: snapshot.lineStartsView,\n }\n}\n\nfunction shouldSyncViewport(kind: string): boolean {\n if (kind === 'content') return true\n if (kind === 'document') return true\n if (kind === 'clear') return true\n if (kind === 'viewport') return true\n return kind === 'layout'\n}\n\nfunction shouldDeferMinimapUpdate(update: PendingMinimapUpdate): boolean {\n if (update.reason.includes('content')) return true\n if (update.syncTokens) return true\n return update.syncExternalDecorations\n}\n\nfunction sequentialTextEdits(edits: readonly TextEdit[]): readonly TextEdit[] {\n let delta = 0\n return edits.map((edit) => {\n const from = edit.from + delta\n const to = edit.to + delta\n delta += edit.text.length - (edit.to - edit.from)\n return { from, to, text: edit.text }\n })\n}\n\nfunction compareTextEdits(left: TextEdit, right: TextEdit): number {\n return left.from - right.from || left.to - right.to\n}\n\nfunction tokenSourceAfterEdits(\n change: EditorContributionChange | null | undefined,\n previousSnapshot: EditorViewSnapshot,\n nextSnapshot: EditorViewSnapshot,\n): EditorTokenStore | null {\n if (!change) return null\n if (!editsPreserveLineStructure(change.edits, previousSnapshot.lineStartsView)) return null\n return nextSnapshot.tokens\n}\n\nfunction editsPreserveLineStructure(\n edits: readonly TextEdit[],\n lineStarts: MinimapLineStarts,\n): boolean {\n for (const edit of edits) {\n if (edit.text.includes('\\n')) return false\n if (!editRangeIsSingleLine(lineStarts, edit)) return false\n }\n\n return true\n}\n\nfunction editRangeIsSingleLine(lineStarts: MinimapLineStarts, edit: TextEdit): boolean {\n return lineStarts.indexForOffset(edit.from) === lineStarts.indexForOffset(edit.to)\n}\n\nfunction arrayLineIndexForOffset(lineStarts: readonly number[], offset: number): number {\n let low = 0\n let high = lineStarts.length - 1\n const clamped = Math.max(0, offset)\n\n while (low <= high) {\n const middle = Math.floor((low + high) / 2)\n const start = lineStarts[middle] ?? 0\n const next = lineStarts[middle + 1] ?? Number.POSITIVE_INFINITY\n if (clamped < start) {\n high = middle - 1\n continue\n }\n if (clamped >= next) {\n low = middle + 1\n continue\n }\n return middle\n }\n\n return Math.max(0, lineStarts.length - 1)\n}\n\nfunction mergeReasons(left: string, right: string): string {\n if (left === right) return left\n return `${left}+${right}`\n}\n\ntype MinimapPerformanceDiagnostic = {\n readonly name: string\n readonly durationMs?: number\n readonly detail?: Readonly<Record<string, unknown>>\n}\n\ntype MinimapPerformanceDiagnosticSink =\n | ((diagnostic: MinimapPerformanceDiagnostic) => void)\n | {\n readonly enabled?: boolean\n readonly record?: (diagnostic: MinimapPerformanceDiagnostic) => void\n }\n\ntype MinimapPerformanceDiagnosticGlobal = typeof globalThis & {\n __EDITOR_PERFORMANCE_DIAGNOSTICS__?: MinimapPerformanceDiagnosticSink | null\n}\n\ntype DiagnosticDetail =\n | Readonly<Record<string, unknown>>\n | (() => Readonly<Record<string, unknown>> | undefined)\n | undefined\n\nfunction measureMinimapPerformance<T>(name: string, run: () => T, detail?: DiagnosticDetail): T {\n if (!minimapPerformanceDiagnosticsEnabled()) return run()\n\n const start = nowMs()\n try {\n return run()\n } finally {\n recordMinimapPerformanceDiagnostic(name, detail, nowMs() - start)\n }\n}\n\nfunction recordMinimapPerformanceDiagnostic(\n name: string,\n detail?: DiagnosticDetail,\n durationMs?: number,\n): void {\n const sink = minimapPerformanceDiagnosticSink()\n if (!sink) return\n\n const diagnostic = createDiagnostic(name, detail, durationMs)\n if (typeof sink === 'function') {\n sink(diagnostic)\n return\n }\n\n sink.record?.(diagnostic)\n}\n\nfunction minimapPerformanceDiagnosticsEnabled(): boolean {\n const sink = minimapPerformanceDiagnosticGlobal().__EDITOR_PERFORMANCE_DIAGNOSTICS__\n if (!sink) return false\n if (typeof sink === 'function') return true\n return sink.enabled === true || typeof sink.record === 'function'\n}\n\nfunction minimapPerformanceDiagnosticSink(): MinimapPerformanceDiagnosticSink | null {\n const sink = minimapPerformanceDiagnosticGlobal().__EDITOR_PERFORMANCE_DIAGNOSTICS__\n if (!sink) return null\n if (typeof sink === 'function') return sink\n if (sink.enabled !== true && typeof sink.record !== 'function') return null\n return sink\n}\n\nfunction createDiagnostic(\n name: string,\n detail: DiagnosticDetail,\n durationMs: number | undefined,\n): MinimapPerformanceDiagnostic {\n const resolvedDetail = resolveDiagnosticDetail(detail)\n if (durationMs === undefined && resolvedDetail === undefined) return { name }\n if (durationMs === undefined) return { name, detail: resolvedDetail }\n if (resolvedDetail === undefined) return { name, durationMs }\n return { name, durationMs, detail: resolvedDetail }\n}\n\nfunction resolveDiagnosticDetail(\n detail: DiagnosticDetail,\n): Readonly<Record<string, unknown>> | undefined {\n if (typeof detail === 'function') return detail()\n return detail\n}\n\nfunction minimapPerformanceDiagnosticGlobal(): MinimapPerformanceDiagnosticGlobal {\n return globalThis as MinimapPerformanceDiagnosticGlobal\n}\n\nfunction pendingUpdateDiagnostics(update: PendingMinimapUpdate): Readonly<Record<string, unknown>> {\n return {\n editCount: update.edits.length,\n incremental: !update.replaceDocument,\n reason: update.reason,\n syncBaseStyles: update.syncBaseStyles,\n syncExternalDecorations: update.syncExternalDecorations,\n syncSelection: update.syncSelection,\n syncTokens: update.syncTokens,\n syncViewport: update.syncViewport,\n tokenSourceKnown: update.tokenSourceAfterEdits !== null || update.edits.length === 0,\n type: update.replaceDocument ? 'replaceDocument' : 'incremental',\n }\n}\n\nfunction requestDiagnostics(request: MinimapWorkerRequest): Readonly<Record<string, unknown>> {\n switch (request.type) {\n case 'openDocument':\n case 'replaceDocument':\n return { request: request.type, ...documentPayloadDiagnostics(request.document) }\n case 'applyEdit':\n return {\n request: request.type,\n editTextLength: request.edit.text.length,\n ...documentEditPayloadDiagnostics(request.document),\n }\n case 'applyEdits':\n return {\n request: request.type,\n editCount: request.edits.length,\n editTextLength: textLengthForEdits(request.edits),\n ...documentEditPayloadDiagnostics(request.document),\n }\n case 'updateTokens':\n return { request: request.type, tokens: request.tokens.length }\n case 'updateTokenRange':\n return {\n request: request.type,\n deleteCount: request.patch.deleteCount,\n start: request.patch.start,\n tokens: request.patch.tokens.length,\n }\n case 'updateSelection':\n return { request: request.type, selections: request.selections.length }\n case 'updateDecorations':\n case 'updateExternalDecorations':\n return { request: request.type, decorations: request.decorations.length }\n default:\n return { request: 'control' }\n }\n}\n\nfunction documentPayloadDiagnostics(\n payload: MinimapDocumentPayload | null,\n): Readonly<Record<string, unknown>> {\n return {\n decorations: payload?.decorations.length ?? 0,\n externalDecorations: payload?.externalDecorations?.length ?? 0,\n lineSummaryTextLength: lineSummaryTextLength(payload?.lines ?? []),\n lineStarts: payload?.lineStarts.length ?? 0,\n lines: payload?.lines.length ?? 0,\n selections: payload?.selections.length ?? 0,\n textLength: payload?.textLength ?? 0,\n tokens: payload?.tokens.length ?? 0,\n type: 'document',\n }\n}\n\nfunction documentEditPayloadDiagnostics(\n payload: MinimapDocumentEditPayload | null,\n): Readonly<Record<string, unknown>> {\n const patch = payload?.summaryPatch\n return {\n deleteCount: patch?.deleteCount ?? 0,\n lineSummaryTextLength: lineSummaryTextLength(patch?.lines ?? []),\n lineStarts: patch?.lineStarts?.length ?? 0,\n lines: patch?.lines.length ?? 0,\n selections: payload?.selections.length ?? 0,\n startLine: patch?.startLine ?? 0,\n textLength: patch?.textLength ?? 0,\n type: 'edit',\n }\n}\n\nfunction lineSummaryTextLength(lines: readonly { readonly text: string }[]): number {\n let length = 0\n for (const line of lines) length += line.text.length\n return length\n}\n\nfunction textLengthForEdits(edits: readonly TextEdit[]): number {\n let length = 0\n for (const edit of edits) length += edit.text.length\n return length\n}\n\nfunction setStyleValue(\n element: HTMLElement,\n property: 'display' | 'height' | 'transform' | 'width',\n value: string,\n): void {\n if (element.style[property] === value) return\n\n element.style[property] = value\n}\n\nfunction setClassName(element: HTMLElement, className: string): void {\n if (element.className === className) return\n\n element.className = className\n}\n\nfunction minimapBackgroundOpacity(style: CSSStyleDeclaration): number {\n const value = Number.parseFloat(style.getPropertyValue('--editor-minimap-background-opacity'))\n if (!Number.isFinite(value)) return 1\n\n return Math.min(1, Math.max(0, value))\n}\n\nfunction themeSignature(snapshot: EditorViewSnapshot): string {\n return JSON.stringify(snapshot.theme ?? null)\n}\n\nfunction nowMs(): number {\n return globalThis.performance?.now() ?? Date.now()\n}\n\nclass ColorResolver {\n private readonly probe: HTMLSpanElement\n private readonly canvasContext: CanvasRenderingContext2D | null\n private readonly cache = new Map<string, RGBA8>()\n\n public constructor(root: HTMLElement) {\n this.probe = root.ownerDocument.createElement('span')\n this.canvasContext = root.ownerDocument.createElement('canvas').getContext('2d', {\n willReadFrequently: true,\n })\n this.probe.style.position = 'absolute'\n this.probe.style.visibility = 'hidden'\n this.probe.textContent = '.'\n root.appendChild(this.probe)\n }\n\n public resolve(value: string | undefined, fallback: RGBA8): RGBA8 {\n if (!value) return fallback\n const cached = this.cache.get(value)\n if (cached) return cached\n\n this.probe.style.color = value\n const resolved = this.resolveComputedColor(getComputedStyle(this.probe).color, fallback)\n this.cache.set(value, resolved)\n return resolved\n }\n\n public clear(): void {\n this.cache.clear()\n }\n\n public dispose(): void {\n this.clear()\n this.probe.remove()\n }\n\n private resolveComputedColor(value: string, fallback: RGBA8): RGBA8 {\n const canvasColor = this.canvasColor(value)\n if (canvasColor) return canvasColor\n\n return parseCssColor(value, fallback)\n }\n\n private canvasColor(value: string): RGBA8 | null {\n const context = this.canvasContext\n if (!context) return null\n\n context.clearRect(0, 0, 1, 1)\n context.fillStyle = value\n context.fillRect(0, 0, 1, 1)\n\n const [r, g, b, a] = context.getImageData(0, 0, 1, 1).data\n return { r: r ?? 0, g: g ?? 0, b: b ?? 0, a: a ?? 0 }\n }\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@singapore-editor/minimap",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"files": [
|
|
5
|
+
"README.md",
|
|
6
|
+
"dist"
|
|
7
|
+
],
|
|
8
|
+
"type": "module",
|
|
9
|
+
"sideEffects": [
|
|
10
|
+
"./src/index.ts",
|
|
11
|
+
"./src/style.css",
|
|
12
|
+
"./dist/index.js",
|
|
13
|
+
"./dist/style.css"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./style.css": "./dist/style.css"
|
|
22
|
+
},
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public",
|
|
25
|
+
"registry": "https://registry.npmjs.org/"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "bun ../../scripts/build-package.ts",
|
|
29
|
+
"bench:update": "bun bench/update.ts",
|
|
30
|
+
"bench:browser": "node bench/browser-runner.mjs",
|
|
31
|
+
"test": "vitest run && vitest run --browser.enabled --browser.headless test/workerClient.browser.test.ts test/renderer.browser.test.ts test/wheelScroll.browser.test.ts",
|
|
32
|
+
"typecheck": "tsgo --noEmit",
|
|
33
|
+
"lint": "oxlint .",
|
|
34
|
+
"format": "oxfmt --write .",
|
|
35
|
+
"format:check": "oxfmt --check ."
|
|
36
|
+
},
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"@singapore-editor/core": "0.1.2"
|
|
39
|
+
},
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@playwright/test": "^1.63.0",
|
|
42
|
+
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
43
|
+
"@vitest/browser-playwright": "^5.0.2",
|
|
44
|
+
"happy-dom": "^20.14.5",
|
|
45
|
+
"oxfmt": "0.70.0",
|
|
46
|
+
"oxlint": "1.85.0",
|
|
47
|
+
"typescript": "~6.0.3",
|
|
48
|
+
"vitest": "^5.0.2"
|
|
49
|
+
}
|
|
50
|
+
}
|