@prefecthq/prefect-ui-library
Version:
This library is the Vue and Typescript component library for [Prefect 2](https://github.com/PrefectHQ/prefect) and [Prefect Cloud 2](https://www.prefect.io/cloud/). _The components and utilities in this project are not meant to be used independently_.
60 lines (46 loc) • 1.69 kB
text/typescript
import { PrefectResourceRole, isPrefectResourceRole, prefectEventPrefixes } from '@/models/workspaceEvent'
export function removePrefectEventLabelPrefix(value: string): string {
if (value.startsWith('prefect.') || value.startsWith('prefect-cloud.')) {
return value.split('.').slice(1).join('.')
}
return value
}
export function getPrefectResourceRole(value: string): PrefectResourceRole | null {
const roleRegex = new RegExp(`^(${prefectEventPrefixes.join('|')})\\.`, 'g')
const [, prefix = ''] = roleRegex.exec(value) ?? []
const role = prefix.split('.').at(-1)
if (isPrefectResourceRole(role)) {
return role
}
return null
}
type GetResourceIdParts = {
id: string | null,
type: string | null,
role: PrefectResourceRole | null,
}
export function getResourceIdParts(resourceId: string): GetResourceIdParts {
// not all resource ids will be uuids (i.e. artifact collection keys). fallback to last part of string (`prefect.tag.my-tag`)
const id = parseGuid(resourceId) ?? resourceId.split('.').at(-1) ?? null
const type = resourceId.split('.').at(-2) ?? null
const role = getPrefectResourceRole(resourceId)
return {
id,
type,
role,
}
}
export function getEventWithPrefixes(event: string): string[] {
const prefixes = []
const parts = event.split('.')
for (let index = 1; index < parts.length; index++) {
const prefix = parts.slice(0, index).join('.')
prefixes.push(`${prefix}.*`)
}
return [...prefixes, event]
}
function parseGuid(value: string): string | null {
const guidRegex = /([a-f0-9]{8}(?:-[a-f0-9]{4}){3}-[a-f0-9]{12})/i
const [match = null] = guidRegex.exec(value) ?? []
return match
}