Added files for Juan

This commit is contained in:
2024-08-07 11:38:48 -07:00
parent f7878e3e60
commit 795d1d72ce
2871 changed files with 621552 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cjs/index.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.start = async function start(params) {
const esmPkg = await import('../index.js');
return esmPkg.start(params);
};
exports.download = async function download(geckodriverVersion, cacheDir) {
const esmPkg = await import('../index.js');
return esmPkg.download(geckodriverVersion, cacheDir);
};
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cjs/index.ts"],"names":[],"mappings":";;AAAA,OAAO,CAAC,KAAK,GAAG,KAAK,UAAU,KAAK,CAAE,MAAe;IACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IAC1C,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED,OAAO,CAAC,QAAQ,GAAG,KAAK,UAAU,QAAQ,CAAE,kBAA2B,EAAE,QAAiB;IACxF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAA;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;AACtD,CAAC,CAAA"}

View File

@@ -0,0 +1,3 @@
{
"type": "commonjs"
}

View File

@@ -0,0 +1,2 @@
export default function run(): Promise<void>;
//# sourceMappingURL=cli.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAKA,wBAA8B,GAAG,kBAchC"}

View File

@@ -0,0 +1,18 @@
import cp from 'node:child_process';
import { download } from './install.js';
import { hasAccess } from './utils.js';
export default async function run() {
const binaryFilePath = await download();
if (!(await hasAccess(binaryFilePath))) {
throw new Error('Failed to download Geckodriver');
}
const child = cp.spawn(binaryFilePath, process.argv.slice(2));
child.stdout.pipe(process.stdout);
child.stderr.pipe(process.stderr);
child.on('exit', process.exit);
process.on('SIGTERM', function () {
child.kill('SIGTERM');
process.exit(1);
});
}
//# sourceMappingURL=cli.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,GAAG;IAC/B,MAAM,cAAc,GAAG,MAAM,QAAQ,EAAE,CAAA;IACvC,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC;IAED,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7D,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACjC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IACjC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE;QACpB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACJ,CAAC"}

View File

@@ -0,0 +1,6 @@
export declare const GECKODRIVER_CARGO_YAML = "https://raw.githubusercontent.com/mozilla/geckodriver/release/Cargo.toml";
export declare const BASE_CDN_URL: string;
export declare const GECKODRIVER_DOWNLOAD_PATH: string;
export declare const DEFAULT_HOSTNAME = "0.0.0.0";
export declare const BINARY_FILE: string;
//# sourceMappingURL=constants.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB,6EAA6E,CAAA;AAChH,eAAO,MAAM,YAAY,QAA4I,CAAA;AAErK,eAAO,MAAM,yBAAyB,QAA+C,CAAA;AACrF,eAAO,MAAM,gBAAgB,YAAY,CAAA;AACzC,eAAO,MAAM,WAAW,QAA4D,CAAA"}

View File

@@ -0,0 +1,8 @@
import os from 'node:os';
export const GECKODRIVER_CARGO_YAML = 'https://raw.githubusercontent.com/mozilla/geckodriver/release/Cargo.toml';
export const BASE_CDN_URL = process.env.GECKODRIVER_CDNURL || process.env.npm_config_geckodriver_cdnurl || 'https://github.com/mozilla/geckodriver/releases/download';
// e.g. https://github.com/mozilla/geckodriver/releases/download/v0.33.0/geckodriver-v0.33.0-macos-aarch64.tar.gz
export const GECKODRIVER_DOWNLOAD_PATH = `${BASE_CDN_URL}/v%s/geckodriver-v%s-%s%s%s`;
export const DEFAULT_HOSTNAME = '0.0.0.0';
export const BINARY_FILE = 'geckodriver' + (os.platform() === 'win32' ? '.exe' : '');
//# sourceMappingURL=constants.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,MAAM,CAAC,MAAM,sBAAsB,GAAG,0EAA0E,CAAA;AAChH,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,6BAA6B,IAAI,0DAA0D,CAAA;AACrK,iHAAiH;AACjH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,YAAY,6BAA6B,CAAA;AACrF,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAA;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA"}

View File

@@ -0,0 +1,8 @@
/// <reference types="node" resolution-mode="require"/>
import cp from 'node:child_process';
import { download as downloadDriver } from './install.js';
import type { GeckodriverParameters } from './types.js';
export declare function start(params: GeckodriverParameters): Promise<cp.ChildProcessWithoutNullStreams>;
export declare const download: typeof downloadDriver;
export * from './types.js';
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAGnC,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA;AAGzD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAIvD,wBAAsB,KAAK,CAAE,MAAM,EAAE,qBAAqB,8CA2BzD;AAED,eAAO,MAAM,QAAQ,uBAAiB,CAAA;AACtC,cAAc,YAAY,CAAA"}

View File

@@ -0,0 +1,31 @@
import cp from 'node:child_process';
import logger from '@wdio/logger';
import { download as downloadDriver } from './install.js';
import { hasAccess, parseParams } from './utils.js';
import { DEFAULT_HOSTNAME } from './constants.js';
const log = logger('geckodriver');
export async function start(params) {
const { cacheDir, customGeckoDriverPath, ...startArgs } = params;
let geckoDriverPath = (customGeckoDriverPath ||
process.env.GECKODRIVER_PATH ||
// deprecated
process.env.GECKODRIVER_FILEPATH);
if (!geckoDriverPath) {
geckoDriverPath = await downloadDriver(params.geckoDriverVersion, cacheDir);
}
if (!(await hasAccess(geckoDriverPath))) {
throw new Error('Failed to access Geckodriver, was it installed successfully?');
}
startArgs.host = startArgs.host || DEFAULT_HOSTNAME;
// By default, Geckodriver uses port 9222
// User might pass a port for custom runs but they should modify them for each worker
// For remaining use cases, to enable parallel instances we need to set the port to 0 (random)
// Otherwise all instances try to connect to the default port and fail
startArgs.websocketPort = startArgs.websocketPort ?? 0;
const args = parseParams(startArgs);
log.info(`Starting Geckodriver at ${geckoDriverPath} with params: ${args.join(' ')}`);
return cp.spawn(geckoDriverPath, args);
}
export const download = downloadDriver;
export * from './types.js';
//# sourceMappingURL=index.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACnC,OAAO,MAAM,MAAM,cAAc,CAAA;AAEjC,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAGjD,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AAEjC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAE,MAA6B;IACxD,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAA;IAChE,IAAI,eAAe,GAAG,CACpB,qBAAqB;QACrB,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAC5B,aAAa;QACb,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACjC,CAAA;IACD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAA;IAC7E,CAAC;IAED,IAAI,CAAC,CAAC,MAAM,SAAS,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAA;IACjF,CAAC;IAED,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,IAAI,gBAAgB,CAAA;IAEnD,yCAAyC;IACzC,qFAAqF;IACrF,8FAA8F;IAC9F,sEAAsE;IACtE,SAAS,CAAC,aAAa,GAAG,SAAS,CAAC,aAAa,IAAI,CAAC,CAAA;IAEtD,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IACnC,GAAG,CAAC,IAAI,CAAC,2BAA2B,eAAe,iBAAiB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACrF,OAAO,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,cAAc,CAAA;AACtC,cAAc,YAAY,CAAA"}

View File

@@ -0,0 +1,2 @@
export declare function download(geckodriverVersion?: string, cacheDir?: string): Promise<string>;
//# sourceMappingURL=install.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AA4BA,wBAAsB,QAAQ,CAC5B,kBAAkB,GAAE,MAAwC,EAC5D,QAAQ,GAAE,MAAyD,mBAoCpE"}

View File

@@ -0,0 +1,75 @@
import os from 'node:os';
import path from 'node:path';
import util from 'node:util';
import stream from 'node:stream';
import fsp, { writeFile } from 'node:fs/promises';
import zlib from 'node:zlib';
import logger from '@wdio/logger';
import tar from 'tar-fs';
import { HttpsProxyAgent } from 'https-proxy-agent';
import { HttpProxyAgent } from 'http-proxy-agent';
import { BINARY_FILE, GECKODRIVER_CARGO_YAML } from './constants.js';
import { hasAccess, getDownloadUrl, retryFetch } from './utils.js';
import { BlobReader, BlobWriter, ZipReader } from '@zip.js/zip.js';
const log = logger('geckodriver');
const streamPipeline = util.promisify(stream.pipeline);
const fetchOpts = {};
if (process.env.HTTPS_PROXY) {
fetchOpts.agent = new HttpsProxyAgent(process.env.HTTPS_PROXY);
}
else if (process.env.HTTP_PROXY) {
fetchOpts.agent = new HttpProxyAgent(process.env.HTTP_PROXY);
}
export async function download(geckodriverVersion = process.env.GECKODRIVER_VERSION, cacheDir = process.env.GECKODRIVER_CACHE_DIR || os.tmpdir()) {
const binaryFilePath = path.resolve(cacheDir, BINARY_FILE);
if (await hasAccess(binaryFilePath)) {
return binaryFilePath;
}
/**
* get latest version of Geckodriver
*/
if (!geckodriverVersion) {
const res = await retryFetch(GECKODRIVER_CARGO_YAML, fetchOpts);
const toml = await res.text();
const version = toml.split('\n').find((l) => l.startsWith('version = '));
if (!version) {
throw new Error(`Couldn't find version property in Cargo.toml file: ${JSON.stringify(toml)}`);
}
geckodriverVersion = version.split(' = ').pop().slice(1, -1);
log.info(`Detected Geckodriver v${geckodriverVersion} to be latest`);
}
const url = getDownloadUrl(geckodriverVersion);
log.info(`Downloading Geckodriver from ${url}`);
const res = await retryFetch(url, fetchOpts);
if (res.status !== 200) {
throw new Error(`Failed to download binary (statusCode ${res.status}): ${res.statusText}`);
}
await fsp.mkdir(cacheDir, { recursive: true });
await (url.endsWith('.zip')
? downloadZip(res, cacheDir)
: streamPipeline(res.body, zlib.createGunzip(), tar.extract(cacheDir)));
await fsp.chmod(binaryFilePath, '755');
return binaryFilePath;
}
async function downloadZip(res, cacheDir) {
const zipBlob = await res.blob();
const zip = new ZipReader(new BlobReader(zipBlob));
for (const entry of await zip.getEntries()) {
const unzippedFilePath = path.join(cacheDir, entry.filename);
if (entry.directory) {
continue;
}
if (!await hasAccess(path.dirname(unzippedFilePath))) {
await fsp.mkdir(path.dirname(unzippedFilePath), { recursive: true });
}
const content = await entry.getData(new BlobWriter());
await writeFile(unzippedFilePath, content.stream());
}
}
/**
* download on install
*/
if (process.argv[1] && process.argv[1].endsWith('/dist/install.js') && process.env.GECKODRIVER_AUTO_INSTALL) {
await download().then(() => log.info('Success!'), (err) => log.error(`Failed to install Geckodriver: ${err.stack}`));
}
//# sourceMappingURL=install.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,80 @@
export type LogLevel = 'fatal' | 'error' | 'warn' | 'info' | 'config' | 'debug' | 'trace';
export interface GeckodriverParameters {
/**
* List of hostnames to allow. By default the value of --host is allowed, and in addition if that's a well
* known local address, other variations on well known local addresses are allowed. If --allow-hosts is
* provided only exactly those hosts are allowed
* @default []
*/
allowHosts?: string[];
/**
* List of request origins to allow. These must be formatted as scheme://host:port. By default any request
* with an origin header is rejected. If --allow-origins is provided then only exactly those origins
* are allowed.
* @default []
*/
allowOrigins?: string[];
/**
* Path to the Firefox binary
*/
binary?: string;
/**
* Connect to an existing Firefox instance
* @default false
*/
connectExisting?: boolean;
/**
* Host IP to use for WebDriver server
* @default 127.0.0.1
*/
host?: string;
/**
* Attach browser toolbox debugger for Firefox
* @default false
*/
jsdebugger?: boolean;
/**
* Set Gecko log level [possible values: fatal, error, warn, info, config, debug, trace]
*/
log?: LogLevel;
/**
* write server log to file instead of stderr, increases log level to INFO
*/
logNoTruncated?: boolean;
/**
* Host to use to connect to Gecko
* @default 127.0.0.1
*/
marionetteHost?: string;
/**
* Port to use to connect to Gecko
* @default 0
*/
marionettePort?: number;
/**
* port to listen on
*/
port?: number;
/**
* port to use for Debugger / Webdriver BiDi
*/
websocketPort?: number;
/**
* Directory in which to create profiles. Defaults to the system temporary directory.
*/
profileRoot?: string;
/**
* Version of Geckodriver to start. See https://github.com/mozilla/geckodriver/releases for all available versions, platforms and architecture.
*/
geckoDriverVersion?: string;
/**
* Don't download Geckodriver, instead use a custom path to it, e.g. a cached binary.
*/
customGeckoDriverPath?: string;
/**
* The path to the root of the cache directory.
* @default process.env.GECKODRIVER_CACHE_DIR || os.tmpdir()
*/
cacheDir?: string;
}
//# sourceMappingURL=types.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;AAEzF,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;OAEG;IACH,GAAG,CAAC,EAAE,QAAQ,CAAA;IACd;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;OAEG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB"}

View File

@@ -0,0 +1,2 @@
export {};
//# sourceMappingURL=types.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,7 @@
import { type RequestInit } from 'node-fetch';
import type { GeckodriverParameters } from './types.js';
export declare function hasAccess(filePath: string): Promise<boolean>;
export declare function getDownloadUrl(version: string): string;
export declare function parseParams(params: GeckodriverParameters): string[];
export declare function retryFetch(url: string, opts: RequestInit, retry?: number): Promise<import("node-fetch").Response>;
//# sourceMappingURL=utils.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAKA,OAAc,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAGpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAIvD,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,oBAE/C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,UAe7C;AAGD,wBAAgB,WAAW,CAAC,MAAM,EAAE,qBAAqB,YAYxD;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,GAAE,MAAU,0CAajF"}

View File

@@ -0,0 +1,58 @@
import os from 'node:os';
import util from 'node:util';
import fs from 'node:fs/promises';
import decamelize from 'decamelize';
import fetch from 'node-fetch';
import { GECKODRIVER_DOWNLOAD_PATH } from './constants.js';
const RETRY_DELAY = 100;
export async function hasAccess(filePath) {
return fs.access(filePath).then(() => true, () => false);
}
export function getDownloadUrl(version) {
const platformIdentifier = os.platform() === 'win32'
? 'win'
: os.platform() === 'darwin'
? 'macos'
: 'linux';
const arch = os.arch() === 'arm64'
? '-aarch64'
: platformIdentifier === 'macos'
? ''
: os.arch() === 'x64'
? '64'
: '32';
const ext = os.platform() === 'win32' ? '.zip' : '.tar.gz';
return util.format(GECKODRIVER_DOWNLOAD_PATH, version, version, platformIdentifier, arch, ext);
}
const EXCLUDED_PARAMS = ['version', 'help'];
export function parseParams(params) {
return Object.entries(params)
.filter(([key,]) => !EXCLUDED_PARAMS.includes(key))
.map(([key, val]) => {
if (typeof val === 'boolean' && !val) {
return '';
}
const values = Array.isArray(val) ? val : [val];
return values.map((v) => `--${decamelize(key, { separator: '-' })}${typeof v === 'boolean' ? '' : `=${v}`}`);
})
.flat()
.filter(Boolean);
}
export async function retryFetch(url, opts, retry = 3) {
while (retry > 0) {
try {
return await fetch(url, opts);
}
catch (e) {
retry = retry - 1;
if (retry === 0) {
throw e;
}
await sleep(RETRY_DELAY);
}
}
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
//# sourceMappingURL=utils.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}