@hediet/linkrpc-cli 0.0.3-next.20260922.2 → 0.0.3-next.20260924.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dist-BOcSU4-O.js","names":[],"sources":["../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/logging/logging.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/debugLocation.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/debugName.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/observables/baseObservable.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/commonFacade/deps.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/disposables.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/observables/derivedImpl.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/observables/derived.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/reactions/createEffectImpl.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/reactions/createEffect.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/base.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/transaction.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/observables/observableValue.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/observables/observableFromEvent.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/utils/utils.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/logging/consoleObservableLogger.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/logging/debugGetDependencyGraph.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/index.js","../../../../node_modules/.pnpm/@vscode+observables@0.1.1-0/node_modules/@vscode/observables/dist/observableInternal/utils/promise.js"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nlet globalObservableLogger;\nfunction addLogger(logger) {\n if (!globalObservableLogger) {\n globalObservableLogger = logger;\n }\n else if (globalObservableLogger instanceof ComposedLogger) {\n globalObservableLogger.loggers.push(logger);\n }\n else {\n globalObservableLogger = new ComposedLogger([globalObservableLogger, logger]);\n }\n}\nfunction getLogger() {\n return globalObservableLogger;\n}\nlet globalObservableLoggerFn = undefined;\nfunction setLogObservableFn(fn) {\n globalObservableLoggerFn = fn;\n}\nfunction logObservable(obs) {\n if (globalObservableLoggerFn) {\n globalObservableLoggerFn(obs);\n }\n}\nclass ComposedLogger {\n constructor(loggers) {\n this.loggers = loggers;\n }\n handleObservableCreated(observable, location) {\n for (const logger of this.loggers) {\n logger.handleObservableCreated(observable, location);\n }\n }\n handleOnListenerCountChanged(observable, newCount) {\n for (const logger of this.loggers) {\n logger.handleOnListenerCountChanged(observable, newCount);\n }\n }\n handleObservableUpdated(observable, info) {\n for (const logger of this.loggers) {\n logger.handleObservableUpdated(observable, info);\n }\n }\n handleAutorunCreated(autorun, location) {\n for (const logger of this.loggers) {\n logger.handleAutorunCreated(autorun, location);\n }\n }\n handleAutorunDisposed(autorun) {\n for (const logger of this.loggers) {\n logger.handleAutorunDisposed(autorun);\n }\n }\n handleAutorunDependencyChanged(autorun, observable, change) {\n for (const logger of this.loggers) {\n logger.handleAutorunDependencyChanged(autorun, observable, change);\n }\n }\n handleAutorunStarted(autorun) {\n for (const logger of this.loggers) {\n logger.handleAutorunStarted(autorun);\n }\n }\n handleAutorunFinished(autorun) {\n for (const logger of this.loggers) {\n logger.handleAutorunFinished(autorun);\n }\n }\n handleDerivedDependencyChanged(derived, observable, change) {\n for (const logger of this.loggers) {\n logger.handleDerivedDependencyChanged(derived, observable, change);\n }\n }\n handleDerivedCleared(observable) {\n for (const logger of this.loggers) {\n logger.handleDerivedCleared(observable);\n }\n }\n handleBeginTransaction(transaction) {\n for (const logger of this.loggers) {\n logger.handleBeginTransaction(transaction);\n }\n }\n handleEndTransaction(transaction) {\n for (const logger of this.loggers) {\n logger.handleEndTransaction(transaction);\n }\n }\n}\n\nexport { addLogger, getLogger, logObservable, setLogObservableFn };\n//# sourceMappingURL=logging.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar DebugLocation;\n(function (DebugLocation) {\n let enabled = false;\n function enable() {\n enabled = true;\n }\n DebugLocation.enable = enable;\n function ofCaller() {\n return ofNthCaller(1);\n }\n DebugLocation.ofCaller = ofCaller;\n function ofNthCaller(n) {\n if (!enabled) {\n return undefined;\n }\n const Err = Error; // For the monaco editor checks, which don't have the nodejs types.\n const l = Err.stackTraceLimit;\n Err.stackTraceLimit = 3;\n const stack = new Error().stack;\n Err.stackTraceLimit = l;\n return DebugLocationImpl.fromStack(stack, n + 1);\n }\n DebugLocation.ofNthCaller = ofNthCaller;\n})(DebugLocation || (DebugLocation = {}));\nclass DebugLocationImpl {\n static fromStack(stack, parentIdx) {\n const lines = stack.split('\\n');\n const location = parseLine(lines[parentIdx + 1]);\n if (location) {\n return new DebugLocationImpl(location.fileName, location.line, location.column, location.id);\n }\n else {\n return undefined;\n }\n }\n constructor(fileName, line, column, id) {\n this.fileName = fileName;\n this.line = line;\n this.column = column;\n this.id = id;\n }\n}\nfunction parseLine(stackLine) {\n if (!stackLine) {\n return undefined;\n }\n const match = stackLine.match(/\\((.*):(\\d+):(\\d+)\\)/);\n if (match) {\n return {\n fileName: match[1],\n line: parseInt(match[2]),\n column: parseInt(match[3]),\n id: stackLine,\n };\n }\n const match2 = stackLine.match(/at ([^\\(\\)]*):(\\d+):(\\d+)/);\n if (match2) {\n return {\n fileName: match2[1],\n line: parseInt(match2[2]),\n column: parseInt(match2[3]),\n id: stackLine,\n };\n }\n return undefined;\n}\n\nexport { DebugLocation };\n//# sourceMappingURL=debugLocation.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass DebugNameData {\n constructor(owner, debugNameSource, referenceFn) {\n this.owner = owner;\n this.debugNameSource = debugNameSource;\n this.referenceFn = referenceFn;\n }\n getDebugName(target) {\n return getDebugName(target, this);\n }\n}\nconst countPerName = new Map();\nconst cachedDebugName = new WeakMap();\nfunction getDebugName(target, data) {\n const cached = cachedDebugName.get(target);\n if (cached) {\n return cached;\n }\n const dbgName = computeDebugName(target, data);\n if (dbgName) {\n let count = countPerName.get(dbgName) ?? 0;\n count++;\n countPerName.set(dbgName, count);\n const result = count === 1 ? dbgName : `${dbgName}#${count}`;\n cachedDebugName.set(target, result);\n return result;\n }\n return undefined;\n}\nfunction computeDebugName(self, data) {\n const cached = cachedDebugName.get(self);\n if (cached) {\n return cached;\n }\n const ownerStr = data.owner ? formatOwner(data.owner) + `.` : '';\n let result;\n const debugNameSource = data.debugNameSource;\n if (debugNameSource !== undefined) {\n if (typeof debugNameSource === 'function') {\n result = debugNameSource();\n if (result !== undefined) {\n return ownerStr + result;\n }\n }\n else {\n return ownerStr + debugNameSource;\n }\n }\n const referenceFn = data.referenceFn;\n if (referenceFn !== undefined) {\n result = getFunctionName(referenceFn);\n if (result !== undefined) {\n return ownerStr + result;\n }\n }\n if (data.owner !== undefined) {\n const key = findKey(data.owner, self);\n if (key !== undefined) {\n return ownerStr + key;\n }\n }\n return undefined;\n}\nfunction findKey(obj, value) {\n for (const key in obj) {\n if (obj[key] === value) {\n return key;\n }\n }\n return undefined;\n}\nconst countPerClassName = new Map();\nconst ownerId = new WeakMap();\nfunction formatOwner(owner) {\n const id = ownerId.get(owner);\n if (id) {\n return id;\n }\n const className = getClassName(owner) ?? 'Object';\n let count = countPerClassName.get(className) ?? 0;\n count++;\n countPerClassName.set(className, count);\n const result = count === 1 ? className : `${className}#${count}`;\n ownerId.set(owner, result);\n return result;\n}\nfunction getClassName(obj) {\n const ctor = obj.constructor;\n if (ctor) {\n if (ctor.name === 'Object') {\n return undefined;\n }\n return ctor.name;\n }\n return undefined;\n}\nfunction getFunctionName(fn) {\n const fnSrc = fn.toString();\n // Pattern: /** @description ... */\n const regexp = /\\/\\*\\*\\s*@description\\s*([^*]*)\\*\\//;\n const match = regexp.exec(fnSrc);\n const result = match ? match[1] : undefined;\n return result?.trim();\n}\n\nexport { DebugNameData, getClassName, getDebugName, getFunctionName };\n//# sourceMappingURL=debugName.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { DebugLocation } from '../debugLocation.js';\nimport { getFunctionName } from '../debugName.js';\nimport { logObservable, getLogger } from '../logging/logging.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nlet _derived;\n/**\n * @internal\n * This is to allow splitting files.\n*/\nfunction _setDerivedOpts(derived) {\n _derived = derived;\n}\nlet _recomputeInitiallyAndOnChange;\nfunction _setRecomputeInitiallyAndOnChange(recomputeInitiallyAndOnChange) {\n _recomputeInitiallyAndOnChange = recomputeInitiallyAndOnChange;\n}\nlet _keepObserved;\nfunction _setKeepObserved(keepObserved) {\n _keepObserved = keepObserved;\n}\nlet _debugGetDependencyGraph;\nfunction _setDebugGetDependencyGraph(debugGetDependencyGraph) {\n _debugGetDependencyGraph = debugGetDependencyGraph;\n}\nclass ConvenientObservable {\n get TChange() { return null; }\n reportChanges() {\n this.get();\n }\n /** @sealed */\n read(reader) {\n if (reader) {\n return reader.readObservable(this);\n }\n else {\n return this.get();\n }\n }\n map(fnOrOwner, fnOrUndefined, debugLocation = DebugLocation.ofCaller()) {\n const owner = fnOrUndefined === undefined ? undefined : fnOrOwner;\n const fn = fnOrUndefined === undefined ? fnOrOwner : fnOrUndefined;\n return _derived({\n owner,\n debugName: () => {\n const name = getFunctionName(fn);\n if (name !== undefined) {\n return name;\n }\n // regexp to match `x => x.y` or `x => x?.y` where x and y can be arbitrary identifiers (uses backref):\n const regexp = /^\\s*\\(?\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*\\)?\\s*=>\\s*\\1(?:\\??)\\.([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*$/;\n const match = regexp.exec(fn.toString());\n if (match) {\n return `${this.debugName}.${match[2]}`;\n }\n if (!owner) {\n return `${this.debugName} (mapped)`;\n }\n return undefined;\n },\n debugReferenceFn: fn,\n }, (reader) => fn(this.read(reader), reader), debugLocation);\n }\n /**\n * @sealed\n * Converts an observable of an observable value into a direct observable of the value.\n */\n flatten() {\n return _derived({\n owner: undefined,\n debugName: () => `${this.debugName} (flattened)`,\n }, (reader) => this.read(reader).read(reader));\n }\n recomputeInitiallyAndOnChange(store, handleValue) {\n store.add(_recomputeInitiallyAndOnChange(this, handleValue));\n return this;\n }\n /**\n * Ensures that this observable is observed. This keeps the cache alive.\n * However, in case of deriveds, it does not force eager evaluation (only when the value is read/get).\n * Use `recomputeInitiallyAndOnChange` for eager evaluation.\n */\n keepObserved(store) {\n store.add(_keepObserved(this));\n return this;\n }\n get debugValue() {\n return this.get();\n }\n debugGetDependencyGraph() {\n return _debugGetDependencyGraph(this);\n }\n}\nclass BaseObservable extends ConvenientObservable {\n constructor(debugLocation) {\n super();\n this._observers = new Set();\n getLogger()?.handleObservableCreated(this, debugLocation);\n }\n addObserver(observer) {\n const len = this._observers.size;\n this._observers.add(observer);\n if (len === 0) {\n this.onFirstObserverAdded();\n }\n if (len !== this._observers.size) {\n getLogger()?.handleOnListenerCountChanged(this, this._observers.size);\n }\n }\n removeObserver(observer) {\n const deleted = this._observers.delete(observer);\n if (deleted && this._observers.size === 0) {\n this.onLastObserverRemoved();\n }\n if (deleted) {\n getLogger()?.handleOnListenerCountChanged(this, this._observers.size);\n }\n }\n onFirstObserverAdded() { }\n onLastObserverRemoved() { }\n log() {\n const hadLogger = !!getLogger();\n logObservable(this);\n if (!hadLogger) {\n getLogger()?.handleObservableCreated(this, DebugLocation.ofCaller());\n }\n return this;\n }\n debugGetObservers() {\n return this._observers;\n }\n}\n\nexport { BaseObservable, ConvenientObservable, _setDebugGetDependencyGraph, _setDerivedOpts, _setKeepObserved, _setRecomputeInitiallyAndOnChange };\n//# sourceMappingURL=baseObservable.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction toDisposable(fn) {\n return {\n dispose: fn\n };\n}\nclass BugIndicatingError extends Error {\n constructor(message) {\n super(message || 'An unexpected bug occurred.');\n Object.setPrototypeOf(this, BugIndicatingError.prototype);\n // Because we know for sure only buggy code throws this,\n // we definitely want to break here and fix the bug.\n // eslint-disable-next-line no-debugger\n // debugger;\n }\n}\nfunction onBugIndicatingError(error) {\n // debugger;\n throw error;\n}\nfunction onUnexpectedError(error) {\n console.error('Unexpected error:', error);\n}\n/**\n * Compares two items for equality using strict equality.\n*/\nconst strictEquals = (a, b) => a === b;\n\nexport { BugIndicatingError, onBugIndicatingError, onUnexpectedError, strictEquals, toDisposable };\n//# sourceMappingURL=deps.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nclass DisposableStore {\n constructor() {\n this.disposables = [];\n this._isDisposed = false;\n }\n get isDisposed() { return this._isDisposed; }\n dispose() {\n this.clear();\n this._isDisposed = true;\n }\n add(disposable) {\n if (disposable) {\n this.disposables.push(disposable);\n }\n return disposable;\n }\n remove(disposable) {\n if (!disposable) {\n return disposable;\n }\n const index = this.disposables.indexOf(disposable);\n if (index !== -1) {\n this.disposables.splice(index, 1);\n }\n return disposable;\n }\n clear() {\n for (const disposable of this.disposables) {\n disposable.dispose();\n }\n this.disposables = [];\n }\n leakItems() {\n this.disposables = [];\n }\n}\nclass Disposable {\n constructor() {\n this._store = new DisposableStore();\n }\n dispose() {\n this._store.dispose();\n }\n _register(t) {\n this._store.add(t);\n return t;\n }\n _registerOrDispose(t) {\n if (t) {\n if (this._store.isDisposed) {\n t.dispose();\n }\n else {\n this._store.add(t);\n }\n }\n return t;\n }\n}\n\nexport { Disposable, DisposableStore };\n//# sourceMappingURL=disposables.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { BaseObservable } from './baseObservable.js';\nimport { BugIndicatingError, onBugIndicatingError } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction derivedStateToString(state) {\n switch (state) {\n case 0 /* DerivedState.initial */: return 'initial';\n case 1 /* DerivedState.dependenciesMightHaveChanged */: return 'dependenciesMightHaveChanged';\n case 2 /* DerivedState.stale */: return 'stale';\n case 3 /* DerivedState.upToDate */: return 'upToDate';\n default: return '<unknown>';\n }\n}\nclass Derived extends BaseObservable {\n get debugName() {\n return this._debugNameData.getDebugName(this) ?? '(anonymous)';\n }\n constructor(_debugNameData, _computeFn, _changeTracker, _handleLastObserverRemoved = undefined, _equalityComparator, debugLocation) {\n super(debugLocation);\n this._debugNameData = _debugNameData;\n this._computeFn = _computeFn;\n this._changeTracker = _changeTracker;\n this._handleLastObserverRemoved = _handleLastObserverRemoved;\n this._equalityComparator = _equalityComparator;\n this._state = 0 /* DerivedState.initial */;\n this._value = undefined;\n this._updateCount = 0;\n this._dependencies = new Set();\n this._dependenciesToBeRemoved = new Set();\n this._changeSummary = undefined;\n this._isUpdating = false;\n this._isComputing = false;\n this._didReportChange = false;\n this._isInBeforeUpdate = false;\n this._isReaderValid = false;\n this._store = undefined;\n this._delayedStore = undefined;\n this._removedObserverToCallEndUpdateOn = null;\n this._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n }\n onLastObserverRemoved() {\n /**\n * We are not tracking changes anymore, thus we have to assume\n * that our cache is invalid.\n */\n this._state = 0 /* DerivedState.initial */;\n this._value = undefined;\n getLogger()?.handleDerivedCleared(this);\n for (const d of this._dependencies) {\n d.removeObserver(this);\n }\n this._dependencies.clear();\n if (this._store !== undefined) {\n this._store.dispose();\n this._store = undefined;\n }\n if (this._delayedStore !== undefined) {\n this._delayedStore.dispose();\n this._delayedStore = undefined;\n }\n this._handleLastObserverRemoved?.();\n }\n get() {\n const checkEnabled = false; // TODO set to true\n if (this._isComputing && checkEnabled) {\n // investigate why this fails in the diff editor!\n throw new BugIndicatingError('Cyclic deriveds are not supported yet!');\n }\n if (this._observers.size === 0) {\n let result;\n // Without observers, we don't know when to clean up stuff.\n // Thus, we don't cache anything to prevent memory leaks.\n try {\n this._isReaderValid = true;\n let changeSummary = undefined;\n if (this._changeTracker) {\n changeSummary = this._changeTracker.createChangeSummary(undefined);\n this._changeTracker.beforeUpdate?.(this, changeSummary);\n }\n result = this._computeFn(this, changeSummary);\n }\n finally {\n this._isReaderValid = false;\n }\n // Clear new dependencies\n this.onLastObserverRemoved();\n return result;\n }\n else {\n do {\n // We might not get a notification for a dependency that changed while it is updating,\n // thus we also have to ask all our depedencies if they changed in this case.\n if (this._state === 1 /* DerivedState.dependenciesMightHaveChanged */) {\n for (const d of this._dependencies) {\n /** might call {@link handleChange} indirectly, which could make us stale */\n d.reportChanges();\n if (this._state === 2 /* DerivedState.stale */) {\n // The other dependencies will refresh on demand, so early break\n break;\n }\n }\n }\n // We called report changes of all dependencies.\n // If we are still not stale, we can assume to be up to date again.\n if (this._state === 1 /* DerivedState.dependenciesMightHaveChanged */) {\n this._state = 3 /* DerivedState.upToDate */;\n }\n if (this._state !== 3 /* DerivedState.upToDate */) {\n this._recompute();\n }\n // In case recomputation changed one of our dependencies, we need to recompute again.\n } while (this._state !== 3 /* DerivedState.upToDate */);\n return this._value;\n }\n }\n _recompute() {\n let didChange = false;\n this._isComputing = true;\n this._didReportChange = false;\n const emptySet = this._dependenciesToBeRemoved;\n this._dependenciesToBeRemoved = this._dependencies;\n this._dependencies = emptySet;\n try {\n const changeSummary = this._changeSummary;\n this._isReaderValid = true;\n if (this._changeTracker) {\n this._isInBeforeUpdate = true;\n this._changeTracker.beforeUpdate?.(this, changeSummary);\n this._isInBeforeUpdate = false;\n this._changeSummary = this._changeTracker?.createChangeSummary(changeSummary);\n }\n const hadValue = this._state !== 0 /* DerivedState.initial */;\n const oldValue = this._value;\n this._state = 3 /* DerivedState.upToDate */;\n const delayedStore = this._delayedStore;\n if (delayedStore !== undefined) {\n this._delayedStore = undefined;\n }\n try {\n if (this._store !== undefined) {\n this._store.dispose();\n this._store = undefined;\n }\n /** might call {@link handleChange} indirectly, which could invalidate us */\n this._value = this._computeFn(this, changeSummary);\n }\n finally {\n this._isReaderValid = false;\n // We don't want our observed observables to think that they are (not even temporarily) not being observed.\n // Thus, we only unsubscribe from observables that are definitely not read anymore.\n for (const o of this._dependenciesToBeRemoved) {\n o.removeObserver(this);\n }\n this._dependenciesToBeRemoved.clear();\n if (delayedStore !== undefined) {\n delayedStore.dispose();\n }\n }\n didChange = this._didReportChange || (hadValue && !(this._equalityComparator(oldValue, this._value)));\n getLogger()?.handleObservableUpdated(this, {\n oldValue,\n newValue: this._value,\n change: undefined,\n didChange,\n hadValue,\n });\n }\n catch (e) {\n onBugIndicatingError(e);\n }\n this._isComputing = false;\n if (!this._didReportChange && didChange) {\n for (const r of this._observers) {\n r.handleChange(this, undefined);\n }\n }\n else {\n this._didReportChange = false;\n }\n }\n toString() {\n return `LazyDerived<${this.debugName}>`;\n }\n // IObserver Implementation\n beginUpdate(_observable) {\n if (this._isUpdating) {\n throw new BugIndicatingError('Cyclic deriveds are not supported yet!');\n }\n this._updateCount++;\n this._isUpdating = true;\n try {\n const propagateBeginUpdate = this._updateCount === 1;\n if (this._state === 3 /* DerivedState.upToDate */) {\n this._state = 1 /* DerivedState.dependenciesMightHaveChanged */;\n // If we propagate begin update, that will already signal a possible change.\n if (!propagateBeginUpdate) {\n for (const r of this._observers) {\n r.handlePossibleChange(this);\n }\n }\n }\n if (propagateBeginUpdate) {\n for (const r of this._observers) {\n r.beginUpdate(this); // This signals a possible change\n }\n }\n }\n finally {\n this._isUpdating = false;\n }\n }\n endUpdate(_observable) {\n this._updateCount--;\n if (this._updateCount === 0) {\n // End update could change the observer list.\n const observers = [...this._observers];\n for (const r of observers) {\n r.endUpdate(this);\n }\n if (this._removedObserverToCallEndUpdateOn) {\n const observers = [...this._removedObserverToCallEndUpdateOn];\n this._removedObserverToCallEndUpdateOn = null;\n for (const r of observers) {\n r.endUpdate(this);\n }\n }\n }\n }\n handlePossibleChange(observable) {\n // In all other states, observers already know that we might have changed.\n if (this._state === 3 /* DerivedState.upToDate */ && this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable)) {\n this._state = 1 /* DerivedState.dependenciesMightHaveChanged */;\n for (const r of this._observers) {\n r.handlePossibleChange(this);\n }\n }\n }\n handleChange(observable, change) {\n if (this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable) || this._isInBeforeUpdate) {\n getLogger()?.handleDerivedDependencyChanged(this, observable, change);\n let shouldReact = false;\n try {\n shouldReact = this._changeTracker ? this._changeTracker.handleChange({\n changedObservable: observable,\n change,\n didChange: (o) => o === observable,\n }, this._changeSummary) : true;\n }\n catch (e) {\n onBugIndicatingError(e);\n }\n const wasUpToDate = this._state === 3 /* DerivedState.upToDate */;\n if (shouldReact && (this._state === 1 /* DerivedState.dependenciesMightHaveChanged */ || wasUpToDate)) {\n this._state = 2 /* DerivedState.stale */;\n if (wasUpToDate) {\n for (const r of this._observers) {\n r.handlePossibleChange(this);\n }\n }\n }\n }\n }\n // IReader Implementation\n _ensureReaderValid() {\n if (!this._isReaderValid) {\n throw new BugIndicatingError('The reader object cannot be used outside its compute function!');\n }\n }\n readObservable(observable) {\n this._ensureReaderValid();\n // Subscribe before getting the value to enable caching\n observable.addObserver(this);\n /** This might call {@link handleChange} indirectly, which could invalidate us */\n const value = observable.get();\n // Which is why we only add the observable to the dependencies now.\n this._dependencies.add(observable);\n this._dependenciesToBeRemoved.delete(observable);\n return value;\n }\n reportChange(change) {\n this._ensureReaderValid();\n this._didReportChange = true;\n // TODO add logging\n for (const r of this._observers) {\n r.handleChange(this, change);\n }\n }\n get store() {\n this._ensureReaderValid();\n if (this._store === undefined) {\n this._store = new DisposableStore();\n }\n return this._store;\n }\n get delayedStore() {\n this._ensureReaderValid();\n if (this._delayedStore === undefined) {\n this._delayedStore = new DisposableStore();\n }\n return this._delayedStore;\n }\n addObserver(observer) {\n const shouldCallBeginUpdate = !this._observers.has(observer) && this._updateCount > 0;\n super.addObserver(observer);\n if (shouldCallBeginUpdate) {\n if (this._removedObserverToCallEndUpdateOn && this._removedObserverToCallEndUpdateOn.has(observer)) {\n this._removedObserverToCallEndUpdateOn.delete(observer);\n }\n else {\n observer.beginUpdate(this);\n }\n }\n }\n removeObserver(observer) {\n if (this._observers.has(observer) && this._updateCount > 0) {\n if (!this._removedObserverToCallEndUpdateOn) {\n this._removedObserverToCallEndUpdateOn = new Set();\n }\n this._removedObserverToCallEndUpdateOn.add(observer);\n }\n super.removeObserver(observer);\n }\n debugGetState() {\n return {\n state: this._state,\n stateStr: derivedStateToString(this._state),\n updateCount: this._updateCount,\n isComputing: this._isComputing,\n dependencies: this._dependencies,\n value: this._value,\n };\n }\n debugSetValue(newValue) {\n this._value = newValue;\n }\n debugRecompute() {\n if (!this._isComputing) {\n this._recompute();\n }\n else {\n this._state = 2 /* DerivedState.stale */;\n }\n }\n setValue(newValue, tx, change) {\n this._value = newValue;\n const observers = this._observers;\n tx.updateObserver(this, this);\n for (const d of observers) {\n d.handleChange(this, change);\n }\n }\n}\nclass DerivedWithSetter extends Derived {\n constructor(debugNameData, computeFn, changeTracker, handleLastObserverRemoved = undefined, equalityComparator, set, debugLocation) {\n super(debugNameData, computeFn, changeTracker, handleLastObserverRemoved, equalityComparator, debugLocation);\n this.set = set;\n }\n}\n\nexport { Derived, DerivedWithSetter };\n//# sourceMappingURL=derivedImpl.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { strictEquals } from '../commonFacade/deps.js';\nimport { DebugLocation } from '../debugLocation.js';\nimport { DebugNameData } from '../debugName.js';\nimport { _setDerivedOpts } from './baseObservable.js';\nimport { Derived, DerivedWithSetter } from './derivedImpl.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction derived(computeFnOrOwner, computeFn, debugLocation = DebugLocation.ofCaller()) {\n if (computeFn !== undefined) {\n return new Derived(new DebugNameData(computeFnOrOwner, undefined, computeFn), computeFn, undefined, undefined, strictEquals, debugLocation);\n }\n return new Derived(new DebugNameData(undefined, undefined, computeFnOrOwner), computeFnOrOwner, undefined, undefined, strictEquals, debugLocation);\n}\nfunction derivedWithSetter(owner, computeFn, setter, debugLocation = DebugLocation.ofCaller()) {\n return new DerivedWithSetter(new DebugNameData(owner, undefined, computeFn), computeFn, undefined, undefined, strictEquals, setter, debugLocation);\n}\nfunction derivedOpts(options, computeFn, debugLocation = DebugLocation.ofCaller()) {\n return new Derived(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn), computeFn, undefined, options.onLastObserverRemoved, options.equalsFn ?? strictEquals, debugLocation);\n}\n_setDerivedOpts(derivedOpts);\n/**\n * Represents an observable that is derived from other observables.\n * The value is only recomputed when absolutely needed.\n *\n * {@link computeFn} should start with a JS Doc using `@description` to name the derived.\n *\n * Use `createEmptyChangeSummary` to create a \"change summary\" that can collect the changes.\n * Use `handleChange` to add a reported change to the change summary.\n * The compute function is given the last change summary.\n * The change summary is discarded after the compute function was called.\n *\n * @see derived\n */\nfunction derivedHandleChanges(options, computeFn, debugLocation = DebugLocation.ofCaller()) {\n return new Derived(new DebugNameData(options.owner, options.debugName, undefined), computeFn, options.changeTracker, undefined, options.equalityComparer ?? strictEquals, debugLocation);\n}\nfunction derivedWithStore(computeFnOrOwner, computeFnOrUndefined, debugLocation = DebugLocation.ofCaller()) {\n let computeFn;\n let owner;\n if (computeFnOrUndefined === undefined) {\n computeFn = computeFnOrOwner;\n owner = undefined;\n }\n else {\n owner = computeFnOrOwner;\n computeFn = computeFnOrUndefined;\n }\n // Intentionally re-assigned in case an inactive observable is re-used later\n // eslint-disable-next-line local/code-no-potentially-unsafe-disposables\n let store = new DisposableStore();\n return new Derived(new DebugNameData(owner, undefined, computeFn), r => {\n if (store.isDisposed) {\n store = new DisposableStore();\n }\n else {\n store.clear();\n }\n return computeFn(r, store);\n }, undefined, () => store.dispose(), strictEquals, debugLocation);\n}\nfunction derivedDisposable(computeFnOrOwner, computeFnOrUndefined, debugLocation = DebugLocation.ofCaller()) {\n let computeFn;\n let owner;\n if (computeFnOrUndefined === undefined) {\n computeFn = computeFnOrOwner;\n owner = undefined;\n }\n else {\n owner = computeFnOrOwner;\n computeFn = computeFnOrUndefined;\n }\n let store = undefined;\n return new Derived(new DebugNameData(owner, undefined, computeFn), r => {\n if (!store) {\n store = new DisposableStore();\n }\n else {\n store.clear();\n }\n const result = computeFn(r);\n if (result) {\n store.add(result);\n }\n return result;\n }, undefined, () => {\n if (store) {\n store.dispose();\n store = undefined;\n }\n }, strictEquals, debugLocation);\n}\n\nexport { derived, derivedDisposable, derivedHandleChanges, derivedOpts, derivedWithSetter, derivedWithStore };\n//# sourceMappingURL=derived.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { onBugIndicatingError, BugIndicatingError } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction autorunStateToString(state) {\n switch (state) {\n case 1 /* AutorunState.dependenciesMightHaveChanged */: return 'dependenciesMightHaveChanged';\n case 2 /* AutorunState.stale */: return 'stale';\n case 3 /* AutorunState.upToDate */: return 'upToDate';\n default: return '<unknown>';\n }\n}\nclass AutorunObserver {\n get debugName() {\n return this._debugNameData.getDebugName(this) ?? '(anonymous)';\n }\n constructor(_debugNameData, _runFn, _changeTracker, debugLocation) {\n this._debugNameData = _debugNameData;\n this._runFn = _runFn;\n this._changeTracker = _changeTracker;\n this._state = 2 /* AutorunState.stale */;\n this._updateCount = 0;\n this._disposed = false;\n this._dependencies = new Set();\n this._dependenciesToBeRemoved = new Set();\n this._isRunning = false;\n this._store = undefined;\n this._delayedStore = undefined;\n this._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n getLogger()?.handleAutorunCreated(this, debugLocation);\n this._run();\n }\n dispose() {\n if (this._disposed) {\n return;\n }\n this._disposed = true;\n for (const o of this._dependencies) {\n o.removeObserver(this); // Warning: external call!\n }\n this._dependencies.clear();\n if (this._store !== undefined) {\n this._store.dispose();\n }\n if (this._delayedStore !== undefined) {\n this._delayedStore.dispose();\n }\n getLogger()?.handleAutorunDisposed(this);\n }\n _run() {\n const emptySet = this._dependenciesToBeRemoved;\n this._dependenciesToBeRemoved = this._dependencies;\n this._dependencies = emptySet;\n this._state = 3 /* AutorunState.upToDate */;\n try {\n if (!this._disposed) {\n getLogger()?.handleAutorunStarted(this);\n const changeSummary = this._changeSummary;\n const delayedStore = this._delayedStore;\n if (delayedStore !== undefined) {\n this._delayedStore = undefined;\n }\n try {\n this._isRunning = true;\n if (this._changeTracker) {\n this._changeTracker.beforeUpdate?.(this, changeSummary);\n this._changeSummary = this._changeTracker.createChangeSummary(changeSummary); // Warning: external call!\n }\n if (this._store !== undefined) {\n this._store.dispose();\n this._store = undefined;\n }\n this._runFn(this, changeSummary); // Warning: external call!\n }\n catch (e) {\n onBugIndicatingError(e);\n }\n finally {\n this._isRunning = false;\n if (delayedStore !== undefined) {\n delayedStore.dispose();\n }\n }\n }\n }\n finally {\n if (!this._disposed) {\n getLogger()?.handleAutorunFinished(this);\n }\n // We don't want our observed observables to think that they are (not even temporarily) not being observed.\n // Thus, we only unsubscribe from observables that are definitely not read anymore.\n for (const o of this._dependenciesToBeRemoved) {\n o.removeObserver(this); // Warning: external call!\n }\n this._dependenciesToBeRemoved.clear();\n }\n }\n toString() {\n return `Autorun<${this.debugName}>`;\n }\n // IObserver implementation\n beginUpdate(_observable) {\n if (this._state === 3 /* AutorunState.upToDate */) {\n this._state = 1 /* AutorunState.dependenciesMightHaveChanged */;\n }\n this._updateCount++;\n }\n endUpdate(_observable) {\n try {\n if (this._updateCount === 1) {\n do {\n if (this._state === 1 /* AutorunState.dependenciesMightHaveChanged */) {\n this._state = 3 /* AutorunState.upToDate */;\n for (const d of this._dependencies) {\n d.reportChanges(); // Warning: external call!\n if (this._state === 2 /* AutorunState.stale */) {\n // The other dependencies will refresh on demand\n break;\n }\n }\n }\n if (this._state !== 3 /* AutorunState.upToDate */) {\n this._run(); // Warning: indirect external call!\n }\n } while (this._state !== 3 /* AutorunState.upToDate */);\n }\n }\n finally {\n this._updateCount--;\n }\n }\n handlePossibleChange(observable) {\n if (this._state === 3 /* AutorunState.upToDate */ && this._isDependency(observable)) {\n this._state = 1 /* AutorunState.dependenciesMightHaveChanged */;\n }\n }\n handleChange(observable, change) {\n if (this._isDependency(observable)) {\n getLogger()?.handleAutorunDependencyChanged(this, observable, change);\n try {\n // Warning: external call!\n const shouldReact = this._changeTracker ? this._changeTracker.handleChange({\n changedObservable: observable,\n change,\n didChange: (o) => o === observable,\n }, this._changeSummary) : true;\n if (shouldReact) {\n this._state = 2 /* AutorunState.stale */;\n }\n }\n catch (e) {\n onBugIndicatingError(e);\n }\n }\n }\n _isDependency(observable) {\n return this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable);\n }\n // IReader implementation\n _ensureNoRunning() {\n if (!this._isRunning) {\n throw new BugIndicatingError('The reader object cannot be used outside its compute function!');\n }\n }\n readObservable(observable) {\n this._ensureNoRunning();\n // In case the run action disposes the autorun\n if (this._disposed) {\n return observable.get(); // warning: external call!\n }\n observable.addObserver(this); // warning: external call!\n const value = observable.get(); // warning: external call!\n this._dependencies.add(observable);\n this._dependenciesToBeRemoved.delete(observable);\n return value;\n }\n get store() {\n this._ensureNoRunning();\n if (this._disposed) {\n throw new BugIndicatingError('Cannot access store after dispose');\n }\n if (this._store === undefined) {\n this._store = new DisposableStore();\n }\n return this._store;\n }\n get delayedStore() {\n this._ensureNoRunning();\n if (this._disposed) {\n throw new BugIndicatingError('Cannot access store after dispose');\n }\n if (this._delayedStore === undefined) {\n this._delayedStore = new DisposableStore();\n }\n return this._delayedStore;\n }\n debugGetState() {\n return {\n isRunning: this._isRunning,\n updateCount: this._updateCount,\n dependencies: this._dependencies,\n state: this._state,\n stateStr: autorunStateToString(this._state),\n };\n }\n debugRerun() {\n if (!this._isRunning) {\n this._run();\n }\n else {\n this._state = 2 /* AutorunState.stale */;\n }\n }\n}\n\nexport { AutorunObserver };\n//# sourceMappingURL=createEffectImpl.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { toDisposable } from '../commonFacade/deps.js';\nimport { DebugNameData } from '../debugName.js';\nimport { AutorunObserver } from './createEffectImpl.js';\nimport { DebugLocation } from '../debugLocation.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the effect.\n */\nfunction createEffect(fn, debugLocation = DebugLocation.ofCaller()) {\n return new AutorunObserver(new DebugNameData(undefined, undefined, fn), fn, undefined, debugLocation);\n}\n/**\n * @deprecated Use {@link createEffect} instead.\n */\nconst autorun = createEffect;\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the autorun.\n */\nfunction createEffectOpts(options, fn, debugLocation = DebugLocation.ofCaller()) {\n return new AutorunObserver(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? fn), fn, undefined, debugLocation);\n}\n/**\n * @deprecated Use {@link createEffectOpts} instead.\n */\nconst autorunOpts = createEffectOpts;\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the autorun.\n *\n * Use `changeTracker.createChangeSummary` to create a \"change summary\" that can collect the changes.\n * Use `changeTracker.handleChange` to add a reported change to the change summary.\n * The run function is given the last change summary.\n * The change summary is discarded after the run function was called.\n *\n * @see autorun\n */\nfunction autorunHandleChanges(options, fn, debugLocation = DebugLocation.ofCaller()) {\n return new AutorunObserver(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? fn), fn, options.changeTracker, debugLocation);\n}\n/**\n * @see autorunHandleChanges (but with a disposable store that is cleared before the next run or on dispose)\n */\nfunction autorunWithStoreHandleChanges(options, fn) {\n const store = new DisposableStore();\n const disposable = autorunHandleChanges({\n owner: options.owner,\n debugName: options.debugName,\n debugReferenceFn: options.debugReferenceFn ?? fn,\n changeTracker: options.changeTracker,\n }, (reader, changeSummary) => {\n store.clear();\n fn(reader, changeSummary, store);\n });\n return toDisposable(() => {\n disposable.dispose();\n store.dispose();\n });\n}\n/**\n * @see autorun (but with a disposable store that is cleared before the next run or on dispose)\n *\n * @deprecated Use `autorun(reader => { reader.store.add(...) })` instead!\n */\nfunction autorunWithStore(fn) {\n const store = new DisposableStore();\n const disposable = createEffectOpts({\n owner: undefined,\n debugName: undefined,\n debugReferenceFn: fn,\n }, reader => {\n store.clear();\n fn(reader, store);\n });\n return toDisposable(() => {\n disposable.dispose();\n store.dispose();\n });\n}\nfunction autorunDelta(observable, handler) {\n let _lastValue;\n return createEffectOpts({ debugReferenceFn: handler }, (reader) => {\n const newValue = observable.read(reader);\n const lastValue = _lastValue;\n _lastValue = newValue;\n handler({ lastValue, newValue });\n });\n}\nfunction autorunIterableDelta(getValue, handler, getUniqueIdentifier = v => v) {\n const lastValues = new Map();\n return createEffectOpts({ debugReferenceFn: getValue }, (reader) => {\n const newValues = new Map();\n const removedValues = new Map(lastValues);\n for (const value of getValue(reader)) {\n const id = getUniqueIdentifier(value);\n if (lastValues.has(id)) {\n removedValues.delete(id);\n }\n else {\n newValues.set(id, value);\n lastValues.set(id, value);\n }\n }\n for (const id of removedValues.keys()) {\n lastValues.delete(id);\n }\n if (newValues.size || removedValues.size) {\n handler({ addedValues: [...newValues.values()], removedValues: [...removedValues.values()] });\n }\n });\n}\n/**\n * An autorun with a `dispose()` method on its `reader` which cancels the autorun.\n * It it safe to call `dispose()` synchronously.\n */\nfunction autorunSelfDisposable(fn, debugLocation = DebugLocation.ofCaller()) {\n let ar;\n let disposed = false;\n // eslint-disable-next-line prefer-const\n ar = createEffect(reader => {\n fn({\n delayedStore: reader.delayedStore,\n store: reader.store,\n readObservable: reader.readObservable.bind(reader),\n dispose: () => {\n ar?.dispose();\n disposed = true;\n }\n });\n }, debugLocation);\n if (disposed) {\n ar.dispose();\n }\n return ar;\n}\n\nexport { autorun, autorunDelta, autorunHandleChanges, autorunIterableDelta, autorunOpts, autorunSelfDisposable, autorunWithStore, autorunWithStoreHandleChanges, createEffect, createEffectOpts };\n//# sourceMappingURL=createEffect.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from './commonFacade/deps.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * This function is used to indicate that the caller recovered from an error that indicates a bug.\n*/\nfunction handleBugIndicatingErrorRecovery(message) {\n const err = new Error('BugIndicatingErrorRecovery: ' + message);\n onUnexpectedError(err);\n console.error('recovered from an error that indicates a bug', err);\n}\n\nexport { handleBugIndicatingErrorRecovery };\n//# sourceMappingURL=base.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { handleBugIndicatingErrorRecovery } from './base.js';\nimport { getFunctionName } from './debugName.js';\nimport { getLogger } from './logging/logging.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n/**\n * Starts a transaction in which many observables can be changed at once.\n * {@link fn} should start with a JS Doc using `@description` to give the transaction a debug name.\n * Reaction run on demand or when the transaction ends.\n */\nfunction transaction(fn, getDebugName) {\n const tx = new TransactionImpl(fn, getDebugName);\n try {\n fn(tx);\n }\n finally {\n tx.finish();\n }\n}\nlet _globalTransaction = undefined;\nfunction globalTransaction(fn) {\n if (_globalTransaction) {\n fn(_globalTransaction);\n }\n else {\n const tx = new TransactionImpl(fn, undefined);\n _globalTransaction = tx;\n try {\n fn(tx);\n }\n finally {\n tx.finish(); // During finish, more actions might be added to the transaction.\n // Which is why we only clear the global transaction after finish.\n _globalTransaction = undefined;\n }\n }\n}\n/** @deprecated */\nasync function asyncTransaction(fn, getDebugName) {\n const tx = new TransactionImpl(fn, getDebugName);\n try {\n await fn(tx);\n }\n finally {\n tx.finish();\n }\n}\n/**\n * Allows to chain transactions.\n */\nfunction subtransaction(tx, fn, getDebugName) {\n if (!tx) {\n transaction(fn, getDebugName);\n }\n else {\n fn(tx);\n }\n}\nclass TransactionImpl {\n constructor(_fn, _getDebugName) {\n this._fn = _fn;\n this._getDebugName = _getDebugName;\n this._updatingObservers = [];\n getLogger()?.handleBeginTransaction(this);\n }\n getDebugName() {\n if (this._getDebugName) {\n return this._getDebugName();\n }\n return getFunctionName(this._fn);\n }\n updateObserver(observer, observable) {\n if (!this._updatingObservers) {\n // This happens when a transaction is used in a callback or async function.\n // If an async transaction is used, make sure the promise awaits all users of the transaction (e.g. no race).\n handleBugIndicatingErrorRecovery('Transaction already finished!');\n // Error recovery\n transaction(tx => {\n tx.updateObserver(observer, observable);\n });\n return;\n }\n // When this gets called while finish is active, they will still get considered\n this._updatingObservers.push({ observer, observable });\n observer.beginUpdate(observable);\n }\n finish() {\n const updatingObservers = this._updatingObservers;\n if (!updatingObservers) {\n handleBugIndicatingErrorRecovery('transaction.finish() has already been called!');\n return;\n }\n for (let i = 0; i < updatingObservers.length; i++) {\n const { observer, observable } = updatingObservers[i];\n observer.endUpdate(observable);\n }\n // Prevent anyone from updating observers from now on.\n this._updatingObservers = null;\n getLogger()?.handleEndTransaction(this);\n }\n debugGetUpdatingObservers() {\n return this._updatingObservers;\n }\n}\n\nexport { TransactionImpl, asyncTransaction, globalTransaction, subtransaction, transaction };\n//# sourceMappingURL=transaction.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { TransactionImpl } from '../transaction.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { strictEquals } from '../commonFacade/deps.js';\nimport { DebugNameData } from '../debugName.js';\nimport { getLogger } from '../logging/logging.js';\nimport { DebugLocation } from '../debugLocation.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction observableValue(nameOrOwner, initialValue, debugLocation = DebugLocation.ofCaller()) {\n let debugNameData;\n if (typeof nameOrOwner === 'string') {\n debugNameData = new DebugNameData(undefined, nameOrOwner, undefined);\n }\n else {\n debugNameData = new DebugNameData(nameOrOwner, undefined, undefined);\n }\n return new ObservableValue(debugNameData, initialValue, strictEquals, debugLocation);\n}\nclass ObservableValue extends BaseObservable {\n get debugName() {\n return this._debugNameData.getDebugName(this) ?? 'ObservableValue';\n }\n constructor(_debugNameData, initialValue, _equalityComparator, debugLocation) {\n super(debugLocation);\n this._debugNameData = _debugNameData;\n this._equalityComparator = _equalityComparator;\n this._value = initialValue;\n getLogger()?.handleObservableUpdated(this, { hadValue: false, newValue: initialValue, change: undefined, didChange: true, oldValue: undefined });\n }\n get() {\n return this._value;\n }\n set(value, tx, change) {\n if (change === undefined && this._equalityComparator(this._value, value)) {\n return;\n }\n let _tx;\n if (!tx) {\n tx = _tx = new TransactionImpl(() => { }, () => `Setting ${this.debugName}`);\n }\n try {\n const oldValue = this._value;\n this._setValue(value);\n getLogger()?.handleObservableUpdated(this, { oldValue, newValue: value, change, didChange: true, hadValue: true });\n for (const observer of this._observers) {\n tx.updateObserver(observer, this);\n observer.handleChange(this, change);\n }\n }\n finally {\n if (_tx) {\n _tx.finish();\n }\n }\n }\n toString() {\n return `${this.debugName}: ${this._value}`;\n }\n _setValue(newValue) {\n this._value = newValue;\n }\n debugGetState() {\n return {\n value: this._value,\n };\n }\n debugSetValue(value) {\n this._value = value;\n }\n}\n/**\n * A disposable observable. When disposed, its value is also disposed.\n * When a new value is set, the previous value is disposed.\n */\nfunction disposableObservableValue(nameOrOwner, initialValue, debugLocation = DebugLocation.ofCaller()) {\n let debugNameData;\n if (typeof nameOrOwner === 'string') {\n debugNameData = new DebugNameData(undefined, nameOrOwner, undefined);\n }\n else {\n debugNameData = new DebugNameData(nameOrOwner, undefined, undefined);\n }\n return new DisposableObservableValue(debugNameData, initialValue, strictEquals, debugLocation);\n}\nclass DisposableObservableValue extends ObservableValue {\n _setValue(newValue) {\n if (this._value === newValue) {\n return;\n }\n if (this._value) {\n this._value.dispose();\n }\n this._value = newValue;\n }\n dispose() {\n this._value?.dispose();\n }\n}\n\nexport { DisposableObservableValue, ObservableValue, disposableObservableValue, observableValue };\n//# sourceMappingURL=observableValue.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { subtransaction } from '../transaction.js';\nimport { strictEquals } from '../commonFacade/deps.js';\nimport { DebugNameData } from '../debugName.js';\nimport { getLogger } from '../logging/logging.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugLocation } from '../debugLocation.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction observableFromEvent(...args) {\n let owner;\n let event;\n let getValue;\n let debugLocation;\n if (args.length === 2) {\n [event, getValue] = args;\n }\n else {\n [owner, event, getValue, debugLocation] = args;\n }\n return new FromEventObservable(new DebugNameData(owner, undefined, getValue), event, getValue, () => FromEventObservable.globalTransaction, strictEquals, debugLocation ?? DebugLocation.ofCaller());\n}\nfunction observableFromEventOpts(options, event, getValue, debugLocation = DebugLocation.ofCaller()) {\n return new FromEventObservable(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? getValue), event, getValue, () => FromEventObservable.globalTransaction, options.equalsFn ?? strictEquals, debugLocation);\n}\nclass FromEventObservable extends BaseObservable {\n constructor(_debugNameData, event, _getValue, _getTransaction, _equalityComparator, debugLocation) {\n super(debugLocation);\n this._debugNameData = _debugNameData;\n this.event = event;\n this._getValue = _getValue;\n this._getTransaction = _getTransaction;\n this._equalityComparator = _equalityComparator;\n this._hasValue = false;\n this.handleEvent = (args) => {\n const newValue = this._getValue(args);\n const oldValue = this._value;\n const didChange = !this._hasValue || !(this._equalityComparator(oldValue, newValue));\n let didRunTransaction = false;\n if (didChange) {\n this._value = newValue;\n if (this._hasValue) {\n didRunTransaction = true;\n subtransaction(this._getTransaction(), (tx) => {\n getLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n for (const o of this._observers) {\n tx.updateObserver(o, this);\n o.handleChange(this, undefined);\n }\n }, () => {\n const name = this.getDebugName();\n return 'Event fired' + (name ? `: ${name}` : '');\n });\n }\n this._hasValue = true;\n }\n if (!didRunTransaction) {\n getLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n }\n };\n }\n getDebugName() {\n return this._debugNameData.getDebugName(this);\n }\n get debugName() {\n const name = this.getDebugName();\n return 'From Event' + (name ? `: ${name}` : '');\n }\n onFirstObserverAdded() {\n this._subscription = this.event(this.handleEvent);\n }\n onLastObserverRemoved() {\n this._subscription.dispose();\n this._subscription = undefined;\n this._hasValue = false;\n this._value = undefined;\n }\n get() {\n if (this._subscription) {\n if (!this._hasValue) {\n this.handleEvent(undefined);\n }\n return this._value;\n }\n else {\n // no cache, as there are no subscribers to keep it updated\n const value = this._getValue(undefined);\n return value;\n }\n }\n debugSetValue(value) {\n this._value = value;\n }\n debugGetState() {\n return { value: this._value, hasValue: this._hasValue };\n }\n}\n(function (observableFromEvent) {\n observableFromEvent.Observer = FromEventObservable;\n function batchEventsGlobally(tx, fn) {\n let didSet = false;\n if (FromEventObservable.globalTransaction === undefined) {\n FromEventObservable.globalTransaction = tx;\n didSet = true;\n }\n try {\n fn();\n }\n finally {\n if (didSet) {\n FromEventObservable.globalTransaction = undefined;\n }\n }\n }\n observableFromEvent.batchEventsGlobally = batchEventsGlobally;\n})(observableFromEvent || (observableFromEvent = {}));\n\nexport { FromEventObservable, observableFromEvent, observableFromEventOpts };\n//# sourceMappingURL=observableFromEvent.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { createEffect } from '../reactions/createEffect.js';\nimport { transaction } from '../transaction.js';\nimport { observableValue } from '../observables/observableValue.js';\nimport { toDisposable } from '../commonFacade/deps.js';\nimport { derivedOpts, derived } from '../observables/derived.js';\nimport { observableFromEvent } from '../observables/observableFromEvent.js';\nimport { observableSignal } from '../observables/observableSignal.js';\nimport { _setKeepObserved, _setRecomputeInitiallyAndOnChange } from '../observables/baseObservable.js';\nimport { DisposableStore } from '../../disposables.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction observableFromPromise(promise) {\n const observable = observableValue('promiseValue', {});\n promise.then((value) => {\n observable.set({ value }, undefined);\n });\n return observable;\n}\nfunction signalFromObservable(owner, observable) {\n return derivedOpts({\n owner,\n equalsFn: () => false,\n }, reader => {\n observable.read(reader);\n });\n}\n/**\n * @deprecated Use `debouncedObservable` instead.\n */\nfunction debouncedObservableDeprecated(observable, debounceMs, disposableStore) {\n const debouncedObservable = observableValue('debounced', undefined);\n let timeout = undefined;\n disposableStore.add(createEffect(reader => {\n /** @description debounce */\n const value = observable.read(reader);\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n transaction(tx => {\n debouncedObservable.set(value, tx);\n });\n }, debounceMs);\n }));\n return debouncedObservable;\n}\n/**\n * Creates an observable that debounces the input observable.\n */\nfunction debouncedObservable(observable, debounceMs) {\n let hasValue = false;\n let lastValue;\n let timeout = undefined;\n return observableFromEvent(cb => {\n const d = createEffect(reader => {\n const value = observable.read(reader);\n if (!hasValue) {\n hasValue = true;\n lastValue = value;\n }\n else {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n lastValue = value;\n cb();\n }, debounceMs);\n }\n });\n return {\n dispose() {\n d.dispose();\n hasValue = false;\n lastValue = undefined;\n },\n };\n }, () => {\n if (hasValue) {\n return lastValue;\n }\n else {\n return observable.get();\n }\n });\n}\nfunction wasEventTriggeredRecently(event, timeoutMs, disposableStore) {\n const observable = observableValue('triggeredRecently', false);\n let timeout = undefined;\n disposableStore.add(event(() => {\n observable.set(true, undefined);\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n observable.set(false, undefined);\n }, timeoutMs);\n }));\n return observable;\n}\n/**\n * This makes sure the observable is being observed and keeps its cache alive.\n */\nfunction keepObserved(observable) {\n const o = new KeepAliveObserver(false, undefined);\n observable.addObserver(o);\n return toDisposable(() => {\n observable.removeObserver(o);\n });\n}\n_setKeepObserved(keepObserved);\n/**\n * This converts the given observable into an autorun.\n */\nfunction recomputeInitiallyAndOnChange(observable, handleValue) {\n const o = new KeepAliveObserver(true, handleValue);\n observable.addObserver(o);\n try {\n o.beginUpdate(observable);\n }\n finally {\n o.endUpdate(observable);\n }\n return toDisposable(() => {\n observable.removeObserver(o);\n });\n}\n_setRecomputeInitiallyAndOnChange(recomputeInitiallyAndOnChange);\nclass KeepAliveObserver {\n constructor(_forceRecompute, _handleValue) {\n this._forceRecompute = _forceRecompute;\n this._handleValue = _handleValue;\n this._counter = 0;\n }\n beginUpdate(observable) {\n this._counter++;\n }\n endUpdate(observable) {\n if (this._counter === 1 && this._forceRecompute) {\n if (this._handleValue) {\n this._handleValue(observable.get());\n }\n else {\n observable.reportChanges();\n }\n }\n this._counter--;\n }\n handlePossibleChange(observable) {\n // NO OP\n }\n handleChange(observable, change) {\n // NO OP\n }\n}\nfunction derivedObservableWithCache(owner, computeFn) {\n let lastValue = undefined;\n const observable = derivedOpts({ owner, debugReferenceFn: computeFn }, reader => {\n lastValue = computeFn(reader, lastValue);\n return lastValue;\n });\n return observable;\n}\nfunction derivedObservableWithWritableCache(owner, computeFn) {\n let lastValue = undefined;\n const onChange = observableSignal('derivedObservableWithWritableCache');\n const observable = derived(owner, reader => {\n onChange.read(reader);\n lastValue = computeFn(reader, lastValue);\n return lastValue;\n });\n return Object.assign(observable, {\n clearCache: (tx) => {\n lastValue = undefined;\n onChange.trigger(tx);\n },\n setCache: (newValue, tx) => {\n lastValue = newValue;\n onChange.trigger(tx);\n }\n });\n}\n/**\n * When the items array changes, referential equal items are not mapped again.\n */\nfunction mapObservableArrayCached(owner, items, map, keySelector) {\n let m = new ArrayMap(map, keySelector);\n const self = derivedOpts({\n debugReferenceFn: map,\n owner,\n onLastObserverRemoved: () => {\n m.dispose();\n m = new ArrayMap(map);\n }\n }, (reader) => {\n m.setItems(items.read(reader));\n return m.getItems();\n });\n return self;\n}\nclass ArrayMap {\n constructor(_map, _keySelector) {\n this._map = _map;\n this._keySelector = _keySelector;\n this._cache = new Map();\n this._items = [];\n }\n dispose() {\n this._cache.forEach(entry => entry.store.dispose());\n this._cache.clear();\n }\n setItems(items) {\n const newItems = [];\n const itemsToRemove = new Set(this._cache.keys());\n for (const item of items) {\n const key = this._keySelector ? this._keySelector(item) : item;\n let entry = this._cache.get(key);\n if (!entry) {\n const store = new DisposableStore();\n const out = this._map(item, store);\n entry = { out, store };\n this._cache.set(key, entry);\n }\n else {\n itemsToRemove.delete(key);\n }\n newItems.push(entry.out);\n }\n for (const item of itemsToRemove) {\n const entry = this._cache.get(item);\n entry.store.dispose();\n this._cache.delete(item);\n }\n this._items = newItems;\n }\n getItems() {\n return this._items;\n }\n}\n\nexport { KeepAliveObserver, debouncedObservable, debouncedObservableDeprecated, derivedObservableWithCache, derivedObservableWithWritableCache, keepObserved, mapObservableArrayCached, observableFromPromise, recomputeInitiallyAndOnChange, signalFromObservable, wasEventTriggeredRecently };\n//# sourceMappingURL=utils.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { addLogger } from './logging.js';\nimport { getClassName } from '../debugName.js';\nimport { Derived } from '../observables/derivedImpl.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nlet consoleObservableLogger;\nfunction logObservableToConsole(obs) {\n if (!consoleObservableLogger) {\n consoleObservableLogger = new ConsoleObservableLogger();\n addLogger(consoleObservableLogger);\n }\n consoleObservableLogger.addFilteredObj(obs);\n}\nclass ConsoleObservableLogger {\n constructor() {\n this.indentation = 0;\n this.changedObservablesSets = new WeakMap();\n }\n addFilteredObj(obj) {\n if (!this._filteredObjects) {\n this._filteredObjects = new Set();\n }\n this._filteredObjects.add(obj);\n }\n _isIncluded(obj) {\n return this._filteredObjects?.has(obj) ?? true;\n }\n textToConsoleArgs(text) {\n return consoleTextToArgs([\n normalText(repeat('| ', this.indentation)),\n text,\n ]);\n }\n formatInfo(info) {\n if (!info.hadValue) {\n return [\n normalText(` `),\n styled(formatValue(info.newValue, 60), {\n color: 'green',\n }),\n normalText(` (initial)`),\n ];\n }\n return info.didChange\n ? [\n normalText(` `),\n styled(formatValue(info.oldValue, 70), {\n color: 'red',\n strikeThrough: true,\n }),\n normalText(` `),\n styled(formatValue(info.newValue, 60), {\n color: 'green',\n }),\n ]\n : [normalText(` (unchanged)`)];\n }\n handleObservableCreated(observable) {\n if (observable instanceof Derived) {\n const derived = observable;\n this.changedObservablesSets.set(derived, new Set());\n }\n }\n handleOnListenerCountChanged(observable, newCount) {\n }\n handleObservableUpdated(observable, info) {\n if (!this._isIncluded(observable)) {\n return;\n }\n if (observable instanceof Derived) {\n this._handleDerivedRecomputed(observable, info);\n return;\n }\n console.log(...this.textToConsoleArgs([\n formatKind('observable value changed'),\n styled(observable.debugName, { color: 'BlueViolet' }),\n ...this.formatInfo(info),\n ]));\n }\n formatChanges(changes) {\n if (changes.size === 0) {\n return undefined;\n }\n return styled(' (changed deps: ' +\n [...changes].map((o) => o.debugName).join(', ') +\n ')', { color: 'gray' });\n }\n handleDerivedDependencyChanged(derived, observable, change) {\n if (!this._isIncluded(derived)) {\n return;\n }\n this.changedObservablesSets.get(derived)?.add(observable);\n }\n _handleDerivedRecomputed(derived, info) {\n if (!this._isIncluded(derived)) {\n return;\n }\n const changedObservables = this.changedObservablesSets.get(derived);\n if (!changedObservables) {\n return;\n }\n console.log(...this.textToConsoleArgs([\n formatKind('derived recomputed'),\n styled(derived.debugName, { color: 'BlueViolet' }),\n ...this.formatInfo(info),\n this.formatChanges(changedObservables),\n { data: [{ fn: derived._debugNameData.referenceFn ?? derived._computeFn }] }\n ]));\n changedObservables.clear();\n }\n handleDerivedCleared(derived) {\n if (!this._isIncluded(derived)) {\n return;\n }\n console.log(...this.textToConsoleArgs([\n formatKind('derived cleared'),\n styled(derived.debugName, { color: 'BlueViolet' }),\n ]));\n }\n handleFromEventObservableTriggered(observable, info) {\n if (!this._isIncluded(observable)) {\n return;\n }\n console.log(...this.textToConsoleArgs([\n formatKind('observable from event triggered'),\n styled(observable.debugName, { color: 'BlueViolet' }),\n ...this.formatInfo(info),\n { data: [{ fn: observable._getValue }] }\n ]));\n }\n handleAutorunCreated(autorun) {\n if (!this._isIncluded(autorun)) {\n return;\n }\n this.changedObservablesSets.set(autorun, new Set());\n }\n handleAutorunDisposed(autorun) {\n }\n handleAutorunDependencyChanged(autorun, observable, change) {\n if (!this._isIncluded(autorun)) {\n return;\n }\n this.changedObservablesSets.get(autorun).add(observable);\n }\n handleAutorunStarted(autorun) {\n const changedObservables = this.changedObservablesSets.get(autorun);\n if (!changedObservables) {\n return;\n }\n if (this._isIncluded(autorun)) {\n console.log(...this.textToConsoleArgs([\n formatKind('autorun'),\n styled(autorun.debugName, { color: 'BlueViolet' }),\n this.formatChanges(changedObservables),\n { data: [{ fn: autorun._debugNameData.referenceFn ?? autorun._runFn }] }\n ]));\n }\n changedObservables.clear();\n this.indentation++;\n }\n handleAutorunFinished(autorun) {\n this.indentation--;\n }\n handleBeginTransaction(transaction) {\n let transactionName = transaction.getDebugName();\n if (transactionName === undefined) {\n transactionName = '';\n }\n if (this._isIncluded(transaction)) {\n console.log(...this.textToConsoleArgs([\n formatKind('transaction'),\n styled(transactionName, { color: 'BlueViolet' }),\n { data: [{ fn: transaction._fn }] }\n ]));\n }\n this.indentation++;\n }\n handleEndTransaction() {\n this.indentation--;\n }\n}\nfunction consoleTextToArgs(text) {\n const styles = new Array();\n const data = [];\n let firstArg = '';\n function process(t) {\n if ('length' in t) {\n for (const item of t) {\n if (item) {\n process(item);\n }\n }\n }\n else if ('text' in t) {\n firstArg += `%c${t.text}`;\n styles.push(t.style);\n if (t.data) {\n data.push(...t.data);\n }\n }\n else if ('data' in t) {\n data.push(...t.data);\n }\n }\n process(text);\n const result = [firstArg, ...styles];\n result.push(...data);\n return result;\n}\nfunction normalText(text) {\n return styled(text, { color: 'black' });\n}\nfunction formatKind(kind) {\n return styled(padStr(`${kind}: `, 10), { color: 'black', bold: true });\n}\nfunction styled(text, options = {\n color: 'black',\n}) {\n function objToCss(styleObj) {\n return Object.entries(styleObj).reduce((styleString, [propName, propValue]) => {\n return `${styleString}${propName}:${propValue};`;\n }, '');\n }\n const style = {\n color: options.color,\n };\n if (options.strikeThrough) {\n style['text-decoration'] = 'line-through';\n }\n if (options.bold) {\n style['font-weight'] = 'bold';\n }\n return {\n text,\n style: objToCss(style),\n };\n}\nfunction formatValue(value, availableLen) {\n try {\n return formatValueUnsafe(value, availableLen);\n }\n catch {\n // Value could not be formatted (e.g., a Proxy that throws on coercion)\n return '[[???]]';\n }\n}\nfunction formatValueUnsafe(value, availableLen) {\n switch (typeof value) {\n case 'number':\n return '' + value;\n case 'string':\n if (value.length + 2 <= availableLen) {\n return `\"${value}\"`;\n }\n return `\"${value.substr(0, availableLen - 7)}\"+...`;\n case 'boolean':\n return value ? 'true' : 'false';\n case 'undefined':\n return 'undefined';\n case 'object':\n if (value === null) {\n return 'null';\n }\n if (Array.isArray(value)) {\n return formatArray(value, availableLen);\n }\n return formatObject(value, availableLen);\n case 'symbol':\n return value.toString();\n case 'function':\n return `[[Function${value.name ? ' ' + value.name : ''}]]`;\n default:\n return '' + value;\n }\n}\nfunction formatArray(value, availableLen) {\n let result = '[ ';\n let first = true;\n for (const val of value) {\n if (!first) {\n result += ', ';\n }\n if (result.length - 5 > availableLen) {\n result += '...';\n break;\n }\n first = false;\n result += `${formatValue(val, availableLen - result.length)}`;\n }\n result += ' ]';\n return result;\n}\nfunction formatObject(value, availableLen) {\n // Avoid drilling into Proxies - wrap operations that could trigger traps\n try {\n if (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) {\n const val = value.toString();\n if (val.length <= availableLen) {\n return val;\n }\n return val.substring(0, availableLen - 3) + '...';\n }\n }\n catch {\n // toString triggered a Proxy trap or threw - bail out\n return '[[Object]]';\n }\n const className = getClassName(value);\n let result = className ? className + '(' : '{ ';\n let first = true;\n let entries;\n try {\n entries = Object.entries(value);\n }\n catch {\n // Object.entries triggered a Proxy trap - bail out\n return className ? `${className}(...)` : '[[Object]]';\n }\n for (const [key, val] of entries) {\n if (!first) {\n result += ', ';\n }\n if (result.length - 5 > availableLen) {\n result += '...';\n break;\n }\n first = false;\n result += `${key}: ${formatValue(val, availableLen - result.length)}`;\n }\n result += className ? ')' : ' }';\n return result;\n}\nfunction repeat(str, count) {\n let result = '';\n for (let i = 1; i <= count; i++) {\n result += str;\n }\n return result;\n}\nfunction padStr(str, length) {\n while (str.length < length) {\n str += ' ';\n }\n return str;\n}\n\nexport { ConsoleObservableLogger, formatValue, logObservableToConsole };\n//# sourceMappingURL=consoleObservableLogger.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Derived } from '../observables/derivedImpl.js';\nimport { FromEventObservable } from '../observables/observableFromEvent.js';\nimport { ObservableValue } from '../observables/observableValue.js';\nimport { AutorunObserver } from '../reactions/createEffectImpl.js';\nimport { formatValue } from './consoleObservableLogger.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nfunction debugGetDependencyGraph(obs, options) {\n const debugNamePostProcessor = options?.debugNamePostProcessor ?? ((str) => str);\n const info = Info.from(obs, debugNamePostProcessor);\n if (!info) {\n return '';\n }\n const alreadyListed = new Set();\n return formatObservableInfo(info, 0, alreadyListed).trim();\n}\nfunction formatObservableInfo(info, indentLevel, alreadyListed) {\n const indent = '\\t\\t'.repeat(indentLevel);\n const lines = [];\n const isAlreadyListed = alreadyListed.has(info.sourceObj);\n if (isAlreadyListed) {\n lines.push(`${indent}* ${info.type} ${info.name} (already listed)`);\n return lines.join('\\n');\n }\n alreadyListed.add(info.sourceObj);\n lines.push(`${indent}* ${info.type} ${info.name}:`);\n lines.push(`${indent} value: ${formatValue(info.value, 50)}`);\n lines.push(`${indent} state: ${info.state}`);\n if (info.dependencies.length > 0) {\n lines.push(`${indent} dependencies:`);\n for (const dep of info.dependencies) {\n lines.push(formatObservableInfo(dep, indentLevel + 1, alreadyListed));\n }\n }\n return lines.join('\\n');\n}\nclass Info {\n static from(obs, debugNamePostProcessor) {\n if (obs instanceof AutorunObserver) {\n const state = obs.debugGetState();\n return new Info(obs, debugNamePostProcessor(obs.debugName), 'autorun', undefined, state.stateStr, Array.from(state.dependencies).map(dep => Info.from(dep, debugNamePostProcessor) || Info.unknown(dep)));\n }\n else if (obs instanceof Derived) {\n const state = obs.debugGetState();\n return new Info(obs, debugNamePostProcessor(obs.debugName), 'derived', state.value, state.stateStr, Array.from(state.dependencies).map(dep => Info.from(dep, debugNamePostProcessor) || Info.unknown(dep)));\n }\n else if (obs instanceof ObservableValue) {\n const state = obs.debugGetState();\n return new Info(obs, debugNamePostProcessor(obs.debugName), 'observableValue', state.value, 'upToDate', []);\n }\n else if (obs instanceof FromEventObservable) {\n const state = obs.debugGetState();\n return new Info(obs, debugNamePostProcessor(obs.debugName), 'fromEvent', state.value, state.hasValue ? 'upToDate' : 'initial', []);\n }\n return undefined;\n }\n static unknown(obs) {\n return new Info(obs, '(unknown)', 'unknown', undefined, 'unknown', []);\n }\n constructor(sourceObj, name, type, value, state, dependencies) {\n this.sourceObj = sourceObj;\n this.name = name;\n this.type = type;\n this.value = value;\n this.state = state;\n this.dependencies = dependencies;\n }\n}\n\nexport { debugGetDependencyGraph };\n//# sourceMappingURL=debugGetDependencyGraph.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { setLogObservableFn } from './logging/logging.js';\nimport { _setDebugGetDependencyGraph } from './observables/baseObservable.js';\nexport { DebugLocation } from './debugLocation.js';\nexport { derived, derivedDisposable, derivedHandleChanges, derivedOpts, derivedWithSetter, derivedWithStore } from './observables/derived.js';\nexport { debouncedObservable, debouncedObservableDeprecated, derivedObservableWithCache, derivedObservableWithWritableCache, keepObserved, mapObservableArrayCached, observableFromPromise, recomputeInitiallyAndOnChange, signalFromObservable, wasEventTriggeredRecently } from './utils/utils.js';\nexport { observableFromEvent, observableFromEventOpts } from './observables/observableFromEvent.js';\nimport { logObservableToConsole } from './logging/consoleObservableLogger.js';\nimport { debugGetDependencyGraph } from './logging/debugGetDependencyGraph.js';\n\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n// This is a facade for the observable implementation. Only import from here!\n_setDebugGetDependencyGraph(debugGetDependencyGraph);\nsetLogObservableFn(logObservableToConsole);\n//# sourceMappingURL=index.js.map\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { transaction } from '../transaction.js';\nimport { derived } from '../observables/derived.js';\nimport { observableValue } from '../observables/observableValue.js';\n\nclass ObservableLazy {\n /**\n * The cached value.\n * Does not force a computation of the value.\n */\n get cachedValue() { return this._value; }\n constructor(_computeValue) {\n this._computeValue = _computeValue;\n this._value = observableValue(this, undefined);\n }\n /**\n * Returns the cached value.\n * Computes the value if the value has not been cached yet.\n */\n getValue() {\n let v = this._value.get();\n if (!v) {\n v = this._computeValue();\n this._value.set(v, undefined);\n }\n return v;\n }\n}\n/**\n * A promise whose state is observable.\n */\nclass ObservablePromise {\n static fromFn(fn) {\n return new ObservablePromise(fn());\n }\n constructor(promise) {\n this._value = observableValue(this, undefined);\n /**\n * The current state of the promise.\n * Is `undefined` if the promise didn't resolve yet.\n */\n this.promiseResult = this._value;\n this.resolvedValue = derived(this, reader => {\n const result = this.promiseResult.read(reader);\n if (!result) {\n return undefined;\n }\n return result.getDataOrThrow();\n });\n this.promise = promise.then(value => {\n transaction(tx => {\n /** @description onPromiseResolved */\n this._value.set(new PromiseResult(value, undefined), tx);\n });\n return value;\n }, error => {\n transaction(tx => {\n /** @description onPromiseRejected */\n this._value.set(new PromiseResult(undefined, error), tx);\n });\n throw error;\n });\n }\n}\nclass PromiseResult {\n constructor(\n /**\n * The value of the resolved promise.\n * Undefined if the promise rejected.\n */\n data, \n /**\n * The error in case of a rejected promise.\n * Undefined if the promise resolved.\n */\n error) {\n this.data = data;\n this.error = error;\n }\n /**\n * Returns the value if the promise resolved, otherwise throws the error.\n */\n getDataOrThrow() {\n if (this.error) {\n throw this.error;\n }\n return this.data;\n }\n}\n/**\n * A lazy promise whose state is observable.\n */\nclass ObservableLazyPromise {\n constructor(_computePromise) {\n this._computePromise = _computePromise;\n this._lazyValue = new ObservableLazy(() => new ObservablePromise(this._computePromise()));\n /**\n * Does not enforce evaluation of the promise compute function.\n * Is undefined if the promise has not been computed yet.\n */\n this.cachedPromiseResult = derived(this, reader => this._lazyValue.cachedValue.read(reader)?.promiseResult.read(reader));\n }\n getPromise() {\n return this._lazyValue.getValue().promise;\n }\n}\n\nexport { ObservableLazy, ObservableLazyPromise, ObservablePromise, PromiseResult };\n//# sourceMappingURL=promise.js.map\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import { a as observableValue, n as approvalDetailLines } from "./cli-FDKN1ydZ.js";
2
- import { n as useObservable, t as useScroll } from "./scroll--AVfTs5W.js";
1
+ import { m as approvalDetailLines } from "./cli-CY5WVWEQ.js";
2
+ import { r as observableValue } from "./dist-BOcSU4-O.js";
3
+ import { n as useObservable, t as useScroll } from "./scroll-CY9Rcshb.js";
3
4
  import { jcsCanonicalize } from "@hediet/linkrpc";
4
5
  import React from "react";
5
6
  import { Box, Text, render, useApp, useInput, useStdout } from "ink";
6
- import TextInput from "ink-text-input";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ import TextInput from "ink-text-input";
8
9
  //#region src/approval-ui/ApprovalApp.tsx
9
10
  const HEADER_HEIGHT = 2;
10
11
  const FOOTER_HEIGHT = 2;
@@ -712,4 +713,4 @@ function raceAbort(promise, signal) {
712
713
  //#endregion
713
714
  export { runApprovalUi };
714
715
 
715
- //# sourceMappingURL=runApprovalUi-CTyhiDpa.js.map
716
+ //# sourceMappingURL=runApprovalUi-C4yIUu8Y.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runApprovalUi-CTyhiDpa.js","names":[],"sources":["../../src/approval-ui/ApprovalApp.tsx","../../src/approval-ui/ApprovalUiModel.ts","../../src/approval-ui/runApprovalUi.tsx"],"sourcesContent":["import React from 'react';\nimport { Box, Text, useApp, useInput, useStdout } from 'ink';\nimport TextInput from 'ink-text-input';\nimport type { PendingApprovalRequest } from '../commands/approval';\nimport {\n approvalDetailLines,\n type ApprovalPresentationLine as DetailLine,\n} from '../approvalPresentation';\nimport { useObservable } from '../ui/useObservable';\nimport { useScroll } from '../ui/scroll';\nimport { ApprovalUiModel, type ApprovalUiMessageKind } from './ApprovalUiModel';\n\nexport { approvalDetailLines } from '../approvalPresentation';\n\nexport interface ApprovalAppProps {\n readonly model: ApprovalUiModel;\n}\n\ninterface TerminalSize {\n readonly columns: number;\n readonly rows: number;\n}\n\nconst HEADER_HEIGHT = 2;\nconst FOOTER_HEIGHT = 2;\nconst PANE_CHROME_HEIGHT = 3;\nconst MIN_FULL_HEIGHT = 13;\nconst SPLIT_COLUMNS = 96;\n\nexport const ApprovalApp: React.FC<ApprovalAppProps> = ({ model }) => {\n const requests = useObservable(model.requests);\n const selectedId = useObservable(model.selectedRequestId);\n const connectionState = useObservable(model.connectionState);\n const mode = useObservable(model.mode);\n const busy = useObservable(model.busy);\n const message = useObservable(model.message);\n const denialReason = useObservable(model.denialReason);\n const detailOffset = useObservable(model.detailOffset);\n const preparedApproval = useObservable(model.preparedApproval);\n const size = useTerminalSize();\n const { exit } = useApp();\n\n const selectedIndex = requests.findIndex((item) => item.id === selectedId);\n const selected = selectedIndex >= 0 ? requests[selectedIndex] : undefined;\n const rawDetails = selected === undefined\n ? []\n : approvalDetailLines(selected, mode === 'approve' ? preparedApproval : undefined);\n const bodyHeight = Math.max(1, size.rows - HEADER_HEIGHT - FOOTER_HEIGHT);\n const sideBySide = size.columns >= SPLIT_COLUMNS;\n const listPaneHeight = sideBySide ? bodyHeight : Math.max(5, Math.floor(bodyHeight * 0.42));\n const detailPaneHeight = sideBySide ? bodyHeight : Math.max(1, bodyHeight - listPaneHeight);\n const detailViewport = Math.max(1, detailPaneHeight - PANE_CHROME_HEIGHT);\n const detailPaneWidth = sideBySide ? Math.floor(size.columns * 0.62) : size.columns;\n const details = wrapDetailLines(rawDetails, Math.max(1, detailPaneWidth - 6));\n const approvalReviewed = mode === 'approve'\n && preparedApproval !== undefined\n && details.length > 0\n && detailOffset + detailViewport >= details.length;\n\n useInput((input, key) => {\n const canReviewAuthority = size.rows >= MIN_FULL_HEIGHT;\n if (busy) return;\n if (mode === 'deny') {\n if (key.escape) model.cancelMode();\n return;\n }\n if (mode === 'approve') {\n if (key.escape) {\n model.cancelMode();\n } else if (key.pageUp) {\n model.scrollDetails(-detailViewport, details.length, detailViewport);\n } else if (key.pageDown) {\n model.scrollDetails(detailViewport, details.length, detailViewport);\n } else if (key.return && canReviewAuthority && approvalReviewed) {\n void model.confirmCurrentMode();\n }\n return;\n }\n if (mode === 'help') {\n if (key.escape || input === '?' || input === 'q') model.cancelMode();\n return;\n }\n if (input === 'q') {\n exit();\n } else if (input === '?' || key.f1) {\n model.showHelp();\n } else if (input === 'a' && canReviewAuthority) {\n void model.beginApprove();\n } else if (input === 'd' && canReviewAuthority) {\n model.beginDeny();\n } else if (input === 'r') {\n void model.refresh();\n } else if (key.upArrow || input === 'k') {\n model.selectBy(-1);\n } else if (key.downArrow || input === 'j') {\n model.selectBy(1);\n } else if (key.pageUp) {\n model.scrollDetails(-detailViewport, details.length, detailViewport);\n } else if (key.pageDown) {\n model.scrollDetails(detailViewport, details.length, detailViewport);\n }\n });\n\n if (size.rows < MIN_FULL_HEIGHT) {\n return (\n <CompactApprovalApp\n model={model}\n selected={selected}\n requestCount={requests.length}\n connectionState={connectionState}\n mode={mode}\n busy={busy}\n message={message}\n rows={size.rows}\n />\n );\n }\n\n return (\n <Box flexDirection=\"column\" height={size.rows} width={size.columns}>\n <Header\n principalId={model.principalId}\n state={connectionState}\n requestCount={requests.length}\n />\n {mode === 'help' ? (\n <Help height={bodyHeight} />\n ) : (\n <Box\n flexDirection={sideBySide ? 'row' : 'column'}\n height={bodyHeight}\n >\n <RequestList\n requests={requests}\n selectedIndex={selectedIndex}\n height={listPaneHeight}\n width={sideBySide ? '38%' : '100%'}\n />\n <RequestDetails\n selected={selected}\n lines={details}\n offset={detailOffset}\n height={detailPaneHeight}\n width={sideBySide ? '62%' : '100%'}\n />\n </Box>\n )}\n <Footer\n mode={mode}\n busy={busy}\n message={message}\n selected={selected}\n denialReason={denialReason}\n approvalReviewed={approvalReviewed}\n onReasonChange={(value) => model.setDenialReason(value)}\n onDeny={() => void model.confirmCurrentMode()}\n />\n </Box>\n );\n};\n\nconst Header: React.FC<{\n principalId: string;\n state: 'connecting' | 'live' | 'stale';\n requestCount: number;\n}> = ({ principalId, state, requestCount }) => (\n <Box flexDirection=\"column\" height={HEADER_HEIGHT}>\n <Box justifyContent=\"space-between\">\n <Text bold>Hub access approvals</Text>\n <Text color={state === 'live' ? 'green' : state === 'stale' ? 'yellow' : 'cyan'}>\n {state === 'live' ? '● live' : state === 'stale' ? '● reconnecting' : '○ connecting'}\n <Text color=\"white\"> {requestCount} pending</Text>\n </Text>\n </Box>\n <Text dimColor wrap=\"truncate-end\">approver: {safeTerminalText(principalId)}</Text>\n </Box>\n);\n\nconst RequestList: React.FC<{\n requests: readonly PendingApprovalRequest[];\n selectedIndex: number;\n height: number;\n width: number | `${number}%`;\n}> = ({ requests, selectedIndex, height, width }) => {\n const viewport = Math.max(1, height - PANE_CHROME_HEIGHT);\n const window = useScroll(requests.length, Math.max(0, selectedIndex), viewport);\n\n return (\n <Pane title=\"Requests\" height={height} width={width}>\n {requests.length === 0 ? (\n <Box flexDirection=\"column\">\n <Text color=\"green\">No pending access requests.</Text>\n <Text dimColor>Watching the Hub for new requests...</Text>\n </Box>\n ) : (\n <>\n <ScrollMarker direction=\"up\" count={window.above} />\n {requests.slice(window.start, window.end).map((item, index) => {\n const actualIndex = window.start + index;\n const selected = actualIndex === selectedIndex;\n const duration = item.request.duration ?? 'unspecified';\n return (\n <Text\n key={item.id}\n color={selected ? 'cyan' : undefined}\n bold={selected}\n inverse={selected}\n wrap=\"truncate-end\"\n >\n {selected ? '› ' : ' '}\n {safeTerminalText(item.request.consumer.name)}\n <Text dimColor>\n {' '}{safeTerminalText(item.request.kind)} / {safeTerminalText(duration)}\n </Text>\n </Text>\n );\n })}\n <ScrollMarker direction=\"down\" count={window.below} />\n </>\n )}\n </Pane>\n );\n};\n\nconst RequestDetails: React.FC<{\n selected: PendingApprovalRequest | undefined;\n lines: readonly DetailLine[];\n offset: number;\n height: number;\n width: number | `${number}%`;\n}> = ({ selected, lines, offset, height, width }) => {\n const viewport = Math.max(1, height - PANE_CHROME_HEIGHT);\n const safeOffset = Math.min(offset, Math.max(0, lines.length - viewport));\n const visible = lines.slice(safeOffset, safeOffset + viewport);\n const range = lines.length > viewport\n ? ` (${safeOffset + 1}-${safeOffset + visible.length} of ${lines.length})`\n : '';\n\n return (\n <Pane title={`Request details${range}`} height={height} width={width}>\n {selected === undefined ? (\n <Text dimColor>Select a request to inspect its exact authority.</Text>\n ) : (\n <>\n {visible.map((line, index) => (\n <Text\n key={`${safeOffset + index}:${line.label ?? ''}:${line.text}`}\n color={line.tone === 'warning' ? 'yellow' : undefined}\n dimColor={line.tone === 'muted'}\n wrap=\"truncate-end\"\n >\n {line.label !== undefined && <Text bold>{safeTerminalText(line.label)}: </Text>}\n {safeTerminalText(line.text) || '—'}\n </Text>\n ))}\n </>\n )}\n </Pane>\n );\n};\n\nconst Footer: React.FC<{\n mode: 'browse' | 'approve' | 'deny' | 'help';\n busy: boolean;\n message: { readonly kind: ApprovalUiMessageKind; readonly text: string } | undefined;\n selected: PendingApprovalRequest | undefined;\n denialReason: string;\n approvalReviewed: boolean;\n onReasonChange(value: string): void;\n onDeny(): void;\n}> = ({\n mode,\n busy,\n message,\n selected,\n denialReason,\n approvalReviewed,\n onReasonChange,\n onDeny,\n}) => {\n if (busy) {\n return (\n <Box flexDirection=\"column\" height={FOOTER_HEIGHT}>\n <Text color=\"cyan\">Working... The manifest will be rechecked before the decision is applied.</Text>\n <Text dimColor>Please wait.</Text>\n </Box>\n );\n }\n if (mode === 'approve') {\n return (\n <Box flexDirection=\"column\" height={FOOTER_HEIGHT}>\n <Text color=\"yellow\" wrap=\"truncate-end\">\n Approve all displayed authority for{' '}\n <Text bold>{safeTerminalText(selected?.request.consumer.name ?? '')}</Text>?\n </Text>\n {approvalReviewed ? (\n <Text><Text bold>Enter</Text> confirm <Text bold>Esc</Text> cancel</Text>\n ) : (\n <Text><Text bold>PgDn</Text> review all authority before confirming <Text bold>Esc</Text> cancel</Text>\n )}\n </Box>\n );\n }\n if (mode === 'deny') {\n return (\n <Box flexDirection=\"column\" height={FOOTER_HEIGHT}>\n <Box>\n <Text color=\"red\">Denial reason (optional): </Text>\n <TextInput value={denialReason} onChange={onReasonChange} onSubmit={onDeny} />\n </Box>\n <Text><Text bold>Enter</Text> deny <Text bold>Esc</Text> cancel</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" height={FOOTER_HEIGHT}>\n <Text\n color={messageColor(message?.kind)}\n dimColor={message === undefined}\n wrap=\"truncate-end\"\n >\n {safeTerminalText(message?.text ?? 'Review the exact authority before approving.')}\n </Text>\n <Text dimColor wrap=\"truncate-end\">\n ↑/↓ or j/k select a approve d deny PgUp/PgDn details r refresh ? help q quit\n </Text>\n </Box>\n );\n};\n\nconst Help: React.FC<{ height: number }> = ({ height }) => (\n <Pane title=\"Keyboard help\" height={height} width=\"100%\">\n <Text><Text bold>↑/↓, j/k</Text> Move through pending requests</Text>\n <Text><Text bold>PgUp/PgDn</Text> Scroll long request details</Text>\n <Text><Text bold>a</Text> Review and confirm approval</Text>\n <Text><Text bold>d</Text> Deny with an optional reason</Text>\n <Text><Text bold>r</Text> Refresh the authoritative manifest snapshot</Text>\n <Text><Text bold>?, F1</Text> Toggle this help</Text>\n <Text><Text bold>q</Text> Quit without deciding remaining requests</Text>\n <Text dimColor>Press Esc, ?, or q to return.</Text>\n </Pane>\n);\n\nconst CompactApprovalApp: React.FC<{\n model: ApprovalUiModel;\n selected: PendingApprovalRequest | undefined;\n requestCount: number;\n connectionState: 'connecting' | 'live' | 'stale';\n mode: 'browse' | 'approve' | 'deny' | 'help';\n busy: boolean;\n message: { readonly kind: ApprovalUiMessageKind; readonly text: string } | undefined;\n rows: number;\n}> = ({\n model,\n selected,\n requestCount,\n connectionState,\n mode,\n busy,\n message,\n rows,\n}) => (\n <Box flexDirection=\"column\" height={Math.max(1, rows)}>\n <Text bold wrap=\"truncate-end\">Hub approvals {connectionState} {requestCount} pending</Text>\n <Text wrap=\"truncate-end\">\n {selected === undefined\n ? 'No pending access requests.'\n : safeTerminalText(\n `${selected.request.consumer.name} · ${selected.request.kind} · ${selected.request.duration ?? 'unspecified'}`,\n )}\n </Text>\n {rows >= 4 && (\n <Text color={messageColor(message?.kind)} wrap=\"truncate-end\">\n {safeTerminalText(busy ? 'Resolving request...' : message?.text ?? model.principalId)}\n </Text>\n )}\n {rows >= 5 && (\n <Text color=\"yellow\" wrap=\"truncate-end\">\n Enlarge to at least {MIN_FULL_HEIGHT} rows to review and decide. ↑/↓ select q quit\n </Text>\n )}\n </Box>\n);\n\nconst Pane: React.FC<{\n title: string;\n height: number;\n width: number | `${number}%`;\n children: React.ReactNode;\n}> = ({ title, height, width, children }) => (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor=\"gray\"\n height={height}\n width={width}\n paddingX={1}\n overflow=\"hidden\"\n >\n <Text bold>{title}</Text>\n {children}\n </Box>\n);\n\nconst ScrollMarker: React.FC<{ direction: 'up' | 'down'; count: number }> = ({ direction, count }) => {\n if (count === 0) return null;\n return <Text dimColor>{direction === 'up' ? '▲' : '▼'} {count} more</Text>;\n};\n\nfunction wrapDetailLines(lines: readonly DetailLine[], width: number): readonly DetailLine[] {\n return lines.flatMap((line) => {\n const text = safeTerminalText(`${line.label === undefined ? '' : `${line.label}: `}${line.text || '—'}`);\n return wrapTerminalText(text, width).map((chunk) => ({\n text: chunk,\n ...(line.tone === undefined ? {} : { tone: line.tone }),\n }));\n });\n}\n\nfunction wrapTerminalText(text: string, width: number): readonly string[] {\n const lines: string[] = [];\n let current = '';\n let currentWidth = 0;\n for (const character of text) {\n const characterWidth = terminalCharacterWidth(character);\n if (current.length > 0 && currentWidth + characterWidth > width) {\n lines.push(current);\n current = '';\n currentWidth = 0;\n }\n current += character;\n currentWidth += characterWidth;\n }\n if (current.length > 0 || lines.length === 0) lines.push(current);\n return lines;\n}\n\nfunction terminalCharacterWidth(character: string): number {\n if (/^\\p{Mark}$/u.test(character)) return 0;\n return character.codePointAt(0)! <= 0x7e ? 1 : 2;\n}\n\nexport function safeTerminalText(text: string): string {\n let result = '';\n for (const character of text) {\n result += /^[\\p{Cc}\\p{Cf}\\p{Zl}\\p{Zp}]$/u.test(character)\n ? `\\\\u{${character.codePointAt(0)!.toString(16).padStart(4, '0')}}`\n : character;\n }\n return result;\n}\n\nfunction messageColor(kind: ApprovalUiMessageKind | undefined): 'red' | 'green' | 'cyan' | undefined {\n if (kind === 'error') return 'red';\n if (kind === 'success') return 'green';\n if (kind === 'info') return 'cyan';\n return undefined;\n}\n\nfunction useTerminalSize(): TerminalSize {\n const { stdout } = useStdout();\n const [size, setSize] = React.useState<TerminalSize>({\n columns: stdout.columns ?? 100,\n rows: stdout.rows ?? 30,\n });\n React.useEffect(() => {\n const onResize = () => setSize({\n columns: stdout.columns ?? 100,\n rows: stdout.rows ?? 30,\n });\n stdout.on('resize', onResize);\n return () => stdout.off('resize', onResize);\n }, [stdout]);\n return size;\n}\n","import { jcsCanonicalize } from '@hediet/linkrpc';\nimport { observableValue, type IObservable, type ISettableObservable } from '@vscode/observables';\nimport type {\n ApprovalSnapshot,\n ApprovalSubscription,\n ApprovalDecisionOutcome,\n PendingApprovalRequest,\n PreparedApproval,\n} from '../commands/approval';\n\nexport type ApprovalUiMode = 'browse' | 'approve' | 'deny' | 'help';\nexport type ApprovalUiMessageKind = 'info' | 'success' | 'error';\n\nexport interface ApprovalUiMessage {\n readonly kind: ApprovalUiMessageKind;\n readonly text: string;\n}\n\nexport interface ApprovalUiClient {\n readonly principalId: string;\n watch(listener: (snapshot: ApprovalSnapshot) => void): ApprovalSubscription;\n refresh(): Promise<void>;\n prepareApproval(requestId: string): Promise<PreparedApproval>;\n approvePrepared(prepared: PreparedApproval): Promise<ApprovalDecisionOutcome>;\n deny(\n requestId: string,\n reason?: string,\n expected?: PendingApprovalRequest,\n ): Promise<ApprovalDecisionOutcome>;\n}\n\nexport class ApprovalUiModel {\n private readonly _requests: ISettableObservable<readonly PendingApprovalRequest[]>;\n public readonly requests: IObservable<readonly PendingApprovalRequest[]>;\n private readonly _connectionState: ISettableObservable<ApprovalSnapshot['state']>;\n public readonly connectionState: IObservable<ApprovalSnapshot['state']>;\n private readonly _selectedRequestId: ISettableObservable<string | undefined>;\n public readonly selectedRequestId: IObservable<string | undefined>;\n private readonly _mode: ISettableObservable<ApprovalUiMode>;\n public readonly mode: IObservable<ApprovalUiMode>;\n private readonly _busy: ISettableObservable<boolean>;\n public readonly busy: IObservable<boolean>;\n private readonly _message: ISettableObservable<ApprovalUiMessage | undefined>;\n public readonly message: IObservable<ApprovalUiMessage | undefined>;\n private readonly _denialReason: ISettableObservable<string>;\n public readonly denialReason: IObservable<string>;\n private readonly _detailOffset: ISettableObservable<number>;\n public readonly detailOffset: IObservable<number>;\n private readonly _preparedApproval: ISettableObservable<PreparedApproval | undefined>;\n public readonly preparedApproval: IObservable<PreparedApproval | undefined>;\n\n private readonly _client: ApprovalUiClient;\n private readonly _subscription: ApprovalSubscription;\n private _disposed = false;\n\n constructor(client: ApprovalUiClient) {\n this._client = client;\n this._requests = observableValue(this, []);\n this.requests = this._requests;\n this._connectionState = observableValue(this, 'connecting');\n this.connectionState = this._connectionState;\n this._selectedRequestId = observableValue(this, undefined);\n this.selectedRequestId = this._selectedRequestId;\n this._mode = observableValue(this, 'browse');\n this.mode = this._mode;\n this._busy = observableValue(this, false);\n this.busy = this._busy;\n this._message = observableValue(this, undefined);\n this.message = this._message;\n this._denialReason = observableValue(this, '');\n this.denialReason = this._denialReason;\n this._detailOffset = observableValue(this, 0);\n this.detailOffset = this._detailOffset;\n this._preparedApproval = observableValue(this, undefined);\n this.preparedApproval = this._preparedApproval;\n this._subscription = client.watch((snapshot) => this._applySnapshot(snapshot));\n }\n\n public get principalId(): string {\n return this._client.principalId;\n }\n\n public get selectedRequest(): PendingApprovalRequest | undefined {\n const selectedId = this._selectedRequestId.get();\n return this._requests.get().find((item) => item.id === selectedId);\n }\n\n public selectBy(delta: number): void {\n if (this._busy.get() || this._mode.get() !== 'browse') return;\n const requests = this._requests.get();\n if (requests.length === 0) return;\n const currentIndex = Math.max(\n 0,\n requests.findIndex((item) => item.id === this._selectedRequestId.get()),\n );\n const nextIndex = Math.max(0, Math.min(requests.length - 1, currentIndex + delta));\n if (nextIndex === currentIndex) return;\n this._selectedRequestId.set(requests[nextIndex].id, undefined);\n this._detailOffset.set(0, undefined);\n }\n\n public showHelp(): void {\n if (this._busy.get()) return;\n this._mode.set('help', undefined);\n }\n\n public async beginApprove(): Promise<void> {\n if (!this._canDecide()) return;\n const selected = this.selectedRequest;\n if (selected === undefined) return;\n this._busy.set(true, undefined);\n this._message.set({ kind: 'info', text: 'Resolving exact authority...' }, undefined);\n try {\n const prepared = await this._client.prepareApproval(selected.id);\n if (\n this.selectedRequest?.id !== selected.id\n || jcsCanonicalize(this.selectedRequest.request)\n !== jcsCanonicalize(prepared.pending.request)\n ) {\n this._message.set({\n kind: 'info',\n text: 'The request changed while its authority was being resolved. Review it again.',\n }, undefined);\n return;\n }\n this._preparedApproval.set(prepared, undefined);\n this._detailOffset.set(0, undefined);\n this._mode.set('approve', undefined);\n this._message.set(undefined, undefined);\n } catch (error) {\n this._message.set({\n kind: 'error',\n text: error instanceof Error ? error.message : String(error),\n }, undefined);\n } finally {\n this._busy.set(false, undefined);\n }\n }\n\n public beginDeny(): void {\n if (!this._canDecide()) return;\n this._denialReason.set('', undefined);\n this._mode.set('deny', undefined);\n }\n\n public setDenialReason(reason: string): void {\n this._denialReason.set(reason, undefined);\n }\n\n public cancelMode(): void {\n if (this._busy.get()) return;\n this._mode.set('browse', undefined);\n this._denialReason.set('', undefined);\n this._preparedApproval.set(undefined, undefined);\n }\n\n public async confirmCurrentMode(): Promise<void> {\n const mode = this._mode.get();\n const selected = this.selectedRequest;\n if (this._busy.get() || selected === undefined || (mode !== 'approve' && mode !== 'deny')) return;\n\n this._busy.set(true, undefined);\n this._message.set({\n kind: 'info',\n text: mode === 'approve' ? 'Approving request...' : 'Denying request...',\n }, undefined);\n try {\n let outcome: ApprovalDecisionOutcome;\n if (mode === 'approve') {\n const prepared = this._preparedApproval.get();\n if (prepared === undefined) {\n throw new Error('approval details are no longer available; review the request again');\n }\n outcome = await this._client.approvePrepared(prepared);\n } else {\n const reason = this._denialReason.get().trim();\n outcome = await this._client.deny(\n selected.id,\n reason.length > 0 ? reason : undefined,\n selected,\n );\n }\n this._message.set({\n kind: outcome === 'applied' ? 'success' : 'info',\n text: outcome === 'applied'\n ? `${mode === 'approve' ? 'Approved' : 'Denied'} ${selected.request.consumer.name}.`\n : `Decision accepted for ${selected.request.consumer.name}, `\n + 'but a matching request is still pending. The consumer may have retried.',\n }, undefined);\n } catch (error) {\n this._message.set({\n kind: 'error',\n text: error instanceof Error ? error.message : String(error),\n }, undefined);\n } finally {\n this._busy.set(false, undefined);\n this._mode.set('browse', undefined);\n this._denialReason.set('', undefined);\n this._preparedApproval.set(undefined, undefined);\n }\n }\n\n public async refresh(): Promise<void> {\n if (this._busy.get()) return;\n this._message.set({ kind: 'info', text: 'Refreshing approval requests...' }, undefined);\n try {\n await this._client.refresh();\n if (this._connectionState.get() === 'live') {\n this._message.set({ kind: 'info', text: 'Approval requests are up to date.' }, undefined);\n }\n } catch (error) {\n this._message.set({\n kind: 'error',\n text: error instanceof Error ? error.message : String(error),\n }, undefined);\n }\n }\n\n public scrollDetails(delta: number, lineCount: number, viewportSize: number): void {\n const maxOffset = Math.max(0, lineCount - Math.max(1, viewportSize));\n const next = Math.max(0, Math.min(maxOffset, this._detailOffset.get() + delta));\n this._detailOffset.set(next, undefined);\n }\n\n public dispose(): void {\n if (this._disposed) return;\n this._disposed = true;\n this._subscription.dispose();\n }\n\n private _canDecide(): boolean {\n if (this._busy.get() || this.selectedRequest === undefined) return false;\n if (this._connectionState.get() !== 'live') {\n this._message.set({\n kind: 'error',\n text: 'Cannot decide requests while the approval connection is stale.',\n }, undefined);\n return false;\n }\n return true;\n }\n\n private _applySnapshot(snapshot: ApprovalSnapshot): void {\n const previous = this._requests.get();\n const selectedId = this._selectedRequestId.get();\n const previousSelected = previous.find((item) => item.id === selectedId);\n const previousIndex = Math.max(0, previous.findIndex((item) => item.id === selectedId));\n const selectedStillExists = snapshot.requests.some((item) => item.id === selectedId);\n const nextSelected = snapshot.requests.find((item) => item.id === selectedId);\n const selectedChanged = previousSelected !== undefined\n && nextSelected !== undefined\n && jcsCanonicalize(previousSelected.request) !== jcsCanonicalize(nextSelected.request);\n\n this._requests.set(snapshot.requests, undefined);\n this._connectionState.set(snapshot.state, undefined);\n\n if (snapshot.requests.length === 0) {\n this._selectedRequestId.set(undefined, undefined);\n this._detailOffset.set(0, undefined);\n } else if (!selectedStillExists) {\n const nextIndex = Math.min(previousIndex, snapshot.requests.length - 1);\n this._selectedRequestId.set(snapshot.requests[nextIndex].id, undefined);\n this._detailOffset.set(0, undefined);\n this._preparedApproval.set(undefined, undefined);\n }\n\n if (\n ((!selectedStillExists && selectedId !== undefined) || selectedChanged)\n && this._mode.get() !== 'browse'\n ) {\n this._mode.set('browse', undefined);\n this._denialReason.set('', undefined);\n this._preparedApproval.set(undefined, undefined);\n this._message.set({\n kind: 'info',\n text: selectedChanged\n ? 'The selected request changed. Review it again before deciding.'\n : 'The selected request is no longer pending.',\n }, undefined);\n }\n if (snapshot.state === 'stale' && snapshot.error !== undefined) {\n this._message.set({ kind: 'error', text: snapshot.error }, undefined);\n }\n }\n}\n","import React from 'react';\nimport { render } from 'ink';\nimport type { ApprovalCommandClient } from '../commands/approval';\nimport { ApprovalApp } from './ApprovalApp';\nimport { ApprovalUiModel } from './ApprovalUiModel';\n\nexport interface RunApprovalUiOptions {\n readonly client: ApprovalCommandClient;\n readonly signal: AbortSignal;\n}\n\nexport async function runApprovalUi(options: RunApprovalUiOptions): Promise<void> {\n const model = new ApprovalUiModel(options.client);\n const instance = render(<ApprovalApp model={model} />);\n const onAbort = () => instance.unmount();\n options.signal.addEventListener('abort', onAbort, { once: true });\n if (options.signal.aborted) onAbort();\n try {\n await raceAbort(model.refresh(), options.signal);\n if (options.signal.aborted) return;\n await instance.waitUntilExit();\n } finally {\n options.signal.removeEventListener('abort', onAbort);\n instance.unmount();\n model.dispose();\n }\n}\n\nfunction raceAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T | undefined> {\n if (signal.aborted) return Promise.resolve(undefined);\n return new Promise<T | undefined>((resolve, reject) => {\n const onAbort = () => {\n signal.removeEventListener('abort', onAbort);\n resolve(undefined);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n promise.then(\n (value) => {\n signal.removeEventListener('abort', onAbort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener('abort', onAbort);\n reject(error);\n },\n );\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"runApprovalUi-C4yIUu8Y.js","names":[],"sources":["../../src/approval-ui/ApprovalApp.tsx","../../src/approval-ui/ApprovalUiModel.ts","../../src/approval-ui/runApprovalUi.tsx"],"sourcesContent":["import React from 'react';\nimport { Box, Text, useApp, useInput, useStdout } from 'ink';\nimport TextInput from 'ink-text-input';\nimport type { PendingApprovalRequest } from '../commands/approval';\nimport {\n approvalDetailLines,\n type ApprovalPresentationLine as DetailLine,\n} from '../approvalPresentation';\nimport { useObservable } from '../ui/useObservable';\nimport { useScroll } from '../ui/scroll';\nimport { ApprovalUiModel, type ApprovalUiMessageKind } from './ApprovalUiModel';\n\nexport { approvalDetailLines } from '../approvalPresentation';\n\nexport interface ApprovalAppProps {\n readonly model: ApprovalUiModel;\n}\n\ninterface TerminalSize {\n readonly columns: number;\n readonly rows: number;\n}\n\nconst HEADER_HEIGHT = 2;\nconst FOOTER_HEIGHT = 2;\nconst PANE_CHROME_HEIGHT = 3;\nconst MIN_FULL_HEIGHT = 13;\nconst SPLIT_COLUMNS = 96;\n\nexport const ApprovalApp: React.FC<ApprovalAppProps> = ({ model }) => {\n const requests = useObservable(model.requests);\n const selectedId = useObservable(model.selectedRequestId);\n const connectionState = useObservable(model.connectionState);\n const mode = useObservable(model.mode);\n const busy = useObservable(model.busy);\n const message = useObservable(model.message);\n const denialReason = useObservable(model.denialReason);\n const detailOffset = useObservable(model.detailOffset);\n const preparedApproval = useObservable(model.preparedApproval);\n const size = useTerminalSize();\n const { exit } = useApp();\n\n const selectedIndex = requests.findIndex((item) => item.id === selectedId);\n const selected = selectedIndex >= 0 ? requests[selectedIndex] : undefined;\n const rawDetails = selected === undefined\n ? []\n : approvalDetailLines(selected, mode === 'approve' ? preparedApproval : undefined);\n const bodyHeight = Math.max(1, size.rows - HEADER_HEIGHT - FOOTER_HEIGHT);\n const sideBySide = size.columns >= SPLIT_COLUMNS;\n const listPaneHeight = sideBySide ? bodyHeight : Math.max(5, Math.floor(bodyHeight * 0.42));\n const detailPaneHeight = sideBySide ? bodyHeight : Math.max(1, bodyHeight - listPaneHeight);\n const detailViewport = Math.max(1, detailPaneHeight - PANE_CHROME_HEIGHT);\n const detailPaneWidth = sideBySide ? Math.floor(size.columns * 0.62) : size.columns;\n const details = wrapDetailLines(rawDetails, Math.max(1, detailPaneWidth - 6));\n const approvalReviewed = mode === 'approve'\n && preparedApproval !== undefined\n && details.length > 0\n && detailOffset + detailViewport >= details.length;\n\n useInput((input, key) => {\n const canReviewAuthority = size.rows >= MIN_FULL_HEIGHT;\n if (busy) return;\n if (mode === 'deny') {\n if (key.escape) model.cancelMode();\n return;\n }\n if (mode === 'approve') {\n if (key.escape) {\n model.cancelMode();\n } else if (key.pageUp) {\n model.scrollDetails(-detailViewport, details.length, detailViewport);\n } else if (key.pageDown) {\n model.scrollDetails(detailViewport, details.length, detailViewport);\n } else if (key.return && canReviewAuthority && approvalReviewed) {\n void model.confirmCurrentMode();\n }\n return;\n }\n if (mode === 'help') {\n if (key.escape || input === '?' || input === 'q') model.cancelMode();\n return;\n }\n if (input === 'q') {\n exit();\n } else if (input === '?' || key.f1) {\n model.showHelp();\n } else if (input === 'a' && canReviewAuthority) {\n void model.beginApprove();\n } else if (input === 'd' && canReviewAuthority) {\n model.beginDeny();\n } else if (input === 'r') {\n void model.refresh();\n } else if (key.upArrow || input === 'k') {\n model.selectBy(-1);\n } else if (key.downArrow || input === 'j') {\n model.selectBy(1);\n } else if (key.pageUp) {\n model.scrollDetails(-detailViewport, details.length, detailViewport);\n } else if (key.pageDown) {\n model.scrollDetails(detailViewport, details.length, detailViewport);\n }\n });\n\n if (size.rows < MIN_FULL_HEIGHT) {\n return (\n <CompactApprovalApp\n model={model}\n selected={selected}\n requestCount={requests.length}\n connectionState={connectionState}\n mode={mode}\n busy={busy}\n message={message}\n rows={size.rows}\n />\n );\n }\n\n return (\n <Box flexDirection=\"column\" height={size.rows} width={size.columns}>\n <Header\n principalId={model.principalId}\n state={connectionState}\n requestCount={requests.length}\n />\n {mode === 'help' ? (\n <Help height={bodyHeight} />\n ) : (\n <Box\n flexDirection={sideBySide ? 'row' : 'column'}\n height={bodyHeight}\n >\n <RequestList\n requests={requests}\n selectedIndex={selectedIndex}\n height={listPaneHeight}\n width={sideBySide ? '38%' : '100%'}\n />\n <RequestDetails\n selected={selected}\n lines={details}\n offset={detailOffset}\n height={detailPaneHeight}\n width={sideBySide ? '62%' : '100%'}\n />\n </Box>\n )}\n <Footer\n mode={mode}\n busy={busy}\n message={message}\n selected={selected}\n denialReason={denialReason}\n approvalReviewed={approvalReviewed}\n onReasonChange={(value) => model.setDenialReason(value)}\n onDeny={() => void model.confirmCurrentMode()}\n />\n </Box>\n );\n};\n\nconst Header: React.FC<{\n principalId: string;\n state: 'connecting' | 'live' | 'stale';\n requestCount: number;\n}> = ({ principalId, state, requestCount }) => (\n <Box flexDirection=\"column\" height={HEADER_HEIGHT}>\n <Box justifyContent=\"space-between\">\n <Text bold>Hub access approvals</Text>\n <Text color={state === 'live' ? 'green' : state === 'stale' ? 'yellow' : 'cyan'}>\n {state === 'live' ? '● live' : state === 'stale' ? '● reconnecting' : '○ connecting'}\n <Text color=\"white\"> {requestCount} pending</Text>\n </Text>\n </Box>\n <Text dimColor wrap=\"truncate-end\">approver: {safeTerminalText(principalId)}</Text>\n </Box>\n);\n\nconst RequestList: React.FC<{\n requests: readonly PendingApprovalRequest[];\n selectedIndex: number;\n height: number;\n width: number | `${number}%`;\n}> = ({ requests, selectedIndex, height, width }) => {\n const viewport = Math.max(1, height - PANE_CHROME_HEIGHT);\n const window = useScroll(requests.length, Math.max(0, selectedIndex), viewport);\n\n return (\n <Pane title=\"Requests\" height={height} width={width}>\n {requests.length === 0 ? (\n <Box flexDirection=\"column\">\n <Text color=\"green\">No pending access requests.</Text>\n <Text dimColor>Watching the Hub for new requests...</Text>\n </Box>\n ) : (\n <>\n <ScrollMarker direction=\"up\" count={window.above} />\n {requests.slice(window.start, window.end).map((item, index) => {\n const actualIndex = window.start + index;\n const selected = actualIndex === selectedIndex;\n const duration = item.request.duration ?? 'unspecified';\n return (\n <Text\n key={item.id}\n color={selected ? 'cyan' : undefined}\n bold={selected}\n inverse={selected}\n wrap=\"truncate-end\"\n >\n {selected ? '› ' : ' '}\n {safeTerminalText(item.request.consumer.name)}\n <Text dimColor>\n {' '}{safeTerminalText(item.request.kind)} / {safeTerminalText(duration)}\n </Text>\n </Text>\n );\n })}\n <ScrollMarker direction=\"down\" count={window.below} />\n </>\n )}\n </Pane>\n );\n};\n\nconst RequestDetails: React.FC<{\n selected: PendingApprovalRequest | undefined;\n lines: readonly DetailLine[];\n offset: number;\n height: number;\n width: number | `${number}%`;\n}> = ({ selected, lines, offset, height, width }) => {\n const viewport = Math.max(1, height - PANE_CHROME_HEIGHT);\n const safeOffset = Math.min(offset, Math.max(0, lines.length - viewport));\n const visible = lines.slice(safeOffset, safeOffset + viewport);\n const range = lines.length > viewport\n ? ` (${safeOffset + 1}-${safeOffset + visible.length} of ${lines.length})`\n : '';\n\n return (\n <Pane title={`Request details${range}`} height={height} width={width}>\n {selected === undefined ? (\n <Text dimColor>Select a request to inspect its exact authority.</Text>\n ) : (\n <>\n {visible.map((line, index) => (\n <Text\n key={`${safeOffset + index}:${line.label ?? ''}:${line.text}`}\n color={line.tone === 'warning' ? 'yellow' : undefined}\n dimColor={line.tone === 'muted'}\n wrap=\"truncate-end\"\n >\n {line.label !== undefined && <Text bold>{safeTerminalText(line.label)}: </Text>}\n {safeTerminalText(line.text) || '—'}\n </Text>\n ))}\n </>\n )}\n </Pane>\n );\n};\n\nconst Footer: React.FC<{\n mode: 'browse' | 'approve' | 'deny' | 'help';\n busy: boolean;\n message: { readonly kind: ApprovalUiMessageKind; readonly text: string } | undefined;\n selected: PendingApprovalRequest | undefined;\n denialReason: string;\n approvalReviewed: boolean;\n onReasonChange(value: string): void;\n onDeny(): void;\n}> = ({\n mode,\n busy,\n message,\n selected,\n denialReason,\n approvalReviewed,\n onReasonChange,\n onDeny,\n}) => {\n if (busy) {\n return (\n <Box flexDirection=\"column\" height={FOOTER_HEIGHT}>\n <Text color=\"cyan\">Working... The manifest will be rechecked before the decision is applied.</Text>\n <Text dimColor>Please wait.</Text>\n </Box>\n );\n }\n if (mode === 'approve') {\n return (\n <Box flexDirection=\"column\" height={FOOTER_HEIGHT}>\n <Text color=\"yellow\" wrap=\"truncate-end\">\n Approve all displayed authority for{' '}\n <Text bold>{safeTerminalText(selected?.request.consumer.name ?? '')}</Text>?\n </Text>\n {approvalReviewed ? (\n <Text><Text bold>Enter</Text> confirm <Text bold>Esc</Text> cancel</Text>\n ) : (\n <Text><Text bold>PgDn</Text> review all authority before confirming <Text bold>Esc</Text> cancel</Text>\n )}\n </Box>\n );\n }\n if (mode === 'deny') {\n return (\n <Box flexDirection=\"column\" height={FOOTER_HEIGHT}>\n <Box>\n <Text color=\"red\">Denial reason (optional): </Text>\n <TextInput value={denialReason} onChange={onReasonChange} onSubmit={onDeny} />\n </Box>\n <Text><Text bold>Enter</Text> deny <Text bold>Esc</Text> cancel</Text>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" height={FOOTER_HEIGHT}>\n <Text\n color={messageColor(message?.kind)}\n dimColor={message === undefined}\n wrap=\"truncate-end\"\n >\n {safeTerminalText(message?.text ?? 'Review the exact authority before approving.')}\n </Text>\n <Text dimColor wrap=\"truncate-end\">\n ↑/↓ or j/k select a approve d deny PgUp/PgDn details r refresh ? help q quit\n </Text>\n </Box>\n );\n};\n\nconst Help: React.FC<{ height: number }> = ({ height }) => (\n <Pane title=\"Keyboard help\" height={height} width=\"100%\">\n <Text><Text bold>↑/↓, j/k</Text> Move through pending requests</Text>\n <Text><Text bold>PgUp/PgDn</Text> Scroll long request details</Text>\n <Text><Text bold>a</Text> Review and confirm approval</Text>\n <Text><Text bold>d</Text> Deny with an optional reason</Text>\n <Text><Text bold>r</Text> Refresh the authoritative manifest snapshot</Text>\n <Text><Text bold>?, F1</Text> Toggle this help</Text>\n <Text><Text bold>q</Text> Quit without deciding remaining requests</Text>\n <Text dimColor>Press Esc, ?, or q to return.</Text>\n </Pane>\n);\n\nconst CompactApprovalApp: React.FC<{\n model: ApprovalUiModel;\n selected: PendingApprovalRequest | undefined;\n requestCount: number;\n connectionState: 'connecting' | 'live' | 'stale';\n mode: 'browse' | 'approve' | 'deny' | 'help';\n busy: boolean;\n message: { readonly kind: ApprovalUiMessageKind; readonly text: string } | undefined;\n rows: number;\n}> = ({\n model,\n selected,\n requestCount,\n connectionState,\n mode,\n busy,\n message,\n rows,\n}) => (\n <Box flexDirection=\"column\" height={Math.max(1, rows)}>\n <Text bold wrap=\"truncate-end\">Hub approvals {connectionState} {requestCount} pending</Text>\n <Text wrap=\"truncate-end\">\n {selected === undefined\n ? 'No pending access requests.'\n : safeTerminalText(\n `${selected.request.consumer.name} · ${selected.request.kind} · ${selected.request.duration ?? 'unspecified'}`,\n )}\n </Text>\n {rows >= 4 && (\n <Text color={messageColor(message?.kind)} wrap=\"truncate-end\">\n {safeTerminalText(busy ? 'Resolving request...' : message?.text ?? model.principalId)}\n </Text>\n )}\n {rows >= 5 && (\n <Text color=\"yellow\" wrap=\"truncate-end\">\n Enlarge to at least {MIN_FULL_HEIGHT} rows to review and decide. ↑/↓ select q quit\n </Text>\n )}\n </Box>\n);\n\nconst Pane: React.FC<{\n title: string;\n height: number;\n width: number | `${number}%`;\n children: React.ReactNode;\n}> = ({ title, height, width, children }) => (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor=\"gray\"\n height={height}\n width={width}\n paddingX={1}\n overflow=\"hidden\"\n >\n <Text bold>{title}</Text>\n {children}\n </Box>\n);\n\nconst ScrollMarker: React.FC<{ direction: 'up' | 'down'; count: number }> = ({ direction, count }) => {\n if (count === 0) return null;\n return <Text dimColor>{direction === 'up' ? '▲' : '▼'} {count} more</Text>;\n};\n\nfunction wrapDetailLines(lines: readonly DetailLine[], width: number): readonly DetailLine[] {\n return lines.flatMap((line) => {\n const text = safeTerminalText(`${line.label === undefined ? '' : `${line.label}: `}${line.text || '—'}`);\n return wrapTerminalText(text, width).map((chunk) => ({\n text: chunk,\n ...(line.tone === undefined ? {} : { tone: line.tone }),\n }));\n });\n}\n\nfunction wrapTerminalText(text: string, width: number): readonly string[] {\n const lines: string[] = [];\n let current = '';\n let currentWidth = 0;\n for (const character of text) {\n const characterWidth = terminalCharacterWidth(character);\n if (current.length > 0 && currentWidth + characterWidth > width) {\n lines.push(current);\n current = '';\n currentWidth = 0;\n }\n current += character;\n currentWidth += characterWidth;\n }\n if (current.length > 0 || lines.length === 0) lines.push(current);\n return lines;\n}\n\nfunction terminalCharacterWidth(character: string): number {\n if (/^\\p{Mark}$/u.test(character)) return 0;\n return character.codePointAt(0)! <= 0x7e ? 1 : 2;\n}\n\nexport function safeTerminalText(text: string): string {\n let result = '';\n for (const character of text) {\n result += /^[\\p{Cc}\\p{Cf}\\p{Zl}\\p{Zp}]$/u.test(character)\n ? `\\\\u{${character.codePointAt(0)!.toString(16).padStart(4, '0')}}`\n : character;\n }\n return result;\n}\n\nfunction messageColor(kind: ApprovalUiMessageKind | undefined): 'red' | 'green' | 'cyan' | undefined {\n if (kind === 'error') return 'red';\n if (kind === 'success') return 'green';\n if (kind === 'info') return 'cyan';\n return undefined;\n}\n\nfunction useTerminalSize(): TerminalSize {\n const { stdout } = useStdout();\n const [size, setSize] = React.useState<TerminalSize>({\n columns: stdout.columns ?? 100,\n rows: stdout.rows ?? 30,\n });\n React.useEffect(() => {\n const onResize = () => setSize({\n columns: stdout.columns ?? 100,\n rows: stdout.rows ?? 30,\n });\n stdout.on('resize', onResize);\n return () => stdout.off('resize', onResize);\n }, [stdout]);\n return size;\n}\n","import { jcsCanonicalize } from '@hediet/linkrpc';\nimport { observableValue, type IObservable, type ISettableObservable } from '@vscode/observables';\nimport type {\n ApprovalSnapshot,\n ApprovalSubscription,\n ApprovalDecisionOutcome,\n PendingApprovalRequest,\n PreparedApproval,\n} from '../commands/approval';\n\nexport type ApprovalUiMode = 'browse' | 'approve' | 'deny' | 'help';\nexport type ApprovalUiMessageKind = 'info' | 'success' | 'error';\n\nexport interface ApprovalUiMessage {\n readonly kind: ApprovalUiMessageKind;\n readonly text: string;\n}\n\nexport interface ApprovalUiClient {\n readonly principalId: string;\n watch(listener: (snapshot: ApprovalSnapshot) => void): ApprovalSubscription;\n refresh(): Promise<void>;\n prepareApproval(requestId: string): Promise<PreparedApproval>;\n approvePrepared(prepared: PreparedApproval): Promise<ApprovalDecisionOutcome>;\n deny(\n requestId: string,\n reason?: string,\n expected?: PendingApprovalRequest,\n ): Promise<ApprovalDecisionOutcome>;\n}\n\nexport class ApprovalUiModel {\n private readonly _requests: ISettableObservable<readonly PendingApprovalRequest[]>;\n public readonly requests: IObservable<readonly PendingApprovalRequest[]>;\n private readonly _connectionState: ISettableObservable<ApprovalSnapshot['state']>;\n public readonly connectionState: IObservable<ApprovalSnapshot['state']>;\n private readonly _selectedRequestId: ISettableObservable<string | undefined>;\n public readonly selectedRequestId: IObservable<string | undefined>;\n private readonly _mode: ISettableObservable<ApprovalUiMode>;\n public readonly mode: IObservable<ApprovalUiMode>;\n private readonly _busy: ISettableObservable<boolean>;\n public readonly busy: IObservable<boolean>;\n private readonly _message: ISettableObservable<ApprovalUiMessage | undefined>;\n public readonly message: IObservable<ApprovalUiMessage | undefined>;\n private readonly _denialReason: ISettableObservable<string>;\n public readonly denialReason: IObservable<string>;\n private readonly _detailOffset: ISettableObservable<number>;\n public readonly detailOffset: IObservable<number>;\n private readonly _preparedApproval: ISettableObservable<PreparedApproval | undefined>;\n public readonly preparedApproval: IObservable<PreparedApproval | undefined>;\n\n private readonly _client: ApprovalUiClient;\n private readonly _subscription: ApprovalSubscription;\n private _disposed = false;\n\n constructor(client: ApprovalUiClient) {\n this._client = client;\n this._requests = observableValue(this, []);\n this.requests = this._requests;\n this._connectionState = observableValue(this, 'connecting');\n this.connectionState = this._connectionState;\n this._selectedRequestId = observableValue(this, undefined);\n this.selectedRequestId = this._selectedRequestId;\n this._mode = observableValue(this, 'browse');\n this.mode = this._mode;\n this._busy = observableValue(this, false);\n this.busy = this._busy;\n this._message = observableValue(this, undefined);\n this.message = this._message;\n this._denialReason = observableValue(this, '');\n this.denialReason = this._denialReason;\n this._detailOffset = observableValue(this, 0);\n this.detailOffset = this._detailOffset;\n this._preparedApproval = observableValue(this, undefined);\n this.preparedApproval = this._preparedApproval;\n this._subscription = client.watch((snapshot) => this._applySnapshot(snapshot));\n }\n\n public get principalId(): string {\n return this._client.principalId;\n }\n\n public get selectedRequest(): PendingApprovalRequest | undefined {\n const selectedId = this._selectedRequestId.get();\n return this._requests.get().find((item) => item.id === selectedId);\n }\n\n public selectBy(delta: number): void {\n if (this._busy.get() || this._mode.get() !== 'browse') return;\n const requests = this._requests.get();\n if (requests.length === 0) return;\n const currentIndex = Math.max(\n 0,\n requests.findIndex((item) => item.id === this._selectedRequestId.get()),\n );\n const nextIndex = Math.max(0, Math.min(requests.length - 1, currentIndex + delta));\n if (nextIndex === currentIndex) return;\n this._selectedRequestId.set(requests[nextIndex].id, undefined);\n this._detailOffset.set(0, undefined);\n }\n\n public showHelp(): void {\n if (this._busy.get()) return;\n this._mode.set('help', undefined);\n }\n\n public async beginApprove(): Promise<void> {\n if (!this._canDecide()) return;\n const selected = this.selectedRequest;\n if (selected === undefined) return;\n this._busy.set(true, undefined);\n this._message.set({ kind: 'info', text: 'Resolving exact authority...' }, undefined);\n try {\n const prepared = await this._client.prepareApproval(selected.id);\n if (\n this.selectedRequest?.id !== selected.id\n || jcsCanonicalize(this.selectedRequest.request)\n !== jcsCanonicalize(prepared.pending.request)\n ) {\n this._message.set({\n kind: 'info',\n text: 'The request changed while its authority was being resolved. Review it again.',\n }, undefined);\n return;\n }\n this._preparedApproval.set(prepared, undefined);\n this._detailOffset.set(0, undefined);\n this._mode.set('approve', undefined);\n this._message.set(undefined, undefined);\n } catch (error) {\n this._message.set({\n kind: 'error',\n text: error instanceof Error ? error.message : String(error),\n }, undefined);\n } finally {\n this._busy.set(false, undefined);\n }\n }\n\n public beginDeny(): void {\n if (!this._canDecide()) return;\n this._denialReason.set('', undefined);\n this._mode.set('deny', undefined);\n }\n\n public setDenialReason(reason: string): void {\n this._denialReason.set(reason, undefined);\n }\n\n public cancelMode(): void {\n if (this._busy.get()) return;\n this._mode.set('browse', undefined);\n this._denialReason.set('', undefined);\n this._preparedApproval.set(undefined, undefined);\n }\n\n public async confirmCurrentMode(): Promise<void> {\n const mode = this._mode.get();\n const selected = this.selectedRequest;\n if (this._busy.get() || selected === undefined || (mode !== 'approve' && mode !== 'deny')) return;\n\n this._busy.set(true, undefined);\n this._message.set({\n kind: 'info',\n text: mode === 'approve' ? 'Approving request...' : 'Denying request...',\n }, undefined);\n try {\n let outcome: ApprovalDecisionOutcome;\n if (mode === 'approve') {\n const prepared = this._preparedApproval.get();\n if (prepared === undefined) {\n throw new Error('approval details are no longer available; review the request again');\n }\n outcome = await this._client.approvePrepared(prepared);\n } else {\n const reason = this._denialReason.get().trim();\n outcome = await this._client.deny(\n selected.id,\n reason.length > 0 ? reason : undefined,\n selected,\n );\n }\n this._message.set({\n kind: outcome === 'applied' ? 'success' : 'info',\n text: outcome === 'applied'\n ? `${mode === 'approve' ? 'Approved' : 'Denied'} ${selected.request.consumer.name}.`\n : `Decision accepted for ${selected.request.consumer.name}, `\n + 'but a matching request is still pending. The consumer may have retried.',\n }, undefined);\n } catch (error) {\n this._message.set({\n kind: 'error',\n text: error instanceof Error ? error.message : String(error),\n }, undefined);\n } finally {\n this._busy.set(false, undefined);\n this._mode.set('browse', undefined);\n this._denialReason.set('', undefined);\n this._preparedApproval.set(undefined, undefined);\n }\n }\n\n public async refresh(): Promise<void> {\n if (this._busy.get()) return;\n this._message.set({ kind: 'info', text: 'Refreshing approval requests...' }, undefined);\n try {\n await this._client.refresh();\n if (this._connectionState.get() === 'live') {\n this._message.set({ kind: 'info', text: 'Approval requests are up to date.' }, undefined);\n }\n } catch (error) {\n this._message.set({\n kind: 'error',\n text: error instanceof Error ? error.message : String(error),\n }, undefined);\n }\n }\n\n public scrollDetails(delta: number, lineCount: number, viewportSize: number): void {\n const maxOffset = Math.max(0, lineCount - Math.max(1, viewportSize));\n const next = Math.max(0, Math.min(maxOffset, this._detailOffset.get() + delta));\n this._detailOffset.set(next, undefined);\n }\n\n public dispose(): void {\n if (this._disposed) return;\n this._disposed = true;\n this._subscription.dispose();\n }\n\n private _canDecide(): boolean {\n if (this._busy.get() || this.selectedRequest === undefined) return false;\n if (this._connectionState.get() !== 'live') {\n this._message.set({\n kind: 'error',\n text: 'Cannot decide requests while the approval connection is stale.',\n }, undefined);\n return false;\n }\n return true;\n }\n\n private _applySnapshot(snapshot: ApprovalSnapshot): void {\n const previous = this._requests.get();\n const selectedId = this._selectedRequestId.get();\n const previousSelected = previous.find((item) => item.id === selectedId);\n const previousIndex = Math.max(0, previous.findIndex((item) => item.id === selectedId));\n const selectedStillExists = snapshot.requests.some((item) => item.id === selectedId);\n const nextSelected = snapshot.requests.find((item) => item.id === selectedId);\n const selectedChanged = previousSelected !== undefined\n && nextSelected !== undefined\n && jcsCanonicalize(previousSelected.request) !== jcsCanonicalize(nextSelected.request);\n\n this._requests.set(snapshot.requests, undefined);\n this._connectionState.set(snapshot.state, undefined);\n\n if (snapshot.requests.length === 0) {\n this._selectedRequestId.set(undefined, undefined);\n this._detailOffset.set(0, undefined);\n } else if (!selectedStillExists) {\n const nextIndex = Math.min(previousIndex, snapshot.requests.length - 1);\n this._selectedRequestId.set(snapshot.requests[nextIndex].id, undefined);\n this._detailOffset.set(0, undefined);\n this._preparedApproval.set(undefined, undefined);\n }\n\n if (\n ((!selectedStillExists && selectedId !== undefined) || selectedChanged)\n && this._mode.get() !== 'browse'\n ) {\n this._mode.set('browse', undefined);\n this._denialReason.set('', undefined);\n this._preparedApproval.set(undefined, undefined);\n this._message.set({\n kind: 'info',\n text: selectedChanged\n ? 'The selected request changed. Review it again before deciding.'\n : 'The selected request is no longer pending.',\n }, undefined);\n }\n if (snapshot.state === 'stale' && snapshot.error !== undefined) {\n this._message.set({ kind: 'error', text: snapshot.error }, undefined);\n }\n }\n}\n","import React from 'react';\nimport { render } from 'ink';\nimport type { ApprovalCommandClient } from '../commands/approval';\nimport { ApprovalApp } from './ApprovalApp';\nimport { ApprovalUiModel } from './ApprovalUiModel';\n\nexport interface RunApprovalUiOptions {\n readonly client: ApprovalCommandClient;\n readonly signal: AbortSignal;\n}\n\nexport async function runApprovalUi(options: RunApprovalUiOptions): Promise<void> {\n const model = new ApprovalUiModel(options.client);\n const instance = render(<ApprovalApp model={model} />);\n const onAbort = () => instance.unmount();\n options.signal.addEventListener('abort', onAbort, { once: true });\n if (options.signal.aborted) onAbort();\n try {\n await raceAbort(model.refresh(), options.signal);\n if (options.signal.aborted) return;\n await instance.waitUntilExit();\n } finally {\n options.signal.removeEventListener('abort', onAbort);\n instance.unmount();\n model.dispose();\n }\n}\n\nfunction raceAbort<T>(promise: Promise<T>, signal: AbortSignal): Promise<T | undefined> {\n if (signal.aborted) return Promise.resolve(undefined);\n return new Promise<T | undefined>((resolve, reject) => {\n const onAbort = () => {\n signal.removeEventListener('abort', onAbort);\n resolve(undefined);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n promise.then(\n (value) => {\n signal.removeEventListener('abort', onAbort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener('abort', onAbort);\n reject(error);\n },\n );\n });\n}\n"],"mappings":"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"}