// Bootstrap yargs for browser:
import browserPlatformShim from './lib/platform-shims/browser.mjs';
import {YargsWithShim} from './build/lib/yargs-factory.js';

const Yargs = YargsWithShim(browserPlatformShim);

export default Yargs;
