UNPKG

@incubrain/helpers

Version:
13 lines (12 loc) 10.8 kB
"use strict";var F=Object.create;var h=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,U=Object.prototype.hasOwnProperty;var z=(r,e)=>{for(var t in e)h(r,t,{get:e[t],enumerable:!0})},T=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of L(e))!U.call(r,n)&&n!==t&&h(r,n,{get:()=>e[n],enumerable:!(o=k(e,n))||o.enumerable});return r};var f=(r,e,t)=>(t=r!=null?F(A(r)):{},T(e||!r||!r.__esModule?h(t,"default",{value:r,enumerable:!0}):t,r)),W=r=>T(h({},"__esModule",{value:!0}),r);var xe={};z(xe,{FileLogger:()=>g,PathManager:()=>S,batchArray:()=>H,batchProcess:()=>B,calculateConcurrency:()=>J,calculateTokens:()=>ce,calculateUrlDepth:()=>se,camelCase:()=>ge,capitalCase:()=>me,createFileLogger:()=>N,dedupeItems:()=>q,dedupeStrings:()=>V,extractPlaceholders:()=>te,filterObject:()=>X,generateId:()=>re,generatePlaceholder:()=>ee,getExternalPackages:()=>ye,getWarningComment:()=>pe,hashContent:()=>ne,isEnglish:()=>ie,logFile:()=>ue,pluralize:()=>he,reAddPlaceholders:()=>oe,removeDuplicates:()=>M,removeItemsByKeywords:()=>K,retry:()=>ae,singularize:()=>fe});module.exports=W(xe);var K=(r,e)=>r.filter(t=>{let o=t.url.toLowerCase();if(!t.title)return!e.some(i=>o.includes(i.toLowerCase()));let n=t.title.toLowerCase();return!e.some(i=>n.includes(i.toLowerCase())||o.includes(i.toLowerCase()))});function M(r){return r.filter((e,t,o)=>e.title?t===o.findIndex(n=>n.title===e.title||n.url===e.url):t===o.findIndex(n=>n.url===e.url))}async function B({items:r,batchSize:e,processBatch:t}){let o=0;for(let n=0;n<r.length;n+=e){let i=r.slice(n,n+e);await t(i,o),o++}}function H(r,e){let t=[];for(let o=0;o<r.length;o+=e)t.push(r.slice(o,o+e));return t}var d=f(require("node:os"),1);function J(){let r=d.default.cpus().length,e=d.default.totalmem(),t=d.default.freemem(),o=Math.floor(r*(t/e));return o=Math.max(1,Math.min(o,10)),o}function q(r,e){let t=a=>{if(typeof e=="function")return e(a);if(typeof e=="string")return String(a[e]);if(Array.isArray(e))return e.map(l=>String(a[l])).join("|");throw new Error("Invalid key generator")},o=new Map,n={},i=0;return r.forEach(a=>{let l=t(a);o.has(l)?(n[l]++,i++):(o.set(l,a),n[l]=0)}),{items:Array.from(o.values()),duplicateCounts:n,totalDuplicates:i}}function V(r){let e=new Set;return r.forEach(t=>{e.add(t)}),Array.from(e)}var c=f(require("path"),1),p=f(require("fs"),1),E=require("url"),Y={},S=class{root;isDocker;appName;constructor(e){this.isDocker=e.isDocker,this.appName=e.appName,this.isDocker?this.root="/app":this.root=e.projectRoot||this.determineProjectRoot()}determineProjectRoot(){let e=typeof __filename>"u",t,o;e?(t=(0,E.fileURLToPath)(Y.url),o=c.default.dirname(t)):(t=__filename,o=__dirname);let n=o;for(;n!==c.default.dirname(n);){if(p.default.existsSync(c.default.join(n,"package.json")))return n;n=c.default.dirname(n)}return n}get paths(){return{root:this.root,logs:c.default.join(this.root,"logs",this.appName),config:c.default.join(this.root,"config",this.appName),data:c.default.join(this.root,"data",this.appName),temp:c.default.join(this.root,"temp",this.appName),cache:c.default.join(this.root,"cache",this.appName)}}ensureDirectories(){Object.values(this.paths).forEach(e=>{try{if(!p.default.existsSync(e)){let t=c.default.dirname(e);try{p.default.accessSync(t,p.default.constants.W_OK)}catch{console.error(`\u274C Permission denied: Cannot write to ${t}`);return}p.default.mkdirSync(e,{recursive:!0,mode:493}),console.info(`\u2705 Created directory: ${e}`)}}catch(t){t.code==="EACCES"?console.error(`\u274C Permission denied: Cannot create directory ${e}`):console.error(`\u274C Unexpected error creating directory ${e}:`,t)}})}resolvePath(...e){return c.default.join(this.root,...e)}static isRunningInDocker(){try{return p.default.existsSync("/.dockerenv")}catch{return!1}}};function X(r,e){return Object.fromEntries(Object.entries(r).filter(([t])=>e.includes(t)))}var s=[];for(let r=0;r<256;++r)s.push((r+256).toString(16).slice(1));function R(r,e=0){return(s[r[e+0]]+s[r[e+1]]+s[r[e+2]]+s[r[e+3]]+"-"+s[r[e+4]]+s[r[e+5]]+"-"+s[r[e+6]]+s[r[e+7]]+"-"+s[r[e+8]]+s[r[e+9]]+"-"+s[r[e+10]]+s[r[e+11]]+s[r[e+12]]+s[r[e+13]]+s[r[e+14]]+s[r[e+15]]).toLowerCase()}var j=require("crypto"),x=new Uint8Array(256),y=x.length;function b(){return y>x.length-16&&((0,j.randomFillSync)(x),y=0),x.slice(y,y+=16)}var $=require("crypto"),v={randomUUID:$.randomUUID};function Q(r,e,t){if(v.randomUUID&&!e&&!r)return v.randomUUID();r=r||{};let o=r.random??r.rng?.()??b();if(o.length<16)throw new Error("Random bytes length must be >= 16");if(o[6]=o[6]&15|64,o[8]=o[8]&63|128,e){if(t=t||0,t<0||t+16>e.length)throw new RangeError(`UUID byte range ${t}:${t+15} is out of buffer bounds`);for(let n=0;n<16;++n)e[t+n]=o[n];return e}return R(o)}var w=Q;var Z=["research_citations","research_figures","research_tables","research_math","research_notes"],G=new RegExp(`\\[(${Z.join("|")})\\((.*?)\\)\\]`,"g");function ee(r,e=w()){return`[${r}(${e})]`}function re(){return w()}function te(r){let e=[],t=0,o=r;try{o=r.replace(G,(n,i)=>{let a=`${i.split("_")[1].charAt(0)}(${t})`;return e.push({original:n,simplified:a}),t++,a})}catch(n){console.error("Error extracting placeholders:",{error:n}),o=r}return{cleanedText:o,placeholders:e}}function oe(r,e){let t=r;try{e.forEach(o=>{try{t=t.replace(o.simplified,o.original)}catch(n){console.error("Error replacing placeholder:",{error:n})}})}catch(o){console.error("Error re-adding placeholders:",{error:o})}return t.trim()}var C=require("node:crypto");function ne(r){return(0,C.createHash)("sha256").update(r,"utf8").digest("hex")}function ie(r){let e=["the","be","to","of","and","a","in","that","have","I","it","for","not","on","with","he","as","you","do","at"];return r.split(/\s+/).reduce((n,i)=>(e.includes(i.toLowerCase())&&(n+=1),n),0)>10}var se=(r,e)=>{let t=e.split("/").filter(Boolean).length;return r.split("/").filter(Boolean).length-t};async function ae(r,e,t){let o=0,n=t;for(;o<e;)try{return await r()}catch(i){if(o++,o>=e)throw i;console.warn(`Attempt ${o} failed. Retrying in ${n}ms...`),await new Promise(a=>setTimeout(a,n)),n*=2}throw new Error("Should not reach here")}function ce(r){return r/4}var u=require("node:fs"),D=require("node:fs"),m=f(require("node:path"),1),g=class{constructor(e,t={},o="default"){this.baseFilePath=e;this.options=t;this.logName=o,this.options={maxFileSize:5*1024*1024,maxFiles:5,timestamp:!0,format:"json",...t};let n=m.default.dirname(e);(0,u.existsSync)(n)||(0,u.mkdirSync)(n,{recursive:!0}),this.initStream()}currentFile=0;writeStream=null;currentSize=0;isRotating=!1;logName;getCurrentFilePath(){return`${this.baseFilePath}.${this.currentFile}.log`}initStream(){try{let e=this.getCurrentFilePath();if(this.writeStream=(0,D.createWriteStream)(e,{flags:"a"}),(0,u.existsSync)(e)){let t=(0,u.statSync)(e);this.currentSize=t.size}else this.currentSize=0;this.writeStream.on("error",t=>{console.error(`Error writing to log file [${this.logName}]:`,t)})}catch(e){console.error(`Failed to initialize log stream [${this.logName}]:`,e)}}async rotateFiles(){if(!this.isRotating){this.isRotating=!0;try{this.writeStream&&await new Promise(e=>{this.writeStream.end(()=>{this.writeStream.destroy(),e()})}),this.currentFile=(this.currentFile+1)%(this.options.maxFiles||5),this.initStream(),this.currentSize=0}catch(e){console.error(`Error rotating log files [${this.logName}]:`,e)}finally{this.isRotating=!1}}}formatLogEntry(e){let t={...e,...this.options.timestamp&&{timestamp:new Date().toISOString()},logger:this.logName};try{return this.options.format==="jsonsl"?JSON.stringify(t)+` `:this.options.pretty?JSON.stringify(t,null,2)+` `:JSON.stringify(t)+` `}catch{return`${new Date().toISOString()} ERROR_FORMATTING_LOG [${this.logName}]: ${String(e)} `}}async write(e,t="info"){if(e)try{let o=le(e);for(let n of o){let i=typeof n=="object"?{...n,level:t}:{message:n,level:t},a=this.formatLogEntry(i),l=Buffer.from(a).length;if(this.currentSize+l>(this.options.maxFileSize||5*1024*1024)&&await this.rotateFiles(),this.writeStream&&!this.isRotating){let _=this.writeStream.write(a);this.currentSize+=l,_||await new Promise(I=>this.writeStream.once("drain",I))}}}catch(o){console.error(`Error writing log entry [${this.logName}]:`,o)}}async info(e){return this.write(e,"info")}async warn(e){return this.write(e,"warn")}async error(e){return this.write(e,"error")}async debug(e){return this.write(e,"debug")}},le=r=>{switch(typeof r){case"string":return[{message:r}];case"number":case"bigint":return[{message:String(r)}];case"object":if(r===null)throw new TypeError("Cannot log `null` as an entry.");return Array.isArray(r)?r:[r];default:throw new TypeError(`Unhandled log entry type: ${typeof r}`)}},P={};function N(r,e={},t=r){try{let o=m.default.join(process.cwd(),"logs");(0,u.existsSync)(o)||(0,u.mkdirSync)(o,{recursive:!0});let n=m.default.join(o,r),i=`${n}-${t}`;return P[i]||(P[i]=new g(n,e,t)),P[i]}catch(o){console.error("Error creating logger:",o);let n=m.default.join(process.cwd(),"logs","emergency");return new g(n,e,"emergency")}}async function ue(r,e,t={}){try{await N(r,t).write(e)}catch(o){console.error("Error writing to log file:",o)}}function pe(r="ts"){let e="//";switch(r){case"sql":e="--";break;case"js":e="//";break;case"ts":e="//";break;default:e="//"}return` ${e} ----------------------------------------------------------------------- ${e} WARNING: This file is auto-generated. DO NOT MODIFY IT MANUALLY. ${e} Any changes you make will be overwritten the next time the file ${e} is generated. ${e} ----------------------------------------------------------------------- `}function me(r){return r?r.split("_").map(e=>e[0].toUpperCase()+e.slice(1)).join(""):(console.warn("Empty string provided to capitalCase helper"),"")}function ge(r){return r.replace(/[-_](\w)/g,(e,t)=>t.toUpperCase())}function he(r){return r.endsWith("s")?r:r+"s"}function fe(r){return r.endsWith("ies")?r.slice(0,-3)+"y":r.endsWith("s")?r.slice(0,-1):r}var O=require("fs"),de=r=>new RegExp(`^${r}(/.*)?$`);function ye(r){try{let e=JSON.parse((0,O.readFileSync)(r,"utf-8")),t={...e.dependencies,...e.devDependencies,...e.peerDependencies},n=Object.keys(t).map(de);return[/^node:/,...n,/^[^./]|^\.[^./]|^\.\.[^/]/]}catch(e){return console.warn("Failed to read package.json, falling back to defaults:",e),[/^node:/,/^@opentelemetry/,/^@incubrain/,/^[^./]|^\.[^./]|^\.\.[^/]/]}}0&&(module.exports={FileLogger,PathManager,batchArray,batchProcess,calculateConcurrency,calculateTokens,calculateUrlDepth,camelCase,capitalCase,createFileLogger,dedupeItems,dedupeStrings,extractPlaceholders,filterObject,generateId,generatePlaceholder,getExternalPackages,getWarningComment,hashContent,isEnglish,logFile,pluralize,reAddPlaceholders,removeDuplicates,removeItemsByKeywords,retry,singularize}); //# sourceMappingURL=index.js.map