runOpen.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. 'use strict';
  2. const open = require('opn');
  3. const isAbsoluteUrl = require('is-absolute-url');
  4. function runOpen(uri, options, log) {
  5. // https://github.com/webpack/webpack-dev-server/issues/1990
  6. let openOptions = { wait: false };
  7. let openOptionValue = '';
  8. if (typeof options.open === 'string') {
  9. openOptions = Object.assign({}, openOptions, { app: options.open });
  10. openOptionValue = `: "${options.open}"`;
  11. } else if (typeof options.open === 'object') {
  12. openOptions = options.open;
  13. openOptionValue = `: "${JSON.stringify(options.open)}"`;
  14. }
  15. const pages =
  16. typeof options.openPage === 'string'
  17. ? [options.openPage]
  18. : options.openPage || [''];
  19. return Promise.all(
  20. pages.map((page) => {
  21. const pageUrl = page && isAbsoluteUrl(page) ? page : `${uri}${page}`;
  22. return open(pageUrl, openOptions).catch(() => {
  23. log.warn(
  24. `Unable to open "${pageUrl}" in browser${openOptionValue}. If you are running in a headless environment, please do not use the --open flag`
  25. );
  26. });
  27. })
  28. );
  29. }
  30. module.exports = runOpen;