{"version":3,"file":"runtime-metadata.mjs","sources":["../../src/runtime-metadata.ts"],"sourcesContent":["import {\n  type PlaygroundPreviewDescriptor,\n  createMjpegPreviewDescriptor,\n  createScrcpyPreviewDescriptor,\n  createScreenshotPreviewDescriptor,\n} from './platform';\n\nexport interface PlaygroundRuntimeInfo {\n  /** Stable platform key, e.g. `android`, `ios`, `web`, `computer`. */\n  platformId?: string;\n  /** User-facing runtime title, e.g. `Midscene Android Playground`. */\n  title?: string;\n  /** Human-readable platform summary, e.g. `Android playground platform descriptor`. */\n  platformDescription?: string;\n  interface: {\n    type: string;\n    description?: string;\n  };\n  preview: PlaygroundPreviewDescriptor;\n  executionUxHints: string[];\n  metadata: Record<string, unknown>;\n}\n\n// Internal builder input: this keeps raw inference hints separate from the\n// public, normalized PlaygroundRuntimeInfo shape.\ninterface BuildRuntimeInfoInput {\n  platformId?: string;\n  title?: string;\n  platformDescription?: string;\n  interfaceType?: string;\n  interfaceDescription?: string;\n  preview?: PlaygroundPreviewDescriptor;\n  metadata?: Record<string, unknown>;\n  supportsScreenshot?: boolean;\n  mjpegStreamUrl?: string;\n  scrcpyPort?: number;\n}\n\nexport function normalizeExecutionUxHints(\n  metadata?: Record<string, unknown>,\n): string[] {\n  if (!metadata) {\n    return [];\n  }\n\n  const fromHints = metadata.executionUxHints;\n  if (Array.isArray(fromHints)) {\n    return fromHints.filter(\n      (value): value is string => typeof value === 'string' && value.length > 0,\n    );\n  }\n\n  const fromSingle = metadata.executionUx;\n  if (typeof fromSingle === 'string' && fromSingle.length > 0) {\n    return [fromSingle];\n  }\n\n  return [];\n}\n\nexport function resolvePreviewDescriptor(\n  input: Omit<\n    BuildRuntimeInfoInput,\n    | 'platformId'\n    | 'title'\n    | 'platformDescription'\n    | 'interfaceType'\n    | 'interfaceDescription'\n    | 'metadata'\n  >,\n): PlaygroundPreviewDescriptor {\n  if (input.preview) {\n    return input.preview;\n  }\n\n  if (typeof input.scrcpyPort === 'number') {\n    return createScrcpyPreviewDescriptor({\n      scrcpyPort: input.scrcpyPort,\n    });\n  }\n\n  if (input.mjpegStreamUrl) {\n    return createMjpegPreviewDescriptor();\n  }\n\n  if (input.supportsScreenshot) {\n    return createScreenshotPreviewDescriptor();\n  }\n\n  return {\n    kind: 'none',\n    capabilities: [],\n  };\n}\n\nexport function buildRuntimeInfo(\n  input: BuildRuntimeInfoInput,\n): PlaygroundRuntimeInfo {\n  const interfaceType = input.interfaceType || 'Unknown';\n\n  return {\n    platformId: input.platformId,\n    title: input.title,\n    platformDescription: input.platformDescription,\n    interface: {\n      type: interfaceType,\n      description: input.interfaceDescription,\n    },\n    preview: resolvePreviewDescriptor(input),\n    executionUxHints: normalizeExecutionUxHints(input.metadata),\n    metadata: { ...(input.metadata || {}) },\n  };\n}\n"],"names":["normalizeExecutionUxHints","metadata","fromHints","Array","value","fromSingle","resolvePreviewDescriptor","input","createScrcpyPreviewDescriptor","createMjpegPreviewDescriptor","createScreenshotPreviewDescriptor","buildRuntimeInfo","interfaceType"],"mappings":";AAsCO,SAASA,0BACdC,QAAkC;IAElC,IAAI,CAACA,UACH,OAAO,EAAE;IAGX,MAAMC,YAAYD,SAAS,gBAAgB;IAC3C,IAAIE,MAAM,OAAO,CAACD,YAChB,OAAOA,UAAU,MAAM,CACrB,CAACE,QAA2B,AAAiB,YAAjB,OAAOA,SAAsBA,MAAM,MAAM,GAAG;IAI5E,MAAMC,aAAaJ,SAAS,WAAW;IACvC,IAAI,AAAsB,YAAtB,OAAOI,cAA2BA,WAAW,MAAM,GAAG,GACxD,OAAO;QAACA;KAAW;IAGrB,OAAO,EAAE;AACX;AAEO,SAASC,yBACdC,KAQC;IAED,IAAIA,MAAM,OAAO,EACf,OAAOA,MAAM,OAAO;IAGtB,IAAI,AAA4B,YAA5B,OAAOA,MAAM,UAAU,EACzB,OAAOC,8BAA8B;QACnC,YAAYD,MAAM,UAAU;IAC9B;IAGF,IAAIA,MAAM,cAAc,EACtB,OAAOE;IAGT,IAAIF,MAAM,kBAAkB,EAC1B,OAAOG;IAGT,OAAO;QACL,MAAM;QACN,cAAc,EAAE;IAClB;AACF;AAEO,SAASC,iBACdJ,KAA4B;IAE5B,MAAMK,gBAAgBL,MAAM,aAAa,IAAI;IAE7C,OAAO;QACL,YAAYA,MAAM,UAAU;QAC5B,OAAOA,MAAM,KAAK;QAClB,qBAAqBA,MAAM,mBAAmB;QAC9C,WAAW;YACT,MAAMK;YACN,aAAaL,MAAM,oBAAoB;QACzC;QACA,SAASD,yBAAyBC;QAClC,kBAAkBP,0BAA0BO,MAAM,QAAQ;QAC1D,UAAU;YAAE,GAAIA,MAAM,QAAQ,IAAI,CAAC,CAAC;QAAE;IACxC;AACF"}