Skip to content

Commit 47d65b4

Browse files
committed
Polymorphic getHtml
1 parent a6c20f7 commit 47d65b4

1 file changed

Lines changed: 33 additions & 2 deletions

File tree

src/serpapi.ts

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,44 @@ async function _getJson<
154154
* // callback
155155
* getHtml({ engine: "google", api_key: API_KEY, q: "coffee" }, console.log);
156156
*/
157-
export async function getHtml<
157+
export function getHtml<
158+
E extends EngineName = EngineName,
159+
P1 extends AllowArbitraryParams<EngineParameters<E>> = EngineParameters<E>,
160+
P2 extends AllowArbitraryParams<EngineParameters<E, false>> =
161+
EngineParameters<E, false>,
162+
>(
163+
...args:
164+
| [parameters: P1, callback?: (html: string) => void]
165+
| [
166+
engine: string, // intentionally kept as a string to support arbitrary params
167+
parameters: P2,
168+
callback?: (html: string) => void,
169+
]
170+
): Promise<string> {
171+
if (
172+
typeof args[0] === "string" &&
173+
typeof args[1] === "object"
174+
) {
175+
const [engine, parameters, callback] = args;
176+
return _getHtml({ ...parameters, engine: engine as E }, callback);
177+
} else if (
178+
typeof args[0] === "object" &&
179+
(typeof args[1] === "undefined" || typeof args[1] === "function")
180+
) {
181+
const [parameters, callback] = args;
182+
return _getHtml(parameters, callback);
183+
} else {
184+
throw new InvalidArgumentTypesError();
185+
}
186+
}
187+
188+
async function _getHtml<
158189
E extends EngineName = EngineName,
159190
P extends AllowArbitraryParams<EngineParameters<E>> = EngineParameters<E>,
160191
>(
161192
parameters: P,
162193
callback?: (html: string) => void,
163-
) {
194+
): Promise<string> {
164195
const key = validateApiKey(parameters.api_key, true);
165196
const timeout = validateTimeout(parameters.timeout);
166197
const response = await _internals.execute(

0 commit comments

Comments
 (0)