Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 0 additions & 95 deletions packages/vite/bin/openChrome.applescript

This file was deleted.

68 changes: 68 additions & 0 deletions packages/vite/bin/openChrome.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/*
Copyright (c) 2015-present, Facebook, Inc.

This source code is licensed under the MIT license found in the
LICENSE file at
https://github.com/facebookincubator/create-react-app/blob/master/LICENSE
*/

/* global Application */

// eslint-disable-next-line @typescript-eslint/no-unused-vars
function run(argv) {
const urlToOpen = argv[0]
// Allow requested program to be optional, default to Google Chrome
const programName = argv[1] ?? 'Google Chrome'

const app = Application(programName)

if (app.windows.length === 0) {
app.Window().make()
}

// 1: Looking for tab running debugger then,
// Reload debugging tab if found, then return
const found = lookupTabWithUrl(urlToOpen, app)
if (found) {
found.targetWindow.activeTabIndex = found.targetTabIndex
found.targetTab.reload()
found.targetWindow.index = 1
app.activate()
return
}

// 2: Looking for Empty tab
// In case debugging tab was not found
// We try to find an empty tab instead
const emptyTabFound = lookupTabWithUrl('chrome://newtab/', app)
if (emptyTabFound) {
emptyTabFound.targetWindow.activeTabIndex = emptyTabFound.targetTabIndex
emptyTabFound.targetTab.url = urlToOpen
app.activate()
return
}

// 3: Create new tab
// both debugging and empty tab were not found make a new tab with url
const firstWindow = app.windows[0]
firstWindow.tabs.push(app.Tab({ url: urlToOpen }))
app.activate()
}

/**
* Lookup tab with given url
*/
function lookupTabWithUrl(lookupUrl, app) {
const windows = app.windows()
for (const window of windows) {
for (const [tabIndex, tab] of window.tabs().entries()) {
if (tab.url().includes(lookupUrl)) {
return {
targetTab: tab,
targetTabIndex: tabIndex + 1,
targetWindow: window,
}
}
}
}
}
17 changes: 7 additions & 10 deletions packages/vite/src/node/server/openBrowser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,30 +77,27 @@ async function startBrowserProcess(
) {
// If we're on OS X, the user hasn't specifically
// requested a different browser, we can try opening
// a Chromium browser with AppleScript. This lets us reuse an
// a Chromium browser with JXA. This lets us reuse an
// existing tab when possible instead of creating a new one.
const preferredOSXBrowser =
browser === 'google chrome' ? 'Google Chrome' : browser
const shouldTryOpenChromeWithAppleScript =
const shouldTryOpenChromeWithJXA =
process.platform === 'darwin' &&
(!preferredOSXBrowser ||
supportedChromiumBrowsers.includes(preferredOSXBrowser))

if (shouldTryOpenChromeWithAppleScript) {
if (shouldTryOpenChromeWithJXA) {
try {
const ps = await execAsync('ps cax')
const openedBrowser =
preferredOSXBrowser && ps.includes(preferredOSXBrowser)
? preferredOSXBrowser
: supportedChromiumBrowsers.find((b) => ps.includes(b))
if (openedBrowser) {
// Try our best to reuse existing tab with AppleScript
await execAsync(
`osascript openChrome.applescript "${url}" "${openedBrowser}"`,
{
cwd: join(VITE_PACKAGE_DIR, 'bin'),
},
)
// Try our best to reuse existing tab with JXA
await execAsync(`osascript openChrome.js "${url}" "${openedBrowser}"`, {
cwd: join(VITE_PACKAGE_DIR, 'bin'),
})
return true
}
} catch {
Expand Down
Loading