Socket
Socket
Sign inDemoInstall

@tkskto/vue-component-analyzer

Package Overview
Dependencies
162
Maintainers
1
Versions
24
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.4.0 to 0.4.1

11

CHANGELOG.md
# Changelog
## 0.4.1
### Chores
- \#153 update dependency `vue-eslint-parser` to v8.2.0
- \#138 update dependency `ws` to v8.5.0
### Fixes
- update Vue.js logo to SVG.
## 0.4.0

@@ -4,0 +15,0 @@

4

dist/client.js

@@ -1,2 +0,2 @@

class e{constructor(e){this.type=e,this.currentTarget=null}}e.COMPLETE="complete",e.CHANGE_PROPERTY="changeProperty";class t{constructor(e,t,s=0){this.type=e,this.handler=t,this.priority=s}equalCurrentListener(e,t){return this.type===e&&this.handler===t}}class s extends class{constructor(){this.listeners={}}dispatchEvent(t){let s,i;if(t instanceof e?(i=t.type,s=t):(i=t,s=new e(i)),null!==this.listeners[i]){const e=this.listeners[i].length;s.currentTarget=this;for(let t=0;t<e;t++){const e=this.listeners[i][t];try{e.handler(s)}catch(e){e instanceof Error&&console.error(e.stack)}}}else console.warn('implement "addEventListener" before dispatch')}addEventListener(e,s,i=0){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(new t(e,s,i)),this.listeners[e].sort(((e,t)=>t.priority-e.priority))}removeEventListener(e,t){if(this.hasEventListener(e,t))for(let s=0;s<this.listeners[e].length;s++){if(this.listeners[e][s].equalCurrentListener(e,t))return void this.listeners[e].splice(s,1)}}clearEventListener(){this.listeners={}}containEventListener(e){return!!this.listeners[e]&&this.listeners[e].length>0}hasEventListener(e,t){if(!this.listeners[e])return!1;for(let s=0;s<this.listeners[e].length;s++){if(this.listeners[e][s].equalCurrentListener(e,t))return!0}return!1}}{constructor(){super(),this._data={entries:[],count:{}},this._viewType="GRAPH",this._visibleSettings=!1,this._visibleProps=!0,this._visibleFileSize=!0,this._visibleLastUpdated=!0,this._visibleReferenceCount=!0,this.getHowManyDaysAgo=e=>{const t=e.getTime(),s=this._todayTime-t;return Math.floor(s/864e5)},this._today=new Date,this._todayTime=this._today.getTime()}get data(){return this._data}set data(e){this._data=e,this.dispatchEvent(s.EVENT.DATA_UPDATE)}get viewType(){return this._viewType}set viewType(e){this._viewType=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleSettings(){return this._visibleSettings}set visibleSettings(e){this._visibleSettings=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleProps(){return this._visibleProps}set visibleProps(e){this._visibleProps=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleFileSize(){return this._visibleFileSize}set visibleFileSize(e){this._visibleFileSize=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleLastUpdated(){return this._visibleLastUpdated}set visibleLastUpdated(e){this._visibleLastUpdated=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleReferenceCount(){return this._visibleReferenceCount}set visibleReferenceCount(e){this._visibleReferenceCount=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}}s.EVENT={DATA_UPDATE:"dataUpdate",SETTING_CHANGED:"settingChanged"};class i{constructor(e,t,s){this._model=s,this._children=[],this._name=e.name,this._props=e.props,this._fileSize=e.size,this._lastModifiedTime=e.lastModifiedTime,this._count=t}renderChildren(){let e="";for(let t=0,s=this._children.length;t<s;t++)e+=this._children[t].render();return`<div class="group">\n ${e}\n </div>`}renderProps(){return this._props?`<pre class="file__props">props: ${JSON.stringify(this._props,null,"\t")}</pre>`:""}renderMetaData(){let e="";const t=(this._fileSize/1024).toFixed(2);return t&&(e+=`<span class="file__meta meta__fileSize">FileSize: ${t} KB</span>`),e+=`<span class="file__meta meta__lastUpdated">LastUpdated: ${0===this._lastModifiedTime?0:this._model.getHowManyDaysAgo(new Date(this._lastModifiedTime))} days ago</span>`,e}renderSummary(){let e=this._name;return this._name.endsWith(".vue")?e=`<img class="icon" src="https://v3.vuejs.org/logo.png" alt="">${e}`:this._name.endsWith(".js")?e=`<img class="icon" src="https://raw.githubusercontent.com/voodootikigod/logo.js/master/js.png" alt="">${e}`:this._name.endsWith(".ts")&&(e=`<img class="icon" src="../dist/icon/icon-ts.png" alt="">${e}`),`<summary>${e}</summary>`}renderDetails(){return`<details class="detail">\n ${this.renderSummary()}\n ${this.renderProps()}\n ${this.renderMetaData()}\n </details>`}render(){const e=this.renderDetails();let t="",s="";return this._children.length>0?t=this.renderChildren():s=" -no-child",this.isJS()&&(s+=" js"),`<div class="seed${s}">\n <div class="file">\n <div class="filename">\n <div class="file__text">${e}</div>\n ${this.getCountText()}\n </div>\n </div>\n ${t}\n </div>`}getCountText(){return 0===this._count?"":1===this._count?'<span class="file__count">1 time referenced.</span>':`<span class="file__count">${this._count} times referenced.</span>`}get children(){return this._children}set children(e){this._children=e}isJS(){return this._name.endsWith(".js")}}class n{constructor(e,t){this._elm=e,this._model=t,this._type=e.dataset.settingName,e.addEventListener("change",this.onChange.bind(this))}onChange(){switch(this._type){case"props":this._model.visibleProps=this._elm.checked;break;case"fileSize":this._model.visibleFileSize=this._elm.checked;break;case"lastUpdated":this._model.visibleLastUpdated=this._elm.checked;break;case"referenceCount":this._model.visibleReferenceCount=this._elm.checked;break;default:throw new Error(`not supported type: ${this._type}`)}}}class r{constructor(e,t,s){this._elm=e,this._type=t,this._model=s,e.addEventListener("change",this.onChange.bind(this))}onChange(){this._model.viewType=this._type}}class o{constructor(e,t){this._isOpen=!1,this._details=null,this._textElement=document.getElementById("btn-toggle-visible-state-text"),e.addEventListener("click",this.onClick.bind(this)),t.addEventListener(s.EVENT.DATA_UPDATE,this.onDataUpdated.bind(this))}open(){this._details&&this._details.forEach((e=>{e.open=!0})),this._textElement&&(this._textElement.textContent="collapse all")}close(){this._details&&this._details.forEach((e=>{e.open=!1})),this._textElement&&(this._textElement.textContent="expand all")}onClick(){this._isOpen=!this._isOpen,this._isOpen?this.open():this.close()}onDataUpdated(){this._details=document.querySelectorAll(".detail")}}
class e{constructor(e){this.type=e,this.currentTarget=null}}e.COMPLETE="complete",e.CHANGE_PROPERTY="changeProperty";class t{constructor(e,t,s=0){this.type=e,this.handler=t,this.priority=s}equalCurrentListener(e,t){return this.type===e&&this.handler===t}}class s extends class{constructor(){this.listeners={}}dispatchEvent(t){let s,i;if(t instanceof e?(i=t.type,s=t):(i=t,s=new e(i)),null!==this.listeners[i]){const e=this.listeners[i].length;s.currentTarget=this;for(let t=0;t<e;t++){const e=this.listeners[i][t];try{e.handler(s)}catch(e){e instanceof Error&&console.error(e.stack)}}}else console.warn('implement "addEventListener" before dispatch')}addEventListener(e,s,i=0){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(new t(e,s,i)),this.listeners[e].sort(((e,t)=>t.priority-e.priority))}removeEventListener(e,t){if(this.hasEventListener(e,t))for(let s=0;s<this.listeners[e].length;s++){if(this.listeners[e][s].equalCurrentListener(e,t))return void this.listeners[e].splice(s,1)}}clearEventListener(){this.listeners={}}containEventListener(e){return!!this.listeners[e]&&this.listeners[e].length>0}hasEventListener(e,t){if(!this.listeners[e])return!1;for(let s=0;s<this.listeners[e].length;s++){if(this.listeners[e][s].equalCurrentListener(e,t))return!0}return!1}}{constructor(){super(),this._data={entries:[],count:{}},this._viewType="GRAPH",this._visibleSettings=!1,this._visibleProps=!0,this._visibleFileSize=!0,this._visibleLastUpdated=!0,this._visibleReferenceCount=!0,this.getHowManyDaysAgo=e=>{const t=e.getTime(),s=this._todayTime-t;return Math.floor(s/864e5)},this._today=new Date,this._todayTime=this._today.getTime()}get data(){return this._data}set data(e){this._data=e,this.dispatchEvent(s.EVENT.DATA_UPDATE)}get viewType(){return this._viewType}set viewType(e){this._viewType=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleSettings(){return this._visibleSettings}set visibleSettings(e){this._visibleSettings=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleProps(){return this._visibleProps}set visibleProps(e){this._visibleProps=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleFileSize(){return this._visibleFileSize}set visibleFileSize(e){this._visibleFileSize=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleLastUpdated(){return this._visibleLastUpdated}set visibleLastUpdated(e){this._visibleLastUpdated=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}get visibleReferenceCount(){return this._visibleReferenceCount}set visibleReferenceCount(e){this._visibleReferenceCount=e,this.dispatchEvent(s.EVENT.SETTING_CHANGED)}}s.EVENT={DATA_UPDATE:"dataUpdate",SETTING_CHANGED:"settingChanged"};class i{constructor(e,t,s){this._model=s,this._children=[],this._name=e.name,this._props=e.props,this._fileSize=e.size,this._lastModifiedTime=e.lastModifiedTime,this._count=t}renderChildren(){let e="";for(let t=0,s=this._children.length;t<s;t++)e+=this._children[t].render();return`<div class="group">\n ${e}\n </div>`}renderProps(){return this._props?`<pre class="file__props">props: ${JSON.stringify(this._props,null,"\t")}</pre>`:""}renderMetaData(){let e="";const t=(this._fileSize/1024).toFixed(2);return t&&(e+=`<span class="file__meta meta__fileSize">FileSize: ${t} KB</span>`),e+=`<span class="file__meta meta__lastUpdated">LastUpdated: ${0===this._lastModifiedTime?0:this._model.getHowManyDaysAgo(new Date(this._lastModifiedTime))} days ago</span>`,e}renderSummary(){let e=this._name;return this._name.endsWith(".vue")?e=`<svg class="icon" viewBox="0 0 128 128" width="24" height="24"><use xlink:href="#logo"></use></svg>${e}`:this._name.endsWith(".js")?e=`<img class="icon" src="https://raw.githubusercontent.com/voodootikigod/logo.js/master/js.png" alt="">${e}`:this._name.endsWith(".ts")&&(e=`<img class="icon" src="../dist/icon/icon-ts.png" alt="">${e}`),`<summary>${e}</summary>`}renderDetails(){return`<details class="detail">\n ${this.renderSummary()}\n ${this.renderProps()}\n ${this.renderMetaData()}\n </details>`}render(){const e=this.renderDetails();let t="",s="";return this._children.length>0?t=this.renderChildren():s=" -no-child",this.isJS()&&(s+=" js"),`<div class="seed${s}">\n <div class="file">\n <div class="filename">\n <div class="file__text">${e}</div>\n ${this.getCountText()}\n </div>\n </div>\n ${t}\n </div>`}getCountText(){return 0===this._count?"":1===this._count?'<span class="file__count">1 time referenced.</span>':`<span class="file__count">${this._count} times referenced.</span>`}get children(){return this._children}set children(e){this._children=e}isJS(){return this._name.endsWith(".js")}}class n{constructor(e,t){this._elm=e,this._model=t,this._type=e.dataset.settingName,e.addEventListener("change",this.onChange.bind(this))}onChange(){switch(this._type){case"props":this._model.visibleProps=this._elm.checked;break;case"fileSize":this._model.visibleFileSize=this._elm.checked;break;case"lastUpdated":this._model.visibleLastUpdated=this._elm.checked;break;case"referenceCount":this._model.visibleReferenceCount=this._elm.checked;break;default:throw new Error(`not supported type: ${this._type}`)}}}class r{constructor(e,t,s){this._elm=e,this._type=t,this._model=s,e.addEventListener("change",this.onChange.bind(this))}onChange(){this._model.viewType=this._type}}class o{constructor(e,t){this._isOpen=!1,this._details=null,this._textElement=document.getElementById("btn-toggle-visible-state-text"),e.addEventListener("click",this.onClick.bind(this)),t.addEventListener(s.EVENT.DATA_UPDATE,this.onDataUpdated.bind(this))}open(){this._details&&this._details.forEach((e=>{e.open=!0})),this._textElement&&(this._textElement.textContent="collapse all")}close(){this._details&&this._details.forEach((e=>{e.open=!1})),this._textElement&&(this._textElement.textContent="expand all")}onClick(){this._isOpen=!this._isOpen,this._isOpen?this.open():this.close()}onDataUpdated(){this._details=document.querySelectorAll(".detail")}}
/*! *****************************************************************************

@@ -16,2 +16,2 @@ Copyright (c) Microsoft Corporation.

***************************************************************************** */
function l(e,t,s,i){return new(s||(s=Promise))((function(n,r){function o(e){try{a(i.next(e))}catch(e){r(e)}}function l(e){try{a(i.throw(e))}catch(e){r(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,l)}a((i=i.apply(e,t||[])).next())}))}const a=new class{constructor(){this.show=()=>{document.body.classList.add("-dialog-show"),(e=>{let t=Array.from(document.querySelectorAll("a, button, summary"));e&&(t=t.filter((t=>null===t.closest(e)))),t.forEach((e=>{e.classList.add("-focus-disabled"),e.setAttribute("tabindex","-1")}))})("#dialog")},this.close=()=>{document.body.classList.remove("-dialog-show"),document.querySelectorAll(".-focus-disabled").forEach((e=>{e.classList.remove("-focus-disabled"),e.removeAttribute("tabindex")}))},this.load=()=>{this.show(),this._contents&&(this._contents.innerHTML="<p>now loading...</p>")},this.complete=e=>{this._contents&&(this._contents.innerHTML=e)},this.showExportDialog=()=>l(this,void 0,void 0,(function*(){this.load();const e=yield c();this._btnExport.href=e.src,this.complete(e.outerHTML)})),this._contents=document.getElementById("dialog-contents"),this._btnClose=document.getElementById("btn-dialog-close"),this._btnExport=document.getElementById("btn-export"),this._btnClose&&this._btnClose.addEventListener("click",this.close.bind(this))}};const d=new class{constructor(){this._style="",this.getStyle=()=>fetch("/dist/style.css").then((e=>e.text())),this.getCurrentStyleText=()=>l(this,void 0,void 0,(function*(){if(this._style)return this._style;const e=yield this.getStyle();return this._style=e.replace('@charset "UTF-8";',"").trim(),this._style}))}},h=e=>new Promise(((t,s)=>{const i=new Image;i.addEventListener("load",(()=>{t(i)})),i.addEventListener("error",s),i.src=e})),c=()=>l(void 0,void 0,void 0,(function*(){const e=document.querySelector(".root.html");if(e){const t=e.scrollWidth,s=e.scrollHeight,i=yield((e,t,s)=>l(void 0,void 0,void 0,(function*(){const i=e.cloneNode(!0);i.querySelectorAll("img, script").forEach((e=>{e.parentElement&&e.parentElement.removeChild(e)}));const n=yield d.getCurrentStyleText();return`<svg width="${t}" height="${s}" viewBox="0 0 ${t} ${s}" xmlns="http://www.w3.org/2000/svg"><foreignObject width="${t}" height="${s}" requiredExtensions="http://www.w3.org/1999/xhtml"><body xmlns="http://www.w3.org/1999/xhtml"><style>${n}</style>${i.outerHTML}</body></foreignObject></svg>`})))(e,t,s),n=yield h(`data:image/svg+xml;base64,${btoa(i)}`);return yield((e,t,s)=>l(void 0,void 0,void 0,(function*(){const i=document.createElement("canvas");i.width=t,i.height=s;const n=i.getContext("2d");n&&n.drawImage(e,0,0);const r=i.toDataURL("image/png",100);return yield h(r)})))(n,t,s)}return new Image})),u=new s;let p;new class{constructor(e){this._model=e,this._tree=[],this.ready=()=>{if("GRAPH"===this._model.viewType){const{data:e}=this._model,{entries:t}=e;for(let s=0,n=t.length;s<n;s++){const n=t[s];if(e){const e=new i(n,0,this._model);this._tree.push(this.generateSeed(n,e))}}}this.render()},this._app=document.getElementById("app"),e.addEventListener(s.EVENT.DATA_UPDATE,this.ready)}generateSeed(e,t){const s=[],{children:n}=e,r=[],{count:o}=this._model.data;for(let e=0,t=n.length;e<t;e++){const t=n[e],s=new i(t,o[t.name],this._model);r.push(s),this.generateSeed(t,s)}return t.children=r,s.push(t),s}renderLine(e,t,s){let i=" ";for(let e=0;e<t;e++)i+="│ ";return i+=s?"└─ ":"├─ ",i+=e,`${i}\n`}renderEntry(e,t){let s="";for(let i=0,n=e.children.length;i<n;i++){const r=e.children[i];s+=this.renderLine(r.name,t,i===n-1),s+=this.renderEntry(r,t+1)}return s}render(){let e="";for(let t=0,s=this._tree.length;t<s;t++){const[s]=this._tree[t];e+=s.render()}e=`<div class="root html">${e}</div>`;const{entries:t}=this._model.data;let s="";for(let e=0,i=t.length;e<i;e++){s+=`${t[e].name}\n`,s+=this.renderEntry(t[e],0),e<i-1&&(s+="\n")}s=`<div class="root text"><pre class="tree">${s}</pre></div>`,this._app&&(this._app.innerHTML=e+s)}}(u);try{window.enableWebSocket&&(p=new WebSocket(`ws://${location.host}`))}catch(e){console.warn("Couldn't connect to analyzer websocket server so you'll have to reload page manually to see updates in the treemap")}document.addEventListener("DOMContentLoaded",(()=>{p?p.addEventListener("message",(e=>{const t=JSON.parse(e.data);(e=>{const t=document.getElementById("btn-toggle-visible-state");t&&new o(t,e)})(u),u.data=t,function(e){const{body:t}=document,i=document.getElementById("btn-settings"),o=t.querySelectorAll(".js-settings-toggle"),l=document.getElementById("js-view-switch-graph"),a=document.getElementById("js-view-switch-text");new r(l,"GRAPH",e),new r(a,"TEXT",e);const d=function(){t.className=`${e.viewType}`,e.visibleSettings&&t.classList.add("show-settings"),e.visibleProps||t.classList.add("no-props"),e.visibleFileSize||t.classList.add("no-fileSize"),e.visibleLastUpdated||t.classList.add("no-lastUpdated"),e.visibleReferenceCount||t.classList.add("no-referenceCount")};o.forEach((t=>{new n(t,e)})),e.addEventListener(s.EVENT.SETTING_CHANGED,d),i&&i.addEventListener("click",(()=>{e.visibleSettings=!e.visibleSettings})),d()}(u),function(){const e=document.querySelector("#btn-capture");e&&e.addEventListener("click",(()=>l(this,void 0,void 0,(function*(){try{yield a.showExportDialog()}catch(e){console.error(e)}}))))}()})):console.warn("Couldn't connect to analyzer websocket server so you'll have to reload page manually to see updates in the treemap")}));
function l(e,t,s,i){return new(s||(s=Promise))((function(n,r){function o(e){try{a(i.next(e))}catch(e){r(e)}}function l(e){try{a(i.throw(e))}catch(e){r(e)}}function a(e){var t;e.done?n(e.value):(t=e.value,t instanceof s?t:new s((function(e){e(t)}))).then(o,l)}a((i=i.apply(e,t||[])).next())}))}const a=new class{constructor(){this._contents=document.getElementById("dialog-contents"),this._btnClose=document.getElementById("btn-dialog-close"),this._btnExport=document.getElementById("btn-export"),this._btnClose&&this._btnClose.addEventListener("click",this.close.bind(this))}show(){document.body.classList.add("-dialog-show"),(e=>{let t=Array.from(document.querySelectorAll("a, button, summary"));e&&(t=t.filter((t=>null===t.closest(e)))),t.forEach((e=>{e.classList.add("-focus-disabled"),e.setAttribute("tabindex","-1")}))})("#dialog")}close(){document.body.classList.remove("-dialog-show"),document.querySelectorAll(".-focus-disabled").forEach((e=>{e.classList.remove("-focus-disabled"),e.removeAttribute("tabindex")}))}load(){this.show(),this._contents&&(this._contents.innerHTML="<p>now loading...</p>")}complete(e){this._contents&&(this._contents.innerHTML=e)}showExportDialog(){return l(this,void 0,void 0,(function*(){this.load();const e=yield c();this._btnExport.href=e.src,this.complete(e.outerHTML)}))}};const d=new class{constructor(){this._style="",this.getStyle=()=>fetch("/dist/style.css").then((e=>e.text())),this.getCurrentStyleText=()=>l(this,void 0,void 0,(function*(){if(this._style)return this._style;const e=yield this.getStyle();return this._style=e.replace('@charset "UTF-8";',"").trim(),this._style}))}},h=e=>new Promise(((t,s)=>{const i=new Image;i.addEventListener("load",(()=>{t(i)})),i.addEventListener("error",s),i.src=e})),c=()=>l(void 0,void 0,void 0,(function*(){const e=document.querySelector(".root.html");if(e){const t=e.scrollWidth,s=e.scrollHeight,i=yield((e,t,s)=>l(void 0,void 0,void 0,(function*(){const i=e.cloneNode(!0);i.querySelectorAll("img, script, svg").forEach((e=>{e.parentElement&&e.parentElement.removeChild(e)}));const n=yield d.getCurrentStyleText();return`<svg width="${t}" height="${s}" viewBox="0 0 ${t} ${s}" xmlns="http://www.w3.org/2000/svg"><foreignObject width="${t}" height="${s}" requiredExtensions="http://www.w3.org/1999/xhtml"><body xmlns="http://www.w3.org/1999/xhtml"><style>${n}</style>${i.outerHTML}</body></foreignObject></svg>`})))(e,t,s),n=yield h(`data:image/svg+xml;base64,${btoa(i)}`);return yield((e,t,s)=>l(void 0,void 0,void 0,(function*(){const i=document.createElement("canvas");i.width=t,i.height=s;const n=i.getContext("2d");n&&n.drawImage(e,0,0);const r=i.toDataURL("image/png",100);return yield h(r)})))(n,t,s)}return new Image})),u=new s;let p;new class{constructor(e){this._model=e,this._tree=[],this.ready=()=>{if("GRAPH"===this._model.viewType){const{data:e}=this._model,{entries:t}=e;for(let s=0,n=t.length;s<n;s++){const n=t[s];if(e){const e=new i(n,0,this._model);this._tree.push(this.generateSeed(n,e))}}}this.render()},this._app=document.getElementById("app"),e.addEventListener(s.EVENT.DATA_UPDATE,this.ready)}generateSeed(e,t){const s=[],{children:n}=e,r=[],{count:o}=this._model.data;for(let e=0,t=n.length;e<t;e++){const t=n[e],s=new i(t,o[t.name],this._model);r.push(s),this.generateSeed(t,s)}return t.children=r,s.push(t),s}renderLine(e,t,s){let i=" ";for(let e=0;e<t;e++)i+="│ ";return i+=s?"└─ ":"├─ ",i+=e,`${i}\n`}renderEntry(e,t){let s="";for(let i=0,n=e.children.length;i<n;i++){const r=e.children[i];s+=this.renderLine(r.name,t,i===n-1),s+=this.renderEntry(r,t+1)}return s}render(){let e="";for(let t=0,s=this._tree.length;t<s;t++){const[s]=this._tree[t];e+=s.render()}e=`<div class="root html">${e}</div>`;const{entries:t}=this._model.data;let s="";for(let e=0,i=t.length;e<i;e++){s+=`${t[e].name}\n`,s+=this.renderEntry(t[e],0),e<i-1&&(s+="\n")}s=`<div class="root text"><pre class="tree">${s}</pre></div>`,this._app&&(this._app.innerHTML=e+s)}}(u);try{window.enableWebSocket&&(p=new WebSocket(`ws://${location.host}`))}catch(e){console.warn("Couldn't connect to analyzer websocket server so you'll have to reload page manually to see updates in the treemap")}document.addEventListener("DOMContentLoaded",(()=>{p?p.addEventListener("message",(e=>{const t=JSON.parse(e.data);(e=>{const t=document.getElementById("btn-toggle-visible-state");t&&new o(t,e)})(u),u.data=t,function(e){const{body:t}=document,i=document.getElementById("btn-settings"),o=t.querySelectorAll(".js-settings-toggle"),l=document.getElementById("js-view-switch-graph"),a=document.getElementById("js-view-switch-text");new r(l,"GRAPH",e),new r(a,"TEXT",e);const d=function(){t.className=`${e.viewType}`,e.visibleSettings&&t.classList.add("show-settings"),e.visibleProps||t.classList.add("no-props"),e.visibleFileSize||t.classList.add("no-fileSize"),e.visibleLastUpdated||t.classList.add("no-lastUpdated"),e.visibleReferenceCount||t.classList.add("no-referenceCount")};o.forEach((t=>{new n(t,e)})),e.addEventListener(s.EVENT.SETTING_CHANGED,d),i&&i.addEventListener("click",(()=>{e.visibleSettings=!e.visibleSettings})),d()}(u),function(){const e=document.querySelector("#btn-capture");e&&e.addEventListener("click",(()=>l(this,void 0,void 0,(function*(){try{yield a.showExportDialog()}catch(e){console.error(e)}}))))}()})):console.warn("Couldn't connect to analyzer websocket server so you'll have to reload page manually to see updates in the treemap")}));
/*!
@tkskto/vue-component-analyzer v0.4.0
@tkskto/vue-component-analyzer v0.4.1
https://github.com/tkskto/

@@ -9,9 +9,9 @@ Released under the MIT License.

ejs -- 3.1.6
express -- 4.17.1
express -- 4.17.3
globby -- 11.0.4
mkdirp -- 1.0.4
opener -- 1.5.2
vue-eslint-parser -- 8.0.1
ws -- 8.3.0
vue-eslint-parser -- 8.2.0
ws -- 8.5.0
*/
"use strict";var e=require("commander"),t=require("fs"),o=require("path"),r=require("vue-eslint-parser"),s=require("express"),n=require("ws"),i=require("http"),l=require("ejs"),a=require("opener"),u=require("mkdirp"),c=require("globby");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=d(e),f=d(t),m=d(o),h=d(r),v=d(s),g=d(n),_=d(i),y=d(l),S=d(a),w=d(u),O=d(c),b="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},M={},R={};Object.defineProperty(R,"__esModule",{value:!0}),R.FORMAT=void 0,R.FORMAT={BROWSER:"browser",JSON:"json",BOTH:"both"};var D={};Object.defineProperty(D,"__esModule",{value:!0}),D.model=void 0;const T=R;D.model=new class{constructor(){this._resourceRoot="src",this._format=T.FORMAT.BROWSER,this._outDirectory="out",this._port="8888",this._isSilentMode=!1}get resourceRoot(){return this._resourceRoot}set resourceRoot(e){this._resourceRoot=e}get format(){return this._format}set format(e){this._format=e}get outDirectory(){return this._outDirectory}set outDirectory(e){this._outDirectory=e}get port(){return this._port}set port(e){this._port=e}get isSilentMode(){return this._isSilentMode}set isSilentMode(e){this._isSilentMode=e}};var F={};Object.defineProperty(F,"__esModule",{value:!0}),F.getOptions=void 0;const j=R,$=p.default;F.getOptions=e=>($.program.option("--dir [dir]","root directory of src.","src"),$.program.option("-f, --format [type]","Add the specified type of report [browser, json or both]",j.FORMAT.BROWSER),$.program.option("-o, --out [dir]",'output directory (enable with setting --format option to "json" or "both")',"out"),$.program.option("-p, --port [number]","select a port number for the local server","8888"),$.program.option("--silent","do not show logs with silent flag"),$.program.parse(e),$.program.opts());var x={},z={};Object.defineProperty(z,"__esModule",{value:!0}),z.resolveFile=z.getDeclarationSyntax=z.getImportDeclaration=void 0;const P=D,A=f.default,C=m.default;z.getImportDeclaration=e=>e.filter((e=>"ImportDeclaration"===e.type));z.getDeclarationSyntax=(e,t)=>{let o=!1,r="{",s=0;const n=["Identifier","Boolean","Keyword"];for(const i of e){const{type:e,value:l}=i;if(o||!o&&"Identifier"===e&&l===t){const t=n.includes(e);if(o=!0,"Punctuator"===e)if("{"===l)s++;else if("}"===l&&(s--,","===r[r.length-1]&&(r=r.slice(0,-1)),0===s)){r+="}";break}t&&(r+='"'),r+=l.replace(/'/gu,'"'),t&&(r+='"')}}return`${r}}`};z.resolveFile=(e,t)=>{let o="";if(e.startsWith("../")?o=(0,C.resolve)((0,C.dirname)(t),e):e.startsWith("./")?o=`${(0,C.dirname)(t)}/${e.replace(/\.\/|/gu,"")}`:(e.startsWith("~")||e.startsWith("@"))&&(o=e.replace("~",P.model.resourceRoot).replace("@",P.model.resourceRoot)),o&&""===(0,C.extname)(o)){if((0,A.existsSync)(`${o}.vue`))return`${o}.vue`;if((0,A.existsSync)(`${o}.js`))return`${o}.js`;if((0,A.existsSync)(`${o}.ts`))return`${o}.ts`}return o};var q={};Object.defineProperty(q,"__esModule",{value:!0}),q.FileCounter=void 0;const W=m.default;q.FileCounter=class{constructor(){this._count={}}add(e){const t=(0,W.resolve)(e);Object.prototype.hasOwnProperty.call(this._count,t)?this._count[t]++:this._count[t]=1}get count(){return this._count}};var N={};Object.defineProperty(N,"__esModule",{value:!0}),N.VueComponent=void 0;const B=h.default,E=z,I={ecmaVersion:2018,sourceType:"module"};N.VueComponent=class{constructor(e,t,o){var r,s,n;this._filename="",this._lastModifiedTime=0,this._size=0,this._template="",this._style="",this._props="",this._children=[],this._importDeclaration=[],this.getProps=e=>{try{const t=JSON.parse((0,E.getDeclarationSyntax)(e,"props"));return t&&t.props?t.props:""}catch(e){return console.warn("failed to analyze props."),""}},this._filename=e,this._lastModifiedTime=(null==o?void 0:o.mtimeMs)||0,this._size=(null==o?void 0:o.size)||0;const i=t.match(/(?<template><template>[\s\S]*<\/template>)/u),l=t.match(/(?<script><script>[\s\S]*<\/script>)/u),a=t.match(/(?<style><style>[\s\S]*<\/style>)/u);this._template=(null===(r=null==i?void 0:i.groups)||void 0===r?void 0:r.template)||"",this._style=(null===(s=null==a?void 0:a.groups)||void 0===s?void 0:s.template)||"";const u=(null===(n=null==l?void 0:l.groups)||void 0===n?void 0:n.script)||"",c=(0,B.parse)(u,I);c.tokens&&(this._props=this.getProps(c.tokens)),this._importDeclaration=(0,E.getImportDeclaration)(c.body)}addChildReport(e){this._children.push(e)}get importDeclaration(){return this._importDeclaration}getFileReport(e){return{name:this._filename,props:this._props,size:this._size,lastModifiedTime:e?0:Number(this._lastModifiedTime.toFixed(0)),children:this._children}}},Object.defineProperty(x,"__esModule",{value:!0}),x.analyzer=void 0;const k=z,J=f.default,V=m.default,H=q,K=N,L=D,U=process.cwd();x.analyzer=new class{constructor(){this.getImportDeclarationTree=(e,t,o=!1)=>{const r=(0,V.resolve)(U,e),s=r.replace(U,""),n=(0,J.statSync)(r),i=t.concat();if(i.push(e),L.model.isSilentMode||console.log(`read ${r}`),this._counter.add(s),""===(0,V.extname)(r)||".vue"!==(0,V.extname)(r))return{name:s,props:"",size:n.size,lastModifiedTime:o?0:Number(n.mtimeMs.toFixed(0)),children:[]};const l=(0,J.readFileSync)(r,"utf-8"),a=new K.VueComponent(s,l,n);try{for(let e=0,s=a.importDeclaration.length;e<s;e++){const s=String(a.importDeclaration[e].source.value);if(s){const e=(0,k.resolveFile)(s,r);e&&(t.includes(e)?console.warn(`Circular dependency detected between ${e} and ${r}`):a.addChildReport(this.getImportDeclarationTree(e,i,o)))}}}catch(e){console.error(`Something went wrong with reading ${r}`),e instanceof Error&&console.error(e.message)}return a.getFileReport(o)},this._counter=new H.FileCounter}get counter(){return this._counter}};var G={},Q=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(G,"__esModule",{value:!0}),G.startServer=void 0;const X=Q(v.default),Y=g.default,Z=Q(m.default),ee=Q(_.default),te=y.default,oe=Q(S.default),re=Z.default.resolve(__dirname,"..");G.startServer=(e,t)=>{const o="127.0.0.1",r=(0,X.default)();r.engine("ejs",te.renderFile),r.set("view engine","ejs"),r.set("views",`${re}/views`),r.use(X.default.static(`${re}/`));const s=ee.default.createServer(r),n=new Y.WebSocketServer({server:s});r.use("/",((e,t)=>{t.render("viewer",{mode:"server",title:"analyze report",enableWebSocket:!0})})),s.on("error",(e=>{console.log(e),s.listening&&s.close((e=>{console.log(e)}))})),s.listen(Number(e),o,(()=>{const r=null==s?void 0:s.address();let i=e;"string"==typeof r?i=r:"object"==typeof r&&(i=String(null==r?void 0:r.port)||e);const l=`http://${o}:${i}/`;console.log(`Vue Component Analyzer is started at ${l}`),console.log("Use 'Ctrl+C' to close it"),(0,oe.default)(l),n.on("connection",(e=>{e.send(JSON.stringify(t)),e.addEventListener("error",(()=>{console.error("Something went to wrong on web socket.")}))}))}))};var se=b&&b.__awaiter||function(e,t,o,r){return new(o||(o=Promise))((function(s,n){function i(e){try{a(r.next(e))}catch(e){n(e)}}function l(e){try{a(r.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(i,l)}a((r=r.apply(e,t||[])).next())}))},ne=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(M,"__esModule",{value:!0});const ie=R,le=D,ae=F,ue=x,ce=G,de=f.default,pe=ne(m.default),fe=ne(w.default),me=ne(O.default);function he(e,t){(0,fe.default)(pe.default.dirname(e)).then((()=>{(0,de.writeFileSync)(e,t)})).catch((e=>{if(e)throw new Error(e.message)}))}se(void 0,void 0,void 0,(function*(){try{const e=(0,ae.getOptions)(process.argv);le.model.resourceRoot=e.dir,le.model.format=e.format,le.model.outDirectory=e.out,le.model.port=e.port,le.model.isSilentMode=e.silent||!1,e.format!==ie.FORMAT.BROWSER&&e.format!==ie.FORMAT.JSON&&e.format!==ie.FORMAT.BOTH&&console.error(`not support ${e.format} format.`),console.log("start analyzing.");const t=yield(0,me.default)([e.dir,"!**/node_modules/**"],{expandDirectories:{extensions:["vue"]}});0===t.length&&console.log("There is no entry file.");const o=[];for(let e=0,r=t.length;e<r;e++){const r=t[e],s=ue.analyzer.getImportDeclarationTree(r,[]);o.push(s)}const r={entries:o,count:ue.analyzer.counter.count};e.format===ie.FORMAT.BOTH?((0,ce.startServer)(e.port,r),he(pe.default.resolve(process.cwd(),`${e.out}/result.json`),JSON.stringify(r,null,4))):e.format===ie.FORMAT.BROWSER?(0,ce.startServer)(e.port,r):e.format===ie.FORMAT.JSON&&he(pe.default.resolve(process.cwd(),`${e.out}/result.json`),JSON.stringify(r,null,4)),console.log("finished analyzing.")}catch(e){e instanceof Error&&console.error(e.message)}})),module.exports=M;
"use strict";var e=require("commander"),t=require("fs"),o=require("path"),r=require("vue-eslint-parser"),s=require("express"),n=require("ws"),i=require("http"),l=require("ejs"),a=require("opener"),u=require("mkdirp"),c=require("globby");function d(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=d(e),f=d(t),m=d(o),h=d(r),v=d(s),g=d(n),_=d(i),y=d(l),S=d(a),w=d(u),O=d(c),b="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},M={},R={};Object.defineProperty(R,"__esModule",{value:!0}),R.FORMAT=void 0,R.FORMAT={BROWSER:"browser",JSON:"json",BOTH:"both"};var D={};Object.defineProperty(D,"__esModule",{value:!0}),D.model=void 0;const T=R;D.model=new class{constructor(){this._resourceRoot="src",this._format=T.FORMAT.BROWSER,this._outDirectory="out",this._port="8888",this._isSilentMode=!1}get resourceRoot(){return this._resourceRoot}set resourceRoot(e){this._resourceRoot=e}get format(){return this._format}set format(e){this._format=e}get outDirectory(){return this._outDirectory}set outDirectory(e){this._outDirectory=e}get port(){return this._port}set port(e){this._port=e}get isSilentMode(){return this._isSilentMode}set isSilentMode(e){this._isSilentMode=e}};var F={};Object.defineProperty(F,"__esModule",{value:!0}),F.getOptions=void 0;const j=R,$=p.default;F.getOptions=e=>($.program.option("--dir [dir]","root directory of src.","src"),$.program.option("-f, --format [type]","Add the specified type of report [browser, json or both]",j.FORMAT.BROWSER),$.program.option("-o, --out [dir]",'output directory (enable with setting --format option to "json" or "both")',"out"),$.program.option("-p, --port [number]","select a port number for the local server","8888"),$.program.option("--silent","do not show logs with silent flag"),$.program.parse(e),$.program.opts());var x={},z={};Object.defineProperty(z,"__esModule",{value:!0}),z.resolveFile=z.getDeclarationSyntax=z.getImportDeclaration=void 0;const P=D,A=f.default,C=m.default;z.getImportDeclaration=e=>e.filter((e=>"ImportDeclaration"===e.type));z.getDeclarationSyntax=(e,t)=>{let o=!1,r="{",s=0;const n=["Identifier","Boolean","Keyword"];for(const i of e){const{type:e,value:l}=i;if(o||!o&&"Identifier"===e&&l===t){const t=n.includes(e);if(o=!0,"Punctuator"===e)if("{"===l)s++;else if("}"===l&&(s--,","===r[r.length-1]&&(r=r.slice(0,-1)),0===s)){r+="}";break}t&&(r+='"'),r+=l.replace(/'/gu,'"'),t&&(r+='"')}}return`${r}}`};z.resolveFile=(e,t)=>{let o="";if(e.startsWith("../")?o=(0,C.resolve)((0,C.dirname)(t),e):e.startsWith("./")?o=`${(0,C.dirname)(t)}/${e.replace(/\.\/|/gu,"")}`:(e.startsWith("~")||e.startsWith("@"))&&(o=e.replace("~",P.model.resourceRoot).replace("@",P.model.resourceRoot)),o&&""===(0,C.extname)(o)){if((0,A.existsSync)(`${o}.vue`))return`${o}.vue`;if((0,A.existsSync)(`${o}.js`))return`${o}.js`;if((0,A.existsSync)(`${o}.ts`))return`${o}.ts`}return o};var q={};Object.defineProperty(q,"__esModule",{value:!0}),q.FileCounter=void 0;const W=m.default;q.FileCounter=class{constructor(){this._count={}}add(e){const t=(0,W.resolve)(e);Object.prototype.hasOwnProperty.call(this._count,t)?this._count[t]++:this._count[t]=1}get count(){return this._count}};var N={};Object.defineProperty(N,"__esModule",{value:!0}),N.VueComponent=void 0;const B=h.default,E=z,I={ecmaVersion:2018,sourceType:"module"};N.VueComponent=class{constructor(e,t,o){var r,s,n;this._filename="",this._lastModifiedTime=0,this._size=0,this._template="",this._style="",this._props="",this._children=[],this._importDeclaration=[],this._filename=e,this._lastModifiedTime=(null==o?void 0:o.mtimeMs)||0,this._size=(null==o?void 0:o.size)||0;const i=t.match(/(?<template><template>[\s\S]*<\/template>)/u),l=t.match(/(?<script><script>[\s\S]*<\/script>)/u),a=t.match(/(?<style><style>[\s\S]*<\/style>)/u);this._template=(null===(r=null==i?void 0:i.groups)||void 0===r?void 0:r.template)||"",this._style=(null===(s=null==a?void 0:a.groups)||void 0===s?void 0:s.template)||"";const u=(null===(n=null==l?void 0:l.groups)||void 0===n?void 0:n.script)||"",c=(0,B.parse)(u,I);c.tokens&&(this._props=this.getProps(c.tokens)),this._importDeclaration=(0,E.getImportDeclaration)(c.body)}getProps(e){try{const t=JSON.parse((0,E.getDeclarationSyntax)(e,"props"));return t&&t.props?t.props:""}catch(e){return console.warn("failed to analyze props."),""}}addChildReport(e){this._children.push(e)}get importDeclaration(){return this._importDeclaration}getFileReport(e){return{name:this._filename,props:this._props,size:this._size,lastModifiedTime:e?0:Number(this._lastModifiedTime.toFixed(0)),children:this._children}}},Object.defineProperty(x,"__esModule",{value:!0}),x.analyzer=void 0;const k=z,J=f.default,V=m.default,H=q,K=N,L=D,U=process.cwd();x.analyzer=new class{constructor(){this.getImportDeclarationTree=(e,t,o=!1)=>{const r=(0,V.resolve)(U,e),s=r.replace(U,""),n=(0,J.statSync)(r),i=t.concat();if(i.push(e),L.model.isSilentMode||console.log(`read ${r}`),this._counter.add(s),""===(0,V.extname)(r)||".vue"!==(0,V.extname)(r))return{name:s,props:"",size:n.size,lastModifiedTime:o?0:Number(n.mtimeMs.toFixed(0)),children:[]};const l=(0,J.readFileSync)(r,"utf-8"),a=new K.VueComponent(s,l,n);try{for(let e=0,s=a.importDeclaration.length;e<s;e++){const s=String(a.importDeclaration[e].source.value);if(s){const e=(0,k.resolveFile)(s,r);e&&(t.includes(e)?console.warn(`Circular dependency detected between ${e} and ${r}`):a.addChildReport(this.getImportDeclarationTree(e,i,o)))}}}catch(e){console.error(`Something went wrong with reading ${r}`),e instanceof Error&&console.error(e.message)}return a.getFileReport(o)},this._counter=new H.FileCounter}get counter(){return this._counter}};var G={},Q=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(G,"__esModule",{value:!0}),G.startServer=void 0;const X=Q(v.default),Y=g.default,Z=Q(m.default),ee=Q(_.default),te=y.default,oe=Q(S.default),re=Z.default.resolve(__dirname,"..");G.startServer=(e,t)=>{const o="127.0.0.1",r=(0,X.default)();r.engine("ejs",te.renderFile),r.set("view engine","ejs"),r.set("views",`${re}/views`),r.use(X.default.static(`${re}/`));const s=ee.default.createServer(r),n=new Y.WebSocketServer({server:s});r.use("/",((e,t)=>{t.render("viewer",{mode:"server",title:"analyze report",enableWebSocket:!0})})),s.on("error",(e=>{console.log(e),s.listening&&s.close((e=>{console.log(e)}))})),s.listen(Number(e),o,(()=>{const r=null==s?void 0:s.address();let i=e;"string"==typeof r?i=r:"object"==typeof r&&(i=String(null==r?void 0:r.port)||e);const l=`http://${o}:${i}/`;console.log(`Vue Component Analyzer is started at ${l}`),console.log("Use 'Ctrl+C' to close it"),(0,oe.default)(l),n.on("connection",(e=>{e.send(JSON.stringify(t)),e.addEventListener("error",(()=>{console.error("Something went to wrong on web socket.")}))}))}))};var se=b&&b.__awaiter||function(e,t,o,r){return new(o||(o=Promise))((function(s,n){function i(e){try{a(r.next(e))}catch(e){n(e)}}function l(e){try{a(r.throw(e))}catch(e){n(e)}}function a(e){var t;e.done?s(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(i,l)}a((r=r.apply(e,t||[])).next())}))},ne=b&&b.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(M,"__esModule",{value:!0});const ie=R,le=D,ae=F,ue=x,ce=G,de=f.default,pe=ne(m.default),fe=ne(w.default),me=ne(O.default);function he(e,t){(0,fe.default)(pe.default.dirname(e)).then((()=>{(0,de.writeFileSync)(e,t)})).catch((e=>{if(e)throw new Error(e.message)}))}se(void 0,void 0,void 0,(function*(){try{const e=(0,ae.getOptions)(process.argv);le.model.resourceRoot=e.dir,le.model.format=e.format,le.model.outDirectory=e.out,le.model.port=e.port,le.model.isSilentMode=e.silent||!1,e.format!==ie.FORMAT.BROWSER&&e.format!==ie.FORMAT.JSON&&e.format!==ie.FORMAT.BOTH&&console.error(`not support ${e.format} format.`),console.log("start analyzing.");const t=yield(0,me.default)([e.dir,"!**/node_modules/**"],{expandDirectories:{extensions:["vue"]}});0===t.length&&console.log("There is no entry file.");const o=[];for(let e=0,r=t.length;e<r;e++){const r=t[e],s=ue.analyzer.getImportDeclarationTree(r,[]);o.push(s)}const r={entries:o,count:ue.analyzer.counter.count};e.format===ie.FORMAT.BOTH?((0,ce.startServer)(e.port,r),he(pe.default.resolve(process.cwd(),`${e.out}/result.json`),JSON.stringify(r,null,4))):e.format===ie.FORMAT.BROWSER?(0,ce.startServer)(e.port,r):e.format===ie.FORMAT.JSON&&he(pe.default.resolve(process.cwd(),`${e.out}/result.json`),JSON.stringify(r,null,4)),console.log("finished analyzing.")}catch(e){e instanceof Error&&console.error(e.message)}})),module.exports=M;
{
"name": "@tkskto/vue-component-analyzer",
"version": "0.4.0",
"version": "0.4.1",
"description": "Analyze dependency tree for Vue.js SFC (Single File Component)",

@@ -50,30 +50,30 @@ "main": "dist/index.js",

"ejs": "3.1.6",
"express": "4.17.1",
"express": "4.17.3",
"globby": "11.0.4",
"mkdirp": "1.0.4",
"opener": "1.5.2",
"vue-eslint-parser": "8.0.1",
"ws": "8.3.0"
"vue-eslint-parser": "8.2.0",
"ws": "8.5.0"
},
"devDependencies": {
"@mitsue/eslint-config": "4.0.1",
"@mitsue/eslint-config": "4.1.0",
"@rollup/plugin-commonjs": "21.0.1",
"@rollup/plugin-json": "4.1.0",
"@rollup/plugin-node-resolve": "13.0.6",
"@rollup/plugin-node-resolve": "13.1.3",
"@rollup/plugin-typescript": "8.3.0",
"@types/ejs": "3.1.0",
"@types/express": "4.17.12",
"@types/express": "4.17.13",
"@types/mkdirp": "1.0.2",
"@types/mocha": "9.0.0",
"@types/mocha": "9.1.0",
"@types/node": "16.11.11",
"@types/opener": "1.4.0",
"@types/ws": "8.2.1",
"@typescript-eslint/eslint-plugin": "4.33.0",
"@typescript-eslint/parser": "4.33.0",
"eslint": "7.32.0",
"@types/ws": "8.2.3",
"@typescript-eslint/eslint-plugin": "5.12.0",
"@typescript-eslint/parser": "5.12.0",
"eslint": "8.9.0",
"husky": "7.0.4",
"lint-staged": "12.1.2",
"mocha": "9.1.3",
"lint-staged": "12.3.4",
"mocha": "9.2.1",
"nyc": "15.1.0",
"rollup": "2.60.2",
"rollup": "2.67.3",
"rollup-plugin-license": "2.6.0",

@@ -80,0 +80,0 @@ "rollup-plugin-terser": "7.0.2",

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc