yanki 2.0.13 → 2.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +159 -159
- package/dist/bin/open-DWLEjJQI.js +2 -0
- package/dist/lib/index.js +131 -128
- package/dist/standalone/index.d.ts +1 -1
- package/dist/standalone/index.js +151 -151
- package/dist/standalone/open-DT4JCo3f.js +2 -0
- package/package.json +22 -22
- package/readme.md +5 -5
- package/dist/bin/open-PkGTdlsi.js +0 -2
- package/dist/standalone/open-DnUwqK4E.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"node:path";import t from"node:process";import{fileURLToPath as n}from"node:url";import r,{execFile as i}from"node:child_process";import a,{constants as o}from"node:fs/promises";import{promisify as s}from"node:util";import c from"node:os";import l from"node:fs";import{Buffer as u}from"node:buffer";let d;function f(){try{return l.statSync(`/.dockerenv`),!0}catch{return!1}}function p(){try{return l.readFileSync(`/proc/self/cgroup`,`utf8`).includes(`docker`)}catch{return!1}}function m(){return d===void 0&&(d=f()||p()),d}let h;const ee=()=>{try{return l.statSync(`/run/.containerenv`),!0}catch{return!1}};function g(){return h===void 0&&(h=ee()||m()),h}const _=()=>{if(t.platform!==`linux`)return!1;if(c.release().toLowerCase().includes(`microsoft`))return!g();try{if(l.readFileSync(`/proc/version`,`utf8`).toLowerCase().includes(`microsoft`))return!g()}catch{}return l.existsSync(`/proc/sys/fs/binfmt_misc/WSLInterop`)||l.existsSync(`/run/WSL`)?!g():!1};var v=t.env.__IS_WSL_TEST__?_:_();const te=s(r.execFile),y=()=>`${t.env.SYSTEMROOT||t.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`,b=async(e,t={})=>{let{powerShellPath:n,...r}=t,i=b.encodeCommand(e);return te(n??y(),[...b.argumentsPrefix,i],{encoding:`utf8`,...r})};b.argumentsPrefix=[`-NoProfile`,`-NonInteractive`,`-ExecutionPolicy`,`Bypass`,`-EncodedCommand`],b.encodeCommand=e=>u.from(e,`utf16le`).toString(`base64`),b.escapeArgument=e=>`'${String(e).replaceAll(`'`,`''`)}'`;function ne(e){for(let t of e.split(`
|
|
2
|
+
`)){if(/^\s*#/.test(t))continue;let e=/^\s*root\s*=\s*(?<mountPoint>"[^"]*"|'[^']*'|[^#]*)/.exec(t);if(e)return e.groups.mountPoint.trim().replaceAll(/^["']|["']$/g,``)}}const re=s(r.execFile),x=(()=>{let e=`/mnt/`,t;return async function(){if(t)return t;let n=`/etc/wsl.conf`,r=!1;try{await a.access(n,o.F_OK),r=!0}catch{}if(!r)return e;let i=ne(await a.readFile(n,{encoding:`utf8`}));return i===void 0?e:(t=i,t=t.endsWith(`/`)?t:`${t}/`,t)}})(),S=v?async()=>`${await x()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:y;let C;const ie=async()=>(C??=(async()=>{try{let e=await S();return await a.access(e,o.X_OK),!0}catch{return!1}})(),C),ae=async()=>{let t=await S(),n=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,{stdout:r}=await b(n,{powerShellPath:t,cwd:e.dirname(t)});return r.trim()},w=e=>/^[a-z]+:\/\//i.test(e),oe=async e=>{let t=Array.isArray(e),n=t?e:[e],r=[],i=[];for(let[e,t]of n.entries())w(t)||(r.push(e),i.push(t));let a=[...n];if(i.length>0)try{let{stdout:e}=await re(`wslpath`,[`-aw`,...i],{encoding:`utf8`}),t=e.split(/\r?\n/).filter(Boolean);for(let[e,i]of r.entries())a[i]=t[e]??n[i]}catch{}return t?a:a[0]},se=s(r.execFile),ce=()=>`${t.env.SYSTEMROOT||t.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`,T=[`-NoProfile`,`-NonInteractive`,`-ExecutionPolicy`,`Bypass`,`-EncodedCommand`],E=e=>u.from(e,`utf16le`).toString(`base64`),le=e=>`'${String(e).replaceAll(`'`,`''`)}'`,D=e=>[...T,E(e)],O=async(e,t={})=>{let{powerShellPath:n,...r}=t;return se(n??ce(),D(e),{encoding:`utf8`,...r})};O.argumentsPrefix=T,O.encodeCommand=E,O.escapeArgument=le,O.createArguments=D;function k(e,t,n){let r=n=>Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0});return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){let e=n();return r(e),e},set(e){r(e)}}),e}const A=s(i);async function j(){if(t.platform!==`darwin`)throw Error(`macOS only`);let{stdout:e}=await A(`defaults`,[`read`,`com.apple.LaunchServices/com.apple.launchservices.secure`,`LSHandlers`]),n=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(e)?.groups.id??`com.apple.Safari`;return n===`com.apple.safari`?`com.apple.Safari`:n}const M=s(i);async function N(e,{humanReadableOutput:n=!0,signal:r}={}){if(t.platform!==`darwin`)throw Error(`macOS only`);let i=n?[]:[`-ss`],a={};r&&(a.signal=r);let{stdout:o}=await M(`osascript`,[`-e`,e,i],a);return o.trim()}async function P(e){return N(`tell application "Finder" to set app_path to application file id "${e}" as string\ntell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}const F=s(i),I={MSEdgeHTM:{name:`Edge`,id:`com.microsoft.edge`},MSEdgeBHTML:{name:`Edge Beta`,id:`com.microsoft.edge.beta`},MSEdgeDHTML:{name:`Edge Dev`,id:`com.microsoft.edge.dev`},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:`Edge`,id:`com.microsoft.edge.old`},ChromeHTML:{name:`Chrome`,id:`com.google.chrome`},ChromeBHTML:{name:`Chrome Beta`,id:`com.google.chrome.beta`},ChromeDHTML:{name:`Chrome Dev`,id:`com.google.chrome.dev`},ChromiumHTM:{name:`Chromium`,id:`org.chromium.Chromium`},BraveHTML:{name:`Brave`,id:`com.brave.Browser`},BraveBHTML:{name:`Brave Beta`,id:`com.brave.Browser.beta`},BraveDHTML:{name:`Brave Dev`,id:`com.brave.Browser.dev`},BraveSSHTM:{name:`Brave Nightly`,id:`com.brave.Browser.nightly`},FirefoxURL:{name:`Firefox`,id:`org.mozilla.firefox`},OperaStable:{name:`Opera`,id:`com.operasoftware.Opera`},VivaldiHTM:{name:`Vivaldi`,id:`com.vivaldi.Vivaldi`},"IE.HTTP":{name:`Internet Explorer`,id:`com.microsoft.ie`}},L=new Map(Object.entries(I));var R=class extends Error{};async function z(e=F){let{stdout:n}=await e(`${t.env.SYSTEMROOT??t.env.windir??`C:\\Windows`}\\System32\\reg.exe`,[`QUERY`,` HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice`,`/v`,`ProgId`]),r=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(n);if(!r)throw new R(`Cannot find Windows browser in stdout: ${JSON.stringify(n)}`);let{id:i}=r.groups,a=i.lastIndexOf(`.`),o=i.lastIndexOf(`-`),s=a===-1?void 0:i.slice(0,a),c=o===-1?void 0:i.slice(0,o);return I[i]??I[s]??I[c]??{name:i,id:i}}const B=s(i),V=e=>e.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,e=>e.toUpperCase());async function H(){if(t.platform===`darwin`){let e=await j();return{name:await P(e),id:e}}if(t.platform===`linux`){let{stdout:e}=await B(`xdg-mime`,[`query`,`default`,`x-scheme-handler/http`]),t=e.trim();return{name:V(t.replace(/.desktop$/,``).replace(`-`,` `)),id:t}}if(t.platform===`win32`)return z();throw Error(`Only macOS, Linux, and Windows are supported`)}const U=!!(t.env.SSH_CONNECTION||t.env.SSH_CLIENT||t.env.SSH_TTY),W=Symbol(`fallbackAttempt`),G=import.meta.url?e.dirname(n(import.meta.url)):``,K=e.join(G,`xdg-open`),{platform:q,arch:J}=t,Y=async(e,t)=>{if(e.length===0)return;let n=[];for(let r of e)try{return await t(r)}catch(e){n.push(e)}throw AggregateError(n,`Failed to open in all supported apps`)},X=async n=>{n={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...n};let i=n[W]===!0;if(delete n[W],Array.isArray(n.app))return Y(n.app,e=>X({...n,app:e,[W]:!0}));let{name:s,arguments:c=[]}=n.app??{};if(c=[...c],Array.isArray(s))return Y(s,e=>X({...n,app:{name:e,arguments:c},[W]:!0}));if(s===`browser`||s===`browserPrivate`){let e={"com.google.chrome":`chrome`,"google-chrome.desktop":`chrome`,"com.brave.browser":`brave`,"org.mozilla.firefox":`firefox`,"firefox.desktop":`firefox`,"com.microsoft.msedge":`edge`,"com.microsoft.edge":`edge`,"com.microsoft.edgemac":`edge`,"microsoft-edge.desktop":`edge`,"com.apple.safari":`safari`},t={chrome:`--incognito`,brave:`--incognito`,firefox:`--private-window`,edge:`--inPrivate`},r;if(v){let e=await ae();r=L.get(e)??{}}else r=await H();if(r.id in e){let i=e[r.id.toLowerCase()];if(s===`browserPrivate`){if(i===`safari`)throw Error(`Safari doesn't support opening in private mode via command line`);c.push(t[i])}return X({...n,app:{name:$[i],arguments:c}})}throw Error(`${r.name} is not supported as a default browser`)}let l,u=[],d={},f=!1;if(v&&!g()&&!U&&!s&&(f=await ie()),q===`darwin`)l=`open`,n.wait&&u.push(`--wait-apps`),n.background&&u.push(`--background`),n.newInstance&&u.push(`--new`),s&&u.push(`-a`,s);else if(q===`win32`||f){l=await S(),u.push(...O.argumentsPrefix),v||(d.windowsVerbatimArguments=!0),v&&n.target&&(n.target=await oe(n.target));let t=[`$ProgressPreference = 'SilentlyContinue';`,`Start`];n.wait&&t.push(`-Wait`),s?(t.push(O.escapeArgument(s)),n.target&&c.push(n.target)):n.target&&t.push(O.escapeArgument(n.target)),c.length>0&&(c=c.map(e=>O.escapeArgument(e)),t.push(`-ArgumentList`,c.join(`,`))),n.target=O.encodeCommand(t.join(` `)),n.wait||(d.stdio=`ignore`),v&&(d.cwd=e.dirname(l))}else{if(s)l=s;else{let e=!G||G===`/`,n=!1;try{await a.access(K,o.X_OK),n=!0}catch{}l=t.versions.electron??(q===`android`||e||!n)?`xdg-open`:K}c.length>0&&u.push(...c),n.wait||(d.stdio=`ignore`,d.detached=!0)}q===`darwin`&&c.length>0&&u.push(`--args`,...c),n.target&&u.push(n.target);let p=r.spawn(l,u,d);return n.wait?new Promise((e,t)=>{p.once(`error`,t),p.once(`close`,r=>{if(!n.allowNonzeroExitCode&&r!==0){t(Error(`Exited with code ${r}`));return}e(p)})}):i?new Promise((e,t)=>{p.once(`error`,t),p.once(`spawn`,()=>{p.once(`close`,n=>{if(p.off(`error`,t),n!==0){t(Error(`Exited with code ${n}`));return}p.unref(),e(p)})})}):(p.unref(),new Promise((e,t)=>{p.once(`error`,t),p.once(`spawn`,()=>{p.off(`error`,t),e(p)})}))},ue=(e,t)=>{if(typeof e!=`string`&&!Array.isArray(e))throw TypeError("Expected a valid `name`");let{arguments:n=[]}=t??{};if(n!=null&&!Array.isArray(n))throw TypeError("Expected `appArguments` as Array type");return X({...t,app:{name:e,arguments:n}})};function Z(e){if(typeof e==`string`||Array.isArray(e))return e;let{[J]:t}=e;if(!t)throw Error(`${J} is not supported`);return t}function Q({[q]:e},{wsl:t}={}){if(t&&v)return Z(t);if(!e)throw Error(`${q} is not supported`);return Z(e)}const $={browser:`browser`,browserPrivate:`browserPrivate`};k($,`chrome`,()=>Q({darwin:`google chrome`,win32:`chrome`,linux:[`google-chrome`,`google-chrome-stable`,`chromium`,`chromium-browser`]},{wsl:{ia32:`/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe`,x64:[`/mnt/c/Program Files/Google/Chrome/Application/chrome.exe`,`/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe`]}})),k($,`brave`,()=>Q({darwin:`brave browser`,win32:`brave`,linux:[`brave-browser`,`brave`]},{wsl:{ia32:`/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe`,x64:[`/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe`,`/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe`]}})),k($,`firefox`,()=>Q({darwin:`firefox`,win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:`firefox`},{wsl:`/mnt/c/Program Files/Mozilla Firefox/firefox.exe`})),k($,`edge`,()=>Q({darwin:`microsoft edge`,win32:`msedge`,linux:[`microsoft-edge`,`microsoft-edge-dev`]},{wsl:`/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe`})),k($,`safari`,()=>Q({darwin:`Safari`}));export{ue as openApp};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yanki",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.15",
|
|
4
4
|
"description": "A CLI tool and TypeScript library to turn Markdown into Anki flashcards.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"anki",
|
|
@@ -49,9 +49,9 @@
|
|
|
49
49
|
"dist/*"
|
|
50
50
|
],
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@shikijs/langs": "^4.3
|
|
53
|
-
"@shikijs/rehype": "^4.3
|
|
54
|
-
"@shikijs/themes": "^4.3
|
|
52
|
+
"@shikijs/langs": "^4.4.3",
|
|
53
|
+
"@shikijs/rehype": "^4.4.3",
|
|
54
|
+
"@shikijs/themes": "^4.4.3",
|
|
55
55
|
"@sindresorhus/fnv1a": "^3.1.0",
|
|
56
56
|
"@sindresorhus/slugify": "^3.0.0",
|
|
57
57
|
"@stdlib/assert-is-absolute-path": "^0.2.3",
|
|
@@ -62,9 +62,9 @@
|
|
|
62
62
|
"@types/unist": "^3.0.3",
|
|
63
63
|
"@types/yargs": "^17.0.35",
|
|
64
64
|
"crypto-hash": "^4.0.1",
|
|
65
|
-
"deepmerge-ts": "^7.1.
|
|
65
|
+
"deepmerge-ts": "^7.1.6",
|
|
66
66
|
"filenamify": "6.0.0",
|
|
67
|
-
"globby": "^16.2.
|
|
67
|
+
"globby": "^16.2.4",
|
|
68
68
|
"hast-util-to-text": "^4.0.2",
|
|
69
69
|
"linkedom": "^0.18.13",
|
|
70
70
|
"mdast-util-from-markdown": "^2.0.3",
|
|
@@ -82,14 +82,14 @@
|
|
|
82
82
|
"remark": "^15.0.1",
|
|
83
83
|
"remark-breaks": "^4.0.0",
|
|
84
84
|
"remark-denden-ruby": "^0.3.1",
|
|
85
|
-
"remark-flexible-markers": "^1.3.
|
|
85
|
+
"remark-flexible-markers": "^1.3.6",
|
|
86
86
|
"remark-frontmatter": "^5.0.0",
|
|
87
87
|
"remark-gfm": "^4.0.1",
|
|
88
88
|
"remark-github-beta-blockquote-admonitions": "^3.1.2",
|
|
89
89
|
"remark-math": "^6.0.0",
|
|
90
90
|
"remark-parse": "^11.0.0",
|
|
91
91
|
"remark-rehype": "^11.1.2",
|
|
92
|
-
"shiki": "^4.3
|
|
92
|
+
"shiki": "^4.4.3",
|
|
93
93
|
"slash": "^5.1.0",
|
|
94
94
|
"sort-keys": "^6.0.1",
|
|
95
95
|
"strip-ansi": "^7.2.0",
|
|
@@ -100,24 +100,24 @@
|
|
|
100
100
|
"unist-util-visit": "^5.1.0",
|
|
101
101
|
"untildify": "^6.0.0",
|
|
102
102
|
"yaml": "^2.9.0",
|
|
103
|
-
"yanki-connect": "^4.0.
|
|
104
|
-
"yargs": "^18.
|
|
103
|
+
"yanki-connect": "^4.0.10",
|
|
104
|
+
"yargs": "^18.1.0"
|
|
105
105
|
},
|
|
106
106
|
"devDependencies": {
|
|
107
107
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
108
|
-
"@kitschpatrol/shared-config": "^8.
|
|
109
|
-
"@vitest/browser-playwright": "^4.1.
|
|
110
|
-
"@vitest/coverage-v8": "^4.1.
|
|
111
|
-
"bumpp": "^
|
|
112
|
-
"execa": "^
|
|
113
|
-
"mdat-plugin-cli-help": "^3.0
|
|
114
|
-
"playwright": "^1.
|
|
115
|
-
"publint": "^0.3.
|
|
108
|
+
"@kitschpatrol/shared-config": "^8.7.0",
|
|
109
|
+
"@vitest/browser-playwright": "^4.1.11",
|
|
110
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
111
|
+
"bumpp": "^12.2.1",
|
|
112
|
+
"execa": "^10.0.1",
|
|
113
|
+
"mdat-plugin-cli-help": "^3.2.0",
|
|
114
|
+
"playwright": "^1.62.1",
|
|
115
|
+
"publint": "^0.3.24",
|
|
116
116
|
"shx": "^0.4.0",
|
|
117
|
-
"tsdown": "^0.22.
|
|
118
|
-
"tsx": "^4.23.
|
|
117
|
+
"tsdown": "^0.22.14",
|
|
118
|
+
"tsx": "^4.23.12",
|
|
119
119
|
"typescript": "~6.0.3",
|
|
120
|
-
"vitest": "^4.1.
|
|
120
|
+
"vitest": "^4.1.11"
|
|
121
121
|
},
|
|
122
122
|
"engines": {
|
|
123
123
|
"node": "^20.19.0 || >=22.12.0"
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
"coverage": "vitest run --coverage",
|
|
135
135
|
"fix": "ksc fix",
|
|
136
136
|
"lint": "ksc lint",
|
|
137
|
-
"release": "bumpp --commit 'Release: %s' && pnpm build &&
|
|
137
|
+
"release": "bumpp --commit 'Release: %s' && pnpm build && NPM_TOKEN=$(op read 'op://Personal/npm/token') pnpm publish --otp $(op item get npm --otp)",
|
|
138
138
|
"test": "vitest run"
|
|
139
139
|
}
|
|
140
140
|
}
|
package/readme.md
CHANGED
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
<!-- badges -->
|
|
8
8
|
|
|
9
|
-
[](https://npmjs.com/package/yanki)
|
|
10
|
-
[](https://opensource.org/license/mit
|
|
9
|
+
[](https://www.npmjs.com/package/yanki)
|
|
10
|
+
[](https://opensource.org/license/mit)
|
|
11
11
|
[](https://github.com/kitschpatrol/yanki/actions/workflows/ci.yml)
|
|
12
12
|
|
|
13
13
|
<!-- /badges -->
|
|
@@ -54,7 +54,7 @@ This package provides both a stand-alone CLI tool and a TypeScript library for e
|
|
|
54
54
|
|
|
55
55
|
The library powers the [`yanki-obsidian`](https://github.com/kitschpatrol/yanki-obsidian) Obsidian plugin. For lower-level access to Anki, please take a look at the [`yanki-connect`](https://github.com/kitschpatrol/yanki-connect) TypeScript library.
|
|
56
56
|
|
|
57
|
-
The "Y" prefix in "Yanki" is in the "Yet another" naming tradition; a nod to Anki's robust and occasionally duplicative ecosystem of third-party tools. (Also, appropriately, Yankī are a variety of [truant youth](https://
|
|
57
|
+
The "Y" prefix in "Yanki" is in the "Yet another" naming tradition; a nod to Anki's robust and occasionally duplicative ecosystem of third-party tools. (Also, appropriately, Yankī are a variety of [truant youth](https://commons.wikimedia.org/wiki/File:ヤンキー.jpg).)
|
|
58
58
|
|
|
59
59
|
## Quick start
|
|
60
60
|
|
|
@@ -137,8 +137,8 @@ An extended palette of Markdown syntax is available out of the box:
|
|
|
137
137
|
- [LaTeX formatted mathematical expressions](https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/writing-mathematical-expressions) via Anki's built-in [MathJax](https://www.mathjax.org) rendering support.
|
|
138
138
|
- The [`==highlights==`](https://github.com/ipikuka/remark-flexible-markers) syntax.
|
|
139
139
|
- Compact [furigana](https://en.wikipedia.org/wiki/Furigana) / [Ruby](https://en.wikipedia.org/wiki/Ruby_character) syntax specified by [DenDen Markdown](https://conv.denshochan.com/markdown#ruby), for example: `{東京|とうきょう}` renders as `<ruby>東京<rp>(</rp><rt>とうきょう</rt><rp>)</rp></ruby>`. This matches support in Obsidian provided by the [Markdown Furigana](https://github.com/steven-kraft/obsidian-markdown-furigana) plugin.
|
|
140
|
-
- Obsidian-style [block links](https://
|
|
141
|
-
- Obsidian-style [heading links](https://
|
|
140
|
+
- Obsidian-style [block links](https://obsidian.md/help/links#Link+to+a+block+in+a+note), e.g. `[[Some Note#^37066d]]`
|
|
141
|
+
- Obsidian-style [heading links](https://obsidian.md/help/links#Link+to+a+heading+in+a+note), e.g. `[[Some Note#Heading]]`
|
|
142
142
|
|
|
143
143
|
### Custom styles
|
|
144
144
|
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import e from"node:process";import t from"node:fs";import n from"node:path";import{promisify as r}from"node:util";import i,{execFile as a}from"node:child_process";import{fileURLToPath as o}from"node:url";import s,{constants as c}from"node:fs/promises";import l from"node:os";import{Buffer as u}from"node:buffer";let d;function f(){try{return t.statSync(`/.dockerenv`),!0}catch{return!1}}function ee(){try{return t.readFileSync(`/proc/self/cgroup`,`utf8`).includes(`docker`)}catch{return!1}}function p(){return d===void 0&&(d=f()||ee()),d}let m;const h=()=>{try{return t.statSync(`/run/.containerenv`),!0}catch{return!1}};function g(){return m===void 0&&(m=h()||p()),m}const _=()=>{if(e.platform!==`linux`)return!1;if(l.release().toLowerCase().includes(`microsoft`))return!g();try{if(t.readFileSync(`/proc/version`,`utf8`).toLowerCase().includes(`microsoft`))return!g()}catch{}return t.existsSync(`/proc/sys/fs/binfmt_misc/WSLInterop`)||t.existsSync(`/run/WSL`)?!g():!1};var v=e.env.__IS_WSL_TEST__?_:_();const y=r(i.execFile),b=()=>`${e.env.SYSTEMROOT||e.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`,x=async(e,t={})=>{let{powerShellPath:n,...r}=t,i=x.encodeCommand(e);return y(n??b(),[...x.argumentsPrefix,i],{encoding:`utf8`,...r})};x.argumentsPrefix=[`-NoProfile`,`-NonInteractive`,`-ExecutionPolicy`,`Bypass`,`-EncodedCommand`],x.encodeCommand=e=>u.from(e,`utf16le`).toString(`base64`),x.escapeArgument=e=>`'${String(e).replaceAll(`'`,`''`)}'`;function S(e){for(let t of e.split(`
|
|
2
|
-
`)){if(/^\s*#/.test(t))continue;let e=/^\s*root\s*=\s*(?<mountPoint>"[^"]*"|'[^']*'|[^#]*)/.exec(t);if(e)return e.groups.mountPoint.trim().replaceAll(/^["']|["']$/g,``)}}const C=r(i.execFile),te=(()=>{let e=`/mnt/`,t;return async function(){if(t)return t;let n=`/etc/wsl.conf`,r=!1;try{await s.access(n,c.F_OK),r=!0}catch{}if(!r)return e;let i=S(await s.readFile(n,{encoding:`utf8`}));return i===void 0?e:(t=i,t=t.endsWith(`/`)?t:`${t}/`,t)}})(),w=v?async()=>`${await te()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:b;let T;const E=async()=>(T??=(async()=>{try{let e=await w();return await s.access(e,c.X_OK),!0}catch{return!1}})(),T),D=async()=>{let e=await w(),{stdout:t}=await x(String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,{powerShellPath:e});return t.trim()},O=async e=>{if(/^[a-z]+:\/\//i.test(e))return e;try{let{stdout:t}=await C(`wslpath`,[`-aw`,e],{encoding:`utf8`});return t.trim()}catch{return e}};function k(e,t,n){let r=n=>Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0});return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){let e=n();return r(e),e},set(e){r(e)}}),e}const A=r(a);async function j(){if(e.platform!==`darwin`)throw Error(`macOS only`);let{stdout:t}=await A(`defaults`,[`read`,`com.apple.LaunchServices/com.apple.launchservices.secure`,`LSHandlers`]),n=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(t)?.groups.id??`com.apple.Safari`;return n===`com.apple.safari`?`com.apple.Safari`:n}const M=r(a);async function N(t,{humanReadableOutput:n=!0,signal:r}={}){if(e.platform!==`darwin`)throw Error(`macOS only`);let i=n?[]:[`-ss`],a={};r&&(a.signal=r);let{stdout:o}=await M(`osascript`,[`-e`,t,i],a);return o.trim()}async function P(e){return N(`tell application "Finder" to set app_path to application file id "${e}" as string\ntell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}const F=r(a),I={MSEdgeHTM:{name:`Edge`,id:`com.microsoft.edge`},MSEdgeBHTML:{name:`Edge Beta`,id:`com.microsoft.edge.beta`},MSEdgeDHTML:{name:`Edge Dev`,id:`com.microsoft.edge.dev`},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:`Edge`,id:`com.microsoft.edge.old`},ChromeHTML:{name:`Chrome`,id:`com.google.chrome`},ChromeBHTML:{name:`Chrome Beta`,id:`com.google.chrome.beta`},ChromeDHTML:{name:`Chrome Dev`,id:`com.google.chrome.dev`},ChromiumHTM:{name:`Chromium`,id:`org.chromium.Chromium`},BraveHTML:{name:`Brave`,id:`com.brave.Browser`},BraveBHTML:{name:`Brave Beta`,id:`com.brave.Browser.beta`},BraveDHTML:{name:`Brave Dev`,id:`com.brave.Browser.dev`},BraveSSHTM:{name:`Brave Nightly`,id:`com.brave.Browser.nightly`},FirefoxURL:{name:`Firefox`,id:`org.mozilla.firefox`},OperaStable:{name:`Opera`,id:`com.operasoftware.Opera`},VivaldiHTM:{name:`Vivaldi`,id:`com.vivaldi.Vivaldi`},"IE.HTTP":{name:`Internet Explorer`,id:`com.microsoft.ie`}},L=new Map(Object.entries(I));var R=class extends Error{};async function z(e=F){let{stdout:t}=await e(`reg`,[`QUERY`,` HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice`,`/v`,`ProgId`]),n=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(t);if(!n)throw new R(`Cannot find Windows browser in stdout: ${JSON.stringify(t)}`);let{id:r}=n.groups,i=r.lastIndexOf(`.`),a=r.lastIndexOf(`-`),o=i===-1?void 0:r.slice(0,i),s=a===-1?void 0:r.slice(0,a);return I[r]??I[o]??I[s]??{name:r,id:r}}const B=r(a),V=e=>e.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,e=>e.toUpperCase());async function H(){if(e.platform===`darwin`){let e=await j();return{name:await P(e),id:e}}if(e.platform===`linux`){let{stdout:e}=await B(`xdg-mime`,[`query`,`default`,`x-scheme-handler/http`]),t=e.trim();return{name:V(t.replace(/.desktop$/,``).replace(`-`,` `)),id:t}}if(e.platform===`win32`)return z();throw Error(`Only macOS, Linux, and Windows are supported`)}const U=!!(e.env.SSH_CONNECTION||e.env.SSH_CLIENT||e.env.SSH_TTY),W=Symbol(`fallbackAttempt`),G=import.meta.url?n.dirname(o(import.meta.url)):``,K=n.join(G,`xdg-open`),{platform:q,arch:J}=e,Y=async(e,t)=>{if(e.length===0)return;let n=[];for(let r of e)try{return await t(r)}catch(e){n.push(e)}throw AggregateError(n,`Failed to open in all supported apps`)},X=async t=>{t={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...t};let n=t[W]===!0;if(delete t[W],Array.isArray(t.app))return Y(t.app,e=>X({...t,app:e,[W]:!0}));let{name:r,arguments:a=[]}=t.app??{};if(a=[...a],Array.isArray(r))return Y(r,e=>X({...t,app:{name:e,arguments:a},[W]:!0}));if(r===`browser`||r===`browserPrivate`){let e={"com.google.chrome":`chrome`,"google-chrome.desktop":`chrome`,"com.brave.browser":`brave`,"org.mozilla.firefox":`firefox`,"firefox.desktop":`firefox`,"com.microsoft.msedge":`edge`,"com.microsoft.edge":`edge`,"com.microsoft.edgemac":`edge`,"microsoft-edge.desktop":`edge`,"com.apple.safari":`safari`},n={chrome:`--incognito`,brave:`--incognito`,firefox:`--private-window`,edge:`--inPrivate`},i;if(v){let e=await D();i=L.get(e)??{}}else i=await H();if(i.id in e){let o=e[i.id.toLowerCase()];if(r===`browserPrivate`){if(o===`safari`)throw Error(`Safari doesn't support opening in private mode via command line`);a.push(n[o])}return X({...t,app:{name:$[o],arguments:a}})}throw Error(`${i.name} is not supported as a default browser`)}let o,l=[],u={},d=!1;if(v&&!g()&&!U&&!r&&(d=await E()),q===`darwin`)o=`open`,t.wait&&l.push(`--wait-apps`),t.background&&l.push(`--background`),t.newInstance&&l.push(`--new`),r&&l.push(`-a`,r);else if(q===`win32`||d){o=await w(),l.push(...x.argumentsPrefix),v||(u.windowsVerbatimArguments=!0),v&&t.target&&(t.target=await O(t.target));let e=[`$ProgressPreference = 'SilentlyContinue';`,`Start`];t.wait&&e.push(`-Wait`),r?(e.push(x.escapeArgument(r)),t.target&&a.push(t.target)):t.target&&e.push(x.escapeArgument(t.target)),a.length>0&&(a=a.map(e=>x.escapeArgument(e)),e.push(`-ArgumentList`,a.join(`,`))),t.target=x.encodeCommand(e.join(` `)),t.wait||(u.stdio=`ignore`)}else{if(r)o=r;else{let t=!G||G===`/`,n=!1;try{await s.access(K,c.X_OK),n=!0}catch{}o=e.versions.electron??(q===`android`||t||!n)?`xdg-open`:K}a.length>0&&l.push(...a),t.wait||(u.stdio=`ignore`,u.detached=!0)}q===`darwin`&&a.length>0&&l.push(`--args`,...a),t.target&&l.push(t.target);let f=i.spawn(o,l,u);return t.wait?new Promise((e,n)=>{f.once(`error`,n),f.once(`close`,r=>{if(!t.allowNonzeroExitCode&&r!==0){n(Error(`Exited with code ${r}`));return}e(f)})}):n?new Promise((e,t)=>{f.once(`error`,t),f.once(`spawn`,()=>{f.once(`close`,n=>{if(f.off(`error`,t),n!==0){t(Error(`Exited with code ${n}`));return}f.unref(),e(f)})})}):(f.unref(),new Promise((e,t)=>{f.once(`error`,t),f.once(`spawn`,()=>{f.off(`error`,t),e(f)})}))},ne=(e,t)=>{if(typeof e!=`string`&&!Array.isArray(e))throw TypeError("Expected a valid `name`");let{arguments:n=[]}=t??{};if(n!=null&&!Array.isArray(n))throw TypeError("Expected `appArguments` as Array type");return X({...t,app:{name:e,arguments:n}})};function Z(e){if(typeof e==`string`||Array.isArray(e))return e;let{[J]:t}=e;if(!t)throw Error(`${J} is not supported`);return t}function Q({[q]:e},{wsl:t}={}){if(t&&v)return Z(t);if(!e)throw Error(`${q} is not supported`);return Z(e)}const $={browser:`browser`,browserPrivate:`browserPrivate`};k($,`chrome`,()=>Q({darwin:`google chrome`,win32:`chrome`,linux:[`google-chrome`,`google-chrome-stable`,`chromium`,`chromium-browser`]},{wsl:{ia32:`/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe`,x64:[`/mnt/c/Program Files/Google/Chrome/Application/chrome.exe`,`/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe`]}})),k($,`brave`,()=>Q({darwin:`brave browser`,win32:`brave`,linux:[`brave-browser`,`brave`]},{wsl:{ia32:`/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe`,x64:[`/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe`,`/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe`]}})),k($,`firefox`,()=>Q({darwin:`firefox`,win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:`firefox`},{wsl:`/mnt/c/Program Files/Mozilla Firefox/firefox.exe`})),k($,`edge`,()=>Q({darwin:`microsoft edge`,win32:`msedge`,linux:[`microsoft-edge`,`microsoft-edge-dev`]},{wsl:`/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe`})),k($,`safari`,()=>Q({darwin:`Safari`}));export{ne as openApp};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import e from"node:path";import t from"node:process";import{fileURLToPath as n}from"node:url";import r,{execFile as i}from"node:child_process";import a,{constants as o}from"node:fs/promises";import{promisify as s}from"node:util";import c from"node:os";import l from"node:fs";import{Buffer as u}from"node:buffer";let d;function f(){try{return l.statSync(`/.dockerenv`),!0}catch{return!1}}function p(){try{return l.readFileSync(`/proc/self/cgroup`,`utf8`).includes(`docker`)}catch{return!1}}function m(){return d===void 0&&(d=f()||p()),d}let h;const g=()=>{try{return l.statSync(`/run/.containerenv`),!0}catch{return!1}};function _(){return h===void 0&&(h=g()||m()),h}const v=()=>{if(t.platform!==`linux`)return!1;if(c.release().toLowerCase().includes(`microsoft`))return!_();try{if(l.readFileSync(`/proc/version`,`utf8`).toLowerCase().includes(`microsoft`))return!_()}catch{}return l.existsSync(`/proc/sys/fs/binfmt_misc/WSLInterop`)||l.existsSync(`/run/WSL`)?!_():!1};var y=t.env.__IS_WSL_TEST__?v:v();const b=s(r.execFile),x=()=>`${t.env.SYSTEMROOT||t.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`,S=async(e,t={})=>{let{powerShellPath:n,...r}=t,i=S.encodeCommand(e);return b(n??x(),[...S.argumentsPrefix,i],{encoding:`utf8`,...r})};S.argumentsPrefix=[`-NoProfile`,`-NonInteractive`,`-ExecutionPolicy`,`Bypass`,`-EncodedCommand`],S.encodeCommand=e=>u.from(e,`utf16le`).toString(`base64`),S.escapeArgument=e=>`'${String(e).replaceAll(`'`,`''`)}'`;function ee(e){for(let t of e.split(`
|
|
2
|
-
`)){if(/^\s*#/.test(t))continue;let e=/^\s*root\s*=\s*(?<mountPoint>"[^"]*"|'[^']*'|[^#]*)/.exec(t);if(e)return e.groups.mountPoint.trim().replaceAll(/^["']|["']$/g,``)}}const C=s(r.execFile),w=(()=>{let e=`/mnt/`,t;return async function(){if(t)return t;let n=`/etc/wsl.conf`,r=!1;try{await a.access(n,o.F_OK),r=!0}catch{}if(!r)return e;let i=ee(await a.readFile(n,{encoding:`utf8`}));return i===void 0?e:(t=i,t=t.endsWith(`/`)?t:`${t}/`,t)}})(),T=y?async()=>`${await w()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:x;let E;const D=async()=>(E??=(async()=>{try{let e=await T();return await a.access(e,o.X_OK),!0}catch{return!1}})(),E),O=async()=>{let e=await T(),{stdout:t}=await S(String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,{powerShellPath:e});return t.trim()},k=async e=>{if(/^[a-z]+:\/\//i.test(e))return e;try{let{stdout:t}=await C(`wslpath`,[`-aw`,e],{encoding:`utf8`});return t.trim()}catch{return e}};function A(e,t,n){let r=n=>Object.defineProperty(e,t,{value:n,enumerable:!0,writable:!0});return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){let e=n();return r(e),e},set(e){r(e)}}),e}const te=s(i);async function ne(){if(t.platform!==`darwin`)throw Error(`macOS only`);let{stdout:e}=await te(`defaults`,[`read`,`com.apple.LaunchServices/com.apple.launchservices.secure`,`LSHandlers`]),n=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(e)?.groups.id??`com.apple.Safari`;return n===`com.apple.safari`?`com.apple.Safari`:n}const j=s(i);async function M(e,{humanReadableOutput:n=!0,signal:r}={}){if(t.platform!==`darwin`)throw Error(`macOS only`);let i=n?[]:[`-ss`],a={};r&&(a.signal=r);let{stdout:o}=await j(`osascript`,[`-e`,e,i],a);return o.trim()}async function N(e){return M(`tell application "Finder" to set app_path to application file id "${e}" as string\ntell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}const P=s(i),F={MSEdgeHTM:{name:`Edge`,id:`com.microsoft.edge`},MSEdgeBHTML:{name:`Edge Beta`,id:`com.microsoft.edge.beta`},MSEdgeDHTML:{name:`Edge Dev`,id:`com.microsoft.edge.dev`},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:`Edge`,id:`com.microsoft.edge.old`},ChromeHTML:{name:`Chrome`,id:`com.google.chrome`},ChromeBHTML:{name:`Chrome Beta`,id:`com.google.chrome.beta`},ChromeDHTML:{name:`Chrome Dev`,id:`com.google.chrome.dev`},ChromiumHTM:{name:`Chromium`,id:`org.chromium.Chromium`},BraveHTML:{name:`Brave`,id:`com.brave.Browser`},BraveBHTML:{name:`Brave Beta`,id:`com.brave.Browser.beta`},BraveDHTML:{name:`Brave Dev`,id:`com.brave.Browser.dev`},BraveSSHTM:{name:`Brave Nightly`,id:`com.brave.Browser.nightly`},FirefoxURL:{name:`Firefox`,id:`org.mozilla.firefox`},OperaStable:{name:`Opera`,id:`com.operasoftware.Opera`},VivaldiHTM:{name:`Vivaldi`,id:`com.vivaldi.Vivaldi`},"IE.HTTP":{name:`Internet Explorer`,id:`com.microsoft.ie`}},I=new Map(Object.entries(F));var L=class extends Error{};async function R(e=P){let{stdout:t}=await e(`reg`,[`QUERY`,` HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice`,`/v`,`ProgId`]),n=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(t);if(!n)throw new L(`Cannot find Windows browser in stdout: ${JSON.stringify(t)}`);let{id:r}=n.groups,i=r.lastIndexOf(`.`),a=r.lastIndexOf(`-`),o=i===-1?void 0:r.slice(0,i),s=a===-1?void 0:r.slice(0,a);return F[r]??F[o]??F[s]??{name:r,id:r}}const z=s(i),B=e=>e.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,e=>e.toUpperCase());async function V(){if(t.platform===`darwin`){let e=await ne();return{name:await N(e),id:e}}if(t.platform===`linux`){let{stdout:e}=await z(`xdg-mime`,[`query`,`default`,`x-scheme-handler/http`]),t=e.trim();return{name:B(t.replace(/.desktop$/,``).replace(`-`,` `)),id:t}}if(t.platform===`win32`)return R();throw Error(`Only macOS, Linux, and Windows are supported`)}const H=!!(t.env.SSH_CONNECTION||t.env.SSH_CLIENT||t.env.SSH_TTY),U=Symbol(`fallbackAttempt`),W=import.meta.url?e.dirname(n(import.meta.url)):``,G=e.join(W,`xdg-open`),{platform:K,arch:q}=t,J=async(e,t)=>{if(e.length===0)return;let n=[];for(let r of e)try{return await t(r)}catch(e){n.push(e)}throw AggregateError(n,`Failed to open in all supported apps`)},Y=async e=>{e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e};let n=e[U]===!0;if(delete e[U],Array.isArray(e.app))return J(e.app,t=>Y({...e,app:t,[U]:!0}));let{name:i,arguments:s=[]}=e.app??{};if(s=[...s],Array.isArray(i))return J(i,t=>Y({...e,app:{name:t,arguments:s},[U]:!0}));if(i===`browser`||i===`browserPrivate`){let t={"com.google.chrome":`chrome`,"google-chrome.desktop":`chrome`,"com.brave.browser":`brave`,"org.mozilla.firefox":`firefox`,"firefox.desktop":`firefox`,"com.microsoft.msedge":`edge`,"com.microsoft.edge":`edge`,"com.microsoft.edgemac":`edge`,"microsoft-edge.desktop":`edge`,"com.apple.safari":`safari`},n={chrome:`--incognito`,brave:`--incognito`,firefox:`--private-window`,edge:`--inPrivate`},r;if(y){let e=await O();r=I.get(e)??{}}else r=await V();if(r.id in t){let a=t[r.id.toLowerCase()];if(i===`browserPrivate`){if(a===`safari`)throw Error(`Safari doesn't support opening in private mode via command line`);s.push(n[a])}return Y({...e,app:{name:$[a],arguments:s}})}throw Error(`${r.name} is not supported as a default browser`)}let c,l=[],u={},d=!1;if(y&&!_()&&!H&&!i&&(d=await D()),K===`darwin`)c=`open`,e.wait&&l.push(`--wait-apps`),e.background&&l.push(`--background`),e.newInstance&&l.push(`--new`),i&&l.push(`-a`,i);else if(K===`win32`||d){c=await T(),l.push(...S.argumentsPrefix),y||(u.windowsVerbatimArguments=!0),y&&e.target&&(e.target=await k(e.target));let t=[`$ProgressPreference = 'SilentlyContinue';`,`Start`];e.wait&&t.push(`-Wait`),i?(t.push(S.escapeArgument(i)),e.target&&s.push(e.target)):e.target&&t.push(S.escapeArgument(e.target)),s.length>0&&(s=s.map(e=>S.escapeArgument(e)),t.push(`-ArgumentList`,s.join(`,`))),e.target=S.encodeCommand(t.join(` `)),e.wait||(u.stdio=`ignore`)}else{if(i)c=i;else{let e=!W||W===`/`,n=!1;try{await a.access(G,o.X_OK),n=!0}catch{}c=t.versions.electron??(K===`android`||e||!n)?`xdg-open`:G}s.length>0&&l.push(...s),e.wait||(u.stdio=`ignore`,u.detached=!0)}K===`darwin`&&s.length>0&&l.push(`--args`,...s),e.target&&l.push(e.target);let f=r.spawn(c,l,u);return e.wait?new Promise((t,n)=>{f.once(`error`,n),f.once(`close`,r=>{if(!e.allowNonzeroExitCode&&r!==0){n(Error(`Exited with code ${r}`));return}t(f)})}):n?new Promise((e,t)=>{f.once(`error`,t),f.once(`spawn`,()=>{f.once(`close`,n=>{if(f.off(`error`,t),n!==0){t(Error(`Exited with code ${n}`));return}f.unref(),e(f)})})}):(f.unref(),new Promise((e,t)=>{f.once(`error`,t),f.once(`spawn`,()=>{f.off(`error`,t),e(f)})}))},X=(e,t)=>{if(typeof e!=`string`&&!Array.isArray(e))throw TypeError("Expected a valid `name`");let{arguments:n=[]}=t??{};if(n!=null&&!Array.isArray(n))throw TypeError("Expected `appArguments` as Array type");return Y({...t,app:{name:e,arguments:n}})};function Z(e){if(typeof e==`string`||Array.isArray(e))return e;let{[q]:t}=e;if(!t)throw Error(`${q} is not supported`);return t}function Q({[K]:e},{wsl:t}={}){if(t&&y)return Z(t);if(!e)throw Error(`${K} is not supported`);return Z(e)}const $={browser:`browser`,browserPrivate:`browserPrivate`};A($,`chrome`,()=>Q({darwin:`google chrome`,win32:`chrome`,linux:[`google-chrome`,`google-chrome-stable`,`chromium`,`chromium-browser`]},{wsl:{ia32:`/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe`,x64:[`/mnt/c/Program Files/Google/Chrome/Application/chrome.exe`,`/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe`]}})),A($,`brave`,()=>Q({darwin:`brave browser`,win32:`brave`,linux:[`brave-browser`,`brave`]},{wsl:{ia32:`/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe`,x64:[`/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe`,`/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe`]}})),A($,`firefox`,()=>Q({darwin:`firefox`,win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:`firefox`},{wsl:`/mnt/c/Program Files/Mozilla Firefox/firefox.exe`})),A($,`edge`,()=>Q({darwin:`microsoft edge`,win32:`msedge`,linux:[`microsoft-edge`,`microsoft-edge-dev`]},{wsl:`/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe`})),A($,`safari`,()=>Q({darwin:`Safari`}));export{X as openApp};
|