UNPKG

@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_.

117 lines (91 loc) 3.36 kB
import { isDefined } from '@prefecthq/prefect-design' import { PrefectKind, PrefectKindJinja, PrefectKindJson, PrefectKindWorkspaceVariable, SchemaValue, getPrefectKindFromValue, isPrefectKindJinja, isPrefectKindJson, isPrefectKindNull, isPrefectKindWorkspaceVariable } from '@/schemas/types/schemaValues' import { isValidJson, stringify } from '@/utilities/json' export class InvalidSchemaValueTransformation extends Error { public constructor(from: PrefectKind, to: PrefectKind) { super(`Unable to convert prefect kind value from ${from} to ${to}`) } } export function isInvalidSchemaValueTransformationError(value: unknown): value is InvalidSchemaValueTransformation { return value instanceof InvalidSchemaValueTransformation } export function mapSchemaValue(value: SchemaValue, to: PrefectKind): SchemaValue { const from = getPrefectKindFromValue(value) if (isPrefectKindJinja(value)) { return mapSchemaValueJinja(value, to) } // we cannot map a workspace variable to any other kinds if (isPrefectKindWorkspaceVariable(value)) { throw new InvalidSchemaValueTransformation(from, to) } if (isPrefectKindJson(value)) { return mapSchemaValueJson(value, to) } if (from === 'none') { return mapSchemaValueNone(value, to) } throw new Error(`Unhandled prefect kind value in mapSchemaValue: ${from}`) } function mapSchemaValueJinja(jinja: PrefectKindJinja, to: PrefectKind): SchemaValue { switch (to) { case 'jinja': return jinja case 'workspace_variable': throw new InvalidSchemaValueTransformation('jinja', 'workspace_variable') case 'json': return { __prefect_kind: 'json', value: jinja.template, } satisfies PrefectKindJson case 'none': if (isValidJson(jinja.template)) { return JSON.parse(jinja.template) } throw new InvalidSchemaValueTransformation('jinja', 'none') default: throw new Error(`mapSchemaValueJson missing case for kind: ${to}`) } } function mapSchemaValueJson(json: PrefectKindJson, to: PrefectKind): SchemaValue { switch (to) { case 'jinja': return { __prefect_kind: 'jinja', template: json.value, } satisfies PrefectKindJinja case 'workspace_variable': throw new InvalidSchemaValueTransformation('json', 'workspace_variable') case 'json': return json case 'none': if (isDefined(json.value) && isValidJson(json.value)) { return JSON.parse(json.value) } throw new InvalidSchemaValueTransformation('json', 'none') default: throw new Error(`mapSchemaValueJson missing case for kind: ${to}`) } } function mapSchemaValueNone(none: unknown, to: PrefectKind): SchemaValue { const value = isPrefectKindNull(none) ? none.value : none switch (to) { case 'jinja': return { __prefect_kind: 'jinja', template: stringify(value), } satisfies PrefectKindJinja case 'workspace_variable': return { __prefect_kind: 'workspace_variable', } satisfies PrefectKindWorkspaceVariable case 'json': return { __prefect_kind: 'json', value: stringify(value), } satisfies PrefectKindJson case 'none': return none default: throw new Error(`mapSchemaValueNone missing case for kind: ${to}`) } }