buroventures-harald-code-core
Version:
Harald Code Core - Core functionality for AI-powered coding assistant
102 lines • 3.07 kB
JavaScript
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import { z } from 'zod';
/**
* Zod schema for validating a file context from the IDE.
*/
export const FileSchema = z.object({
path: z.string(),
timestamp: z.number(),
isActive: z.boolean().optional(),
selectedText: z.string().optional(),
cursor: z
.object({
line: z.number(),
character: z.number(),
})
.optional(),
});
export const IdeContextSchema = z.object({
workspaceState: z
.object({
openFiles: z.array(FileSchema).optional(),
})
.optional(),
});
/**
* Zod schema for validating the 'ide/contextUpdate' notification from the IDE.
*/
export const IdeContextNotificationSchema = z.object({
method: z.literal('ide/contextUpdate'),
params: IdeContextSchema,
});
/**
* Creates a new store for managing the IDE's context.
* This factory function encapsulates the state and logic, allowing for the creation
* of isolated instances, which is particularly useful for testing.
*
* @returns An object with methods to interact with the IDE context.
*/
export function createIdeContextStore() {
let ideContextState = undefined;
const subscribers = new Set();
/**
* Notifies all registered subscribers about the current IDE context.
*/
function notifySubscribers() {
for (const subscriber of subscribers) {
subscriber(ideContextState);
}
}
/**
* Sets the IDE context and notifies all registered subscribers of the change.
* @param newIdeContext The new IDE context from the IDE.
*/
function setIdeContext(newIdeContext) {
ideContextState = newIdeContext;
notifySubscribers();
}
/**
* Clears the IDE context and notifies all registered subscribers of the change.
*/
function clearIdeContext() {
ideContextState = undefined;
notifySubscribers();
}
/**
* Retrieves the current IDE context.
* @returns The `IdeContext` object if a file is active; otherwise, `undefined`.
*/
function getIdeContext() {
return ideContextState;
}
/**
* Subscribes to changes in the IDE context.
*
* When the IDE context changes, the provided `subscriber` function will be called.
* Note: The subscriber is not called with the current value upon subscription.
*
* @param subscriber The function to be called when the IDE context changes.
* @returns A function that, when called, will unsubscribe the provided subscriber.
*/
function subscribeToIdeContext(subscriber) {
subscribers.add(subscriber);
return () => {
subscribers.delete(subscriber);
};
}
return {
setIdeContext,
getIdeContext,
subscribeToIdeContext,
clearIdeContext,
};
}
/**
* The default, shared instance of the IDE context store for the application.
*/
export const ideContext = createIdeContextStore();
//# sourceMappingURL=ideContext.js.map