AstralView/packages/sdk/src/core/widgets/iframe.ts

36 lines
1.0 KiB
TypeScript

import type { IframeWidgetNode } from '../schema';
import { pickUrlLike } from './urlLike';
/**
* goView iframe option shape varies across versions.
* Keep it permissive and normalize the common fields.
*/
export interface GoViewIframeOption {
dataset?: unknown;
src?: unknown;
url?: unknown;
borderRadius?: number;
}
/**
* Back-compat alias (older code used "LegacyIframeOption").
*/
export type LegacyIframeOption = GoViewIframeOption;
function pickSrc(option: GoViewIframeOption): string {
// Prefer the whole option first (covers iframeUrl/embedUrl variants directly on the object).
return pickUrlLike(option) || pickUrlLike(option.dataset) || pickUrlLike(option.src) || pickUrlLike(option.url);
}
export function convertGoViewIframeOptionToNodeProps(option: GoViewIframeOption): IframeWidgetNode['props'] {
return {
src: pickSrc(option),
borderRadius: option.borderRadius,
};
}
/**
* Back-compat export.
*/
export const convertLegacyIframeOptionToNodeProps = convertGoViewIframeOptionToNodeProps;