@bomb.sh/tab 0.0.8 → 0.0.9

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/README.md CHANGED
@@ -14,6 +14,28 @@ tab solves this complexity by providing autocompletions that work consistently a
14
14
 
15
15
  ## Installation
16
16
 
17
+ ### For Package Manager Completions (Global install is recommended)
18
+
19
+ ```bash
20
+ npm install -g @bomb.sh/tab
21
+ ```
22
+
23
+ Then enable completions permanently:
24
+
25
+ ```bash
26
+ # For zsh
27
+ echo 'source <(tab pnpm zsh)' >> ~/.zshrc
28
+ source ~/.zshrc
29
+
30
+ # For bash
31
+ echo 'source <(tab pnpm bash)' >> ~/.bashrc
32
+ source ~/.bashrc
33
+
34
+ # The same can be done for other shells!
35
+ ```
36
+
37
+ ### For CLI Library (Adding Completions to Your CLI)
38
+
17
39
  ```bash
18
40
  npm install @bomb.sh/tab
19
41
  # or
package/dist/bin/cli.js CHANGED
@@ -2,4 +2,4 @@
2
2
  import{i as e,o as t}from"../t-HnUrbNwE.js";import{readFileSync as n}from"node:fs";import{promisify as r}from"node:util";import i from"node:child_process";import{readFileSync as a}from"fs";import{execSync as o}from"child_process";function s(){try{let e;try{e=n(`pnpm-workspace.yaml`,`utf8`)}catch{e=n(`pnpm-workspace.yml`,`utf8`)}let t=e.match(/packages:\s*\n((?:\s*-\s*.+\n?)*)/);return t?t[1].split(`
3
3
  `).map(e=>e.trim()).filter(e=>e.startsWith(`-`)).map(e=>e.substring(1).trim()).filter(e=>e&&!e.startsWith(`#`)):[]}catch{return[]}}function c(){try{let e=JSON.parse(a(`package.json`,`utf8`));return Object.keys(e.scripts||{})}catch{return[]}}function l(){try{let e=JSON.parse(a(`package.json`,`utf8`)),t={...e.dependencies,...e.devDependencies,...e.peerDependencies,...e.optionalDependencies};return Object.keys(t)}catch{return[]}}const ee=async e=>{c().forEach(t=>{e(t.replace(/:/g,`\\:`),` `)})},te=async e=>{l().forEach(t=>e(t,``))},ne=r(i.exec),{execSync:re}=i,u={workspace(e){s().forEach(t=>e(t,`Workspace pattern: ${t}`))}};function d(e,t,n,r){e._lazyCommand=t,e._optionsLoaded=!1;let i=e.options;e.optionsRaw=i,Object.defineProperty(e,`options`,{get(){return this._optionsLoaded||(this._optionsLoaded=!0,r(this,this._lazyCommand)),i},configurable:!0})}function f(e,t,n){[`remove`,`rm`,`uninstall`,`un`,`update`,`up`].includes(t)&&e.argument(`package`,te),[`run`,`run-script`].includes(t)&&e.argument(`script`,ee,!0)}async function p(e,t={}){try{let{stdout:n}=await ne(e,{encoding:`utf8`,timeout:500,maxBuffer:4*1024*1024,...t});return n}catch(e){return e instanceof Error&&`stdout`in e?e.stdout:``}}function m(e,t={}){try{return re(e,{encoding:`utf8`,timeout:500,...t})}catch(e){return e?.stdout?e.stdout:``}}function h(e){return t=>e.forEach(e=>t(e,` `))}const ie=/\x1B(?:[@-Z\\-_]|\[[0-?]*[ -/]*[@-~])/g,g=/^\s+([a-z][a-z\s,-]*?)\s{2,}(\S.*)$/i,_=/^\s*(?:-(?<short>[A-Za-z]),\s*)?--(?<long>[a-z0-9-]+)(?<val>\s+(?:<[^>]+>|\[[^\]]+\]))?\s{2,}(?<desc>\S.*)$/i,ae=/^\s*(?:-[A-Za-z],\s*)?--[a-z0-9-]+/i,v=e=>e.replace(ie,``),y=e=>(e.match(/^\s*/)||[``])[0].length,oe=e=>e.split(`,`).map(e=>e.trim()).filter(Boolean),b=/^\s*Options:/i,x=/(?:levels?|options?|values?)[^:]*:\s*([^.]+)/i,S=/\r?\n/,se=/[,\s]+/,C=/^\s*(?:-\w,?\s*)?--(\w+(?:-\w+)*)\s+(\w+(?:-\w+)*)\s+(.+)$/,w=/^\s*-\w,?\s*--\w+(?:,\s*--(\w+(?:-\w+)*)\s+(\w+(?:-\w+)*))?\s+(.+)$/,T=/^\s{20,}/,E=/^\s*[A-Z][^:]*:\s*$/;function D(e){return v(e).split(S)}function ce(e){let t=1/0;for(let n of e){let e=n.match(g);if(!e)continue;let r=n.indexOf(e[2]);r>=0&&r<t&&(t=r)}return t}function le(e,t){let n=1/0;for(let r of e){let e=r.match(_);if(!e||t&&e.groups?.val)continue;let i=r.indexOf(e.groups.desc);i>=0&&i<n&&(n=i)}return n}function O(e,t){let n=D(e),r=[];for(let e=0;e<n.length;e++){let i=n[e],a=i.match(C);if(a){let[,i,o,s]=a;if(i===t){let t=s.trim(),i=e+1;for(;i<n.length;){let e=n[i],r=T.test(e),a=C.test(e)||w.test(e),o=!e.trim()||E.test(e);if(r&&!a&&!o)t+=` `+e.trim(),i++;else break}r.push({value:o,desc:t})}}let o=i.match(w);if(o){let[,i,a,s]=o;if(i===t&&a){let t=s.trim(),i=e+1;for(;i<n.length;){let e=n[i],r=T.test(e),a=C.test(e)||w.test(e),o=!e.trim()||E.test(e);if(r&&!a&&!o)t+=` `+e.trim(),i++;else break}r.push({value:a,desc:t})}}}if(r.length)return r;for(let e=0;e<n.length;e++){let r=n[e];if(r.includes(`--${t}`)||r.includes(`${t}:`))for(let t=e;t<Math.min(e+3,n.length);t++){let e=n[t].match(x);if(e)return e[1].split(se).map(e=>e.trim()).filter(e=>e&&!e.includes(`(`)&&!e.includes(`)`)).map(e=>({value:e,desc:`Log level: ${e}`}))}}return[]}const k={...u,loglevel(e){let t=O(m(`pnpm install --help`),`loglevel`);t.length?t.forEach(({value:t,desc:n})=>e(t,n)):h([`debug`,`info`,`warn`,`error`,`silent`])(e)},reporter(e){let t=O(m(`pnpm install --help`),`reporter`);t.length?t.forEach(({value:t,desc:n})=>e(t,n)):h([`default`,`append-only`,`ndjson`,`silent`])(e)},filter(e){e(`.`,`Current working directory`),e(`!<selector>`,`Exclude packages matching selector`),s().forEach(t=>{e(t,`Workspace pattern: ${t}`),e(`${t}...`,`Include dependencies of ${t}`)}),e(`@*/*`,`All scoped packages`),e(`...<pattern>`,`Include dependencies of pattern`),e(`<pattern>...`,`Include dependents of pattern`)}};function ue(e){let t=D(e),n=ce(t);if(!Number.isFinite(n))return{};let r=null,i=new Map,a=()=>{if(!r)return;let e=r.desc.trim();for(let t of r.names)i.set(t,e);r=null};for(let e of t){if(b.test(e))break;let t=e.match(g);if(t){a(),r={names:oe(t[1]),desc:t[2].trim()};continue}r&&y(e)>=n&&e.trim()&&(r.desc+=` `+e.trim())}return a(),Object.fromEntries(i)}async function de(){let e=await p(`pnpm --help`);return e?ue(e):{}}function A(e,{flagsOnly:t=!0}={}){let n=D(e),r=le(n,t);if(!Number.isFinite(r))return[];let i=[],a=null,o=()=>{a&&=(a.desc=a.desc.trim(),i.push(a),null)};for(let e of n){let n=e.match(_);if(n){if(t&&n.groups?.val)continue;o(),a={short:n.groups?.short||void 0,long:n.groups.long,desc:n.groups.desc.trim()};continue}if(a){let t=y(e),n=ae.test(e);t>=r&&e.trim()&&!n&&(a.desc+=` `+e.trim())}}return o(),i}function j(e,t){let n=m(`pnpm ${t} --help`);if(!n)return;let r=A(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=k[t];r?e.option(t,i,r,n):e.option(t,i,n)}for(let[t,r]of Object.entries(k))e.optionsRaw?.get?.(t)||O(n,t).length>0&&e.option(t,` `,r)}async function M(e){try{let t=await de();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);f(t,n,`pnpm`),d(t,n,`pnpm`,j)}}catch{}}const N=/^All commands:\s*$/i,P=/^Options:\s*$/i,F=/^(aliases|run|more)/i,I=/^[a-z][a-z0-9-]*$/,L=/(?:\[)?(?:-([a-z])\|)?--([a-z][a-z0-9-]+)(?:\s+<[^>]+>)?(?:\])?/gi,R=/<[^>]+>/,z=/^\s/;function B(e){return v(e).split(/\r?\n/)}function V(e,t){let n=e.findIndex(e=>t.test(e.trim()));if(n===-1)return``;let r=``;for(let t=n+1;t<e.length;t++){let n=e[t];if(!z.test(n)&&n.trim()&&!n.includes(`,`))break;z.test(n)&&(r+=` `+n.trim())}return r}const H=(e,t=()=>` `)=>n=>e.forEach(e=>n(e,t(e))),fe={...u,loglevel:h([`silent`,`error`,`warn`,`notice`,`http`,`info`,`verbose`,`silly`]),"install-strategy":H([`hoisted`,`nested`,`shallow`,`linked`],()=>` `),omit:H([`dev`,`optional`,`peer`],()=>` `),include:H([`prod`,`dev`,`optional`,`peer`],()=>` `)};function pe(e){let t=V(B(e),N);if(!t)return{};let n={};return t.split(`,`).map(e=>e.trim()).filter(e=>e&&I.test(e)).forEach(e=>{n[e]=` `}),n.run=` `,n}async function me(){let e=await p(`npm --help`);return e?pe(e):{}}function he(e,{flagsOnly:t=!0}={}){let n=B(e),r=n.findIndex(e=>P.test(e.trim()));if(r===-1)return[];let i=[];for(let e of n.slice(r+1)){let n=e.trim();if(F.test(n))break;let r=e.matchAll(L);for(let e of r){let n=e[1]||void 0,r=e[2],a=R.test(e[0]);t&&a||i.push({short:n,long:r,desc:` `})}}return i}function ge(e,t){let n=m(`npm ${t} --help`);if(!n)return;let r=he(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=fe[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function _e(e){try{let t=await me();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);f(t,n,`npm`),d(t,n,`npm`,ge)}}catch{}}const ve=/^\s*Options:\s*$/i,ye=/^\s*Commands:\s*$/i,U=/^(Run `yarn help|Visit https:\/\/)/i,be=/\r?\n/,xe=/^\s*(?:-([a-zA-Z]),?\s*)?--([a-z][a-z0-9-]*)(?:\s+<[^>]+>|\s+\[[^\]]+\])?\s+(.+)$/,Se=/^\s*-\s+([a-z][a-z0-9-]*(?:\s*\/\s*[a-z][a-zA-Z]*)*)/;function W(e){return v(e).split(be)}function G(e,t){for(let n=0;n<e.length;n++)if(t.test(e[n].trim()))return n+1;return-1}const Ce={...u,emoji(e){e(`true`,` `),e(`false`,` `)},production(e){e(`true`,` `),e(`false`,` `)},"scripts-prepend-node-path"(e){e(`true`,` `),e(`false`,` `)}};function we(e){let t=W(e),n={},r=G(t,ye);if(r===-1)return n;for(let e=r;e<t.length;e++){let r=t[e];if(U.test(r))break;if(!r.trim())continue;let i=r.match(Se);if(i){let[,e]=i,t=e.split(/\s*\/\s*/),r=t[0].trim();if(r){n[r]=``;for(let e=1;e<t.length;e++){let r=t[e].trim();r&&(n[r]=``)}}}}return n}async function Te(){let e=await p(`yarn --help`);return e?we(e):{}}function Ee(e,{flagsOnly:t=!0}={}){let n=W(e),r=[],i=G(n,ve);if(i===-1)return r;for(let e=i;e<n.length;e++){let i=n[e];if(U.test(i.trim()))break;let a=i.match(xe);if(!a)continue;let[,o,s,c]=a,l=i.includes(`<`)||i.includes(`[`);t&&l||r.push({short:o||void 0,long:s,desc:c.trim()})}return r}function De(e,t){let n=m(`yarn ${t} --help`);if(!n)return;let r=Ee(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=Ce[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function Oe(e){try{let t=await Te();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);f(t,n,`yarn`),d(t,n,`yarn`,De)}}catch{}}const ke=/^Commands:\s*$/i,K=/^Flags:\s*$/i,Ae=/^(Examples|Full documentation|Learn more)/i,q=/^[a-z][a-z0-9-]*$/,je=/^\s*(?:-([a-zA-Z]),?\s*)?--([a-z][a-z0-9-]*)(?:=<[^>]+>)?\s+(.+)$/,Me=/^ ([a-z][a-z0-9-]*)\s+(.+)$/,Ne=/^\s{12,}([a-z][a-z0-9-]*)\s+(.+)$/,Pe=/^\s+[a-z]/,Fe=/\s{2,}/,J=/^[A-Z]/,Ie=/\r?\n/;function Y(e){return v(e).split(Ie)}function X(e,t){for(let n=0;n<e.length;n++)if(t.test(e[n].trim()))return n+1;return-1}const Le={...u,backend(e){e(`clonefile`,` `),e(`hardlink`,` `),e(`symlink`,` `),e(`copyfile`,` `)},linker(e){e(`isolated`,` `),e(`hoisted`,` `)},omit(e){e(`dev`,` `),e(`optional`,` `),e(`peer`,` `)},shell(e){e(`bun`,` `),e(`system`,` `)},"unhandled-rejections"(e){e(`strict`,` `),e(`throw`,` `),e(`warn`,` `),e(`none`,` `),e(`warn-with-error-code`,` `)}};function Re(e){let t=Y(e),n=X(t,ke);if(n===-1)return{};let r={};for(let e=n;e<t.length;e++){let n=t[e];if(K.test(n.trim())||n.trim()===``&&e+1<t.length&&!t[e+1].match(Pe))break;if(!n.trim())continue;let i=n.match(Me);if(i){let[,e,t]=i;if(q.test(e)){let n=t.split(Fe),i=n[n.length-1];if(i&&J.test(i))r[e]=i.trim();else if(n.length>1){for(let t of n)if(J.test(t)){r[e]=t.trim();break}}}}let a=n.match(Ne);if(a){let[,e,t]=a;q.test(e)&&(r[e]=t.trim())}}return r}async function ze(){let e=await p(`bun --help`);return e?Re(e):{}}function Z(e,{flagsOnly:t=!0}={}){let n=Y(e),r=[],i=X(n,K);if(i===-1)return r;for(let e=i;e<n.length;e++){let i=n[e];if(Ae.test(i.trim()))break;let a=i.match(je);if(!a)continue;let[,o,s,c]=a,l=i.includes(`=<`);t&&l||r.push({short:o||void 0,long:s,desc:c.trim()})}return r}function Be(e,t){let n=m(`bun ${t} --help`);if(!n)return;let r=Z(n,{flagsOnly:!1});for(let{long:t,short:n,desc:i}of r){if(e.optionsRaw?.get?.(t))continue;let r=Le[t];r?e.option(t,i,r,n):e.option(t,i,n)}}async function Ve(e){try{let t=await ze();for(let[n,r]of Object.entries(t)){let t=e.command(n,r);f(t,n,`bun`),d(t,n,`bun`,Be)}}catch{}}async function He(e,t){switch(e){case`pnpm`:await M(t);break;case`npm`:await _e(t);break;case`yarn`:await Oe(t);break;case`bun`:await Ve(t);break;default:break}}function Ue(...e){process.env.DEBUG&&console.error(`[DEBUG]`,...e)}async function We(e,t){try{if(o(`${e} complete --`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3}).trim())return!0}catch{}try{return!!o(`${t} ${e} complete --`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3}).trim()}catch{return!1}}async function Ge(e,t,n){let r=n.map(e=>e.includes(` `)?`"${e}"`:e);try{let t=o(`${e} complete -- ${r.join(` `)}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3});if(t.trim())return t.trim().split(`
4
4
  `).filter(Boolean)}catch{}try{return o(`${t} ${e} complete -- ${r.join(` `)}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`],timeout:1e3}).trim().split(`
5
- `).filter(Boolean)}catch{return[]}}var Ke=class extends e{packageManager;constructor(e){super(),this.packageManager=e}stripPackageManagerCommands(e){return e.length===0?e:[`exec`,`x`,`run`,`dlx`].includes(e[0])?e.slice(1):e}async parse(e){let t=this.stripPackageManagerCommands(e);if(t.length>=1&&t[0].trim()!==``){let e=t[0];if(![...this.commands.keys()].includes(e)&&await We(e,this.packageManager)){let n=t.slice(1),r=await Ge(e,this.packageManager,n);if(r.length>0){Ue(`Returning ${r.length} completions for ${e}`);for(let e of r)if(!e.startsWith(`:`))if(e.includes(` `)){let[t,n]=e.split(` `);console.log(`${t}\t${n}`)}else console.log(e);console.log(`:4`);return}}}return super.parse(e)}};const Q=[`npm`,`pnpm`,`yarn`,`bun`],$=[`zsh`,`bash`,`fish`,`powershell`];async function qe(){let e=process.argv.slice(2);if(e.length>=2&&e[1]===`complete`){let t=e[0];Q.includes(t)||(console.error(`Error: Unsupported package manager "${t}"`),console.error(`Supported package managers: ${Q.join(`, `)}`),process.exit(1));let n=process.argv.indexOf(`--`);if(n!==-1){let e=new Ke(t);await He(t,e);let r=process.argv.slice(n+1);await e.parse(r),process.exit(0)}else console.error(`Error: Expected '--' followed by command to complete`),process.exit(1)}if(e.length===2){let[t,n]=e;Q.includes(t)||(console.error(`Error: Unsupported package manager "${t}"`),console.error(`Supported package managers: ${Q.join(`, `)}`),process.exit(1)),$.includes(n)||(console.error(`Error: Unsupported shell "${n}"`),console.error(`Supported shells: ${$.join(`, `)}`),process.exit(1)),Je(t,n),process.exit(0)}console.error(`Usage: tab <packageManager> <shell>`),console.error(` tab <packageManager> complete -- <args>`),process.exit(1)}function Je(e,n){t(n,e,process.env.npm_config_user_agent?`npx --yes @bomb.sh/tab ${e}`:`node ${process.argv[1]} ${e}`)}qe().catch(console.error);export{};
5
+ `).filter(Boolean)}catch{return[]}}var Ke=class extends e{packageManager;constructor(e){super(),this.packageManager=e}stripPackageManagerCommands(e){return e.length===0?e:[`exec`,`x`,`run`,`dlx`].includes(e[0])?e.slice(1):e}async parse(e){let t=this.stripPackageManagerCommands(e);if(t.length>=1&&t[0].trim()!==``){let e=t[0];if(![...this.commands.keys()].includes(e)&&await We(e,this.packageManager)){let n=t.slice(1),r=await Ge(e,this.packageManager,n);if(r.length>0){Ue(`Returning ${r.length} completions for ${e}`);for(let e of r)if(!e.startsWith(`:`))if(e.includes(` `)){let[t,n]=e.split(` `);console.log(`${t}\t${n}`)}else console.log(e);console.log(`:4`);return}}}return super.parse(e)}};const Q=[`npm`,`pnpm`,`yarn`,`bun`],$=[`zsh`,`bash`,`fish`,`powershell`];async function qe(){let e=process.argv.slice(2);if(e.length>=2&&e[1]===`complete`){let t=e[0];Q.includes(t)||(console.error(`Error: Unsupported package manager "${t}"`),console.error(`Supported package managers: ${Q.join(`, `)}`),process.exit(1));let n=process.argv.indexOf(`--`);if(n!==-1){let e=new Ke(t);await He(t,e);let r=process.argv.slice(n+1);await e.parse(r),process.exit(0)}else console.error(`Error: Expected '--' followed by command to complete`),process.exit(1)}if(e.length===2){let[t,n]=e;Q.includes(t)||(console.error(`Error: Unsupported package manager "${t}"`),console.error(`Supported package managers: ${Q.join(`, `)}`),process.exit(1)),$.includes(n)||(console.error(`Error: Unsupported shell "${n}"`),console.error(`Supported shells: ${$.join(`, `)}`),process.exit(1)),Je(t,n),process.exit(0)}console.error(`Usage: tab <packageManager> <shell>`),console.error(` tab <packageManager> complete -- <args>`),process.exit(1)}function Je(e,n){t(n,e,process.argv[1].endsWith(`dist/bin/cli.js`)?`node ${process.argv[1]} ${e}`:`tab ${e}`)}qe().catch(console.error);export{};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bomb.sh/tab",
3
- "version": "0.0.8",
3
+ "version": "0.0.9",
4
4
  "main": "./dist/t.js",
5
5
  "types": "./dist/t.d.ts",
6
6
  "type": "module",