@torchlight-api/torchlight-cli
Version:
A CLI for Torchlight - the syntax highlighting API
3 lines (2 loc) • 3.8 kB
JavaScript
import t from"axios";import e from"md5";import i from"lodash.get";import o from"lodash.chunk";import n from"chalk";let s=!1;function h(t,e){e=Array.from(e),s||console.log(t(e.shift()),...e)}var r={error:function(){h(n.bold.bgRed,arguments)},info:function(){h(n.green,arguments)},silence:function(t=!0){s=t}};let l={};function c(){}c.prototype.get=function(t,e){if(!Object.prototype.hasOwnProperty.call(l,t))return e;const i=l[t];return Date.now()/1e3>i.expires?(this.delete(t),e):i.value},c.prototype.set=function(t,e,i=10080){l[t]={expires:Date.now()/1e3+i,value:e}},c.prototype.delete=function(t){delete l[t]},c.prototype.clear=function(){l={}};const a=function(){this.initialized=!1,this.chunkSize=30,this.configuration={}};a.prototype.init=function(t,e){var i,o,n;return this.initialized||(t=t||{},null===(i=process)||void 0===i||null===(o=i.env)||void 0===o||!o.TORCHLIGHT_TOKEN||null!==(n=t)&&void 0!==n&&n.token||(t.token=process.env.TORCHLIGHT_TOKEN),this.initialized=!0,this.configuration=t,this.cache=e||new c),this},a.prototype.config=function(t,e){return i(this.configuration,t,e)},a.prototype.configHash=function(){return e(this.configuration)},a.prototype.highlight=function(t){t.map((t=>t.setResponseData(this.cache.get(t.hash(),{}))));const e=t.filter((t=>!t.highlighted));return this.request(e).then((i=>(e.forEach((t=>{const e=i.find((e=>t.id===e.id));e&&e.highlighted&&(this.cache.set(t.hash(),{highlighted:e.highlighted,classes:e.classes,styles:e.styles}),t.setResponseData(e))})),t.filter((t=>!t.highlighted)).forEach((t=>{r.error(`A block failed to highlight. The code was: \`${t.code.substring(0,20)} [...]\``),t.highlighted=t.code.split("\n").map((t=>{return`<div class="line">${e=t,String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}</div>`;var e})).join(""),t.classes="torchlight"})),t)))},a.prototype.request=function(e){if(!e.length)return Promise.resolve([]);const i=this.config("token");if(e.length>this.chunkSize)return this.fan(e);const o=this.config("host","https://api.torchlight.dev");return t.post(`${o}/highlight`,{blocks:e.map((t=>t.toRequestParams())),options:this.config("options",{})},{headers:{Authorization:`Bearer ${i}`,"X-Torchlight-Client":"Torchlight CLI"}}).then((t=>t.data.blocks))},a.prototype.fan=function(t){const e=[],i=[],n=o(t,this.chunkSize).map((t=>this.request(t)));return Promise.allSettled(n).then((t=>{if(t.forEach((t=>{"fulfilled"===t.status&&e.push(...t.value),"rejected"===t.status&&i.push(t.reason)})),e.length)return i.length&&r.error(`${i.length} fanned request(s) failed, but others succeeded. Error: ${i[0]}.`),e;if(i.length)throw new Error(i[0]);return[]}))};var u=new a;function g(){const t=()=>Math.floor(65536*(1+Math.random())).toString(16).substring(1);return`${t()}${t()}-${t()}-${t()}-${t()}-${t()}${t()}${t()}`.toLowerCase()}function p(t={}){t={id:g(),theme:u.config("theme","nord"),...t},this.id=t.id,this.code=t.code,this.language=t.language,this.theme=t.theme,this.highlighted=null,this.classes=null,this.styles=null}p.prototype.hash=function(){return e(""+this.language+this.theme+this.code+u.config("bust",0)+JSON.stringify(u.config("options")))},p.prototype.code=function(t){return this.code=t,this},p.prototype.language=function(t){return this.language=t,this},p.prototype.theme=function(t){return this.theme=t,this},p.prototype.placeholder=function(t=""){return t&&(t=`-${t}`),`__torchlight-block-[${this.id}]${t}__`},p.prototype.setResponseData=function(t){return t&&(this.highlighted=t.highlighted,this.classes=t.classes,this.styles=t.styles),this},p.prototype.toRequestParams=function(){return{id:this.id,hash:this.hash,language:this.language,theme:this.theme,code:this.code}};export{p as Block,u as torchlight};
//# sourceMappingURL=torchlight-cli.esm.min.js.map