You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.9 KiB
51 lines
1.9 KiB
const { execSync } = require('child_process'); |
|
const path = require('path').posix; |
|
const { canAccess, newLineRegex, sort } = require('./util'); |
|
|
|
function darwin(includeChromium = false) { |
|
const suffixes = [ |
|
// '/Contents/MacOS/Google Chrome Canary', |
|
'/Contents/MacOS/Google Chrome', |
|
... includeChromium ? ['/Contents/MacOS/Chromium'] : [] |
|
]; |
|
|
|
const LSREGISTER = '/System/Library/Frameworks/CoreServices.framework' + |
|
'/Versions/A/Frameworks/LaunchServices.framework' + |
|
'/Versions/A/Support/lsregister'; |
|
|
|
const installations = []; |
|
|
|
execSync( |
|
`${LSREGISTER} -dump` + |
|
' | grep -E -i \'(google chrome( canary)?' + (includeChromium ? '|chromium' : '') + ').app(\\s\\(0x[0-9a-f]+\\))?$\'' + |
|
' | awk \'sub(/\\(0x[0-9a-f]+\\)/, "")\'' + |
|
' | awk \'{$1=""; print $0}\'' + |
|
' | awk \'{ gsub(/^[ \\t]+|[ \\t]+$/, ""); print }\'') |
|
.toString() |
|
.split(newLineRegex) |
|
.forEach((inst) => { |
|
suffixes.forEach(suffix => { |
|
const execPath = path.join(inst.trim(), suffix); |
|
if (canAccess(execPath)) { |
|
installations.push(execPath); |
|
} |
|
}); |
|
}); |
|
|
|
// Retains one per line to maintain readability. |
|
const priorities = [ |
|
{ regex: new RegExp(`^${process.env.HOME}/Applications/.*Chromium.app`), weight: 49 }, |
|
{ regex: new RegExp(`^${process.env.HOME}/Applications/.*Chrome.app`), weight: 50 }, |
|
// { regex: new RegExp(`^${process.env.HOME}/Applications/.*Chrome Canary.app`), weight: 51 }, |
|
{ regex: /^\/Applications\/.*Chromium.app/, weight: 99 }, |
|
{ regex: /^\/Applications\/.*Chrome.app/, weight: 100 }, |
|
// { regex: /^\/Applications\/.*Chrome Canary.app/, weight: 101 }, |
|
{ regex: /^\/Volumes\/.*Chromium.app/, weight: -3 }, |
|
{ regex: /^\/Volumes\/.*Chrome.app/, weight: -2 }, |
|
// { regex: /^\/Volumes\/.*Chrome Canary.app/, weight: -1 } |
|
]; |
|
|
|
return sort(installations, priorities); |
|
} |
|
|
|
module.exports = darwin;
|
|
|