zeed 0.7.80 → 0.7.84
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/dist/chunk-2OPCAJLJ.js +3 -0
- package/dist/chunk-2OPCAJLJ.js.map +7 -0
- package/dist/{chunk-AKCQXHAK.js → chunk-72GMFXKL.js} +2 -2
- package/dist/{chunk-AKCQXHAK.js.map → chunk-72GMFXKL.js.map} +0 -0
- package/dist/{chunk-7LPR7LE5.js → chunk-NBSE34ZH.js} +2 -2
- package/dist/{chunk-7LPR7LE5.js.map → chunk-NBSE34ZH.js.map} +0 -0
- package/dist/{chunk-GILANOH3.js → chunk-NZSIXVWC.js} +1 -1
- package/dist/{chunk-GILANOH3.js.map → chunk-NZSIXVWC.js.map} +0 -0
- package/dist/{chunk-UGOFZTQO.js → chunk-RH2Y4YUT.js} +2 -2
- package/dist/{chunk-UGOFZTQO.js.map → chunk-RH2Y4YUT.js.map} +3 -3
- package/dist/index.all.cjs +2 -2
- package/dist/index.all.cjs.map +3 -3
- package/dist/index.all.d.ts +3 -3
- package/dist/index.all.js +1 -1
- package/dist/index.browser.cjs +2 -2
- package/dist/index.browser.cjs.map +3 -3
- package/dist/index.browser.d.ts +2 -2
- package/dist/index.browser.js +1 -1
- package/dist/index.log.js +1 -1
- package/dist/index.node.cjs +2 -2
- package/dist/index.node.cjs.map +3 -3
- package/dist/index.node.d.ts +2 -2
- package/dist/index.node.js +1 -1
- package/dist/{log-colors-5815acad.d.ts → log-colors-0098ce41.d.ts} +1 -1
- package/dist/{path-53cca6d4.d.ts → log-util-87942865.d.ts} +2 -4
- package/dist/{uuid-d43cefa1.d.ts → uuid-837f3ced.d.ts} +52 -44
- package/package.json +4 -4
- package/dist/chunk-C47LZY6O.js +0 -3
- package/dist/chunk-C47LZY6O.js.map +0 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{cloneObject,renderMessages,toValidFilename}from"./chunk-C47LZY6O.js";import{LogLevel,Logger,__name,formatMilliseconds,getTimestamp,useLevelFilter,useNamespaceFilter}from"./chunk-GILANOH3.js";import fs from"fs";import{resolve}from"path";var log=Logger("zeed:env");var NEWLINE="\n";var RE_INI_KEY_VAL=/^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/;var RE_NEWLINES=/\\n/g;var NEWLINES_MATCH=/\n|\r|\r\n/;function parse(src,options={}){let obj={};src.toString().split(NEWLINES_MATCH).forEach(function(line,idx){const keyValueArr=line.match(RE_INI_KEY_VAL);if(keyValueArr!=null){const key=keyValueArr[1];let val=keyValueArr[2]||"";const end=val.length-1;const isDoubleQuoted=val[0]==='"'&&val[end]==='"';const isSingleQuoted=val[0]==="'"&&val[end]==="'";if(isSingleQuoted||isDoubleQuoted){val=val.substring(1,end);if(isDoubleQuoted){val=val.replace(RE_NEWLINES,NEWLINE)}}else{val=val.trim()}obj[key]=val}else{log.debug(`did not match key and value when parsing line ${idx+1}: ${line}`)}});return obj}__name(parse,"parse");function stringToPath(value,defaultValue="."){return resolve(process.cwd(),value!=null?value:defaultValue)}__name(stringToPath,"stringToPath");function valueToPath(value,defaultValue=""){if(value==null)value=defaultValue;return stringToPath(String(value).trim(),defaultValue)}__name(valueToPath,"valueToPath");var toPath=valueToPath;function setupEnv(options={}){var _a2,_b2,_c,_d;const dotenvPath=(_b2=options==null?void 0:options.path)!=null?_b2:toPath((_a2=options==null?void 0:options.filename)!=null?_a2:".env");const encoding=(_c=options==null?void 0:options.encoding)!=null?_c:"utf8";const debug=(options==null?void 0:options.debug)||false;if(debug!==true)log.level=LogLevel.off;try{const parsedEnv=fs.existsSync(dotenvPath)?parse(fs.readFileSync(dotenvPath,{encoding}),{debug}):{};const parsedEnvLocal=fs.existsSync(dotenvPath+".local")?parse(fs.readFileSync(dotenvPath+".local",{encoding}),{debug}):{};const parsed=Object.assign({},parsedEnv,parsedEnvLocal);let env=(_d=options==null?void 0:options.env)!=null?_d:process.env;Object.entries(parsed).forEach(([key,value])=>{if(typeof(options==null?void 0:options.prefix)==="string"){key=(options==null?void 0:options.prefix)+key}if(!Object.prototype.hasOwnProperty.call(env,key)){if(value!=null){log.info(`set env.${key} = ${value}`);env[key]=value}}else{log.debug(`"${key}" is already defined and will not be overwritten`)}});return{parsed}}catch(e){log.error(e);return{error:e}}}__name(setupEnv,"setupEnv");import{mkdirSync,readdirSync,readFileSync,rmSync,unlinkSync,writeFileSync}from"fs";import{dirname,resolve as resolve2}from"path";var log2=Logger("zeed:filestorage");var FileStorage=class{constructor(opt={}){this.store={};this.fileKeys=void 0;this.pretty=false;var _a2,_b2,_c,_d;this.dirname=resolve2(process.cwd(),opt.path||".fileStorage");this.pretty=!!opt.pretty;this.extension=(_a2=opt.extension)!=null?_a2:".json";if(opt.extension&&!this.extension.startsWith(".")){this.extension="."+this.extension}this.extensionLength=this.extension.length;this.objectToString=(_b2=opt.objectToString)!=null?_b2:data=>{return this.pretty?JSON.stringify(data,null,2):JSON.stringify(data)};this.objectFromString=(_c=opt.objectFromString)!=null?_c:data=>{try{return JSON.parse(data)}catch(err){log2.warn(`fileStorage parse error '${err}' in`,data)}};this.keyToFilename=(_d=opt.keyToFilename)!=null?_d:toValidFilename}setItem(key,value){this.store[key]=cloneObject(value);try{const data=this.objectToString(value);const path=this.getPath(key);mkdirSync(dirname(path),{recursive:true});writeFileSync(path,data,"utf8")}catch(err){log2.error("setItem error",err)}}getPath(key){return resolve2(this.dirname,this.keyToFilename(key)+this.extension)}getBuffer(key){const path=this.getPath(key);return Buffer.from(readFileSync(path))}getItem(key){let value=this.store[key];if(value===null)return;if(value!=null){return cloneObject(value)}try{const path=this.getPath(key);const data=readFileSync(path,"utf8");if(data!=null){const value2=this.objectFromString(data);this.store[key]=value2;return value2}}catch(err){log2.warn("getItem error",err);this.store[key]=null}}removeItem(key){delete this.store[key];if(this.fileKeys!=null){const index=this.fileKeys.indexOf(key);if(index!==-1){this.fileKeys.splice(index,1)}}try{const path=this.getPath(key);unlinkSync(path)}catch(err){}}clear(){this.fileKeys=[];this.store={};rmSync(this.dirname,{recursive:true,force:true})}allKeys(){if(this.fileKeys==null){try{this.fileKeys=readdirSync(this.dirname,{withFileTypes:true}).filter(item=>!item.isDirectory()&&item.name.endsWith(this.extension)).map(item=>item.name.slice(0,-this.extensionLength))||[]}catch(err){}}let keys=[...this.fileKeys||[]];for(let key of Object.keys(this.store)){if(!keys.includes(key)){keys.push(key)}}keys.sort();return keys}};__name(FileStorage,"FileStorage");import{createWriteStream,mkdirSync as mkdirSync2}from"fs";import{dirname as dirname2,resolve as resolve3}from"path";var namespaces={};function LoggerFileHandler(path,opt={}){const{level=LogLevel.all,filter="*"}=opt;path=resolve3(process.cwd(),path);mkdirSync2(dirname2(path),{recursive:true});var stream=createWriteStream(path,{flags:"a"});const matchesNamespace=useNamespaceFilter(filter);const matchesLevel=useLevelFilter(level);return msg=>{if(!matchesLevel(msg.level))return;if(!matchesNamespace(msg.name))return;const time2=new Date().toISOString();let name=msg.name||"";let ninfo=namespaces[name||""];if(ninfo==null){namespaces[name]=ninfo}let args=[`[${name||"*"}]`,renderMessages(msg.messages,{pretty:false})];function write(...args2){stream.write(args2.join(" ")+"\n")}__name(write,"write");switch(msg.level){case LogLevel.info:write(time2,`I|* `,...args);break;case LogLevel.warn:write(time2,`W|** `,...args);break;case LogLevel.error:write(time2,`E|***`,...args);break;default:write(time2,`D| `,...args);break}}}__name(LoggerFileHandler,"LoggerFileHandler");import{resolve as resolve4}from"path";function getStackLlocationList(stack){var _a2,_b2;if(typeof stack!=="string")return[];return((_b2=(_a2=stack==null?void 0:stack.split("\n"))==null?void 0:_a2.map(rawLine=>{let m=rawLine.match(/^\s+at.*(\((.*)\)|file:\/\/(.*)$)/);if(m){let line=m[3]||m[2];if(line.endsWith(")"))line=line.slice(0,-1);return line}}))==null?void 0:_b2.filter(v=>v!=null))||[]}__name(getStackLlocationList,"getStackLlocationList");var cwd=resolve4(process.cwd());var _a,_b;var home=((_a=process.env)==null?void 0:_a.HOME)?resolve4((_b=process.env)==null?void 0:_b.HOME):"";function pathStripCwd(path){if(path.includes("/node_modules/")){return""}const fileURL="file://";if(path.startsWith(fileURL)){return path.substr(fileURL.length)}if(cwd&&path.startsWith(cwd)){return path.substr(cwd.length+1)}if(home&&path.startsWith(home)){path="~/"+path.substr(home.length+1)}return path}__name(pathStripCwd,"pathStripCwd");function extractFileInfo(stackLine){let m=stackLine.match(/^\s*at.*(\((.*)\)|file:\/\/(.*)$)/);if(m){let line=m[3]||m[2];if(line.endsWith(")"))line=line.slice(0,-1);return line}return""}__name(extractFileInfo,"extractFileInfo");function getSourceLocation(level=2,stripCwd=true){var _a2;let stack=new Error().stack||"";let line=(_a2=getStackLlocationList(stack))==null?void 0:_a2[level];if(line&&stripCwd){line=pathStripCwd(line)}return line||""}__name(getSourceLocation,"getSourceLocation");function getStack(){return new Error().stack||""}__name(getStack,"getStack");function getSourceLocationByPrecedingPattern(patterns,stripCwd=true){let line="";let stack=new Error().stack||"";if(typeof stack==="string"){const lines=stack.split("\n").map(l=>l.trim());const index=lines.findIndex(l=>patterns.some(p=>l.startsWith(p)));line=lines[index+1];if(line){line=extractFileInfo(line)}if(line&&stripCwd){line=pathStripCwd(line)}}return line}__name(getSourceLocationByPrecedingPattern,"getSourceLocationByPrecedingPattern");import tty from"tty";function isTTY(){try{return tty.isatty(process.stdout.fd)}catch(err){}return false}__name(isTTY,"isTTY");var colors=[6,2,3,4,5,1];function selectColor(namespace){let hash=0;for(let i=0;i<namespace.length;i++){hash=(hash<<5)-hash+namespace.charCodeAt(i);hash|=0}return colors[Math.abs(hash)%colors.length]}__name(selectColor,"selectColor");var namespaces2={};var time=getTimestamp();var useColors=tty.isatty(process.stderr.fd);function log3(...args){return process.stderr.write(renderMessages(args)+"\n")}__name(log3,"log");var TTY_STYLE={BOLD:"[1m",UNBOLD:"[2m",RED:"[31m",GREEN:"[32m",BLUE:"[34m",PURPLE:"[35m",GRAY:"[37m",ORANGE:"[38;5;208m",UNCOLOR:"[0m"};var COLOR;(function(COLOR2){COLOR2[COLOR2["RED"]=1]="RED";COLOR2[COLOR2["GREEN"]=2]="GREEN";COLOR2[COLOR2["BLUE"]=4]="BLUE";COLOR2[COLOR2["PURPLE"]=5]="PURPLE";COLOR2[COLOR2["GRAY"]=7]="GRAY";COLOR2[COLOR2["ORANGE"]=8]="ORANGE"})(COLOR||(COLOR={}));var colorEnd="[0m";function colorString(value,colorCode){const colorStart=colorCode===8?TTY_STYLE.ORANGE:"[3"+(colorCode<8?colorCode:"8;5;"+colorCode)+"m";return`${colorStart}${value}${colorEnd}`}__name(colorString,"colorString");function colorStringList(list,style,bold=true){return list.map(value=>{if(typeof value!=="string")return value;let start=style;let end=colorEnd;if(bold){start=`${TTY_STYLE.BOLD}${start}`;end=`${end}${TTY_STYLE.BOLD}`}return`${start}${value}${end}`})}__name(colorStringList,"colorStringList");var loggerStackTraceDebug="loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485";function LoggerNodeHandler(opt={}){const{level=void 0,filter=void 0,colors:colors2=isTTY(),levelHelper=true,nameBrackets=true,padding=0,fill=0,stack=true}=opt;const matchesNamespace=useNamespaceFilter(filter);const matchesLevel=useLevelFilter(level);return msg=>{var _a2;if(!matchesLevel(msg.level))return;if(!matchesNamespace(msg.name))return;const timeNow=getTimestamp();let name=msg.name||"";let ninfo=namespaces2[name||""];if(ninfo==null){ninfo={color:selectColor(name)};namespaces2[name]=ninfo}const diff=formatMilliseconds(timeNow-time);let args;let displayName=nameBrackets?`[${name}]`:name;if(padding>0){displayName=displayName.padStart(padding," ")}if(fill>0){displayName=displayName.padEnd(fill," ")}if(colors2&&useColors){const c=ninfo.color;args=[colorString(displayName,c)+` | `];if(msg.level===LogLevel.warn){args.push(...colorStringList(msg.messages,TTY_STYLE.ORANGE))}else if(msg.level===LogLevel.error){args.push(...colorStringList(msg.messages,TTY_STYLE.RED))}else{args.push(...msg.messages)}args.push(colorString(`+${diff}`,c))}else{args=[displayName,...msg.messages];args.push(`+${diff}`)}if(((_a2=msg.messages)==null?void 0:_a2[0])===loggerStackTraceDebug){console.log(getStack())}if(stack){let line="";if(typeof stack==="boolean"){line=getSourceLocationByPrecedingPattern(["at Function.","at null.log (","at log ("],true);if(!line){line=getSourceLocation(0,true)}}else{const depth=typeof stack==="number"?stack:3;line=getSourceLocation(depth,true)}if(line){args.push(colorString(`(${line})`,7))}}switch(msg.level){case LogLevel.info:if(levelHelper)args[0]=`I|* `+args[0];log3(...args);break;case LogLevel.warn:if(levelHelper)args[0]=(colors2&&useColors?colorString(`W|** `,8):`W|** `)+args[0];log3(...args);break;case LogLevel.error:if(levelHelper)args[0]=(colors2&&useColors?colorString(`E|*** `,1):`E|*** `)+args[0];log3(...args);break;default:if(levelHelper)args[0]=`D| `+args[0];log3(...args);break}}}__name(LoggerNodeHandler,"LoggerNodeHandler");import{dirname as dirname3}from"path";import{fileURLToPath}from"url";var _dirname=typeof __dirname!=="undefined"?__dirname:dirname3(fileURLToPath(import.meta.url));import nodeCrypto from"crypto";try{if(nodeCrypto&&nodeCrypto.webcrypto&&typeof globalThis!=="undefined"&&typeof globalThis.crypto==="undefined"){globalThis.crypto=nodeCrypto.webcrypto}}catch(err){console.warn("Failed to polyfill webcrypto",err)}function setupLogContextNode(){var _a2;let handlers=[LoggerNodeHandler({padding:32,nameBrackets:false})];let logFilePath=(_a2=process.env.ZEED_LOG)!=null?_a2:process.env.LOG;if(logFilePath){handlers.unshift(LoggerFileHandler(toPath(logFilePath)))}Logger.setHandlers(handlers)}__name(setupLogContextNode,"setupLogContextNode");setupLogContextNode();export{stringToPath,valueToPath,toPath,setupEnv,FileStorage,LoggerFileHandler,getStackLlocationList,getSourceLocation,getStack,getSourceLocationByPrecedingPattern,isTTY,colorString,colorStringList,loggerStackTraceDebug,LoggerNodeHandler,_dirname};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{cloneObject,renderMessages,toValidFilename}from"./chunk-2OPCAJLJ.js";import{LogLevel,Logger,__name,formatMilliseconds,getTimestamp,useLevelFilter,useNamespaceFilter}from"./chunk-NZSIXVWC.js";import fs from"fs";import{resolve}from"path";var log=Logger("zeed:env");var NEWLINE="\n";var RE_INI_KEY_VAL=/^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/;var RE_NEWLINES=/\\n/g;var NEWLINES_MATCH=/\n|\r|\r\n/;function parse(src,options={}){let obj={};src.toString().split(NEWLINES_MATCH).forEach(function(line,idx){const keyValueArr=line.match(RE_INI_KEY_VAL);if(keyValueArr!=null){const key=keyValueArr[1];let val=keyValueArr[2]||"";const end=val.length-1;const isDoubleQuoted=val[0]==='"'&&val[end]==='"';const isSingleQuoted=val[0]==="'"&&val[end]==="'";if(isSingleQuoted||isDoubleQuoted){val=val.substring(1,end);if(isDoubleQuoted){val=val.replace(RE_NEWLINES,NEWLINE)}}else{val=val.trim()}obj[key]=val}else{log.debug(`did not match key and value when parsing line ${idx+1}: ${line}`)}});return obj}__name(parse,"parse");function stringToPath(value,defaultValue="."){return resolve(process.cwd(),value!=null?value:defaultValue)}__name(stringToPath,"stringToPath");function valueToPath(value,defaultValue=""){if(value==null)value=defaultValue;return stringToPath(String(value).trim(),defaultValue)}__name(valueToPath,"valueToPath");var toPath=valueToPath;function setupEnv(options={}){var _a2,_b2,_c,_d;const dotenvPath=(_b2=options==null?void 0:options.path)!=null?_b2:toPath((_a2=options==null?void 0:options.filename)!=null?_a2:".env");const encoding=(_c=options==null?void 0:options.encoding)!=null?_c:"utf8";const debug=(options==null?void 0:options.debug)||false;if(debug!==true)log.level=LogLevel.off;try{const parsedEnv=fs.existsSync(dotenvPath)?parse(fs.readFileSync(dotenvPath,{encoding}),{debug}):{};const parsedEnvLocal=fs.existsSync(dotenvPath+".local")?parse(fs.readFileSync(dotenvPath+".local",{encoding}),{debug}):{};const parsed=Object.assign({},parsedEnv,parsedEnvLocal);let env=(_d=options==null?void 0:options.env)!=null?_d:process.env;Object.entries(parsed).forEach(([key,value])=>{if(typeof(options==null?void 0:options.prefix)==="string"){key=(options==null?void 0:options.prefix)+key}if(!Object.prototype.hasOwnProperty.call(env,key)){if(value!=null){log.info(`set env.${key} = ${value}`);env[key]=value}}else{log.debug(`"${key}" is already defined and will not be overwritten`)}});return{parsed}}catch(e){log.error(e);return{error:e}}}__name(setupEnv,"setupEnv");import{mkdirSync,readdirSync,readFileSync,rmSync,unlinkSync,writeFileSync}from"fs";import{dirname,resolve as resolve2}from"path";var log2=Logger("zeed:filestorage");var FileStorage=class{constructor(opt={}){this.store={};this.fileKeys=void 0;this.pretty=false;var _a2,_b2,_c,_d;this.dirname=resolve2(process.cwd(),opt.path||".fileStorage");this.pretty=!!opt.pretty;this.extension=(_a2=opt.extension)!=null?_a2:".json";if(opt.extension&&!this.extension.startsWith(".")){this.extension="."+this.extension}this.extensionLength=this.extension.length;this.objectToString=(_b2=opt.objectToString)!=null?_b2:data=>{return this.pretty?JSON.stringify(data,null,2):JSON.stringify(data)};this.objectFromString=(_c=opt.objectFromString)!=null?_c:data=>{try{return JSON.parse(data)}catch(err){log2.warn(`fileStorage parse error '${err}' in`,data)}};this.keyToFilename=(_d=opt.keyToFilename)!=null?_d:toValidFilename}setItem(key,value){this.store[key]=cloneObject(value);try{const data=this.objectToString(value);const path=this.getPath(key);mkdirSync(dirname(path),{recursive:true});writeFileSync(path,data,"utf8")}catch(err){log2.error("setItem error",err)}}getPath(key){return resolve2(this.dirname,this.keyToFilename(key)+this.extension)}getBuffer(key){const path=this.getPath(key);return Buffer.from(readFileSync(path))}getItem(key){let value=this.store[key];if(value===null)return;if(value!=null){return cloneObject(value)}try{const path=this.getPath(key);const data=readFileSync(path,"utf8");if(data!=null){const value2=this.objectFromString(data);this.store[key]=value2;return value2}}catch(err){log2.warn("getItem error",err);this.store[key]=null}}removeItem(key){delete this.store[key];if(this.fileKeys!=null){const index=this.fileKeys.indexOf(key);if(index!==-1){this.fileKeys.splice(index,1)}}try{const path=this.getPath(key);unlinkSync(path)}catch(err){}}clear(){this.fileKeys=[];this.store={};rmSync(this.dirname,{recursive:true,force:true})}allKeys(){if(this.fileKeys==null){try{this.fileKeys=readdirSync(this.dirname,{withFileTypes:true}).filter(item=>!item.isDirectory()&&item.name.endsWith(this.extension)).map(item=>item.name.slice(0,-this.extensionLength))||[]}catch(err){}}let keys=[...this.fileKeys||[]];for(let key of Object.keys(this.store)){if(!keys.includes(key)){keys.push(key)}}keys.sort();return keys}};__name(FileStorage,"FileStorage");import{createWriteStream,mkdirSync as mkdirSync2}from"fs";import{dirname as dirname2,resolve as resolve3}from"path";var namespaces={};function LoggerFileHandler(path,opt={}){const{level=LogLevel.all,filter="*"}=opt;path=resolve3(process.cwd(),path);mkdirSync2(dirname2(path),{recursive:true});var stream=createWriteStream(path,{flags:"a"});const matchesNamespace=useNamespaceFilter(filter);const matchesLevel=useLevelFilter(level);return msg=>{if(!matchesLevel(msg.level))return;if(!matchesNamespace(msg.name))return;const time2=new Date().toISOString();let name=msg.name||"";let ninfo=namespaces[name||""];if(ninfo==null){namespaces[name]=ninfo}let args=[`[${name||"*"}]`,renderMessages(msg.messages,{pretty:false})];function write(...args2){stream.write(args2.join(" ")+"\n")}__name(write,"write");switch(msg.level){case LogLevel.info:write(time2,`I|* `,...args);break;case LogLevel.warn:write(time2,`W|** `,...args);break;case LogLevel.error:write(time2,`E|***`,...args);break;default:write(time2,`D| `,...args);break}}}__name(LoggerFileHandler,"LoggerFileHandler");import{resolve as resolve4}from"path";function getStackLlocationList(stack){var _a2,_b2;if(typeof stack!=="string")return[];return((_b2=(_a2=stack==null?void 0:stack.split("\n"))==null?void 0:_a2.map(rawLine=>{let m=rawLine.match(/^\s+at.*(\((.*)\)|file:\/\/(.*)$)/);if(m){let line=m[3]||m[2];if(line.endsWith(")"))line=line.slice(0,-1);return line}}))==null?void 0:_b2.filter(v=>v!=null))||[]}__name(getStackLlocationList,"getStackLlocationList");var cwd=resolve4(process.cwd());var _a,_b;var home=((_a=process.env)==null?void 0:_a.HOME)?resolve4((_b=process.env)==null?void 0:_b.HOME):"";function pathStripCwd(path){if(path.includes("/node_modules/")){return""}const fileURL="file://";if(path.startsWith(fileURL)){return path.substr(fileURL.length)}if(cwd&&path.startsWith(cwd)){return path.substr(cwd.length+1)}if(home&&path.startsWith(home)){path="~/"+path.substr(home.length+1)}return path}__name(pathStripCwd,"pathStripCwd");function extractFileInfo(stackLine){let m=stackLine.match(/^\s*at.*(\((.*)\)|file:\/\/(.*)$)/);if(m){let line=m[3]||m[2];if(line.endsWith(")"))line=line.slice(0,-1);return line}return""}__name(extractFileInfo,"extractFileInfo");function getSourceLocation(level=2,stripCwd=true){var _a2;let stack=new Error().stack||"";let line=(_a2=getStackLlocationList(stack))==null?void 0:_a2[level];if(line&&stripCwd){line=pathStripCwd(line)}return line||""}__name(getSourceLocation,"getSourceLocation");function getStack(){return new Error().stack||""}__name(getStack,"getStack");function getSourceLocationByPrecedingPattern(patterns,stripCwd=true){let line="";let stack=new Error().stack||"";if(typeof stack==="string"){const lines=stack.split("\n").map(l=>l.trim());const index=lines.findIndex(l=>patterns.some(p=>l.startsWith(p)));line=lines[index+1];if(line){line=extractFileInfo(line)}if(line&&stripCwd){line=pathStripCwd(line)}}return line}__name(getSourceLocationByPrecedingPattern,"getSourceLocationByPrecedingPattern");import tty from"tty";function isTTY(){try{return tty.isatty(process.stdout.fd)}catch(err){}return false}__name(isTTY,"isTTY");var colors=[6,2,3,4,5,1];function selectColor(namespace){let hash=0;for(let i=0;i<namespace.length;i++){hash=(hash<<5)-hash+namespace.charCodeAt(i);hash|=0}return colors[Math.abs(hash)%colors.length]}__name(selectColor,"selectColor");var namespaces2={};var time=getTimestamp();var useColors=tty.isatty(process.stderr.fd);function log3(...args){return process.stderr.write(renderMessages(args)+"\n")}__name(log3,"log");var TTY_STYLE={BOLD:"[1m",UNBOLD:"[2m",RED:"[31m",GREEN:"[32m",BLUE:"[34m",PURPLE:"[35m",GRAY:"[37m",ORANGE:"[38;5;208m",UNCOLOR:"[0m"};var COLOR;(function(COLOR2){COLOR2[COLOR2["RED"]=1]="RED";COLOR2[COLOR2["GREEN"]=2]="GREEN";COLOR2[COLOR2["BLUE"]=4]="BLUE";COLOR2[COLOR2["PURPLE"]=5]="PURPLE";COLOR2[COLOR2["GRAY"]=7]="GRAY";COLOR2[COLOR2["ORANGE"]=8]="ORANGE"})(COLOR||(COLOR={}));var colorEnd="[0m";function colorString(value,colorCode){const colorStart=colorCode===8?TTY_STYLE.ORANGE:"[3"+(colorCode<8?colorCode:"8;5;"+colorCode)+"m";return`${colorStart}${value}${colorEnd}`}__name(colorString,"colorString");function colorStringList(list,style,bold=true){return list.map(value=>{if(typeof value!=="string")return value;let start=style;let end=colorEnd;if(bold){start=`${TTY_STYLE.BOLD}${start}`;end=`${end}${TTY_STYLE.BOLD}`}return`${start}${value}${end}`})}__name(colorStringList,"colorStringList");var loggerStackTraceDebug="loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485";function LoggerNodeHandler(opt={}){const{level=void 0,filter=void 0,colors:colors2=isTTY(),levelHelper=true,nameBrackets=true,padding=0,fill=0,stack=true}=opt;const matchesNamespace=useNamespaceFilter(filter);const matchesLevel=useLevelFilter(level);return msg=>{var _a2;if(!matchesLevel(msg.level))return;if(!matchesNamespace(msg.name))return;const timeNow=getTimestamp();let name=msg.name||"";let ninfo=namespaces2[name||""];if(ninfo==null){ninfo={color:selectColor(name)};namespaces2[name]=ninfo}const diff=formatMilliseconds(timeNow-time);let args;let displayName=nameBrackets?`[${name}]`:name;if(padding>0){displayName=displayName.padStart(padding," ")}if(fill>0){displayName=displayName.padEnd(fill," ")}if(colors2&&useColors){const c=ninfo.color;args=[colorString(displayName,c)+` | `];if(msg.level===LogLevel.warn){args.push(...colorStringList(msg.messages,TTY_STYLE.ORANGE))}else if(msg.level===LogLevel.error){args.push(...colorStringList(msg.messages,TTY_STYLE.RED))}else{args.push(...msg.messages)}args.push(colorString(`+${diff}`,c))}else{args=[displayName,...msg.messages];args.push(`+${diff}`)}if(((_a2=msg.messages)==null?void 0:_a2[0])===loggerStackTraceDebug){console.log(getStack())}if(stack){let line="";if(typeof stack==="boolean"){line=getSourceLocationByPrecedingPattern(["at Function.","at null.log (","at log ("],true);if(!line){line=getSourceLocation(0,true)}}else{const depth=typeof stack==="number"?stack:3;line=getSourceLocation(depth,true)}if(line){args.push(colorString(`(${line})`,7))}}switch(msg.level){case LogLevel.info:if(levelHelper)args[0]=`I|* `+args[0];log3(...args);break;case LogLevel.warn:if(levelHelper)args[0]=(colors2&&useColors?colorString(`W|** `,8):`W|** `)+args[0];log3(...args);break;case LogLevel.error:if(levelHelper)args[0]=(colors2&&useColors?colorString(`E|*** `,1):`E|*** `)+args[0];log3(...args);break;default:if(levelHelper)args[0]=`D| `+args[0];log3(...args);break}}}__name(LoggerNodeHandler,"LoggerNodeHandler");import nodeCrypto from"crypto";try{if(nodeCrypto&&nodeCrypto.webcrypto&&typeof globalThis!=="undefined"&&typeof globalThis.crypto==="undefined"){globalThis.crypto=nodeCrypto.webcrypto}}catch(err){console.warn("Failed to polyfill webcrypto",err)}function setupLogContextNode(){var _a2;let handlers=[LoggerNodeHandler({padding:32,nameBrackets:false})];let logFilePath=(_a2=process.env.ZEED_LOG)!=null?_a2:process.env.LOG;if(logFilePath){handlers.unshift(LoggerFileHandler(toPath(logFilePath)))}Logger.setHandlers(handlers)}__name(setupLogContextNode,"setupLogContextNode");setupLogContextNode();export{stringToPath,valueToPath,toPath,setupEnv,FileStorage,LoggerFileHandler,getStackLlocationList,getSourceLocation,getStack,getSourceLocationByPrecedingPattern,isTTY,colorString,colorStringList,loggerStackTraceDebug,LoggerNodeHandler};
|
|
2
|
+
//# sourceMappingURL=chunk-RH2Y4YUT.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/node/env.ts", "../src/node/filestorage.ts", "../src/node/log-file.ts", "../src/node/log-util.ts", "../src/node/log-node.ts", "../src/node/
|
|
4
|
-
"sourcesContent": ["// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport { LogLevel } from \"../common/log-base\"\nimport { Logger } from \"../common/log\"\n\nimport fs from \"fs\"\nimport { resolve } from \"path\"\n\nconst log = Logger(\"zeed:env\")\n\nconst NEWLINE = \"\\n\"\nconst RE_INI_KEY_VAL = /^\\s*([\\w_.-]+)\\s*=\\s*(.*)?\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\n|\\r|\\r\\n/\n\ntype csvOptions = {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n}\n\n// Parses src into an Object\nfunction parse(src: string, options: csvOptions = {}) {\n let obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n src\n .toString()\n .split(NEWLINES_MATCH)\n .forEach(function (line, idx) {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || \"\"\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === \"'\" && val[end] === \"'\"\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted) {\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n } else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n } else {\n log.debug(\n `did not match key and value when parsing line ${idx + 1}: ${line}`\n )\n }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue: string = \".\"\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = \"\"): string {\n if (value == null) value = defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\n// Populates process.env from .env file\nexport function setupEnv(options: csvOptions = {}) {\n const dotenvPath: string =\n options?.path ?? toPath(options?.filename ?? \".env\")\n const encoding: BufferEncoding = options?.encoding ?? \"utf8\"\n const debug = options?.debug || false\n\n if (debug !== true) log.level = LogLevel.off\n\n try {\n // specifying an encoding returns a string instead of a buffer\n const parsedEnv = fs.existsSync(dotenvPath)\n ? parse(fs.readFileSync(dotenvPath, { encoding }), { debug })\n : {}\n const parsedEnvLocal = fs.existsSync(dotenvPath + \".local\")\n ? parse(fs.readFileSync(dotenvPath + \".local\", { encoding }), { debug })\n : {}\n\n const parsed: Record<string, string> = Object.assign(\n {},\n parsedEnv,\n parsedEnvLocal\n )\n let env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === \"string\") {\n key = options?.prefix + key\n }\n if (!Object.prototype.hasOwnProperty.call(env, key)) {\n if (value != null) {\n log.info(`set env.${key} = ${value}`)\n env[key] = value\n }\n } else {\n log.debug(`\"${key}\" is already defined and will not be overwritten`)\n }\n })\n return { parsed }\n } catch (e) {\n log.error(e)\n return { error: e }\n }\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport {\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { toValidFilename } from \"../common/data/path\"\nimport { cloneObject } from \"../common/data/utils\"\nimport { Logger } from \"../common/log\"\nimport { Json, ObjectStorage } from \"../common/types\"\n\nconst log = Logger(\"zeed:filestorage\")\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty: boolean = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path || \".fileStorage\")\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? \".json\"\n\n if (opt.extension && !this.extension.startsWith(\".\")) {\n this.extension = \".\" + this.extension\n }\n this.extensionLength = this.extension.length\n\n this.objectToString =\n opt.objectToString ??\n ((data: any): string => {\n return this.pretty\n ? JSON.stringify(data, null, 2)\n : JSON.stringify(data)\n })\n\n this.objectFromString =\n opt.objectFromString ??\n ((data: string) => {\n try {\n return JSON.parse(data)\n } catch (err) {\n log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, \"utf8\")\n } catch (err) {\n log.error(\"setItem error\", err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): Buffer {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n let value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null) return\n\n if (value != null) {\n return cloneObject(value) // this.objectFromString(value)\n }\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, \"utf8\")\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n } catch (err) {\n log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1) {\n this.fileKeys.splice(index, 1)\n }\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n } catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys =\n readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n (item) =>\n !item.isDirectory() && item.name.endsWith(this.extension)\n )\n .map((item) => item.name.slice(0, -this.extensionLength)) || []\n } catch (err) {}\n }\n let keys = [...(this.fileKeys || [])]\n for (let key of Object.keys(this.store)) {\n if (!keys.includes(key)) {\n keys.push(key)\n }\n }\n keys.sort()\n return keys\n }\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { renderMessages } from \"../common/data/convert\"\nimport { LogHandlerOptions, LogLevel, LogMessage } from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\n\nlet namespaces: Record<string, any> = {}\n\nexport function LoggerFileHandler(path: string, opt: LogHandlerOptions = {}) {\n const { level = LogLevel.all, filter = \"*\" } = opt\n path = resolve(process.cwd(), path)\n mkdirSync(dirname(path), { recursive: true })\n var stream = createWriteStream(path, { flags: \"a\" })\n // stream.end()\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n\n const time = new Date().toISOString()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n namespaces[name] = ninfo\n }\n\n let args: string[] = [\n `[${name || \"*\"}]`,\n renderMessages(msg.messages, { pretty: false }),\n ]\n\n function write(...args: string[]): void {\n stream.write(args.join(\"\\t\") + \"\\n\")\n }\n\n switch (msg.level) {\n case LogLevel.info:\n write(time, `I|* `, ...args)\n break\n case LogLevel.warn:\n write(time, `W|** `, ...args)\n break\n case LogLevel.error:\n write(time, `E|***`, ...args)\n break\n default:\n write(time, `D| `, ...args)\n break\n }\n }\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { resolve } from \"path\"\n\nexport function getStackLlocationList(stack: string): any[] {\n if (typeof stack !== \"string\") return []\n // console.log(\"stack\", stack)\n return (\n stack\n ?.split(\"\\n\")\n ?.map((rawLine) => {\n let m = rawLine.match(/^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)/)\n if (m) {\n let line = m[3] || m[2]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n })\n ?.filter((v) => v != null) || []\n )\n}\n\nconst cwd = resolve(process.cwd())\nconst home = process.env?.HOME ? resolve(process.env?.HOME) : \"\"\n// console.log(`cwd = ${cwd}, home = ${home}}`)\n\nfunction pathStripCwd(path: string) {\n // console.log(\">\", path)\n\n if (path.includes(\"/node_modules/\")) {\n return \"\"\n }\n\n const fileURL = \"file://\"\n if (path.startsWith(fileURL)) {\n return path.substr(fileURL.length)\n }\n\n if (cwd && path.startsWith(cwd)) {\n return path.substr(cwd.length + 1)\n }\n\n if (home && path.startsWith(home)) {\n path = \"~/\" + path.substr(home.length + 1)\n }\n\n return path\n}\n\nfunction extractFileInfo(stackLine: string): string {\n let m = stackLine.match(/^\\s*at.*(\\((.*)\\)|file:\\/\\/(.*)$)/)\n if (m) {\n let line = m[3] || m[2]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n return \"\"\n}\n\n/**\n * Get the source code location of the caller\n * https://stackoverflow.com/a/47296370/140927\n *\n * @param level Number of levels to go down the stack trace\n * @param stripCwd Strip the current working directory, only reasonable for Node.js environment\n * @returns\n */\nexport function getSourceLocation(level = 2, stripCwd = true): string {\n let stack = new Error().stack || \"\"\n let line: string | undefined = getStackLlocationList(stack)?.[level]\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n return line || \"\"\n}\n\nexport function getStack(): string {\n return new Error().stack || \"\"\n}\n\nexport function getSourceLocationByPrecedingPattern(\n patterns: string[],\n stripCwd = true\n) {\n let line = \"\"\n let stack = new Error().stack || \"\"\n if (typeof stack === \"string\") {\n const lines = stack.split(\"\\n\").map((l) => l.trim())\n // console.log(lines)\n const index = lines.findIndex((l) => patterns.some((p) => l.startsWith(p)))\n line = lines[index + 1]\n if (line) {\n line = extractFileInfo(line)\n }\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n }\n return line\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport tty from \"tty\"\nimport { renderMessages } from \"../common/data/convert\"\nimport {\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\nimport {\n getSourceLocation,\n getSourceLocationByPrecedingPattern,\n getStack,\n} from \"./log-util\"\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\n\nexport function isTTY(): boolean {\n try {\n return tty.isatty(process.stdout.fd)\n } catch (err) {}\n return false\n}\n\nconst colors = [6, 2, 3, 4, 5, 1]\n\nfunction selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nconst useColors = tty.isatty(process.stderr.fd)\n\nfunction log(...args: any[]) {\n return process.stderr.write(renderMessages(args) + \"\\n\")\n}\n\n// export const BOLD = Symbol()\n// export const UNBOLD = Symbol()\n// export const BLUE = Symbol()\n// export const GREY = Symbol()\n// export const GREEN = Symbol()\n// export const RED = Symbol()\n// export const PURPLE = Symbol()\n// export const ORANGE = Symbol()\n// export const UNCOLOR = Symbol()\n\n// const _browserStyleMap = {\n// [BOLD]: pair.create(\"font-weight\", \"bold\"),\n// [UNBOLD]: pair.create(\"font-weight\", \"normal\"),\n// [BLUE]: pair.create(\"color\", \"blue\"),\n// [GREEN]: pair.create(\"color\", \"green\"),\n// [GREY]: pair.create(\"color\", \"grey\"),\n// [RED]: pair.create(\"color\", \"red\"),\n// [PURPLE]: pair.create(\"color\", \"purple\"),\n// [ORANGE]: pair.create(\"color\", \"orange\"), // not well supported in chrome when debugging node with inspector - TODO: deprecate\n// [UNCOLOR]: pair.create(\"color\", \"black\"),\n// }\n\nconst TTY_STYLE = {\n BOLD: \"\\u001b[1m\",\n UNBOLD: \"\\u001b[2m\",\n RED: \"\\u001b[31m\",\n GREEN: \"\\u001b[32m\",\n BLUE: \"\\u001b[34m\",\n PURPLE: \"\\u001b[35m\",\n GRAY: \"\\u001b[37m\",\n ORANGE: \"\\u001b[38;5;208m\",\n UNCOLOR: \"\\u001b[0m\",\n}\n\nenum COLOR {\n RED = 1,\n GREEN = 2,\n BLUE = 4,\n PURPLE = 5,\n GRAY = 7,\n ORANGE = 8,\n}\n\nconst colorEnd = \"\\u001B[0m\"\n\nexport function colorString(value: string, colorCode: number) {\n const colorStart =\n colorCode === COLOR.ORANGE\n ? TTY_STYLE.ORANGE\n : \"\\u001B[3\" + (colorCode < 8 ? colorCode : \"8;5;\" + colorCode) + \"m\"\n return `${colorStart}${value}${colorEnd}`\n}\n\nexport function colorStringList(\n list: Array<any>,\n style: string,\n bold: boolean = true\n) {\n return list.map((value) => {\n if (typeof value !== \"string\") return value\n let start = style\n let end = colorEnd\n if (bold) {\n start = `${TTY_STYLE.BOLD}${start}`\n end = `${end}${TTY_STYLE.BOLD}`\n }\n return `${start}${value}${end}`\n })\n}\n\nexport const loggerStackTraceDebug =\n \"loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485\"\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = undefined,\n filter = undefined,\n colors = isTTY(),\n levelHelper = true,\n nameBrackets = true,\n padding = 0,\n fill = 0,\n stack = true,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n const timeNow = getTimestamp()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const diff = formatMilliseconds(timeNow - time)\n\n let args: string[]\n\n let displayName = nameBrackets ? `[${name}]` : name\n\n if (padding > 0) {\n displayName = displayName.padStart(padding, \" \")\n }\n\n if (fill > 0) {\n displayName = displayName.padEnd(fill, \" \")\n }\n\n if (colors && useColors) {\n const c = ninfo.color\n args = [colorString(displayName, c) + ` | `] // nameBrackets ? [`%c[${name}]`] : [`%c${name}`]\n if (msg.level === LogLevel.warn) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n } else if (msg.level === LogLevel.error) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.RED))\n } else {\n args.push(...msg.messages)\n }\n args.push(colorString(`+${diff}`, c))\n } else {\n args = [displayName, ...msg.messages]\n args.push(`+${diff}`)\n }\n\n if (msg.messages?.[0] === loggerStackTraceDebug) {\n console.log(getStack())\n }\n\n if (stack) {\n let line: string = \"\"\n if (typeof stack === \"boolean\") {\n line = getSourceLocationByPrecedingPattern(\n [\"at Function.\", \"at null.log (\", \"at log (\"],\n true\n )\n if (!line) {\n line = getSourceLocation(0, true)\n }\n } else {\n const depth = typeof stack === \"number\" ? stack : 3\n line = getSourceLocation(depth, true)\n }\n if (line) {\n args.push(colorString(`(${line})`, COLOR.GRAY))\n }\n }\n switch (msg.level) {\n case LogLevel.info:\n if (levelHelper) args[0] = `I|* ` + args[0]\n log(...args)\n break\n case LogLevel.warn:\n if (levelHelper)\n args[0] =\n (colors && useColors\n ? colorString(`W|** `, COLOR.ORANGE)\n : `W|** `) + args[0]\n log(...args)\n break\n case LogLevel.error:\n if (levelHelper)\n args[0] =\n (colors && useColors\n ? colorString(`E|*** `, COLOR.RED)\n : `E|*** `) + args[0]\n log(...args)\n break\n default:\n if (levelHelper) args[0] = `D| ` + args[0]\n log(...args)\n break\n }\n }\n}\n", "import { dirname } from \"path\"\nimport { fileURLToPath } from \"url\"\n\n// From https://antfu.me/notes#isomorphic-dirname\nexport const _dirname =\n typeof __dirname !== \"undefined\"\n ? __dirname\n : dirname(fileURLToPath(import.meta.url))\n", "// https://nodejs.org/api/webcrypto.html\nimport nodeCrypto from \"crypto\"\n\nexport {}\n\ndeclare module NodeJS {\n interface Global {\n crypto: Crypto\n }\n}\n\ntry {\n if (\n nodeCrypto &&\n nodeCrypto.webcrypto &&\n typeof globalThis !== \"undefined\" &&\n typeof globalThis.crypto === \"undefined\"\n ) {\n // @ts-ignore\n globalThis.crypto = nodeCrypto.webcrypto\n }\n} catch (err) {\n console.warn(\"Failed to polyfill webcrypto\", err)\n}\n", "import { Logger } from \"../common/log\"\nimport { toPath } from \"./env\"\nimport { LoggerFileHandler } from \"./log-file\"\nimport { LoggerNodeHandler } from \"./log-node\"\n\nfunction setupLogContextNode() {\n let handlers = [\n LoggerNodeHandler({\n padding: 32,\n nameBrackets: false,\n // levelHelper: false,\n }),\n ]\n\n let logFilePath = process.env.ZEED_LOG ?? process.env.LOG\n if (logFilePath) {\n handlers.unshift(LoggerFileHandler(toPath(logFilePath)))\n }\n\n Logger.setHandlers(handlers)\n}\n\nsetupLogContextNode()\n"],
|
|
5
|
-
"mappings": "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
|
|
3
|
+
"sources": ["../src/node/env.ts", "../src/node/filestorage.ts", "../src/node/log-file.ts", "../src/node/log-util.ts", "../src/node/log-node.ts", "../src/node/crypto.ts", "../src/node/log-context-node.ts"],
|
|
4
|
+
"sourcesContent": ["// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport { LogLevel } from \"../common/log-base\"\nimport { Logger } from \"../common/log\"\n\nimport fs from \"fs\"\nimport { resolve } from \"path\"\n\nconst log = Logger(\"zeed:env\")\n\nconst NEWLINE = \"\\n\"\nconst RE_INI_KEY_VAL = /^\\s*([\\w_.-]+)\\s*=\\s*(.*)?\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\n|\\r|\\r\\n/\n\ntype csvOptions = {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n}\n\n// Parses src into an Object\nfunction parse(src: string, options: csvOptions = {}) {\n let obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n src\n .toString()\n .split(NEWLINES_MATCH)\n .forEach(function (line, idx) {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || \"\"\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === \"'\" && val[end] === \"'\"\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted) {\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n } else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n } else {\n log.debug(\n `did not match key and value when parsing line ${idx + 1}: ${line}`\n )\n }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue: string = \".\"\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = \"\"): string {\n if (value == null) value = defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\n// Populates process.env from .env file\nexport function setupEnv(options: csvOptions = {}) {\n const dotenvPath: string =\n options?.path ?? toPath(options?.filename ?? \".env\")\n const encoding: BufferEncoding = options?.encoding ?? \"utf8\"\n const debug = options?.debug || false\n\n if (debug !== true) log.level = LogLevel.off\n\n try {\n // specifying an encoding returns a string instead of a buffer\n const parsedEnv = fs.existsSync(dotenvPath)\n ? parse(fs.readFileSync(dotenvPath, { encoding }), { debug })\n : {}\n const parsedEnvLocal = fs.existsSync(dotenvPath + \".local\")\n ? parse(fs.readFileSync(dotenvPath + \".local\", { encoding }), { debug })\n : {}\n\n const parsed: Record<string, string> = Object.assign(\n {},\n parsedEnv,\n parsedEnvLocal\n )\n let env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === \"string\") {\n key = options?.prefix + key\n }\n if (!Object.prototype.hasOwnProperty.call(env, key)) {\n if (value != null) {\n log.info(`set env.${key} = ${value}`)\n env[key] = value\n }\n } else {\n log.debug(`\"${key}\" is already defined and will not be overwritten`)\n }\n })\n return { parsed }\n } catch (e) {\n log.error(e)\n return { error: e }\n }\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport {\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { toValidFilename } from \"../common/data/path\"\nimport { cloneObject } from \"../common/data/utils\"\nimport { Logger } from \"../common/log\"\nimport { Json, ObjectStorage } from \"../common/types\"\n\nconst log = Logger(\"zeed:filestorage\")\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty: boolean = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path || \".fileStorage\")\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? \".json\"\n\n if (opt.extension && !this.extension.startsWith(\".\")) {\n this.extension = \".\" + this.extension\n }\n this.extensionLength = this.extension.length\n\n this.objectToString =\n opt.objectToString ??\n ((data: any): string => {\n return this.pretty\n ? JSON.stringify(data, null, 2)\n : JSON.stringify(data)\n })\n\n this.objectFromString =\n opt.objectFromString ??\n ((data: string) => {\n try {\n return JSON.parse(data)\n } catch (err) {\n log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, \"utf8\")\n } catch (err) {\n log.error(\"setItem error\", err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): Buffer {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n let value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null) return\n\n if (value != null) {\n return cloneObject(value) // this.objectFromString(value)\n }\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, \"utf8\")\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n } catch (err) {\n log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1) {\n this.fileKeys.splice(index, 1)\n }\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n } catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys =\n readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n (item) =>\n !item.isDirectory() && item.name.endsWith(this.extension)\n )\n .map((item) => item.name.slice(0, -this.extensionLength)) || []\n } catch (err) {}\n }\n let keys = [...(this.fileKeys || [])]\n for (let key of Object.keys(this.store)) {\n if (!keys.includes(key)) {\n keys.push(key)\n }\n }\n keys.sort()\n return keys\n }\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { renderMessages } from \"../common/data/convert\"\nimport { LogHandlerOptions, LogLevel, LogMessage } from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\n\nlet namespaces: Record<string, any> = {}\n\nexport function LoggerFileHandler(path: string, opt: LogHandlerOptions = {}) {\n const { level = LogLevel.all, filter = \"*\" } = opt\n path = resolve(process.cwd(), path)\n mkdirSync(dirname(path), { recursive: true })\n var stream = createWriteStream(path, { flags: \"a\" })\n // stream.end()\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n\n const time = new Date().toISOString()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n namespaces[name] = ninfo\n }\n\n let args: string[] = [\n `[${name || \"*\"}]`,\n renderMessages(msg.messages, { pretty: false }),\n ]\n\n function write(...args: string[]): void {\n stream.write(args.join(\"\\t\") + \"\\n\")\n }\n\n switch (msg.level) {\n case LogLevel.info:\n write(time, `I|* `, ...args)\n break\n case LogLevel.warn:\n write(time, `W|** `, ...args)\n break\n case LogLevel.error:\n write(time, `E|***`, ...args)\n break\n default:\n write(time, `D| `, ...args)\n break\n }\n }\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { resolve } from \"path\"\n\nexport function getStackLlocationList(stack: string): any[] {\n if (typeof stack !== \"string\") return []\n // console.log(\"stack\", stack)\n return (\n stack\n ?.split(\"\\n\")\n ?.map((rawLine) => {\n let m = rawLine.match(/^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)/)\n if (m) {\n let line = m[3] || m[2]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n })\n ?.filter((v) => v != null) || []\n )\n}\n\nconst cwd = resolve(process.cwd())\nconst home = process.env?.HOME ? resolve(process.env?.HOME) : \"\"\n// console.log(`cwd = ${cwd}, home = ${home}}`)\n\nfunction pathStripCwd(path: string) {\n // console.log(\">\", path)\n\n if (path.includes(\"/node_modules/\")) {\n return \"\"\n }\n\n const fileURL = \"file://\"\n if (path.startsWith(fileURL)) {\n return path.substr(fileURL.length)\n }\n\n if (cwd && path.startsWith(cwd)) {\n return path.substr(cwd.length + 1)\n }\n\n if (home && path.startsWith(home)) {\n path = \"~/\" + path.substr(home.length + 1)\n }\n\n return path\n}\n\nfunction extractFileInfo(stackLine: string): string {\n let m = stackLine.match(/^\\s*at.*(\\((.*)\\)|file:\\/\\/(.*)$)/)\n if (m) {\n let line = m[3] || m[2]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n return \"\"\n}\n\n/**\n * Get the source code location of the caller\n * https://stackoverflow.com/a/47296370/140927\n *\n * @param level Number of levels to go down the stack trace\n * @param stripCwd Strip the current working directory, only reasonable for Node.js environment\n * @returns\n */\nexport function getSourceLocation(level = 2, stripCwd = true): string {\n let stack = new Error().stack || \"\"\n let line: string | undefined = getStackLlocationList(stack)?.[level]\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n return line || \"\"\n}\n\nexport function getStack(): string {\n return new Error().stack || \"\"\n}\n\nexport function getSourceLocationByPrecedingPattern(\n patterns: string[],\n stripCwd = true\n) {\n let line = \"\"\n let stack = new Error().stack || \"\"\n if (typeof stack === \"string\") {\n const lines = stack.split(\"\\n\").map((l) => l.trim())\n // console.log(lines)\n const index = lines.findIndex((l) => patterns.some((p) => l.startsWith(p)))\n line = lines[index + 1]\n if (line) {\n line = extractFileInfo(line)\n }\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n }\n return line\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport tty from \"tty\"\nimport { renderMessages } from \"../common/data/convert\"\nimport {\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\nimport {\n getSourceLocation,\n getSourceLocationByPrecedingPattern,\n getStack,\n} from \"./log-util\"\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\n\nexport function isTTY(): boolean {\n try {\n return tty.isatty(process.stdout.fd)\n } catch (err) {}\n return false\n}\n\nconst colors = [6, 2, 3, 4, 5, 1]\n\nfunction selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nconst useColors = tty.isatty(process.stderr.fd)\n\nfunction log(...args: any[]) {\n return process.stderr.write(renderMessages(args) + \"\\n\")\n}\n\n// export const BOLD = Symbol()\n// export const UNBOLD = Symbol()\n// export const BLUE = Symbol()\n// export const GREY = Symbol()\n// export const GREEN = Symbol()\n// export const RED = Symbol()\n// export const PURPLE = Symbol()\n// export const ORANGE = Symbol()\n// export const UNCOLOR = Symbol()\n\n// const _browserStyleMap = {\n// [BOLD]: pair.create(\"font-weight\", \"bold\"),\n// [UNBOLD]: pair.create(\"font-weight\", \"normal\"),\n// [BLUE]: pair.create(\"color\", \"blue\"),\n// [GREEN]: pair.create(\"color\", \"green\"),\n// [GREY]: pair.create(\"color\", \"grey\"),\n// [RED]: pair.create(\"color\", \"red\"),\n// [PURPLE]: pair.create(\"color\", \"purple\"),\n// [ORANGE]: pair.create(\"color\", \"orange\"), // not well supported in chrome when debugging node with inspector - TODO: deprecate\n// [UNCOLOR]: pair.create(\"color\", \"black\"),\n// }\n\nconst TTY_STYLE = {\n BOLD: \"\\u001b[1m\",\n UNBOLD: \"\\u001b[2m\",\n RED: \"\\u001b[31m\",\n GREEN: \"\\u001b[32m\",\n BLUE: \"\\u001b[34m\",\n PURPLE: \"\\u001b[35m\",\n GRAY: \"\\u001b[37m\",\n ORANGE: \"\\u001b[38;5;208m\",\n UNCOLOR: \"\\u001b[0m\",\n}\n\nenum COLOR {\n RED = 1,\n GREEN = 2,\n BLUE = 4,\n PURPLE = 5,\n GRAY = 7,\n ORANGE = 8,\n}\n\nconst colorEnd = \"\\u001B[0m\"\n\nexport function colorString(value: string, colorCode: number) {\n const colorStart =\n colorCode === COLOR.ORANGE\n ? TTY_STYLE.ORANGE\n : \"\\u001B[3\" + (colorCode < 8 ? colorCode : \"8;5;\" + colorCode) + \"m\"\n return `${colorStart}${value}${colorEnd}`\n}\n\nexport function colorStringList(\n list: Array<any>,\n style: string,\n bold: boolean = true\n) {\n return list.map((value) => {\n if (typeof value !== \"string\") return value\n let start = style\n let end = colorEnd\n if (bold) {\n start = `${TTY_STYLE.BOLD}${start}`\n end = `${end}${TTY_STYLE.BOLD}`\n }\n return `${start}${value}${end}`\n })\n}\n\nexport const loggerStackTraceDebug =\n \"loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485\"\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = undefined,\n filter = undefined,\n colors = isTTY(),\n levelHelper = true,\n nameBrackets = true,\n padding = 0,\n fill = 0,\n stack = true,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n const timeNow = getTimestamp()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const diff = formatMilliseconds(timeNow - time)\n\n let args: string[]\n\n let displayName = nameBrackets ? `[${name}]` : name\n\n if (padding > 0) {\n displayName = displayName.padStart(padding, \" \")\n }\n\n if (fill > 0) {\n displayName = displayName.padEnd(fill, \" \")\n }\n\n if (colors && useColors) {\n const c = ninfo.color\n args = [colorString(displayName, c) + ` | `] // nameBrackets ? [`%c[${name}]`] : [`%c${name}`]\n if (msg.level === LogLevel.warn) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n } else if (msg.level === LogLevel.error) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.RED))\n } else {\n args.push(...msg.messages)\n }\n args.push(colorString(`+${diff}`, c))\n } else {\n args = [displayName, ...msg.messages]\n args.push(`+${diff}`)\n }\n\n if (msg.messages?.[0] === loggerStackTraceDebug) {\n console.log(getStack())\n }\n\n if (stack) {\n let line: string = \"\"\n if (typeof stack === \"boolean\") {\n line = getSourceLocationByPrecedingPattern(\n [\"at Function.\", \"at null.log (\", \"at log (\"],\n true\n )\n if (!line) {\n line = getSourceLocation(0, true)\n }\n } else {\n const depth = typeof stack === \"number\" ? stack : 3\n line = getSourceLocation(depth, true)\n }\n if (line) {\n args.push(colorString(`(${line})`, COLOR.GRAY))\n }\n }\n switch (msg.level) {\n case LogLevel.info:\n if (levelHelper) args[0] = `I|* ` + args[0]\n log(...args)\n break\n case LogLevel.warn:\n if (levelHelper)\n args[0] =\n (colors && useColors\n ? colorString(`W|** `, COLOR.ORANGE)\n : `W|** `) + args[0]\n log(...args)\n break\n case LogLevel.error:\n if (levelHelper)\n args[0] =\n (colors && useColors\n ? colorString(`E|*** `, COLOR.RED)\n : `E|*** `) + args[0]\n log(...args)\n break\n default:\n if (levelHelper) args[0] = `D| ` + args[0]\n log(...args)\n break\n }\n }\n}\n", "// https://nodejs.org/api/webcrypto.html\nimport nodeCrypto from \"crypto\"\n\nexport {}\n\ndeclare module NodeJS {\n interface Global {\n crypto: Crypto\n }\n}\n\ntry {\n if (\n nodeCrypto &&\n nodeCrypto.webcrypto &&\n typeof globalThis !== \"undefined\" &&\n typeof globalThis.crypto === \"undefined\"\n ) {\n // @ts-ignore\n globalThis.crypto = nodeCrypto.webcrypto\n }\n} catch (err) {\n console.warn(\"Failed to polyfill webcrypto\", err)\n}\n", "import { Logger } from \"../common/log\"\nimport { toPath } from \"./env\"\nimport { LoggerFileHandler } from \"./log-file\"\nimport { LoggerNodeHandler } from \"./log-node\"\n\nfunction setupLogContextNode() {\n let handlers = [\n LoggerNodeHandler({\n padding: 32,\n nameBrackets: false,\n // levelHelper: false,\n }),\n ]\n\n let logFilePath = process.env.ZEED_LOG ?? process.env.LOG\n if (logFilePath) {\n handlers.unshift(LoggerFileHandler(toPath(logFilePath)))\n }\n\n Logger.setHandlers(handlers)\n}\n\nsetupLogContextNode()\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|