yanki 2.0.14 → 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 +153 -153
- package/dist/bin/open-DWLEjJQI.js +2 -0
- package/dist/lib/index.js +25 -23
- package/dist/standalone/index.d.ts +1 -1
- package/dist/standalone/index.js +150 -150
- package/dist/standalone/open-DT4JCo3f.js +2 -0
- package/package.json +19 -19
- package/dist/bin/open-X1dozMxs.js +0 -2
- package/dist/standalone/open-Co6eM9oM.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
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 p(){try{return t.readFileSync(`/proc/self/cgroup`,`utf8`).includes(`docker`)}catch{return!1}}function ee(){return d===void 0&&(d=f()||p()),d}let m;const te=()=>{try{return t.statSync(`/run/.containerenv`),!0}catch{return!1}};function h(){return m===void 0&&(m=te()||ee()),m}const g=()=>{if(e.platform!==`linux`)return!1;if(l.release().toLowerCase().includes(`microsoft`))return!h();try{if(t.readFileSync(`/proc/version`,`utf8`).toLowerCase().includes(`microsoft`))return!h()}catch{}return t.existsSync(`/proc/sys/fs/binfmt_misc/WSLInterop`)||t.existsSync(`/run/WSL`)?!h():!1};var _=e.env.__IS_WSL_TEST__?g:g();const v=r(i.execFile),y=()=>`${e.env.SYSTEMROOT||e.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 v(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=r(i.execFile),ie=(()=>{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=ne(await s.readFile(n,{encoding:`utf8`}));return i===void 0?e:(t=i,t=t.endsWith(`/`)?t:`${t}/`,t)}})(),x=_?async()=>`${await ie()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:y;let S;const C=async()=>(S??=(async()=>{try{let e=await x();return await s.access(e,c.X_OK),!0}catch{return!1}})(),S),w=async()=>{let e=await x(),t=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,{stdout:r}=await b(t,{powerShellPath:e,cwd:n.dirname(e)});return r.trim()},ae=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())ae(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=r(i.execFile),ce=()=>`${e.env.SYSTEMROOT||e.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=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(t=F){let{stdout:n}=await t(`${e.env.SYSTEMROOT??e.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=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 r=t[W]===!0;if(delete t[W],Array.isArray(t.app))return Y(t.app,e=>X({...t,app:e,[W]:!0}));let{name:a,arguments:o=[]}=t.app??{};if(o=[...o],Array.isArray(a))return Y(a,e=>X({...t,app:{name:e,arguments:o},[W]:!0}));if(a===`browser`||a===`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`},r;if(_){let e=await w();r=L.get(e)??{}}else r=await H();if(r.id in e){let i=e[r.id.toLowerCase()];if(a===`browserPrivate`){if(i===`safari`)throw Error(`Safari doesn't support opening in private mode via command line`);o.push(n[i])}return X({...t,app:{name:$[i],arguments:o}})}throw Error(`${r.name} is not supported as a default browser`)}let l,u=[],d={},f=!1;if(_&&!h()&&!U&&!a&&(f=await C()),q===`darwin`)l=`open`,t.wait&&u.push(`--wait-apps`),t.background&&u.push(`--background`),t.newInstance&&u.push(`--new`),a&&u.push(`-a`,a);else if(q===`win32`||f){l=await x(),u.push(...O.argumentsPrefix),_||(d.windowsVerbatimArguments=!0),_&&t.target&&(t.target=await oe(t.target));let e=[`$ProgressPreference = 'SilentlyContinue';`,`Start`];t.wait&&e.push(`-Wait`),a?(e.push(O.escapeArgument(a)),t.target&&o.push(t.target)):t.target&&e.push(O.escapeArgument(t.target)),o.length>0&&(o=o.map(e=>O.escapeArgument(e)),e.push(`-ArgumentList`,o.join(`,`))),t.target=O.encodeCommand(e.join(` `)),t.wait||(d.stdio=`ignore`),_&&(d.cwd=n.dirname(l))}else{if(a)l=a;else{let t=!G||G===`/`,n=!1;try{await s.access(K,c.X_OK),n=!0}catch{}l=e.versions.electron??(q===`android`||t||!n)?`xdg-open`:K}o.length>0&&u.push(...o),t.wait||(d.stdio=`ignore`,d.detached=!0)}q===`darwin`&&o.length>0&&u.push(`--args`,...o),t.target&&u.push(t.target);let p=i.spawn(l,u,d);return t.wait?new Promise((e,n)=>{p.once(`error`,n),p.once(`close`,r=>{if(!t.allowNonzeroExitCode&&r!==0){n(Error(`Exited with code ${r}`));return}e(p)})}):r?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&&_)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/dist/lib/index.js
CHANGED
|
@@ -165,7 +165,7 @@ const NOTE_DEFAULT_EMPTY_HAST = u("element", {
|
|
|
165
165
|
properties: {},
|
|
166
166
|
tagName: "em"
|
|
167
167
|
}, [u("text", NOTE_DEFAULT_EMPTY_TEXT)])]);
|
|
168
|
-
const MEDIA_DEFAULT_HASH_MODE_FILE = "
|
|
168
|
+
const MEDIA_DEFAULT_HASH_MODE_FILE = "content";
|
|
169
169
|
const MEDIA_DEFAULT_HASH_MODE_URL = "metadata";
|
|
170
170
|
/**
|
|
171
171
|
* How to first attempt to infer the asset type behind a URL.
|
|
@@ -313,9 +313,9 @@ async function getFileContentHash(absoluteFilePath, fileAdapter, mode = MEDIA_DE
|
|
|
313
313
|
}
|
|
314
314
|
case "metadata": {
|
|
315
315
|
const { mtimeMs, size } = await fileAdapter.stat(absoluteFilePath);
|
|
316
|
-
const
|
|
317
|
-
if (
|
|
318
|
-
return getHash(
|
|
316
|
+
const metadataString = `${mtimeMs ?? ""}${size ?? ""}`;
|
|
317
|
+
if (metadataString === "") return getHash(absoluteFilePath, 16);
|
|
318
|
+
return getHash(`${absoluteFilePath}${metadataString}`, 16);
|
|
319
319
|
}
|
|
320
320
|
case "name": return getHash(absoluteFilePath, 16);
|
|
321
321
|
}
|
|
@@ -726,7 +726,7 @@ async function getUrlContentHash(url, fetchAdapter, mode = MEDIA_DEFAULT_HASH_MO
|
|
|
726
726
|
"content-length"
|
|
727
727
|
]);
|
|
728
728
|
if (stringToHash === void 0) throw new Error("No headers found");
|
|
729
|
-
return getHash(stringToHash
|
|
729
|
+
return getHash(`${url}${stringToHash}`, 16);
|
|
730
730
|
} catch {}
|
|
731
731
|
return getHash(url, 16);
|
|
732
732
|
}
|
|
@@ -1208,17 +1208,18 @@ async function addNote(client, note, dryRun, fileAdapter) {
|
|
|
1208
1208
|
options: { allowDuplicate: true }
|
|
1209
1209
|
} }) ?? void 0;
|
|
1210
1210
|
} catch (error) {
|
|
1211
|
-
if (error instanceof Error)
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
if (
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1211
|
+
if (error instanceof Error) {
|
|
1212
|
+
if (error.message === `model was not found: ${note.modelName}`) {
|
|
1213
|
+
const model = yankiModels.find((model) => model.modelName === note.modelName);
|
|
1214
|
+
if (model === void 0) throw new Error(`Model not found: ${note.modelName}`, { cause: error });
|
|
1215
|
+
await ensureModelExists(client, model);
|
|
1216
|
+
newNote = await addNote(client, note, dryRun, fileAdapter);
|
|
1217
|
+
} else if (error.message === `deck was not found: ${note.deckName}`) {
|
|
1218
|
+
if (note.deckName === "") throw new Error("Deck name is empty", { cause: error });
|
|
1219
|
+
await client.deck.createDeck({ deck: note.deckName });
|
|
1220
|
+
newNote = await addNote(client, note, dryRun, fileAdapter);
|
|
1221
|
+
} else throw error;
|
|
1222
|
+
} else throw new TypeError("Unknown error", { cause: error });
|
|
1222
1223
|
}
|
|
1223
1224
|
if (newNote === void 0) throw new Error("Note creation failed");
|
|
1224
1225
|
await uploadMediaForNote(client, note, dryRun, fileAdapter);
|
|
@@ -1256,13 +1257,14 @@ async function updateNote(client, localNote, remoteNote, dryRun, fileAdapter) {
|
|
|
1256
1257
|
tags: localNote.tags ?? []
|
|
1257
1258
|
} });
|
|
1258
1259
|
} catch (error) {
|
|
1259
|
-
if (error instanceof Error)
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1260
|
+
if (error instanceof Error) {
|
|
1261
|
+
if (error.message === `Model '${localNote.modelName}' not found`) {
|
|
1262
|
+
const model = yankiModels.find((model) => model.modelName === localNote.modelName);
|
|
1263
|
+
if (model === void 0) throw new Error(`Model not found: ${localNote.modelName}`, { cause: error });
|
|
1264
|
+
await ensureModelExists(client, model);
|
|
1265
|
+
await updateNote(client, localNote, remoteNote, dryRun, fileAdapter);
|
|
1266
|
+
} else throw error;
|
|
1267
|
+
} else throw new TypeError("Unknown error", { cause: error });
|
|
1266
1268
|
}
|
|
1267
1269
|
await uploadMediaForNote(client, localNote, dryRun, fileAdapter);
|
|
1268
1270
|
}
|
|
@@ -805,7 +805,7 @@ Same as `PartialDeep`, but accepts only `object`s as inputs. Internal helper for
|
|
|
805
805
|
*/
|
|
806
806
|
type PartialObjectDeep<ObjectType extends object, Options extends Required<PartialDeepOptions>> = { [KeyType in keyof ObjectType]?: _PartialDeep<ObjectType[KeyType], Options>; };
|
|
807
807
|
//#endregion
|
|
808
|
-
//#region node_modules/.pnpm/yanki-connect@4.0.
|
|
808
|
+
//#region node_modules/.pnpm/yanki-connect@4.0.10/node_modules/yanki-connect/dist/index.d.ts
|
|
809
809
|
//#region src/types/deck.d.ts
|
|
810
810
|
type DeckStats = {
|
|
811
811
|
deck_id: number;
|