import type { GrpcRequestMeta } from 'insomnia-data'; import { database as db, models } from 'insomnia-data'; const { type } = models.grpcRequestMeta; const { isGrpcRequestId } = models.grpcRequest; export function create(patch: Partial = {}) { if (!patch.parentId) { throw new Error('New GrpcRequestMeta missing `parentId`'); } expectParentToBeGrpcRequest(patch.parentId); return db.docCreate(type, patch); } export function update(requestMeta: GrpcRequestMeta, patch: Partial) { expectParentToBeGrpcRequest(patch.parentId || requestMeta.parentId); return db.docUpdate(requestMeta, patch); } export function getByParentId(parentId: string) { expectParentToBeGrpcRequest(parentId); return db.findOne(type, { parentId }); } export async function getOrCreateByParentId(parentId: string) { const requestMeta = await getByParentId(parentId); if (requestMeta) { return requestMeta; } return create({ parentId }); } export async function updateOrCreateByParentId(parentId: string, patch: Partial) { const requestMeta = await getByParentId(parentId); if (requestMeta) { return update(requestMeta, patch); } const newPatch = Object.assign( { parentId, }, patch, ); return create(newPatch); } export function all() { return db.find(type); } function expectParentToBeGrpcRequest(parentId: string | null) { if (!isGrpcRequestId(parentId)) { throw new Error('Expected the parent of GrpcRequestMeta to be a GrpcRequest'); } }