From d2cfd4aea773db765c06472e1ecf2ef5449eed42 Mon Sep 17 00:00:00 2001 From: Adam Gastineau Date: Mon, 3 Feb 2025 10:24:05 -0800 Subject: [PATCH] Fix Video.saveAs and properly error in unsupported cases --- docs/src/api/class-video.md | 1 + docs/src/api/class-weberror.md | 4 +--- utils/doclint/api_parser.js | 16 ++++++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/docs/src/api/class-video.md b/docs/src/api/class-video.md index 23eead4884..b26cda5797 100644 --- a/docs/src/api/class-video.md +++ b/docs/src/api/class-video.md @@ -36,6 +36,7 @@ Returns the file system path this video will be recorded to. The video is guaran upon closing the browser context. This method throws when connected remotely. ## async method: Video.saveAs +* langs: js, csharp * since: v1.11 Saves the video to a user-specified path. It is safe to call this method while the video diff --git a/docs/src/api/class-weberror.md b/docs/src/api/class-weberror.md index 36a1bf7653..2864b765b2 100644 --- a/docs/src/api/class-weberror.md +++ b/docs/src/api/class-weberror.md @@ -62,6 +62,4 @@ Unhandled error that was thrown. ## method: WebError.error * since: v1.38 * langs: java, csharp -- returns: <[string]> - -Unhandled error that was thrown. +- returns: <[string]> \ No newline at end of file diff --git a/utils/doclint/api_parser.js b/utils/doclint/api_parser.js index b96fb983e2..cdc413de20 100644 --- a/utils/doclint/api_parser.js +++ b/utils/doclint/api_parser.js @@ -129,10 +129,18 @@ class ApiParser { return; const existingMember = clazz.membersArray.find(m => m.name === name && m.kind === member.kind); - if (existingMember && isTypeOverride(existingMember, member)) { - for (const lang of member?.langs?.only || []) { - existingMember.langs.types = existingMember.langs.types || {}; - existingMember.langs.types[lang] = returnType; + if (existingMember) { + if (isTypeOverride(existingMember, member) && (member.spec === undefined || member.spec.length === 0)) { + // Can only override return types if the overriding entry (`member`) has no spec content + for (const lang of member.langs.only || []) { + existingMember.langs.types = existingMember.langs.types || {}; + existingMember.langs.types[lang] = returnType; + } + } else if (!existingMember.langs.only || existingMember.langs.only.some(l => member.langs.only?.includes(l))) { + throw new Error(`Duplicate member ${clazz.name}.${name} for at least one language: ${member.langs.only}`); + } else { + // This member exists alongside the current one + clazz.membersArray.push(member); } } else { clazz.membersArray.push(member);