@tochii/vscode-file-recovery
Version:
Recover files and full project structures in bulk from VS Code's local history
18 lines (14 loc) • 30.3 kB
JavaScript
import yr from"lodash";import P from"node:fs";import{basename as hr,dirname as tt,join as X,relative as rt}from"node:path";import{DateTime as B}from"luxon";var it=n=>n.argv.slice(3),lt=(n,e=[])=>e.concat(n.split(",").map(t=>t.trim()).filter(Boolean)),te=class{};te.getRemainingArgs=it,te.parseArray=lt;import ct from"lodash";var ut=n=>Array.isArray(n)?n:[n],re=class{};re.toArray=ut,re.uniqueArr=mt;function mt(n){return ct.uniqBy(n,e=>e)}import Se from"javascript-time-ago";import ft from"javascript-time-ago/locale/en";import he from"dateformat";var v=class v{};v.initialize=()=>{try{if(v.timeAgo)return;Se.addDefaultLocale(ft),v.timeAgo=new Se("en-US")}catch{}},v.recently=e=>v.timeAgo.format(new Date(e)),v.dateAndTime=(e,t=!0,r=!1)=>{let o="";return t?o=v.dateAndTimeCustom(e,", ",!0,"dddd","mmmm dS","yyyy",r?"h:MM:ss TT":"h:MM TT"):o=v.dateAndTimeCustom(e,", ",!0,"dddd","mmmm dS","yyyy"),o},v.dateAndTimeCustom=(e,t,r=!0,...o)=>he(e,o.map(s=>r?v.ensureZero(s):s).join(t)),v.ensureZero=e=>e.length===1?`0${e}`:e,v.time=(e,t=!1,r=!0)=>{let o="";return t?o=`${v.dateAndTimeCustom(e,":",!r,"h","MM","ss")}${r?he(e," TT"):""}`:o=`${v.dateAndTimeCustom(e,":",!r,"h","MM")}${r?he(e," TT"):""}`,o},v.getDuration=(e,t,r="milliseconds")=>{let o=new Date(e).getTime()-new Date(t).getTime();return Re(r,o)},v.getDurationFromNow=(e,t="milliseconds")=>{let r=new Date(e).getTime()-Date.now();return Re(t,r)};var be=v;function Re(n,e){let t=e;switch(n){case"milliseconds":return t;case"seconds":return t/1e3;case"minutes":return t/1e3*60;case"hours":return t/1e3*60*60;case"days":return t/1e3*60*60*24;case"weeks":return t/1e3*60*60*24*7;case"months":return t/1e3*60*60*24*30;case"years":return t/1e3*60*60*24*365}}var G=class G{static isReversedMappedEnumKey(e){try{return!isNaN(Number(e))}catch{return!1}}};G.getKeys=e=>{let t=[];for(let[r]of Object.entries(e))G.isReversedMappedEnumKey(r)||t.push(r);return t},G.getKeyFromValue=(e,t)=>{for(let[r,o]of Object.entries(e))if(!G.isReversedMappedEnumKey(r)&&o===t)return r},G.getKeysFromValues=(e,t)=>{let r=[];for(let o of t)for(let[s,l]of Object.entries(e))G.isReversedMappedEnumKey(s)||l===o&&r.push(s);return r};var xe=G;var Ae=(n,e)=>{if(typeof process>"u"&&typeof import.meta?.env>"u")throw new Error("Your environment doesn't support process.env or import.meta.env.");let t;if(typeof process>"u"?t=import.meta.env[n]:t=process.env[n]||import.meta?.env?.[n],e&&t===void 0)throw new Error(`Environment variable ${n} not found.`);return t},ue=Ae("NODE_ENV"),gt=ue==="development",dt=ue==="production",pt=ue==="staging",Le=typeof window>"u",yt=!Le,Z=class{};Z.MODE=ue,Z.DEV=gt,Z.PROD=dt,Z.STAGING=pt,Z.SERVER_CONTEXT=Le,Z.BROWSER_CONTEXT=yt,Z.get=Ae;import De from"deepmerge";var N=class N{};N.isObject=(e,t)=>!(!t&&Array.isArray(e)||typeof e!="object"),N.hasKeys=(e,t,...r)=>{if(typeof e!="object")return!1;let o=[];return[t,...r].forEach(s=>o.push(s in e)),!o.includes(!1)},N.hasKeysAny=(e,t,...r)=>{if(typeof e!="object")return!1;let o=[],s=[];return[...t].forEach(l=>o.push(l in e)),[...r].forEach(l=>s.push(l in e)),o.includes(!1)?!1:[...o,...s].some(l=>l===!0)},N.isEmpty=e=>Object.keys(e).length===0,N.isIterable=e=>e==null?!1:typeof e[Symbol.iterator]=="function",N.merge=(e,t,r)=>De(e,t,{arrayMerge:(o,s,l)=>{let i=o.slice();return s.forEach((c,a)=>{typeof i[a]>"u"?i[a]=l?.cloneUnlessOtherwiseSpecified(c,l):l?.isMergeableObject(c)?i[a]=De(o[a],c,l):o.indexOf(c)===-1&&i.push(c)}),i},customMerge:o=>(s,l)=>(console.log(o,s,l),l==null&&s!=null?s:l),...r}),N.mergeMany=(e,t,r,...o)=>{let s=N.merge(t,r,e);for(let l of o)s=N.merge(s,l,e);return s};var ne=N;import U from"node:path";import{fileURLToPath as ht}from"node:url";var O=class{};O.getDirnameFromCurrentFile=me,O.getProcessDirname=Ee,O.getRelativePathFromCurrentFileDirname=bt,O.getRelativePathFromProcessDirname=xt,O.resolveFromDirname=Ct,O.resolveFromProcessDirname=kt,O.getRelativePath=Tt,O.resolvePath=oe,O.joinPaths=Ce;function me(n,...e){return Ce(oe(U.dirname(ht(n))),...e)}function Ee(...n){return Ce(oe(process.cwd()),...n)}function bt(n,e){return U.relative(me(n),e)}function xt(n,e){return U.relative(me(n),e)}function Ct(n,...e){return oe(me(n),...e)}function kt(...n){return oe(Ee(),...n)}function Tt(n,e){return U.relative(n,e)}function oe(...n){return U.resolve(...n)}function Ce(...n){return U.join(...n)}var C=class C{};C.filename=/(?:[^\/\\]+?\.[a-zA-Z0-9*?[\]{}]{1,10})(?!\/)$/,C.filenameStrict=/^[^\/\\]+?\.(?:[a-zA-Z0-9]+|\{[a-zA-Z0-9,]+\})(?!\/)$/,C.email=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,C.uriAny=/^(?:https?:\/\/|file:\/\/\/|\/|\.\/|\.\.\/|[a-zA-Z]:\\|[a-zA-Z]+:\/\/)?(?:.*[\\/*?[\]{}])/,C.uri=/^(https?:\/\/|file:\/\/\/|\/|\.\/|\.\.\/|[a-zA-Z]:\\|[a-zA-Z]+:\/\/).*[\\/*?[\]{}]?$/,C.websiteUri=/^https?:\/\/.*[\\/*?[\]{}]?$/,C.fileUri=/^(file:\/\/\/|\/|\.\/|\.\.\/|[a-zA-Z]:\\|[a-zA-Z]+:\/\/).*?[\\/*?[\]{}]?$/,C.pathUri=/^(\/|\.\/|\.\.\/|[a-zA-Z]:\\|[a-zA-Z]+:\/\/).*?[\\/*?[\]{}]?$/,C.relativeUri=/^(\.\/|\.\.\/).*?[\\/*?[\]{}]?$/,C.absoluteUri=/^(https?:\/\/|\/|\.\/|\.\.\/|[a-zA-Z]:\\|[a-zA-Z]+:\/\/).*?[\\/*?[\]{}]?$/,C.domain=/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/,C.specialChars=/[^a-zA-Z0-9]/,C.specialCharsWhitespace=/[^a-zA-Z0-9\s]/,C.numbers=/[0-9]/,C.letters=/[a-zA-Z]/,C.alphanumeric=/[a-zA-Z0-9]/,C.alphanumericUnderscore=/[a-zA-Z0-9_]/,C.alphanumericDashes=/[a-zA-Z0-9-]/,C.alphanumericPlus=/[a-zA-Z0-9+]/,C.glob=/[*?{}\[\]!]/,C.allExps=(...e)=>Object.keys(C).filter(r=>!e.includes(r)).map(r=>C[r]);var H=C,E=class E extends H{static matchLoop(e,t){let r=e.flags.includes("g"),o=[];for(let s of t.matchAll(r?e:this.ensureGlobal(e)))o.push({char:s[0],index:s.index});return o}static compare(e,...t){let r=[],o=[];return{hasMatch:t.some((l,i)=>{let c=l.source===e.source&&l.flags===e.flags;return c&&(r.push(l),o.push(i)),c}),matches:r,matchesIndex:o}}static compareExps(e,...t){let r=[],o=[];return{hasMatch:t.some((l,i)=>{let c=H[l],a=c.source===e.source&&c.flags===e.flags;return a&&(r.push(c),o.push(i)),a}),matches:r,matchesIndex:o}}static toArr(e,...t){return[e,...t]}static toArrExp(e,...t){return[e,...t].map(o=>H[o])}static test(e,t){return e.test(t)}static tests(e,t){return e.map(r=>r.test(t))}static testValues(e,t){return t.map(r=>e.test(r))}static testExp(e,t){return H[e].test(t)}static testExps(e,t){return e.map(r=>H[r].test(t))}static testExpValues(e,t){let r=H[e];return t.map(o=>r.test(o))}};E.ensureGlobal=e=>new RegExp(e.source,[...new Set(e.flags+"g")].join("")),E.containsAny=(e,t,...r)=>E.getMatchAnyRegex(t,...r).test(e),E.getMatchAnyRegex=(e,...t)=>{let r=[e,...t].map(o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"));return new RegExp(r.join("|"))},E.extract=(e,t)=>E.matchLoop(e,t),E.extractExp=(e,t)=>{let r=H[e];return E.matchLoop(r,t)},E.extractAll=(e,t)=>{let r=[];return e.forEach(o=>{let s=E.matchLoop(o,t);r.push(...s)}),r},E.extractAllExps=(e,t)=>{let r=[];return e.forEach(o=>{let s=H[o],l=E.matchLoop(s,t);r.push(...l)}),r};var fe=E,q=fe;import Fe from"node:path";import It from"get-urls";import Me from"text-field-edit";import{decode as wt}from"html-entities";import vt from"slugify";import St from"is-glob";var Rt="\u2022";var At=Me.insert,Lt=Me.getSelection,T=class{};T.passwordSymbol=Rt,T.isGlob=St,T.insertText=At,T.inputTextSelection=Lt,T.getFullPath=Dt,T.truncateString=Oe,T.extractUrls=Et,T.removeSpecialCharacters=$e,T.removeSpecialCharactersAll=Ft,T.hasSpecialCharacters=Mt,T.hasSpecialCharactersAny=Ot,T.toHtmlId=$t,T.ensureSlashStart=Pt,T.ensureSlashEnd=Nt,T.generateRandomString=jt,T.unescapeHtmlSafely=zt,T.isValidName=Zt,T.randomString=Pe,T.randomNumber=Ne,T.slugifyString=Ht,T.includes=(e,t,...r)=>[t,...r].some(o=>e.includes(o));function Dt(n,e){let t=Fe.resolve(e||process.cwd(),n||".");return n&&Fe.isAbsolute(n||".")?n:t}function Oe(n,e=22){return n.length>e?`${n.substring(0,e)}...`:n}function Et(n,e){return It(n,{exclude:e})}function $e(n){return n.replace(/[^a-zA-Z0-9._ -]/g,"")}function Ft(n){return n.replace(/[^a-zA-Z0-9 ]/g,"")}function Mt(n){return/[^a-zA-Z0-9._ -]/g.test(n)}function Ot(n){return/[^a-zA-Z0-9 ]/g.test(n)}function $t(n){return $e(n.replaceAll(" ","-").toLowerCase())}function Pt(n){return n.startsWith("/")?n:`/${n}`}function Nt(n){return n.endsWith("/")?n:`${n}/`}function jt(n=5){let e="",t="abcdefghijklmnopqrstuvwxyz";for(t+=t.toUpperCase(),t+="0123456789";n--;)e+=t[Math.random()*t.length|0];return e}function zt(n){return wt(n,{level:"html5"})}function Zt(n){return/^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžæÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$/u.test(n)}function Pe(n){return Math.random().toString(36).substring(2,n)}function Ne(n){let e=new Uint8Array(n);return crypto.getRandomValues(e),Array.from(e,t=>t%10).join("")}function Ht(n,e){let t={replacement:"-",lower:!0,strict:!0,trim:!0,randomIdType:"number",randomIdPosition:"suffix",...e};function r(s){let l="",i=()=>{s&&(l+=["-","_"].includes(t.replacement)?t.replacement:"-")};if(t.generateRandomId||!s){let c=t.randomIdType;t.randomIdPosition==="suffix"&&i(),l+=c==="number"?Ne(t.randomIdLength??15):Pe(t.randomIdLength??15),t.randomIdPosition==="prefix"&&i()}return l}let o=t.prefix??"";return n&&(o+=vt(n,t)),t?.truncateLength&&(o=Oe(o,t.truncateLength)),t.randomIdPosition==="prefix"?o=r(o)+o:o+=r(o),o}import lr from"path";import{Table as cr}from"console-table-printer";var je=(a=>(a[a.silent=100]="silent",a[a.trace=1]="trace",a[a.debug=2]="debug",a[a.info=3]="info",a[a.important=4]="important",a[a.success=5]="success",a[a.error=6]="error",a[a.warn=7]="warn",a[a.fatal=8]="fatal",a))(je||{});var Y=n=>je[n];var Vt=(n,...e)=>{if(n.mode!=null&&n.skipModes.includes(n.mode))return n;for(let t=0;t<e.length;t++){let r=qt(n,e,t);if(r)switch(r.level){case"trace":case"info":case"error":case"warn":case"debug":console[r.level](r.message);break;case"custom":case"important":case"success":console.info(r.message);break;case"fatal":console.error(r.message);break}}return n},ze=Vt;function qt(n,e,t){let r=e[t],[o,s]=r;switch(o){case"default":return Wt(n,s,t);case"custom":return Bt(n,s,t);case"table":return Jt(n,s,t)}}function Wt(n,e,t){let[r,o,...s]=e,l=[o,...s||[]];if(r==="silent")return;if(!l.length||l.every(a=>a==null||a==="")){console.info("");return}let i=Y(r);return Y(n.level==="custom"?r:n.level)>i?void 0:{message:n.transport.format({level:r,comboIndex:t},...l),level:r,comboIndex:t}}function Bt(n,e,t){let[r,o,s,l,...i]=e,c=[l,...i||[]];if(!r)return;if(!c.length||c.every(y=>y==null||y==="")){console.info("");return}let a=Y(r);return Y(n.level==="custom"?r:n.level)>a?void 0:{message:n.transport.format({level:a,color:o,symbol:s,comboIndex:t},...c),level:"custom",comboIndex:t}}function Jt(n,e,t){let[r,o,s]=e,l=(Array.isArray(o)?o:[o])||[];if(r==="silent")return;if(!l.length)throw new Error("Table must have at least one table item.");let i=l.map(u=>u.render()),c=Y(r);if(Y(n.level==="custom"?r:n.level)>c)return;let a="";return s?.suffix&&`${s?.prefix}`,a+=`
${i.join(`
`)}
`,s?.suffix&&`${s?.suffix}`,{message:a,level:r,comboIndex:t}}import p from"chalk";import nr from"fast-safe-stringify";import{colorize as or}from"json-colorizer";import{DateTime as Ve}from"luxon";import sr from"is-unicode-supported";import ie from"chalk";import tr from"error-stack-parser";import W from"chalk";import A from"chalk";var ke=A.rgb(202,10,51),Gt=A.bgRgb(202,10,51),Ze={silent:A.gray,custom:A.white,trace:A.gray,debug:A.rgb(175,175,175),info:A.white,important:A.rgb(194,40,155),success:A.green,warn:A.rgb(221,181,4),error:ke,fatal:ke},Kt={...Ze,warn:A.yellow},D={any:[175,175,175],anyDimmed:[130,130,130],anyDimmed2:[160,160,160],anyDimmed3:[145,145,145],glob:[134,86,128],word:[97,165,147]},Xt=A.rgb(D.any[0],D.any[1],D.any[2]),Yt=A.rgb(D.anyDimmed[0],D.anyDimmed[1],D.anyDimmed[2]),Qt=A.rgb(D.anyDimmed2[0],D.anyDimmed2[1],D.anyDimmed2[2]),Ut=A.rgb(D.glob[0],D.glob[1],D.glob[2]),_t=A.rgb(D.word[0],D.word[1],D.word[2]),$=class{};$.errorColor=ke,$.errorColorBg=Gt,$.levelColors=Ze,$.levelSymbolColors=Kt,$.regexColor=Xt,$.regexColorAny=Yt,$.regexColorAny2=Qt,$.regexColorGlob=Ut,$.regexColorWord=_t;var g=$;function se(n,e,t){let r="",o=q.testExp("uriAny",n);for(let s of n)switch(s){case"*":r+=g.regexColorGlob(s);break;case" ":case".":case"/":case"\\":r+=(t??g.regexColorAny2)(s);break;default:r+=o?(e??g.regexColorAny)(s):(e??W.white)(s);break}return r}function ae(n,e,t){let r="",o="",s=q.extractExp("specialCharsWhitespace",n),l=q.extractExp("alphanumeric",n),i=!1,c=l[0].index-1;for(let u of l)c===u.index-1&&(o+=u.char),c=u.index;o.length===l.length&&(i=!0);let a;if(i){let u=o;try{u=JSON.parse(o)}catch{}switch(typeof u){case"string":a=e??W.white;break;case"number":case"bigint":a=W.yellow;break;case"boolean":a=g.regexColorAny2;break;case"undefined":a=g.regexColorAny;break;case"symbol":case"function":a=W.yellowBright;break;default:a=e??W.white;break}}for(let u=0;u<n.length;u++){let y=n[u],I=y;try{I=JSON.parse(y)}catch{}let w=s.find(k=>k.index===u);if(!w&&a){r+=a(y);continue}switch(typeof I){case"string":if(w){r+=(t??g.regexColorAny)(y);break}if(typeof I=="number"){r+=W.yellow(y);break}r+=(e??W.white)(y);break;case"number":r+=W.yellow(y);break;default:r+=(e??W.white)(y);break}}return r}var V=class V{static isAnsi(e){return this.regexStandard.test(e||"")||this.regexRgb.test(e||"")}static isAnsiStandard(e){return this.regexStandard.test(e||"")}static isAnsiRgb(e){return this.regexRgb.test(e||"")}static ansiStandardToHex(e){try{if(!e.match(this.regexStandard))return null;let[,r]=JSON.stringify(e).replace(/\"/g,"").replace(/\m/g,"").split("[");if(!r)return null;let o=parseInt(r,10);return this.ansiStandardHexMap[o]||null}catch{return null}}static ansiStandardToRgb(e){try{let t=this.ansiStandardToHex(e);return t?this.dullerRgb(er(t)):null}catch{return null}}static ansiRgbToHexOrRgb(e,t=!0){try{if(!e.match(this.regexRgb))return null;let[,,o,s,l]=JSON.stringify(e).replace(/\"/g,"").replace(/\m/g,"").split(";");if(!o||!s||!l)return null;let i=parseInt(o,10),c=parseInt(s,10),a=parseInt(l,10);return t?`#${i.toString(16).padStart(2,"0")}${c.toString(16).padStart(2,"0")}${a.toString(16).padStart(2,"0")}`:{r:i,g:c,b:a}}catch{return null}}static ansiRgbToRgb(e){try{let t=this.ansiRgbToHexOrRgb(e,!1);return t?this.dullerRgb(t):null}catch{return null}}static ansiToRgb(e){return this.isAnsiStandard(e)?this.ansiStandardToRgb(e):this.isAnsiRgb(e)?this.ansiRgbToRgb(e):null}};V.regexStandard=/\u001b\[[0-9;]*m/g,V.regexRgb=/\x1b\[38;2;(\d{1,3});(\d{1,3});(\d{1,3})m/g,V.duller=e=>165/255*e,V.dullerRgb=e=>({r:V.duller(e.r),g:V.duller(e.g),b:V.duller(e.b)}),V.ansiStandardHexMap={30:"#000000",31:"#ff0000",32:"#00ff00",33:"#ffff00",34:"#0000ff",35:"#ff00ff",36:"#00ffff",37:"#ffffff",90:"#808080",91:"#ff5555",92:"#55ff55",93:"#ffff55",94:"#5555ff",95:"#ff55ff",96:"#55ffff",97:"#ffffff"};var ge=V;function er(n){n=n.replace("#",""),n.length===3&&(n=n.split("").map(t=>t+t).join(""));let e=parseInt(n,16);return{r:e>>16&255,g:e>>8&255,b:e&255}}var Te=class{formatError(e){let t=e.fileName?.replace(/\\/g,"/")||"anonymous",r=t.split("/"),o=t.startsWith("node")?r.splice(0,1):void 0,s=r.pop();t=[...o?[ie.rgb(68,107,61)(o)]:[],...r?.length?[se(r.join("/"),ie.red,ie.red)]:[],...s?[g.regexColorAny2(s)]:[]].join(g.errorColor("/"));let l=e.functionName||"(anonymous)";return[ie.gray(` ${l}`),[t,g.regexColorAny(`:${e.lineNumber}:${e.columnNumber}`)].join("")].join(" ")}render(e){if(!e.stack)return"";e?.message||(e.message="Unspecified error");let t=[],o=tr.parse(e).map(s=>this.formatError(s)).join(`
`);return o?t.push(o):t.push(ie.gray("No stack trace available")),t.join(`
`)}},He=Te;import rr from"is-unicode-supported";var K=rr(),j=class{};j.standard=K?"\xB7":"-",j.debug=K?"\xB7":"",j.info=K?"\xB7":"",j.important=K?"\u2726":"!!",j.success=K?"\u2714":"++",j.warn=K?"\u26A0":"(warn)",j.error=K?"\u2716":"(error)",j.fatal=K?"\u2716":"(fatal)";var le=j;var Ie=sr();var Be=n=>{let e=new He,t=n?.timestampFormat||"HH:mm:ss.SSS",r=n?.showTimestamp??!1,o=i=>p.rgb(i[0],i[1],i[2]),s=(i,...c)=>{let a=i.level,u=n?.tag?`(${n.tag})`:"",y=p[n?.tagColor||"gray"],I=i.comboIndex>0,w=n?.prefix||n.parentDirname,k=p[n?.prefixColor||"cyan"],R=r?[p.gray(`[${Ve.now().toFormat(t)}]`)]:[],F=i.color?o(i.color):void 0,L=Ie?i?.symbol?.symbol:i?.symbol?.fallback,m=i.symbol?.symbol!=null?L:le[a],h=F||g.levelSymbolColors[a],f=m||"",x=["important","success","warn","error","fatal"].includes(a),b=qe(a,F,k,...c);return{level:a,tag:u,tagColor:y,noPrefix:I,prefix:w,prefixColor:k,prefixes:R,customColor:F,symbolColor:h,symbol:f,critical:x,messages:b}},l=(i,...c)=>{let a=i.level,u=n?.tag?`(${n.tag})`:"",y=p[n?.tagColor||"gray"],I=i.comboIndex>0,w=n?.prefix||n.parentDirname,k=p[n?.prefixColor||"cyan"],R=r?[p.gray(`[${Ve.now().toFormat(t)}]`)]:[],F=i.color?o(i.color):void 0,L=Ie?i?.symbol?.symbol:i?.symbol?.fallback,m=i.symbol?.symbol!=null?L:le.standard,h=F||g.levelSymbolColors.custom,f=m||"",x=!1,b=qe("custom",F,k,...c);return{level:"custom",tag:u,tagColor:y,noPrefix:I,prefix:w,prefixColor:k,prefixes:R,customColor:F,symbolColor:h,symbol:f,critical:x,messages:b}};return{format:(i,...c)=>{let{level:a,tag:u,tagColor:y,noPrefix:I,prefix:w,prefixColor:k,prefixes:R,customColor:F,symbolColor:L,symbol:m,critical:h,messages:f}=typeof i.level=="string"?s(i,...c):l(i,...c);!I&&w&&R.push(k(w)),!I&&u&&R.push(y(u)),h&&R.push(p.gray(le.standard)),(!I&&m||i?.symbol?.symbol||i?.symbol?.fallback)&&(R.push(L(m)),Ie&&h&&R.push(""));let b=f==null?p.gray(JSON.stringify(f)):[...f.map(({msg:S,error:M})=>{let J=M?e.render(M):"";return`${S}${J?`
${J}`:""}`})].join(" ");return!h&&b&&!b.startsWith(`
`)&&!m&&(w||u)&&R.push(p.gray(le.standard)),`${R.join(" ")}${R.length?" ":""}${b}`}}};function qe(n,e,t,...r){if(!r.length)return;let o=n==="error"||n==="fatal",s=[],l=r.sort((i,c)=>{let a=typeof i=="object"&&i!==null;return a===(typeof c=="object"&&c!==null)?0:a?1:-1});for(let i of l)if(typeof i=="string")s.push({msg:o?g.errorColorBg(i):Je(n,e,t,i,0),error:void 0});else if(Ge(i))s.push({msg:g.errorColorBg(i.message),error:i});else if(o)s.push({msg:g.errorColorBg(i),error:void 0});else if(typeof i=="object"){let c=i;try{c=JSON.parse(nr(c))}catch{}s.push({msg:Xe(n,e,t,o,c,0),error:void 0})}else{let c=Ke(n,e,t,o,i,i,0);s.push({msg:g.regexColorAny(c),error:void 0})}return s}function ar(n,e,t,r,o,s){return typeof r=="number"?s?p.yellow(r):g.regexColorAny(r):Je(n,e,t,r,o,s)}function Je(n,e,t,r,o,s){let l=r.split(" ");return l.map((i,c)=>{try{let a=i;try{a=JSON.parse(i)}catch{}let u=Ke(n,e,t,Ge(a),r,a,o,!0,s),y=c===0,I=c===l.length-1,w=l.length===1;return typeof a=="object"?w?u:`${y?"":`
`}${u}${I?"":`
`}`:u}catch{return g.regexColorWord(i)}}).join(" ")}function Ge(n){return!n||typeof n!="object"?!1:!!(n?.stack&&n?.message||n instanceof Error)}function Ke(n,e,t,r,o,s,l,i,c){return ir(n,e,t,r,o,s,l,c,{...i?{string:e??g.levelColors[n],boolean:g.regexColorAny2}:{},regex:[{color:g.regexColor,test:q.toArrExp("uri","fileUri","websiteUri","relativeUri","absoluteUri","email","filename")}]})}function ir(n,e,t,r,o,s,l,i,c){let a=typeof s;if(a==="string"&&c?.regex?.length)for(let R of c.regex)for(let F of R.test){let L=We(s),m=L.clean;if(i&&s===m&&(L.quoteFirst='"',L.quoteLast='"'),new RegExp(F).test(m)){if(q.testExp("filenameStrict",m))return g.regexColorWord(s);let h=L.quoteFirst?g.regexColorAny(L.quoteFirst):"",f=L.quoteLast?g.regexColorAny(L.quoteLast):"";if(q.testExp("filename",m)){let x=m.includes("/")?"/":"\\",b=m.split(x),S=b.pop();return h+[se(b.join(x)),g.regexColorAny2(S)].join(g.regexColorAny(x))+f}return h+se(m)+f}}let u=We(s),y=u.clean,I="",w="",k=p.white(s);switch(a){case"string":if(i&&o!=null&&!o?.includes(" ")&&!s.includes('"')&&(u.quoteFirst='"',u.quoteLast='"'),I=u.quoteFirst?g.regexColorAny2(u.quoteFirst):"",w=u.quoteLast?g.regexColorAny2(u.quoteLast):"",c?.string)return[I,ae(y,c.string),w].join("");k=r?g.errorColor([u.quoteFirst,s,u.quoteLast].join("")):[I,ae(y,e),w].join("");break;case"boolean":if(!i){if(c?.boolean)return[I,ae(JSON.stringify(s),c.boolean),w].join("");k=ae(JSON.stringify(s),g.regexColorAny2);break}k=s?p.rgb(66,177,66)(s):p.rgb(148,37,37)(s);break;case"undefined":if(c?.undefined)return c.undefined(s);k=c?.undefined?.(s)??p.gray(s);break;case"object":k=Xe(n,e,t,r,k,l+1);break;case"number":case"bigint":if(c?.number)return c.number(s);k=p.yellow(s);break;case"symbol":case"function":if(c?.function)return c.function(s);k=p.yellowBright(s);break}return k}function Xe(n,e,t,r,o,s){if(s>100)return"[Circular Object]";let l=t,i=t("`").split("`")[0],c=ge.ansiToRgb(i);if(c){let a={r:Math.floor(c.r),g:Math.floor(c.g),b:Math.floor(c.b)};l=p.rgb(a.r,a.g,a.b)}return or(o,{indent:4,colors:{Brace:p.gray,Bracket:p.gray,Colon:p.gray,Comma:p.gray,StringKey:r?g.errorColor:a=>l(`${a}`),StringLiteral:a=>ar(n,e,t,a,s,!0),NumberLiteral:p.yellow,BooleanLiteral:a=>a==="true"?p.rgb(66,177,66)(a):p.rgb(148,37,37)(a),NullLiteral:p.gray,Whitespace:p.gray}})}function We(n){let e={value:"",clean:"",quoteFirst:"",quoteLast:""};if(!n||typeof n!="string")return e;let t=`${n}`,r="",o="";return n.startsWith('"')?r='"':n.startsWith("'")?r="'":n.startsWith("`")&&(r="`"),n.endsWith('"')?o='"':n.endsWith("'")?o="'":n.endsWith("`")&&(o="`"),r&&(t=t.slice(1)),o&&(t=t.slice(0,-1)),{value:n,clean:t,quoteFirst:r,quoteLast:o}}var d=class d{constructor(e){this.level="trace";this._getComboItem=(e,t)=>[t,e];this.custom=(e,t,r,o,...s)=>this.combo(this.getComboItemCustom(e,t,r,o,...s));this.table=(e,t)=>this.combo(this.getComboItemTable("info",e,t));this.debug=(e,...t)=>this.combo(this.getComboItem("debug",e,...t));this.info=(e,...t)=>this.combo(this.getComboItem("info",e,...t));this.important=(e,...t)=>this.combo(this.getComboItem("important",e,...t));this.success=(e,...t)=>this.combo(this.getComboItem("success",e,...t));this.warn=(e,...t)=>this.combo(this.getComboItem("warn",e,...t));this.error=(e,...t)=>this.combo(this.getComboItem("error",e,...t));this.fatal=(e,...t)=>this.combo(this.getComboItem("fatal",e,...t));this.combo=(e,...t)=>{let r=[e,...t];return ze(this,...r),this};this.getComboItem=(e,t,...r)=>this._getComboItem([e,t,...r],"default");this.getComboItemCustom=(e,t,r,o,...s)=>this._getComboItem([e,t,r,o,...s],"custom");this.getComboItemTable=(e,t,r)=>{let o=[],s=Array.isArray(t)?t:[t],l=ne.isObject(s[0]);if(s.forEach(i=>{if(l){o.push(i);return}let c=new cr(r),a=i(c);o.push(a)}),!o.length)throw new Error("No tables found");return this._getComboItem([e,o,r],"table")};this.mode=e?.mode,this.skipModes=e?.skipModes??[],this.dirname=lr.resolve(process.cwd(),"./").replace(/\\/g,"/"),this.parentDirname=this.dirname.split("/").pop(),this.level=e?.level??"trace",e?.mode&&delete e.mode,e?.skipModes&&delete e.skipModes,e?.level&&delete e.level;let t=e?.transport??Be;this.transport=t({...e,dirname:this.dirname,parentDirname:this.parentDirname})}static get logger(){return new d}};d.custom=(e,t,r,o,...s)=>d.logger.custom(e,t,r,o,...s),d.table=(e,t)=>d.logger.table(e,t),d.debug=(e,...t)=>d.logger.debug(e,...t),d.info=(e,...t)=>d.logger.info(e,...t),d.important=(e,...t)=>d.logger.important(e,...t),d.success=(e,...t)=>d.logger.success(e,...t),d.warn=(e,...t)=>d.logger.warn(e,...t),d.error=(e,...t)=>d.logger.error(e,...t),d.fatal=(e,...t)=>d.logger.fatal(e,...t),d.combo=(e,...t)=>d.logger.combo(e,...t),d.getComboItem=(e,t,...r)=>d.logger.getComboItem(e,t,...r),d.getComboItemCustom=(e,t,r,o,...s)=>d.logger.getComboItemCustom(e,t,r,o,...s),d.getComboItemTable=(e,t,r)=>d.logger.getComboItemTable(e,t,r);var we=d,Ye=we;import ur from"env-paths";import mr from"node:fs";import{isAbsolute as Qe,join as Ue,resolve as _e}from"node:path";import _ from"node:fs";import{join as de}from"node:path";var pe=class{constructor(e){this.logger=e;this.files=[];this.skippedFiles=[];this.invalidFiles=[];this.general=[]}addFile(e,t,r){if(t==="general"){this.general.push(`${r}: ${e}
`);return}this[t].push(`${r}: ${JSON.stringify(e,null,4)}
`)}createLog(e){_.existsSync(e)||_.mkdirSync(e,{recursive:!0}),_.writeFileSync(de(e,".recovery.logs.general.txt"),this.general.join("")),this.logger.info(".recovery.logs.general.txt was created."),_.writeFileSync(de(e,".recovery.logs.skipped-files.txt"),this.skippedFiles.join("")),this.logger.info(".recovery.logs.skipped-files.txt was created."),_.writeFileSync(de(e,".recovery.logs.invalid-files.txt"),this.invalidFiles.join("")),this.logger.info(".recovery.logs.invalid-files.txt was created."),_.writeFileSync(de(e,".recovery.logs.files.txt"),this.files.join("")),this.logger.info(".recovery.logs.files.txt was created.")}};var fr=ur("Code",{suffix:""}),gr=Ue(fr.config,"..","User/History"),ve="vscode-file-recovery",et=[ve],z={rootDir:".",outDir:`./${ve}`,outDirName:ve,localHistoryDir:gr,range:[null,null],skip:["node_modules",...et],dateFormat:"yyyy LLL dd, hh:mm a",clean:!1,verbose:"trace"},dr=n=>{let e=n||z.rootDir;return Qe(e)?e:_e(process.cwd(),e||".")},pr=(n,e)=>{let t=e||z.outDir;return Qe(t)?t:_e(process.cwd(),Ue(n||".",t))},ee=class{constructor(e,t,r){this.default=z;this.rootDir=dr(t?.rootDir),this.outDir=pr(this.rootDir,t?.outDir);let o=t?.verbose??z.verbose;if(this.logger=new Ye({prefix:"vscode-file-recovery",...r,level:o==="off"?"silent":o}),this.logs=new pe(this.logger),!e)throw new Error("The arg 'search' is required");if(this.search=e,this.searchClean=e.replace(/\\/g,"/").replace(/^[a-zA-Z]:[\\/]/,"").toLowerCase(),this.clean=t?.clean??z.clean,this.dateFormat=t?.dateFormat||z.dateFormat,this.range=t?.range||z.range,this.skip=t?.skip?.length?t?.skip?.concat(et):z.skip,this.outDirName=t?.outDirName??z.outDirName,this.localHistoryDir=t?.localHistoryDir||z.localHistoryDir,!mr.existsSync(this.localHistoryDir))throw new Error(`History directory not found: ${this.localHistoryDir}`)}};ee.default=z;var bo=ee.default,xo=br;function br(n,e,t){let r=new ee(n,e,t);r.logger.info("Reading VSCode local history...");let o=[],s=[],l=[];if(k(r.localHistoryDir),!o.length){r.logger.warn("No files found.");return}r.clean&&P.existsSync(r.outDir)&&P.rmSync(r.outDir,{recursive:!0,force:!0}),P.existsSync(r.outDir)||P.mkdirSync(r.outDir,{recursive:!0}),r.logger.info("Found",o.length,"files. Now copying...");let i=L(o),c=n.replaceAll(" ","-").replaceAll("/","-").replaceAll(":",""),a=`${`${B.now().toFormat(r.dateFormat)}`.replaceAll(" ","-").replaceAll("to","___").replaceAll(",","").replaceAll(":",".").replace(/[<>:"/\\|?*]/g,"_")}`.replace(/\\+/g,"/")+`__${c}`,u=X(r.rootDir,r.outDirName,a);P.existsSync(u)||P.mkdirSync(u,{recursive:!0});let y=[];o.forEach((m,h)=>{try{let f=m.outputDir.replace(r.outDir.replace(/\\+/g,"/"),X(r.outDirName,a,"results")).replace(/\\+/g,"/");P.existsSync(f)||P.mkdirSync(f,{recursive:!0});let x=X(f,m.name).replace(/\\+/g,"/"),b=rt(r.rootDir,x).replace(/\\+/g,"/");P.copyFileSync(X(r.localHistoryDir,m.historyFile),x);let S={output:b,original:m.original},M={...m,outputDir:f,outputFile:x};r.logs.addFile(M,"files",h),y.push(M),r.logs.addFile(`Copied ${m.name} --> ${JSON.stringify(S,null,4)}`,"general",h)}catch(f){l.push({file:m,reason:f.message})}}),r.logger.info(""),r.logger.info("Creating metadata...");let I=X(u,"metadata.json");try{P.writeFileSync(I,JSON.stringify({search:n,recoveryDate:B.now().toFormat(r.dateFormat),range:i,skip:r.skip,outDir:r.outDir,filesCount:o.length,skippedFilesCount:s.length,invalidFilesCount:l.length,recoveredFiles:o},null,4)),r.logger.info("Metadata has been saved to:",I)}catch(m){r.logger.error(`Failed to create metadata: ${m.message}`)}r.logger.info(""),r.logger.info("Creating log files..."),l.length&&l.forEach((m,h)=>r.logs.addFile(m,"invalidFiles",h)),s.length&&s.forEach((m,h)=>r.logs.addFile(m,"skippedFiles",h));let w=u.replace(/\\+/g,"/");try{r.logs.createLog(w),r.logger.info("Log files has been saved to:",w,`
`)}catch(m){r.logger.error(`Failed to create logs: ${m.message}`)}r.logger.success(y.length,"files was successfully copied."),r.logger.warn(s.length,"files was skipped."),r.logger.error(`${l.length} files failed.
`),r.logger.success("Done!");function k(m){P.readdirSync(m,{withFileTypes:!0,recursive:!0,encoding:"utf8"}).forEach(f=>{let x=X(m,f.name),b=rt(r.localHistoryDir,x).replace(/\\+/g,"/").replaceAll("../","");if(f.isDirectory()){k(x);return}if(f.isFile())try{if(f.name!=="entries.json")return;let S=P.readFileSync(x,"utf8");if(!S)return;if(!S.includes("resource")||!S.includes("entries")||!S.includes("timestamp")){r.logger.warn("Skipping file due to invalid content:",b),l.push({file:b,reason:"Skipping file due to invalid content"});return}let M=JSON.parse(S),J=R(M.resource).replace(/\\+/g,"/"),Q=J.toLowerCase();if(!Q.includes(r.searchClean.toLowerCase())||Q.includes(r.rootDir.replace(/\\/g,"/").replace(/^[a-zA-Z]:[\\/]/,"").toLowerCase()))return;let nt=hr(J),ye=Q.substring(Q.indexOf(r.searchClean)).replace(/\\+/g,"/").replaceAll("../","");if(r.skip.some(at=>ye.includes(at)))return;let ce=yr.sortBy(M.entries,"timestamp").reverse()[0];if(!ce||!F(ce.timestamp,r.range))return;let ot=X(r.outDir,ye),st=X(b.replace("entries.json",ce.id));o.push({name:nt,path:ye,original:J,directory:tt(b).replace(/\\+/g,"/"),historyMetadataFile:b,historyFile:st.replace(/\\+/g,"/"),outputDir:tt(ot).replace(/\\+/g,"/"),outputFile:void 0,dateSaved:B.fromMillis(ce.timestamp).toFormat(r.dateFormat)})}catch(S){s.push({name:f.name,filePath:b,directory:f.parentPath,reason:S.message})}})}function R(m){if(!m.startsWith("file"))throw new Error("Invalid history entry resource: "+m);let h=new URL(m),f=decodeURIComponent(h.pathname);return process.platform==="win32"&&f.startsWith("/")?f.slice(1):f}function F(m,h){let f=B.fromMillis(m),[x,b]=h,S=x?B.fromJSDate(new Date(x)):null,M=b?B.fromJSDate(new Date(b)):null;if(S===null&&M===null)return!0;let J=S?f>=S:!0,Q=M?f<=M:!0;return J&&Q}function L(m){let h=m.map(b=>B.fromFormat(b.dateSaved,r.dateFormat,{zone:"local"})).filter(b=>b.isValid);if(!h.length)throw new Error("No valid dates found.");let f=B.min(...h),x=B.max(...h);if(!f)throw new Error("Invalid min date.");if(!x)throw new Error("Invalid max date.");return{formatted:[f.toFormat(r.dateFormat),x.toFormat(r.dateFormat)],milliseconds:[f.toMillis(),x.toMillis()],date:[f.toJSDate(),x.toJSDate()]}}}export{xo as default,bo as defaultVsCodeFileRecoveryOptions,br as vscodeFileRecovery};