-
-
Notifications
You must be signed in to change notification settings - Fork 222
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
3b79981
commit 7f5995e
Showing
7 changed files
with
210 additions
and
250 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,171 +1,157 @@ | ||
import {ChildProcess} from 'child_process'; | ||
import {type ChildProcess} from 'node:child_process'; | ||
|
||
declare namespace open { | ||
interface Options { | ||
/** | ||
Wait for the opened app to exit before fulfilling the promise. If `false` it's fulfilled immediately when opening the app. | ||
Note that it waits for the app to exit, not just for the window to close. | ||
On Windows, you have to explicitly specify an app for it to be able to wait. | ||
export type Options = { | ||
/** | ||
Wait for the opened app to exit before fulfilling the promise. If `false` it's fulfilled immediately when opening the app. | ||
@default false | ||
*/ | ||
readonly wait?: boolean; | ||
Note that it waits for the app to exit, not just for the window to close. | ||
/** | ||
__macOS only__ | ||
On Windows, you have to explicitly specify an app for it to be able to wait. | ||
Do not bring the app to the foreground. | ||
@default false | ||
*/ | ||
readonly wait?: boolean; | ||
|
||
@default false | ||
*/ | ||
readonly background?: boolean; | ||
/** | ||
__macOS only__ | ||
/** | ||
__macOS only__ | ||
Do not bring the app to the foreground. | ||
Open a new instance of the app even it's already running. | ||
@default false | ||
*/ | ||
readonly background?: boolean; | ||
|
||
A new instance is always opened on other platforms. | ||
/** | ||
__macOS only__ | ||
@default false | ||
*/ | ||
readonly newInstance?: boolean; | ||
Open a new instance of the app even it's already running. | ||
/** | ||
Specify the `name` of the app to open the `target` with, and optionally, app `arguments`. `app` can be an array of apps to try to open and `name` can be an array of app names to try. If each app fails, the last error will be thrown. | ||
A new instance is always opened on other platforms. | ||
The app name is platform dependent. Don't hard code it in reusable modules. For example, Chrome is `google chrome` on macOS, `google-chrome` on Linux and `chrome` on Windows. If possible, use [`open.apps`](#openapps) which auto-detects the correct binary to use. | ||
@default false | ||
*/ | ||
readonly newInstance?: boolean; | ||
|
||
You may also pass in the app's full path. For example on WSL, this can be `/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe` for the Windows installation of Chrome. | ||
/** | ||
Specify the `name` of the app to open the `target` with, and optionally, app `arguments`. `app` can be an array of apps to try to open and `name` can be an array of app names to try. If each app fails, the last error will be thrown. | ||
The app `arguments` are app dependent. Check the app's documentation for what arguments it accepts. | ||
*/ | ||
readonly app?: App | readonly App[]; | ||
The app name is platform dependent. Don't hard code it in reusable modules. For example, Chrome is `google chrome` on macOS, `google-chrome` on Linux and `chrome` on Windows. If possible, use `apps` which auto-detects the correct binary to use. | ||
/** | ||
Allow the opened app to exit with nonzero exit code when the `wait` option is `true`. | ||
You may also pass in the app's full path. For example on WSL, this can be `/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe` for the Windows installation of Chrome. | ||
We do not recommend setting this option. The convention for success is exit code zero. | ||
The app `arguments` are app dependent. Check the app's documentation for what arguments it accepts. | ||
*/ | ||
readonly app?: App | readonly App[]; | ||
|
||
@default false | ||
*/ | ||
readonly allowNonzeroExitCode?: boolean; | ||
} | ||
/** | ||
Allow the opened app to exit with nonzero exit code when the `wait` option is `true`. | ||
interface OpenAppOptions extends Omit<Options, 'app'> { | ||
/** | ||
Arguments passed to the app. | ||
We do not recommend setting this option. The convention for success is exit code zero. | ||
These arguments are app dependent. Check the app's documentation for what arguments it accepts. | ||
*/ | ||
readonly arguments?: readonly string[]; | ||
} | ||
@default false | ||
*/ | ||
readonly allowNonzeroExitCode?: boolean; | ||
}; | ||
|
||
type AppName = | ||
| 'chrome' | ||
| 'firefox' | ||
| 'edge' | ||
| 'browser' | ||
| 'browserPrivate'; | ||
export type OpenAppOptions = { | ||
/** | ||
Arguments passed to the app. | ||
type App = { | ||
name: string | readonly string[]; | ||
arguments?: readonly string[]; | ||
}; | ||
} | ||
These arguments are app dependent. Check the app's documentation for what arguments it accepts. | ||
*/ | ||
readonly arguments?: readonly string[]; | ||
} & Omit<Options, 'app'>; | ||
|
||
export type AppName = | ||
| 'chrome' | ||
| 'firefox' | ||
| 'edge' | ||
| 'browser' | ||
| 'browserPrivate'; | ||
|
||
export type App = { | ||
name: string | readonly string[]; | ||
arguments?: readonly string[]; | ||
}; | ||
|
||
/** | ||
An object containing auto-detected binary names for common apps. Useful to work around cross-platform differences. | ||
@example | ||
``` | ||
import open from 'open'; | ||
import open, {apps} from 'open'; | ||
await open('https://google.com', { | ||
app: { | ||
name: open.apps.chrome | ||
name: apps.chrome | ||
} | ||
}); | ||
``` | ||
*/ | ||
declare const apps: Record<open.AppName, string | readonly string[]>; | ||
export const apps: Record<AppName, string | readonly string[]>; | ||
|
||
// eslint-disable-next-line no-redeclare | ||
declare const open: { | ||
/** | ||
Open stuff like URLs, files, executables. Cross-platform. | ||
Uses the command `open` on macOS, `start` on Windows and `xdg-open` on other platforms. | ||
/** | ||
Open stuff like URLs, files, executables. Cross-platform. | ||
There is a caveat for [double-quotes on Windows](https://github.com/sindresorhus/open#double-quotes-on-windows) where all double-quotes are stripped from the `target`. | ||
Uses the command `open` on macOS, `start` on Windows and `xdg-open` on other platforms. | ||
@param target - The thing you want to open. Can be a URL, file, or executable. Opens in the default app for the file type. For example, URLs open in your default browser. | ||
@returns The [spawned child process](https://nodejs.org/api/child_process.html#child_process_class_childprocess). You would normally not need to use this for anything, but it can be useful if you'd like to attach custom event listeners or perform other operations directly on the spawned process. | ||
There is a caveat for [double-quotes on Windows](https://github.com/sindresorhus/open#double-quotes-on-windows) where all double-quotes are stripped from the `target`. | ||
@example | ||
``` | ||
import open from 'open'; | ||
@param target - The thing you want to open. Can be a URL, file, or executable. Opens in the default app for the file type. For example, URLs open in your default browser. | ||
@returns The [spawned child process](https://nodejs.org/api/child_process.html#child_process_class_childprocess). You would normally not need to use this for anything, but it can be useful if you'd like to attach custom event listeners or perform other operations directly on the spawned process. | ||
// Opens the image in the default image viewer. | ||
await open('unicorn.png', {wait: true}); | ||
console.log('The image viewer app quit'); | ||
@example | ||
``` | ||
import open, {apps} from 'open'; | ||
// Opens the URL in the default browser. | ||
await open('https://sindresorhus.com'); | ||
// Opens the image in the default image viewer. | ||
await open('unicorn.png', {wait: true}); | ||
console.log('The image viewer app quit'); | ||
// Opens the URL in a specified browser. | ||
await open('https://sindresorhus.com', {app: {name: 'firefox'}}); | ||
// Opens the URL in the default browser. | ||
await open('https://sindresorhus.com'); | ||
// Specify app arguments. | ||
await open('https://sindresorhus.com', {app: {name: 'google chrome', arguments: ['--incognito']}}); | ||
// Opens the URL in a specified browser. | ||
await open('https://sindresorhus.com', {app: {name: 'firefox'}}); | ||
// Opens the URL in the default browser in incognito mode. | ||
await open('https://sindresorhus.com', {app: {name: open.apps.browserPrivate}}); | ||
``` | ||
*/ | ||
( | ||
target: string, | ||
options?: open.Options | ||
): Promise<ChildProcess>; | ||
// Specify app arguments. | ||
await open('https://sindresorhus.com', {app: {name: 'google chrome', arguments: ['--incognito']}}); | ||
/** | ||
An object containing auto-detected binary names for common apps. Useful to work around cross-platform differences. | ||
*/ | ||
apps: typeof apps; | ||
|
||
/** | ||
Open an app. Cross-platform. | ||
// Opens the URL in the default browser in incognito mode. | ||
await open('https://sindresorhus.com', {app: {name: apps.browserPrivate}}); | ||
``` | ||
*/ | ||
export default function open( | ||
target: string, | ||
options?: Options | ||
): Promise<ChildProcess>; | ||
|
||
Uses the command `open` on macOS, `start` on Windows and `xdg-open` on other platforms. | ||
/** | ||
Open an app. Cross-platform. | ||
@param name - The app you want to open. Can be either builtin supported `open.apps` names or other name supported in platform. | ||
@returns The [spawned child process](https://nodejs.org/api/child_process.html#child_process_class_childprocess). You would normally not need to use this for anything, but it can be useful if you'd like to attach custom event listeners or perform other operations directly on the spawned process. | ||
Uses the command `open` on macOS, `start` on Windows and `xdg-open` on other platforms. | ||
@example | ||
``` | ||
import open from 'open'; | ||
const {apps, openApp} = open; | ||
@param name - The app you want to open. Can be either builtin supported `apps` names or other name supported in platform. | ||
@returns The [spawned child process](https://nodejs.org/api/child_process.html#child_process_class_childprocess). You would normally not need to use this for anything, but it can be useful if you'd like to attach custom event listeners or perform other operations directly on the spawned process. | ||
// Open Firefox. | ||
await openApp(apps.firefox); | ||
@example | ||
``` | ||
import open, {openApp, apps} from 'open'; | ||
// Open Chrome in incognito mode. | ||
await openApp(apps.chrome, {arguments: ['--incognito']}); | ||
// Open Firefox. | ||
await openApp(apps.firefox); | ||
// Open default browser. | ||
await openApp(apps.browser); | ||
// Open Chrome in incognito mode. | ||
await openApp(apps.chrome, {arguments: ['--incognito']}); | ||
// Open default browser in incognito mode. | ||
await openApp(apps.browserPrivate); | ||
// Open default browser. | ||
await openApp(apps.browser); | ||
// Open Xcode. | ||
await openApp('xcode'); | ||
``` | ||
*/ | ||
openApp: (name: open.App['name'], options?: open.OpenAppOptions) => Promise<ChildProcess>; | ||
}; | ||
// Open default browser in incognito mode. | ||
await openApp(apps.browserPrivate); | ||
export {apps}; | ||
export default open; | ||
// Open Xcode. | ||
await openApp('xcode'); | ||
``` | ||
*/ | ||
export function openApp(name: App['name'], options?: OpenAppOptions): Promise<ChildProcess>; |
Oops, something went wrong.