apps/chat/src/utils/app/data/prompt-service.ts (105 lines of code) (raw):
import { Observable } from 'rxjs';
import { constructPath } from '@/src/utils/app/file';
import { getPromptRootId, isRootPromptId } from '@/src/utils/app/id';
import { regeneratePromptId } from '@/src/utils/app/prompts';
import { FolderInterface, FoldersAndEntities } from '@/src/types/folder';
import { Prompt, PromptInfo } from '@/src/types/prompt';
import { prepareEntityName } from '../common';
import { getPathToFolderById } from '../folders';
import { DataService } from './data-service';
export class PromptService {
public static getPromptsFolders(): Observable<FolderInterface[]> {
return DataService.getDataStorage().getPromptsFolders();
}
public static setPromptFolders(folders: FolderInterface[]): Observable<void> {
return DataService.getDataStorage().setPromptsFolders(folders);
}
public static getPrompts(
path?: string,
recursive?: boolean,
): Observable<PromptInfo[]> {
return DataService.getDataStorage().getPrompts(path, recursive);
}
public static getMultipleFoldersPrompts(
paths: string[],
recursive?: boolean,
): Observable<PromptInfo[]> {
return DataService.getDataStorage().getMultipleFoldersPrompts(
paths,
recursive,
);
}
public static getPromptsAndFolders(
path?: string,
): Observable<FoldersAndEntities<PromptInfo>> {
return DataService.getDataStorage().getPromptsAndFolders(path);
}
public static getPrompt(info: PromptInfo): Observable<Prompt | null> {
return DataService.getDataStorage().getPrompt(info);
}
public static setPrompts(prompts: Prompt[]): Observable<PromptInfo> {
return DataService.getDataStorage().setPrompts(prompts);
}
public static createPrompt(prompt: Prompt): Observable<PromptInfo | null> {
return DataService.getDataStorage().createPrompt(prompt);
}
public static updatePrompt(prompt: Prompt): Observable<void> {
return DataService.getDataStorage().updatePrompt(prompt);
}
public static deletePrompt(info: PromptInfo): Observable<void> {
return DataService.getDataStorage().deletePrompt(info);
}
}
export const getPreparedPrompts = ({
prompts,
folders,
}: {
prompts: Prompt[];
folders: FolderInterface[];
}) =>
prompts.map((prompt) => {
const { path } = getPathToFolderById(folders, prompt.folderId, {
prepareNames: true,
forRenaming: true,
replaceWithSpacesForRenaming: true,
trimEndDotsRequired: true,
});
const newName = prepareEntityName(prompt.name, {
forRenaming: true,
replaceWithSpacesForRenaming: true,
trimEndDotsRequired: true,
});
const folderId = isRootPromptId(path)
? path
: constructPath(getPromptRootId(), path);
return regeneratePromptId({
...prompt,
name: newName,
folderId,
});
}); // to send prompts with proper parentPath
export const getImportPreparedPrompts = ({
prompts,
folders,
}: {
prompts: Prompt[];
folders: FolderInterface[];
}) =>
prompts.map((prompt) => {
const { path } = getPathToFolderById(folders, prompt.folderId, {
forRenaming: false,
trimEndDotsRequired: true,
prepareNames: true,
});
const newName = prepareEntityName(prompt.name);
const folderId = isRootPromptId(path)
? path
: constructPath(getPromptRootId(), path);
const promptId = constructPath(folderId, newName);
return {
...prompt,
id: promptId,
name: newName,
folderId: folderId,
};
}); // to send prompts with proper parentPath