zeed 0.7.13 → 0.7.18
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/README.md +42 -0
- package/dist/{chunk-EAUCJSFF.js → chunk-G4IZRIH3.js} +2 -2
- package/dist/{chunk-EAUCJSFF.js.map → chunk-G4IZRIH3.js.map} +0 -0
- package/dist/{chunk-7IHXSOIK.js → chunk-IPMT2EQ4.js} +2 -2
- package/dist/{chunk-7IHXSOIK.js.map → chunk-IPMT2EQ4.js.map} +3 -3
- package/dist/{dispose-7cfe3b15.d.ts → disposer-5cf241ba.d.ts} +10 -5
- 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.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-eb254c19.d.ts → log-colors-75955d3f.d.ts} +1 -1
- package/dist/{path-0afaffb8.d.ts → path-e784058a.d.ts} +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -235,6 +235,48 @@ deepEqual({ a: { b: 1 } }, { a: { b: 2 } }) // false
|
|
|
235
235
|
deepMerge({ a: { b: 1 } }, { c: 3, a: { d: 4 } }) // {a:{b:1, d:4}, c:4}
|
|
236
236
|
```
|
|
237
237
|
|
|
238
|
+
## Disposer
|
|
239
|
+
|
|
240
|
+
`useDisposer` will simplify cleaning up objects. You just need to `track` a function or and object with `dispose` method to be called for cleanup. This can also be nested. A simple example is a timer:
|
|
241
|
+
|
|
242
|
+
```ts
|
|
243
|
+
const disposableTimer = () => {
|
|
244
|
+
const timout = setTimeout(() => console.log('hello world')), 1000)
|
|
245
|
+
return () => clearTimeout(timeout)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
let disposer = useDisposer()
|
|
249
|
+
|
|
250
|
+
const obj = disposableTimer()
|
|
251
|
+
disposer.track(obj)
|
|
252
|
+
|
|
253
|
+
const untrackTimer = disposer.track(disposableTimer())
|
|
254
|
+
|
|
255
|
+
// ...
|
|
256
|
+
|
|
257
|
+
disposer.untrack(obj) // dispose single object
|
|
258
|
+
untrackTimer() // dispose single object by return value of .track
|
|
259
|
+
disposer.dispose() // will dispose all tracked elements
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
You can also `untrack` single entries. Entries are untracked LIFO. Disposers can also return a Promise and therefore `await` async disposals.
|
|
263
|
+
|
|
264
|
+
The disposer itself is also a call to dispose i.e. for convenience you can add it to objects and provide `dispose` easily like this:
|
|
265
|
+
|
|
266
|
+
```ts
|
|
267
|
+
class DisposeExample {
|
|
268
|
+
dispose = useDisposer()
|
|
269
|
+
|
|
270
|
+
constructor() {
|
|
271
|
+
this.dispose.track(disposableTimer())
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
let obj = new DisposeExample()
|
|
276
|
+
// ...
|
|
277
|
+
obj.dispose()
|
|
278
|
+
```
|
|
279
|
+
|
|
238
280
|
---
|
|
239
281
|
|
|
240
282
|
Recommended other collections of common JS utils:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{getSourceLocation,renderMessages,toValidFilename}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{getSourceLocation,renderMessages,toValidFilename}from"./chunk-IPMT2EQ4.js";import{LogLevel,Logger,__name,formatMilliseconds,getTimestamp,useNamespaceFilter}from"./chunk-PUZ27HXM.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(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 _a,_b,_c,_d;const dotenvPath=(_b=options==null?void 0:options.path)!=null?_b:resolve(process.cwd(),(_a=options==null?void 0:options.filename)!=null?_a:".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{readFileSync,writeFileSync,mkdirSync,rmSync,unlinkSync,readdirSync}from"fs";import{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 _a,_b,_c;this.dirname=resolve2(process.cwd(),opt.path||".fileStorage");this.pretty=!!opt.pretty;this.extension=(_a=opt.extension)!=null?_a:".json";if(!this.extension.startsWith("."))this.extension="."+this.extension;this.extensionLength=this.extension.length;this.objectToString=(_b=opt.objectToString)!=null?_b: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)}}}setItem(key,value){const data=this.objectToString(value);this.store[key]=data;try{const path=this.getPath(key);mkdirSync(this.dirname,{recursive:true});writeFileSync(path,data,"utf8")}catch(err){log2.error("setItem error",err)}}getPath(key){return resolve2(this.dirname,toValidFilename(key)+this.extension)}getBuffer(key){const path=this.getPath(key);return Buffer.from(readFileSync(path))}getItem(key){if(this.store.hasOwnProperty(key)){let value=this.store[key];return this.objectFromString(value)}else{try{const path=this.getPath(key);const data=readFileSync(path,"utf8");if(data){return this.objectFromString(data)}}catch(err){log2.error("getItem error",err)}}}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{resolve as resolve3,dirname}from"path";var namespaces={};function LoggerFileHandler(path,opt={}){const{level=LogLevel.all,colors:colors2=true,levelHelper=false,nameBrackets=true,padding=16,filter=void 0}=opt;path=resolve3(process.cwd(),path);mkdirSync2(dirname(path),{recursive:true});var stream=createWriteStream(path,{flags:"a"});return msg=>{if(msg.level<level)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 tty from"tty";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 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="[3"+(colorCode<8?colorCode:"8;5;"+colorCode)+"m";return`${colorStart}${value}${colorEnd}`}__name(colorString,"colorString");function LoggerNodeHandler(opt={}){var _a;const{level=LogLevel.all,colors:colors2=true,levelHelper=true,nameBrackets=true,padding=0,fill=0,filter=void 0,stack=true}=opt;const matches=useNamespaceFilter((_a=filter!=null?filter:process.env.ZEED)!=null?_a:process.env.DEBUG);return msg=>{if(msg.level<level)return;if(!matches(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)+` | `];args.push(...msg.messages);args.push(colorString(`+${diff}`,c))}else{args=[displayName,...msg.messages];args.push(`+${diff}`)}if(stack){const depth=typeof stack==="number"?stack:3;const 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]=`W|** `+args[0];log3(...args);break;case LogLevel.error:if(levelHelper)args[0]=`E|*** `+args[0];log3(...args);break;default:if(levelHelper)args[0]=`D| `+args[0];log3(...args);break}}}__name(LoggerNodeHandler,"LoggerNodeHandler");import{dirname as dirname2}from"path";import{fileURLToPath}from"url";var _dirname=typeof __dirname!=="undefined"?__dirname:dirname2(fileURLToPath(import.meta.url));export{stringToPath,valueToPath,toPath,setupEnv,FileStorage,LoggerFileHandler,colorString,LoggerNodeHandler,_dirname};
|
|
2
|
+
//# sourceMappingURL=chunk-G4IZRIH3.js.map
|
|
File without changes
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import{LogLevel,Logger,__name,__spreadValues,getGlobal,getGlobalContext,getTimestamp}from"./chunk-PUZ27HXM.js";var separator=",";var preventCast=false;var ignoreNullOrUndefined=true;function filterFloat(value){if(/^([-+])?([0-9]+(\.[0-9]+)?|Infinity)$/.test(value)){return Number(value)}return NaN}__name(filterFloat,"filterFloat");function escape(field){if(ignoreNullOrUndefined&&field==void 0){return""}if(preventCast){return'="'+String(field).replace(/"/g,'""')+'"'}if(!isNaN(filterFloat(field))&&isFinite(field)){return parseFloat(field)}return'"'+String(field).replace(/"/g,'""')+'"'}__name(escape,"escape");function csv(data,headerRow){let body="";if(headerRow){body=headerRow.join(separator)+"\r\n"}for(let i=0;i<data.length;i++){body+=data[i].map(escape).join(separator)+"\r\n"}return body}__name(csv,"csv");var log=Logger("zeed:basex");var alphabets={"2":"01","8":"01234567","11":"0123456789a","16":"0123456789abcdef","32":"0123456789ABCDEFGHJKMNPQRSTVWXYZ","36":"0123456789abcdefghijklmnopqrstuvwxyz","58":"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz","62":"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz","64":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/","66":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~"};function useBase(alphaOrBase){let ALPHABET;if(typeof alphaOrBase==="string"){ALPHABET=alphaOrBase}else{ALPHABET=alphabets[alphaOrBase.toString()];if(ALPHABET==null)throw new Error(`Unknown base ${alphaOrBase}`)}if(ALPHABET.length>=255)throw new TypeError("Alphabet too long");const BASE_MAP=new Uint8Array(256);for(let j=0;j<BASE_MAP.length;j++){BASE_MAP[j]=255}for(let i=0;i<ALPHABET.length;i++){const x=ALPHABET.charAt(i);const xc=x.charCodeAt(0);if(BASE_MAP[xc]!==255)throw new TypeError(x+" is ambiguous");BASE_MAP[xc]=i}const BASE=ALPHABET.length;const LEADER=ALPHABET.charAt(0);const FACTOR=Math.log(BASE)/Math.log(256);const iFACTOR=Math.log(256)/Math.log(BASE);function encode(source,padToLength=-1){let data;if(source instanceof ArrayBuffer){data=new Uint8Array(source)}else{data=source}if(data.length===0)return"";let length=0;let pbegin=0;const pend=data.length;while(pbegin!==pend&&data[pbegin]===0)pbegin++;const size2=(pend-pbegin)*iFACTOR+1>>>0;const dataEncoded=new Uint8Array(size2);while(pbegin!==pend){let carry=data[pbegin];let i=0;for(let it1=size2-1;(carry!==0||i<length)&&it1!==-1;it1--,i++){carry+=256*dataEncoded[it1]>>>0;dataEncoded[it1]=carry%BASE>>>0;carry=carry/BASE>>>0}if(carry!==0){log.warn("Non-zero carry",data,padToLength,i,size2);throw new Error("Non-zero carry")}length=i;pbegin++}let it2=size2-length;while(it2!==size2&&dataEncoded[it2]===0){it2++}let str="";for(;it2<size2;++it2)str+=ALPHABET.charAt(dataEncoded[it2]);if(padToLength>0){return str.padStart(padToLength,LEADER)}return str}__name(encode,"encode");function decode(source,padToLength=-1){if(typeof source!=="string")throw new TypeError("Expected String");if(source.length===0)return new Uint8Array;source=source.replace(/\s+/gi,"");let psz=0;let length=0;while(source[psz]===LEADER){psz++}const size2=(source.length-psz)*FACTOR+1>>>0;const dataDecoded=new Uint8Array(size2);while(source[psz]){let carry=BASE_MAP[source.charCodeAt(psz)];if(carry===255)throw new Error(`Unsupported character "${source[psz]}"`);let i=0;for(let it3=size2-1;(carry!==0||i<length)&&it3!==-1;it3--,i++){carry+=BASE*dataDecoded[it3]>>>0;dataDecoded[it3]=carry%256>>>0;carry=carry/256>>>0}if(carry!==0)throw new Error("Non-zero carry");length=i;psz++}let it4=size2-length;while(it4!==size2&&dataDecoded[it4]===0){it4++}if(padToLength>0){return new Uint8Array([...new Uint8Array(padToLength-dataDecoded.length+it4),...dataDecoded.slice(it4)])}return dataDecoded.slice(it4)}__name(decode,"decode");return{encode,decode}}__name(useBase,"useBase");var{encode:encodeBase16,decode:decodeBase16}=useBase(16);var{encode:encodeBase32,decode:decodeBase32}=useBase(32);var{encode:encodeBase58,decode:decodeBase58}=useBase(58);var{encode:encodeBase62,decode:decodeBase62}=useBase(62);var toCamelCase=__name(s=>{if(s.length>0){if(/^[A-Z0-9_\-\ ]*$/g.test(s)){s=s.toLowerCase()}s=s.replace(/^[-_\ ]+/gi,"").replace(/[-_\ ]+$/gi,"").replace(/[-_\ ]+([a-z0-9])/gi,($0,$1)=>$1.toUpperCase());s=s[0].toLowerCase()+s.substring(1)}return s},"toCamelCase");function toCapitalize(s){return s.charAt(0).toUpperCase()+s.toLowerCase().slice(1)}__name(toCapitalize,"toCapitalize");function toCapitalizeWords(s){return s.replace(/\w\S*/g,toCapitalize)}__name(toCapitalizeWords,"toCapitalizeWords");function serializer(replacer,cycleReplacer){var stack=[],keys=[];if(cycleReplacer==null)cycleReplacer=__name(function(key,value){if(stack[0]===value)return"[Circular ~]";return"[Circular ~."+keys.slice(0,stack.indexOf(value)).join(".")+"]"},"cycleReplacer");return function(key,value){if(stack.length>0){var thisPos=stack.indexOf(this);~thisPos?stack.splice(thisPos+1):stack.push(this);~thisPos?keys.splice(thisPos,Infinity,key):keys.push(key);if(~stack.indexOf(value))value=cycleReplacer==null?void 0:cycleReplacer.call(this,key,value)}else stack.push(value);return replacer==null?value:replacer.call(this,key,value)}}__name(serializer,"serializer");function jsonStringify(obj,replacer,spaces,cycleReplacer){return JSON.stringify(obj,serializer(replacer,cycleReplacer),spaces)}__name(jsonStringify,"jsonStringify");var TRUE_VALUES_LIST=["1","true","yes","y","on"];function stringToBoolean(value,defaultValue=false){if(value==null||typeof value!=="string")return defaultValue;return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase())}__name(stringToBoolean,"stringToBoolean");function stringToInteger(value,defaultValue=0){var _a;if(value==null||typeof value!=="string")return defaultValue;return(_a=parseInt(value.trim(),10))!=null?_a:defaultValue}__name(stringToInteger,"stringToInteger");function stringToFloat(value,defaultValue=0){var _a;if(value==null||typeof value!=="string")return defaultValue;return(_a=parseFloat(value.trim()))!=null?_a:defaultValue}__name(stringToFloat,"stringToFloat");function valueToBoolean(value,defaultValue=false){if(value==null)return defaultValue;if(typeof value==="boolean")return value;if(typeof value==="number")return value!==0;return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase())}__name(valueToBoolean,"valueToBoolean");function valueToInteger(value,defaultValue=0){var _a;if(value==null)return defaultValue;if(typeof value==="boolean")return value?1:0;if(typeof value==="number")return Math.floor(value);return(_a=parseInt(String(value).trim(),10))!=null?_a:defaultValue}__name(valueToInteger,"valueToInteger");function valueToFloat(value,defaultValue=0){var _a;if(value==null)return defaultValue;if(typeof value==="boolean")return value?1:0;if(typeof value==="number")return Math.floor(value);return(_a=parseFloat(String(value).trim()))!=null?_a:defaultValue}__name(valueToFloat,"valueToFloat");function valueToString(value,defaultValue=""){var _a;if(value==null)return defaultValue;return(_a=String(value))!=null?_a:defaultValue}__name(valueToString,"valueToString");var toFloat=valueToFloat;var toInt=valueToInteger;var toString=valueToString;var toBool=valueToBoolean;function formatMessages(messages2,opt={}){const{trace=true,pretty=true}=opt;return messages2.map(obj=>{if(obj&&typeof obj==="object"){if(obj instanceof Error){if(!trace){return`${obj.name||"Error"}: ${obj.message}`}return`${obj.name||"Error"}: ${obj.message}
|
|
2
|
-
${obj.stack}`}return pretty?jsonStringify(obj,null,2):jsonStringify(obj)}return String(obj)})}__name(formatMessages,"formatMessages");function renderMessages(messages2,opt={}){return formatMessages(messages2,opt).join(" ")}__name(renderMessages,"renderMessages");var escapeHTML=__name(s=>s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,"""),"escapeHTML");var unescapeHTML=__name(s=>s.replace(/</gi,"<").replace(/>/gi,">").replace(/"/gi,'"').replace(/'/gi,"'").replace(/&/gi,"&"),"unescapeHTML");function parseOrderby(value=""){let[field="",orderby="asc"]=value.split(" ");orderby=orderby.toLowerCase();return{field,orderby,asc:orderby!=="desc",desc:orderby==="desc"}}__name(parseOrderby,"parseOrderby");function composeOrderby(field,asc=true){return`${field} ${asc?"asc":"desc"}`}__name(composeOrderby,"composeOrderby");function cmp(a,b,asc=true){const aa=a||0;const bb=b||0;return aa>bb?asc?1:-1:aa<bb?asc?-1:1:0}__name(cmp,"cmp");function sortedOrderby(values,...orderby){if(orderby.length>0){let orderByList=orderby.map(parseOrderby);let sortValues=Array.from(values);sortValues.sort((a,b)=>{for(let{field,asc}of orderByList){const result=cmp(a[field],b[field],asc);if(result!==0)return result}return 0});return sortValues}return values}__name(sortedOrderby,"sortedOrderby");var MAX_FILENAME_LENGTH=100;var reControlChars=/[\u0000-\u001F\u0080-\u009F]/g;var reRelativePath=/^\.+/;var reTrailingPeriods=/\.+$/;function filenameReservedRegex(){return/[<>:"/\\|?*\u0000-\u001F]/g}__name(filenameReservedRegex,"filenameReservedRegex");function windowsReservedNameRegex(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}__name(windowsReservedNameRegex,"windowsReservedNameRegex");function toValidFilename(string){if(typeof string!=="string"){throw new TypeError("Expected a string")}const replacement="_";if(filenameReservedRegex().test(replacement)&&reControlChars.test(replacement)){throw new Error("Replacement string cannot contain reserved filename characters")}string=string.replace(filenameReservedRegex(),replacement).replace(reControlChars,replacement).replace(reRelativePath,replacement).replace(reTrailingPeriods,"");string=windowsReservedNameRegex().test(string)?string+replacement:string;return string.slice(0,MAX_FILENAME_LENGTH)}__name(toValidFilename,"toValidFilename");var rxEscape=/[\-\[\]\/{}()*+?.^$|]/g;function escapeRegExp(value){if(!value)return"";if(value instanceof RegExp){return value.source}return value.replace(rxEscape,"\\$&")}__name(escapeRegExp,"escapeRegExp");function startSortWeight(items){return items.reduce((acc,item)=>Math.min(acc,item.sort_weight||0),0)-1-Math.random()}__name(startSortWeight,"startSortWeight");function endSortWeight(items){return items.reduce((acc,item)=>Math.max(acc,item.sort_weight||0),0)+1+Math.random()}__name(endSortWeight,"endSortWeight");function moveSortWeight(newIndex,oldIndex,items){let count=items.length;const moveLower=newIndex<oldIndex;if(count<=0||newIndex>=count-1){return endSortWeight(items)}if(newIndex<=0){return startSortWeight(items)}items=sortedItems([...items]);const step=moveLower?-1:0;const lower=items[newIndex+step].sort_weight||0;const upper=items[newIndex+step+1].sort_weight||0;const distance=upper-lower;if(distance===0){if(moveLower){return startSortWeight(items)}return endSortWeight(items)}const middle=lower+distance/2;const fuzzy=distance*.01*(Math.random()-.5);return middle+fuzzy}__name(moveSortWeight,"moveSortWeight");function sortedItems(items){items.sort((a,b)=>(a.sort_weight||0)-(b.sort_weight||0));return items}__name(sortedItems,"sortedItems");var findURL=/((?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?)/gim;function linkifyPlainText(text){return text.split(findURL).map((part,i)=>{const escapedPart=escapeHTML(part);return i%2?`<a target="_blank" href="${escapedPart}">${toHumanReadableUrl(escapedPart)}</a>`:escapedPart}).join("")}__name(linkifyPlainText,"linkifyPlainText");function toHumanReadableUrl(url){return url.replace(/^https?:\/\/(?:www\.)/,"")}__name(toHumanReadableUrl,"toHumanReadableUrl");function size(obj){if(obj!=null){if(obj.size!=null){return obj.size}if(obj.length!=null){return obj.length}return Object.keys(obj).length}return 0}__name(size,"size");function last(array){return array!=null&&array.length>0?array[array.length-1]:void 0}__name(last,"last");function empty(value){try{if(value!=null){if(Array.isArray(value)){return value.length<=0}else if(typeof value==="string"){return value.length<=0}else if((value==null?void 0:value.size)!=null){return value.size<=0}else{return Object.keys(value).length<=0}}}catch(err){console.error("Failed to check if empty for",value,err)}return true}__name(empty,"empty");function cloneObject(obj){return JSON.parse(JSON.stringify(obj))}__name(cloneObject,"cloneObject");function arrayUnique(x){return x.filter((n,index)=>x.indexOf(n)===index)}__name(arrayUnique,"arrayUnique");function arrayMinus(x,y){return arrayUnique(x.filter(n=>!y.includes(n)))}__name(arrayMinus,"arrayMinus");function arrayUnion(...a){return arrayUnique(a.reduce((acc=[],value)=>acc.concat(value),[]))}__name(arrayUnion,"arrayUnion");function arrayFlatten(list){return list.reduce((a,b)=>a.concat(Array.isArray(b)?arrayFlatten(b):b),[])}__name(arrayFlatten,"arrayFlatten");function arrayIntersection(x,y){return arrayUnique(x).filter(n=>y.includes(n))}__name(arrayIntersection,"arrayIntersection");function arraySymmetricDifference(x,y){return arrayMinus(arrayUnion(x,y),arrayIntersection(x,y))}__name(arraySymmetricDifference,"arraySymmetricDifference");function arrayRemoveElement(arr,el){if(arr&&Array.isArray(arr)){let index;while((index=arr.indexOf(el))!==-1){arr.splice(index,1)}return arr}return[]}__name(arrayRemoveElement,"arrayRemoveElement");function arraySetElement(arr,el){if(!arr.includes(el))arr.push(el);return arr}__name(arraySetElement,"arraySetElement");function arrayFilterInPlace(array,fn){array.splice(0,array.length,...array.filter(fn));return array}__name(arrayFilterInPlace,"arrayFilterInPlace");function arrayToggleInPlace(array,el){const index=array.findIndex(e=>e===el);if(index>=0)array.splice(index,1);else array.push(el);return array}__name(arrayToggleInPlace,"arrayToggleInPlace");function arrayEmptyInPlace(array){array.splice(0,array.length);return array}__name(arrayEmptyInPlace,"arrayEmptyInPlace");function arraySorted(arr,cond=cmp){let copy=Array.from(arr);copy.sort(cond);return copy}__name(arraySorted,"arraySorted");function arraySortedNumbers(arr){return arraySorted(arr,(l,r)=>l-r)}__name(arraySortedNumbers,"arraySortedNumbers");function arrayIsEqual(array1,array2){return array1.length===array2.length&&array1.every((value,index)=>value===array2[index])}__name(arrayIsEqual,"arrayIsEqual");function arrayShuffleInPlace(array){array.sort(()=>Math.random()>.5?1:-1);return array}__name(arrayShuffleInPlace,"arrayShuffleInPlace");function arrayShuffle(array){return arrayShuffleInPlace(Array.from(array))}__name(arrayShuffle,"arrayShuffle");function arrayShuffleForce(array){while(array.length>1){const copy=Array.from(array);arrayShuffleInPlace(copy);if(!arrayIsEqual(array,copy))return copy}return array}__name(arrayShuffleForce,"arrayShuffleForce");function arrayRandomElement(array){return array[Math.floor(Math.random()*array.length)]}__name(arrayRandomElement,"arrayRandomElement");function getStackLlocationList(stack){var _a,_b;if(typeof stack!=="string")return[];return((_b=(_a=stack==null?void 0:stack.split("\n"))==null?void 0:_a.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:_b.filter(v=>v!=null))||[]}__name(getStackLlocationList,"getStackLlocationList");function getSourceLocation(level=2,stripCwd=true){var _a;let stack=new Error().stack||"";let line=(_a=getStackLlocationList(stack))==null?void 0:_a[level];if(line&&stripCwd){if(line.includes("/node_modules/")){return""}const fileURL="file://";if(line.startsWith(fileURL)){return line.substr(fileURL.length)}const cwd=process.cwd();if(cwd&&line.startsWith(cwd)){return line.substr(cwd.length+1)}const home=process.env["HOME"];if(home&&line.startsWith(home)){line=line.substr(home.length+1)}}return line||""}__name(getSourceLocation,"getSourceLocation");var{warn}=Logger("zeed:promise");async function sleep(milliSeconds){return new Promise(resolve=>setTimeout(resolve,milliSeconds))}__name(sleep,"sleep");async function immediate(){return new Promise(resolve=>setTimeout(resolve,0))}__name(immediate,"immediate");var timeoutReached=Symbol("timeout");async function timeout(promise,milliSeconds,timeoutValue=timeoutReached){return new Promise(async(resolve,reject)=>{let done=false;const timeout2=setTimeout(()=>{done=true;resolve(timeoutValue)},milliSeconds);try{let result=await promise;clearTimeout(timeout2);if(!done)resolve(result)}catch(err){clearTimeout(timeout2);if(!done)reject(err)}})}__name(timeout,"timeout");var timoutError=new Error("Timeout reached");function isTimeout(value){return value===timeoutReached||value===timoutError}__name(isTimeout,"isTimeout");async function tryTimeout(promise,milliSeconds){if(milliSeconds<=0){return await promise}return new Promise(async(resolve,reject)=>{let done=false;const timeout2=setTimeout(()=>{done=true;reject(timoutError)},milliSeconds);try{let result=await promise;clearTimeout(timeout2);if(!done)resolve(result)}catch(err){clearTimeout(timeout2);if(!done)reject(err)}})}__name(tryTimeout,"tryTimeout");function waitOn(obj,event,timeoutMS=1e3){return new Promise((resolve,reject)=>{let fn=__name(value=>{if(timer){clearTimeout(timer);done();resolve(value)}},"fn");let done=__name(()=>{timer=null;if(obj.off){obj.off(event,fn)}else if(obj.removeEventListener){obj.removeEventListener(event,fn)}else{warn("No remove listener method found for",obj,event)}},"done");let timer=setTimeout(()=>{done();reject(new Error(`Did not response in time`))},timeoutMS);if(obj.on){obj.on(event,fn)}else if(obj.addEventListener){obj.addEventListener(event,fn)}else{warn("No listener method found for",obj)}})}__name(waitOn,"waitOn");function isPromise(value){return Boolean(value&&(value instanceof Promise||typeof value.then==="function"))}__name(isPromise,"isPromise");function promisify(value){return Promise.resolve(value)}__name(promisify,"promisify");var log2=Logger("zeed:emitter");var Emitter=class{constructor(){this.subscribers={};this.subscribersOnAny=[];this.call=new Proxy({},{get:(target,name)=>(...args)=>this.emit(name,...args)})}async emit(event,...args){let ok=false;try{let subscribers=this.subscribers[event]||[];this.subscribersOnAny.forEach(fn=>fn(event,...args));if(subscribers.length>0){let all=subscribers.map(fn=>{try{return promisify(fn(...args))}catch(err){log2.warn("emit warning:",err)}});ok=true;await Promise.all(all)}}catch(err){log2.error("emit exception",err)}return ok}onAny(fn){this.subscribersOnAny.push(fn)}on(event,listener){let subscribers=this.subscribers[event]||[];subscribers.push(listener);this.subscribers[event]=subscribers;return{cleanup:()=>{this.off(event,listener)},dispose:()=>{this.off(event,listener)}}}onCall(handlers){for(const[name,handler]of Object.entries(handlers)){this.on(name,handler)}}once(event,listener){const onceListener=__name(async(...args)=>{this.off(event,onceListener);return await promisify(listener(...args))},"onceListener");this.on(event,onceListener)}off(event,listener){this.subscribers[event]=(this.subscribers[event]||[]).filter(f=>listener&&f!==listener);return this}removeAllListeners(event){this.subscribers={};return this}};__name(Emitter,"Emitter");function getGlobalEmitter(){let emitter=getGlobalContext().emitter;if(!emitter){emitter=new Emitter;getGlobalContext().emitter=emitter}return emitter}__name(getGlobalEmitter,"getGlobalEmitter");var messages=new Emitter;function lazyListener(emitter,listenerKey){const name=Math.round(Math.random()*100);var events=[];var lazyResolve;const incoming=__name((key,obj)=>{let ev={key,obj};events.push(ev);lazyResolve&&lazyResolve()},"incoming");if(listenerKey){if(emitter.on){emitter.on(listenerKey,obj=>{incoming(listenerKey,obj)})}else if(emitter.addEventListener){emitter.addEventListener(listenerKey,obj=>{incoming(listenerKey,obj)})}else{log2.error(name,"Cannot listen to key")}}else{if(emitter.onAny){emitter.onAny((key,obj)=>{incoming(key,obj)})}else{log2.error(name,"cannot listen to all for",emitter)}}let on=__name((key,skipUnmatched=true)=>{return new Promise((resolve,reject)=>{if(!key){key=listenerKey;if(!key){if(events.length){key=events[0].key}}}lazyResolve=__name(()=>{while(events.length>0){let ev=events.shift();if(ev.key===key){lazyResolve=void 0;resolve(ev.obj)}else{if(skipUnmatched){log2.warn(name,`Unhandled event ${key} with value: ${ev.obj}`);continue}reject(`Expected ${key}, but found ${ev.key} with value=${ev.obj}`);log2.error(name,`Unhandled event ${key} with value: ${ev.obj}`)}break}},"lazyResolve");lazyResolve()})},"on");return on}__name(lazyListener,"lazyListener");var{encode:encode62,decode:decode62}=useBase(62);var{encode:encode32}=useBase(32);var _crypto=getGlobal().crypto||getGlobal()["msCrypto"];function randomUint8Array(length=16){let rands=new Uint8Array(length);if(_crypto&&_crypto["getRandomValues"]){_crypto["getRandomValues"](rands)}else{for(let i=0;i<length;i++){rands[i]=Math.floor(Math.random()*256)}}return rands}__name(randomUint8Array,"randomUint8Array");function uuid(){return encode62(randomUint8Array(16),22)}__name(uuid,"uuid");function uuidB32(){return encode32(randomUint8Array(16),26)}__name(uuidB32,"uuidB32");var _unameCounters={};function uname(name="id"){if(_unameCounters[name]==null){_unameCounters[name]=0}return`${name}-${_unameCounters[name]++}`}__name(uname,"uname");var _qid=0;function qid(){return`id-${_qid++}`}__name(qid,"qid");var pattern="10000000-1000-4000-8000-100000000000";var uuidv4=__name(()=>pattern.replace(/[018]/g,c=>(c^randomUint8Array(1)[0]&15>>c/4).toString(16)),"uuidv4");var ReferenceDateInMS=16e11;function longToByteArray(long){var byteArray=new Uint8Array([0,0,0,0,0,0]);const bytes=byteArray.length-1;for(var index=0;index<byteArray.length;index++){var byte=long&255;byteArray[bytes-index]=byte;long=(long-byte)/256}return byteArray}__name(longToByteArray,"longToByteArray");function suidBytes(){const ms=getTimestamp()-ReferenceDateInMS;return new Uint8Array([...longToByteArray(ms),...randomUint8Array(10)])}__name(suidBytes,"suidBytes");function suid(){return encode62(suidBytes(),22)}__name(suid,"suid");function suidDate(id){return suidBytesDate(decode62(id,16))}__name(suidDate,"suidDate");function suidBytesDate(id){return new Date(ReferenceDateInMS+id.slice(0,6).reduce((acc,byte)=>{return acc*256+byte},0))}__name(suidBytesDate,"suidBytesDate");var Channel=class extends Emitter{constructor(){super(...arguments);this.id=uuid()}close(){}};__name(Channel,"Channel");var LocalChannel=class extends Channel{constructor(){super(...arguments);this.isConnected=true}postMessage(data){var _a;(_a=this.other)==null?void 0:_a.emit("message",{data:cloneObject(data),origin:"local",lastEventId:uuid()})}};__name(LocalChannel,"LocalChannel");function fakeWorkerPair(){let w1=new LocalChannel;let w2=new LocalChannel;w1.other=w2;w2.other=w1;return[w1,w2]}__name(fakeWorkerPair,"fakeWorkerPair");var JsonEncoder=class{encode(data){return JSON.stringify(data)}decode(data){return JSON.parse(data)}};__name(JsonEncoder,"JsonEncoder");function useMessages(opt={}){let{handlers,encoder=new JsonEncoder,retryAfter=1e3,ignoreUnhandled=true}=opt;const log5=Logger(`messages:${uname(!!handlers?"server":"client")}`);let channel;let queue=[];let queueRetryTimer;let waitingForResponse={};const postNext=__name(()=>{clearTimeout(queueRetryTimer);if(channel){if(channel.isConnected){while(queue.length){let message=queue[0];try{channel.postMessage(encoder.encode(message));queue.shift()}catch(err){log5.warn("postMessage",err);break}}}if(queue.length>0&&retryAfter>0){queueRetryTimer=setTimeout(postNext,retryAfter)}}},"postNext");const postMessage=__name(message=>{log5("enqueue postMessage",message);queue.push(message);postNext()},"postMessage");const connect=__name(newChannel=>{channel=newChannel;channel.on("connect",postNext);if(handlers){channel.on("message",async msg=>{const{name,args,id}=encoder.decode(msg.data);if(name){log5(`name ${name} id ${id}`);try{let result=await promisify(handlers[name](...args));log5(`result ${result}`);if(id){postMessage({id,result})}}catch(error){log5("execution error",error);let err=error instanceof Error?error:new Error(valueToString(error));postMessage({id,error:{message:err.message,stack:err.stack,name:err.name}})}}else if(!ignoreUnhandled){log5.warn("Unhandled message",msg)}})}channel.on("message",async msg=>{const{name,args,id,result,error}=encoder.decode(msg.data);if(!name&&id){log5(`response for id=${id}: result=${result}, error=${error}`);const[resolve,reject]=waitingForResponse[id];if(resolve&&reject){delete waitingForResponse[id];if(error){let err=new Error(error.message);err.stack=error.stack;err.name=error.name;log5("reject",err);reject(err)}else{log5("resolve",result);resolve(result)}}}});postNext()},"connect");const fetchMessage=__name(async(name,args,opt2={})=>{const{timeout:timeout2=5e3}=opt2;const id=uuid();postMessage({name,args,id});return tryTimeout(new Promise((resolve,reject)=>waitingForResponse[id]=[resolve,reject]),timeout2)},"fetchMessage");if(opt.channel){connect(opt.channel)}const createPromiseProxy2=__name((opt2,predefinedMethods={})=>{const{timeout:timeout2=5e3}=opt2;return new Proxy(predefinedMethods,{get:(target,name)=>{if(name in target)return target[name];return(...args)=>{if(!handlers){return fetchMessage(name,args,opt2)}}}})},"createPromiseProxy");return createPromiseProxy2({},{connect,options(perCallopt){return createPromiseProxy2(__spreadValues({},perCallopt))}})}__name(useMessages,"useMessages");var createPromiseProxy=__name((fn,opt,predefinedMethods={})=>new Proxy(predefinedMethods,{get:(target,name)=>{if(name in target)return target[name];return(...args)=>fn(name,args,opt)}}),"createPromiseProxy");function useMessageHub(opt={}){let{name=uname("hub"),encoder=new JsonEncoder,retryAfter=1e3,ignoreUnhandled=true}=opt;const log5=Logger(name);let handlers={};let channel;let queue=[];let queueRetryTimer;let waitingForResponse={};const postNext=__name(()=>{clearTimeout(queueRetryTimer);if(channel){if(channel.isConnected){while(queue.length){let message=queue[0];try{channel.postMessage(encoder.encode(message));queue.shift()}catch(err){log5.warn("postMessage",err);break}}}if(queue.length>0&&retryAfter>0){queueRetryTimer=setTimeout(postNext,retryAfter)}}},"postNext");const postMessage=__name(message=>{log5("enqueue postMessage",message);queue.push(message);postNext()},"postMessage");const connect=__name(newChannel=>{channel=newChannel;channel.on("connect",postNext);channel.on("message",async msg=>{const{name:name2,args,id,result,error}=encoder.decode(msg.data);if(name2){log5(`name ${name2} id ${id}`);try{let result2=await promisify(handlers[name2](...args));log5(`result ${result2}`);if(id){postMessage({id,result:result2})}}catch(error2){log5("execution error",error2);let err=error2 instanceof Error?error2:new Error(valueToString(error2));postMessage({id,error:{message:err.message,stack:err.stack,name:err.name}})}}else if(id){log5(`response for id=${id}: result=${result}, error=${error}`);const[resolve,reject]=waitingForResponse[id];if(resolve&&reject){delete waitingForResponse[id];if(error){let err=new Error(error.message);err.stack=error.stack;err.name=error.name;log5("reject",err);reject(err)}else{log5("resolve",result);resolve(result)}}}else if(!ignoreUnhandled){log5.warn("Unhandled message",msg)}});postNext()},"connect");const fetchMessage=__name(async(name2,args,opt2={})=>{const{timeout:timeout2=5e3}=opt2;const id=uuid();postMessage({name:name2,args,id});return tryTimeout(new Promise((resolve,reject)=>waitingForResponse[id]=[resolve,reject]),timeout2)},"fetchMessage");if(opt.channel){connect(opt.channel)}return{connect,listen(newHandlers){Object.assign(handlers,newHandlers)},send(){return createPromiseProxy(fetchMessage,{},{options(perCallopt){return createPromiseProxy(fetchMessage,__spreadValues({},perCallopt))}})}}}__name(useMessageHub,"useMessageHub");function createMutex(){let token=true;return(fn,elseFn)=>{let executed=false;if(token){token=false;try{fn();executed=true}finally{token=true}}else if(elseFn!==void 0){elseFn()}return executed}}__name(createMutex,"createMutex");var log3=Logger("zeed:queue");var SerialQueue=class{constructor(opt={}){this.queue=[];this.isPaused=false;this.waitToFinish=[];const{name=uname("queue"),logLevel}=opt;this.name=name;this.log=Logger(`zeed:queue:${name}`);this.log.level=logLevel!=null?logLevel:LogLevel.off}async performNext(){this.log(`performNext, queue.length =`,this.queue.length);if(this.currentTask!=null){this.log(`performNext => skip while another task is running`);return}if(this.isPaused){this.log(`performNext => skip while is paused`);return}while(this.currentTask==null&&!this.isPaused){let info=this.queue.shift();this.log(`performNext => ${info==null?void 0:info.name}`);if(info==null){break}const{name,task,resolve}=info;this.currentTask=task();let result=void 0;try{this.log.info(`start task ${name}`);result=await this.currentTask;this.log(`finished task ${name} with result =`,result)}catch(err){log3.warn("Error performing task",err)}resolve(result);this.currentTask=void 0}while(this.waitToFinish.length>0){this.waitToFinish.shift()()}}async enqueue(task,opt={}){const{immediate:immediate2=false,name=uname(this.name)}=opt;if(immediate2){this.log.info(`immediate execution ${name}`);return await task()}this.log(`enqueue ${name}`);return new Promise(resolve=>{this.queue.push({name,task,resolve});this.performNext()})}async enqueueReentrant(task,opt={}){return this.enqueue(task,{immediate:this.currentTask!=null,name:opt.name})}async cancelAll(unblock=true){this.log(`cancelAll`);let resolver=this.queue.map(task=>task.resolve);this.queue=[];resolver.forEach(r=>r(void 0));await this.wait()}async pause(){this.log(`pause`);this.isPaused=true;await this.wait()}resume(){this.log(`resume`);this.isPaused=false;this.performNext()}async wait(){this.log(`wait`);if(this.currentTask==null&&(this.queue.length===0||this.isPaused)){return}return new Promise(resolve=>{this.waitToFinish.push(resolve)})}};__name(SerialQueue,"SerialQueue");var log4=Logger("zeed:memstorage");var MemStorage=class{constructor(opt={}){this.store={};this.pretty=false;var _a,_b;this.objectToString=(_a=opt.objectToString)!=null?_a:data=>{return this.pretty?JSON.stringify(data,null,2):JSON.stringify(data)};this.objectFromString=(_b=opt.objectFromString)!=null?_b:data=>{try{return JSON.parse(data)}catch(err){log4.warn(`MemStorage parse error '${err}' in`,data)}}}setItem(key,value){const data=this.objectToString(value);this.store[key]=data}getItem(key){if(this.store.hasOwnProperty(key)){let value=this.store[key];return this.objectFromString(value)}}removeItem(key){delete this.store[key]}clear(){this.store={}}allKeys(){return Object.keys(this.store)}};__name(MemStorage,"MemStorage");function throttle(callback,opt={}){const{delay=100,noTrailing=false,debounceMode=false}=opt;let timeoutID;let cancelled=false;let lastExec=0;function clearExistingTimeout(){if(timeoutID){clearTimeout(timeoutID)}}__name(clearExistingTimeout,"clearExistingTimeout");function cancel(){clearExistingTimeout();cancelled=true}__name(cancel,"cancel");function wrapper(...arguments_){let self=this;let elapsed=Date.now()-lastExec;if(cancelled){return}function exec(){lastExec=Date.now();callback.apply(self,arguments_)}__name(exec,"exec");function clear(){timeoutID=void 0}__name(clear,"clear");if(debounceMode&&!timeoutID){exec()}clearExistingTimeout();if(debounceMode===void 0&&elapsed>delay){exec()}else if(noTrailing!==true){timeoutID=setTimeout(debounceMode?clear:exec,debounceMode===void 0?delay-elapsed:delay)}}__name(wrapper,"wrapper");wrapper.cancel=cancel;return wrapper}__name(throttle,"throttle");function debounce(callback,opt={}){opt.debounceMode=true;return throttle(callback,opt)}__name(debounce,"debounce");function throttleAnimationFrame(callback){let requestId;let lastArgs;const later=__name(context=>()=>{requestId=void 0;callback.apply(context,lastArgs)},"later");const throttled=__name(function(...args){lastArgs=args;if(requestId==null){requestId=requestAnimationFrame(later(this))}},"throttled");throttled.cancel=()=>{cancelAnimationFrame(requestId);requestId=void 0};return throttled}__name(throttleAnimationFrame,"throttleAnimationFrame");function useDisposer(){let tracked=[];const track=__name(obj=>{tracked.unshift(obj)},"track");const untrack=__name(async disposable=>{if(tracked.includes(disposable)){arrayFilterInPlace(tracked,el=>el!==disposable);if(typeof disposable==="function"){await promisify(disposable())}else if(isPromise(disposable)){await disposable}else if(typeof disposable.dispose==="function"){await promisify(disposable.dispose())}else if(isPromise(disposable.dispose)){await disposable.dispose}else if(typeof disposable.cleanup==="function"){await promisify(disposable.cleanup())}else if(isPromise(disposable.cleanup)){await disposable.cleanup}}},"untrack");const dispose=__name(async()=>{while(tracked.length>0){await untrack(tracked[0])}},"dispose");return{track,untrack,dispose,get size(){return tracked.length}}}__name(useDisposer,"useDisposer");function useTimeout(fn,timeout2=0){const timeoutHandle=setTimeout(fn,timeout2);return()=>clearTimeout(timeoutHandle)}__name(useTimeout,"useTimeout");function useInterval(fn,interval){const intervalHandle=setInterval(fn,interval);return()=>clearInterval(intervalHandle)}__name(useInterval,"useInterval");export{csv,useBase,encodeBase16,decodeBase16,encodeBase32,decodeBase32,encodeBase58,decodeBase58,encodeBase62,decodeBase62,toCamelCase,toCapitalize,toCapitalizeWords,jsonStringify,stringToBoolean,stringToInteger,stringToFloat,valueToBoolean,valueToInteger,valueToFloat,valueToString,toFloat,toInt,toString,toBool,formatMessages,renderMessages,escapeHTML,unescapeHTML,parseOrderby,composeOrderby,cmp,sortedOrderby,toValidFilename,escapeRegExp,startSortWeight,endSortWeight,moveSortWeight,sortedItems,linkifyPlainText,toHumanReadableUrl,size,last,empty,cloneObject,arrayUnique,arrayMinus,arrayUnion,arrayFlatten,arrayIntersection,arraySymmetricDifference,arrayRemoveElement,arraySetElement,arrayFilterInPlace,arrayToggleInPlace,arrayEmptyInPlace,arraySorted,arraySortedNumbers,arrayIsEqual,arrayShuffleInPlace,arrayShuffle,arrayShuffleForce,arrayRandomElement,getStackLlocationList,getSourceLocation,sleep,immediate,timeoutReached,timeout,timoutError,isTimeout,tryTimeout,waitOn,isPromise,promisify,Emitter,getGlobalEmitter,messages,lazyListener,uuid,uuidB32,uname,qid,uuidv4,suidBytes,suid,suidDate,suidBytesDate,Channel,LocalChannel,fakeWorkerPair,JsonEncoder,useMessages,createPromiseProxy,useMessageHub,createMutex,SerialQueue,MemStorage,throttle,debounce,throttleAnimationFrame,useDisposer,useTimeout,useInterval};
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
${obj.stack}`}return pretty?jsonStringify(obj,null,2):jsonStringify(obj)}return String(obj)})}__name(formatMessages,"formatMessages");function renderMessages(messages2,opt={}){return formatMessages(messages2,opt).join(" ")}__name(renderMessages,"renderMessages");var escapeHTML=__name(s=>s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,"""),"escapeHTML");var unescapeHTML=__name(s=>s.replace(/</gi,"<").replace(/>/gi,">").replace(/"/gi,'"').replace(/'/gi,"'").replace(/&/gi,"&"),"unescapeHTML");function parseOrderby(value=""){let[field="",orderby="asc"]=value.split(" ");orderby=orderby.toLowerCase();return{field,orderby,asc:orderby!=="desc",desc:orderby==="desc"}}__name(parseOrderby,"parseOrderby");function composeOrderby(field,asc=true){return`${field} ${asc?"asc":"desc"}`}__name(composeOrderby,"composeOrderby");function cmp(a,b,asc=true){const aa=a||0;const bb=b||0;return aa>bb?asc?1:-1:aa<bb?asc?-1:1:0}__name(cmp,"cmp");function sortedOrderby(values,...orderby){if(orderby.length>0){let orderByList=orderby.map(parseOrderby);let sortValues=Array.from(values);sortValues.sort((a,b)=>{for(let{field,asc}of orderByList){const result=cmp(a[field],b[field],asc);if(result!==0)return result}return 0});return sortValues}return values}__name(sortedOrderby,"sortedOrderby");var MAX_FILENAME_LENGTH=100;var reControlChars=/[\u0000-\u001F\u0080-\u009F]/g;var reRelativePath=/^\.+/;var reTrailingPeriods=/\.+$/;function filenameReservedRegex(){return/[<>:"/\\|?*\u0000-\u001F]/g}__name(filenameReservedRegex,"filenameReservedRegex");function windowsReservedNameRegex(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}__name(windowsReservedNameRegex,"windowsReservedNameRegex");function toValidFilename(string){if(typeof string!=="string"){throw new TypeError("Expected a string")}const replacement="_";if(filenameReservedRegex().test(replacement)&&reControlChars.test(replacement)){throw new Error("Replacement string cannot contain reserved filename characters")}string=string.replace(filenameReservedRegex(),replacement).replace(reControlChars,replacement).replace(reRelativePath,replacement).replace(reTrailingPeriods,"");string=windowsReservedNameRegex().test(string)?string+replacement:string;return string.slice(0,MAX_FILENAME_LENGTH)}__name(toValidFilename,"toValidFilename");var rxEscape=/[\-\[\]\/{}()*+?.^$|]/g;function escapeRegExp(value){if(!value)return"";if(value instanceof RegExp){return value.source}return value.replace(rxEscape,"\\$&")}__name(escapeRegExp,"escapeRegExp");function startSortWeight(items){return items.reduce((acc,item)=>Math.min(acc,item.sort_weight||0),0)-1-Math.random()}__name(startSortWeight,"startSortWeight");function endSortWeight(items){return items.reduce((acc,item)=>Math.max(acc,item.sort_weight||0),0)+1+Math.random()}__name(endSortWeight,"endSortWeight");function moveSortWeight(newIndex,oldIndex,items){let count=items.length;const moveLower=newIndex<oldIndex;if(count<=0||newIndex>=count-1){return endSortWeight(items)}if(newIndex<=0){return startSortWeight(items)}items=sortedItems([...items]);const step=moveLower?-1:0;const lower=items[newIndex+step].sort_weight||0;const upper=items[newIndex+step+1].sort_weight||0;const distance=upper-lower;if(distance===0){if(moveLower){return startSortWeight(items)}return endSortWeight(items)}const middle=lower+distance/2;const fuzzy=distance*.01*(Math.random()-.5);return middle+fuzzy}__name(moveSortWeight,"moveSortWeight");function sortedItems(items){items.sort((a,b)=>(a.sort_weight||0)-(b.sort_weight||0));return items}__name(sortedItems,"sortedItems");var findURL=/((?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?)/gim;function linkifyPlainText(text){return text.split(findURL).map((part,i)=>{const escapedPart=escapeHTML(part);return i%2?`<a target="_blank" href="${escapedPart}">${toHumanReadableUrl(escapedPart)}</a>`:escapedPart}).join("")}__name(linkifyPlainText,"linkifyPlainText");function toHumanReadableUrl(url){return url.replace(/^https?:\/\/(?:www\.)/,"")}__name(toHumanReadableUrl,"toHumanReadableUrl");function size(obj){if(obj!=null){if(obj.size!=null){return obj.size}if(obj.length!=null){return obj.length}return Object.keys(obj).length}return 0}__name(size,"size");function last(array){return array!=null&&array.length>0?array[array.length-1]:void 0}__name(last,"last");function empty(value){try{if(value!=null){if(Array.isArray(value)){return value.length<=0}else if(typeof value==="string"){return value.length<=0}else if((value==null?void 0:value.size)!=null){return value.size<=0}else{return Object.keys(value).length<=0}}}catch(err){console.error("Failed to check if empty for",value,err)}return true}__name(empty,"empty");function cloneObject(obj){return JSON.parse(JSON.stringify(obj))}__name(cloneObject,"cloneObject");function arrayUnique(x){return x.filter((n,index)=>x.indexOf(n)===index)}__name(arrayUnique,"arrayUnique");function arrayMinus(x,y){return arrayUnique(x.filter(n=>!y.includes(n)))}__name(arrayMinus,"arrayMinus");function arrayUnion(...a){return arrayUnique(a.reduce((acc=[],value)=>acc.concat(value),[]))}__name(arrayUnion,"arrayUnion");function arrayFlatten(list){return list.reduce((a,b)=>a.concat(Array.isArray(b)?arrayFlatten(b):b),[])}__name(arrayFlatten,"arrayFlatten");function arrayIntersection(x,y){return arrayUnique(x).filter(n=>y.includes(n))}__name(arrayIntersection,"arrayIntersection");function arraySymmetricDifference(x,y){return arrayMinus(arrayUnion(x,y),arrayIntersection(x,y))}__name(arraySymmetricDifference,"arraySymmetricDifference");function arrayRemoveElement(arr,el){if(arr&&Array.isArray(arr)){let index;while((index=arr.indexOf(el))!==-1){arr.splice(index,1)}return arr}return[]}__name(arrayRemoveElement,"arrayRemoveElement");function arraySetElement(arr,el){if(!arr.includes(el))arr.push(el);return arr}__name(arraySetElement,"arraySetElement");function arrayFilterInPlace(array,fn){array.splice(0,array.length,...array.filter(fn));return array}__name(arrayFilterInPlace,"arrayFilterInPlace");function arrayToggleInPlace(array,el){const index=array.findIndex(e=>e===el);if(index>=0)array.splice(index,1);else array.push(el);return array}__name(arrayToggleInPlace,"arrayToggleInPlace");function arrayEmptyInPlace(array){array.splice(0,array.length);return array}__name(arrayEmptyInPlace,"arrayEmptyInPlace");function arraySorted(arr,cond=cmp){let copy=Array.from(arr);copy.sort(cond);return copy}__name(arraySorted,"arraySorted");function arraySortedNumbers(arr){return arraySorted(arr,(l,r)=>l-r)}__name(arraySortedNumbers,"arraySortedNumbers");function arrayIsEqual(array1,array2){return array1.length===array2.length&&array1.every((value,index)=>value===array2[index])}__name(arrayIsEqual,"arrayIsEqual");function arrayShuffleInPlace(array){array.sort(()=>Math.random()>.5?1:-1);return array}__name(arrayShuffleInPlace,"arrayShuffleInPlace");function arrayShuffle(array){return arrayShuffleInPlace(Array.from(array))}__name(arrayShuffle,"arrayShuffle");function arrayShuffleForce(array){while(array.length>1){const copy=Array.from(array);arrayShuffleInPlace(copy);if(!arrayIsEqual(array,copy))return copy}return array}__name(arrayShuffleForce,"arrayShuffleForce");function arrayRandomElement(array){return array[Math.floor(Math.random()*array.length)]}__name(arrayRandomElement,"arrayRandomElement");function getStackLlocationList(stack){var _a,_b;if(typeof stack!=="string")return[];return((_b=(_a=stack==null?void 0:stack.split("\n"))==null?void 0:_a.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:_b.filter(v=>v!=null))||[]}__name(getStackLlocationList,"getStackLlocationList");function getSourceLocation(level=2,stripCwd=true){var _a;let stack=new Error().stack||"";let line=(_a=getStackLlocationList(stack))==null?void 0:_a[level];if(line&&stripCwd){if(line.includes("/node_modules/")){return""}const fileURL="file://";if(line.startsWith(fileURL)){return line.substr(fileURL.length)}const cwd=process.cwd();if(cwd&&line.startsWith(cwd)){return line.substr(cwd.length+1)}const home=process.env["HOME"];if(home&&line.startsWith(home)){line=line.substr(home.length+1)}}return line||""}__name(getSourceLocation,"getSourceLocation");var{warn}=Logger("zeed:promise");async function sleep(milliSeconds){return new Promise(resolve=>setTimeout(resolve,milliSeconds))}__name(sleep,"sleep");async function immediate(){return new Promise(resolve=>setTimeout(resolve,0))}__name(immediate,"immediate");var timeoutReached=Symbol("timeout");async function timeout(promise,milliSeconds,timeoutValue=timeoutReached){return new Promise(async(resolve,reject)=>{let done=false;const timeout2=setTimeout(()=>{done=true;resolve(timeoutValue)},milliSeconds);try{let result=await promise;clearTimeout(timeout2);if(!done)resolve(result)}catch(err){clearTimeout(timeout2);if(!done)reject(err)}})}__name(timeout,"timeout");var timoutError=new Error("Timeout reached");function isTimeout(value){return value===timeoutReached||value===timoutError}__name(isTimeout,"isTimeout");async function tryTimeout(promise,milliSeconds){if(milliSeconds<=0){return await promise}return new Promise(async(resolve,reject)=>{let done=false;const timeout2=setTimeout(()=>{done=true;reject(timoutError)},milliSeconds);try{let result=await promise;clearTimeout(timeout2);if(!done)resolve(result)}catch(err){clearTimeout(timeout2);if(!done)reject(err)}})}__name(tryTimeout,"tryTimeout");function waitOn(obj,event,timeoutMS=1e3){return new Promise((resolve,reject)=>{let fn=__name(value=>{if(timer){clearTimeout(timer);done();resolve(value)}},"fn");let done=__name(()=>{timer=null;if(obj.off){obj.off(event,fn)}else if(obj.removeEventListener){obj.removeEventListener(event,fn)}else{warn("No remove listener method found for",obj,event)}},"done");let timer=setTimeout(()=>{done();reject(new Error(`Did not response in time`))},timeoutMS);if(obj.on){obj.on(event,fn)}else if(obj.addEventListener){obj.addEventListener(event,fn)}else{warn("No listener method found for",obj)}})}__name(waitOn,"waitOn");function isPromise(value){return Boolean(value&&(value instanceof Promise||typeof value.then==="function"))}__name(isPromise,"isPromise");function promisify(value){return Promise.resolve(value)}__name(promisify,"promisify");var log2=Logger("zeed:emitter");var Emitter=class{constructor(){this.subscribers={};this.subscribersOnAny=[];this.call=new Proxy({},{get:(target,name)=>(...args)=>this.emit(name,...args)})}async emit(event,...args){let ok=false;try{let subscribers=this.subscribers[event]||[];this.subscribersOnAny.forEach(fn=>fn(event,...args));if(subscribers.length>0){let all=subscribers.map(fn=>{try{return promisify(fn(...args))}catch(err){log2.warn("emit warning:",err)}});ok=true;await Promise.all(all)}}catch(err){log2.error("emit exception",err)}return ok}onAny(fn){this.subscribersOnAny.push(fn)}on(event,listener){let subscribers=this.subscribers[event]||[];subscribers.push(listener);this.subscribers[event]=subscribers;return{cleanup:()=>{this.off(event,listener)},dispose:()=>{this.off(event,listener)}}}onCall(handlers){for(const[name,handler]of Object.entries(handlers)){this.on(name,handler)}}once(event,listener){const onceListener=__name(async(...args)=>{this.off(event,onceListener);return await promisify(listener(...args))},"onceListener");this.on(event,onceListener)}off(event,listener){this.subscribers[event]=(this.subscribers[event]||[]).filter(f=>listener&&f!==listener);return this}removeAllListeners(event){this.subscribers={};return this}};__name(Emitter,"Emitter");function getGlobalEmitter(){let emitter=getGlobalContext().emitter;if(!emitter){emitter=new Emitter;getGlobalContext().emitter=emitter}return emitter}__name(getGlobalEmitter,"getGlobalEmitter");var messages=new Emitter;function lazyListener(emitter,listenerKey){const name=Math.round(Math.random()*100);var events=[];var lazyResolve;const incoming=__name((key,obj)=>{let ev={key,obj};events.push(ev);lazyResolve&&lazyResolve()},"incoming");if(listenerKey){if(emitter.on){emitter.on(listenerKey,obj=>{incoming(listenerKey,obj)})}else if(emitter.addEventListener){emitter.addEventListener(listenerKey,obj=>{incoming(listenerKey,obj)})}else{log2.error(name,"Cannot listen to key")}}else{if(emitter.onAny){emitter.onAny((key,obj)=>{incoming(key,obj)})}else{log2.error(name,"cannot listen to all for",emitter)}}let on=__name((key,skipUnmatched=true)=>{return new Promise((resolve,reject)=>{if(!key){key=listenerKey;if(!key){if(events.length){key=events[0].key}}}lazyResolve=__name(()=>{while(events.length>0){let ev=events.shift();if(ev.key===key){lazyResolve=void 0;resolve(ev.obj)}else{if(skipUnmatched){log2.warn(name,`Unhandled event ${key} with value: ${ev.obj}`);continue}reject(`Expected ${key}, but found ${ev.key} with value=${ev.obj}`);log2.error(name,`Unhandled event ${key} with value: ${ev.obj}`)}break}},"lazyResolve");lazyResolve()})},"on");return on}__name(lazyListener,"lazyListener");var{encode:encode62,decode:decode62}=useBase(62);var{encode:encode32}=useBase(32);var _crypto=getGlobal().crypto||getGlobal()["msCrypto"];function randomUint8Array(length=16){let rands=new Uint8Array(length);if(_crypto&&_crypto["getRandomValues"]){_crypto["getRandomValues"](rands)}else{for(let i=0;i<length;i++){rands[i]=Math.floor(Math.random()*256)}}return rands}__name(randomUint8Array,"randomUint8Array");function uuid(){return encode62(randomUint8Array(16),22)}__name(uuid,"uuid");function uuidB32(){return encode32(randomUint8Array(16),26)}__name(uuidB32,"uuidB32");var _unameCounters={};function uname(name="id"){if(_unameCounters[name]==null){_unameCounters[name]=0}return`${name}-${_unameCounters[name]++}`}__name(uname,"uname");var _qid=0;function qid(){return`id-${_qid++}`}__name(qid,"qid");var pattern="10000000-1000-4000-8000-100000000000";var uuidv4=__name(()=>pattern.replace(/[018]/g,c=>(c^randomUint8Array(1)[0]&15>>c/4).toString(16)),"uuidv4");var ReferenceDateInMS=16e11;function longToByteArray(long){var byteArray=new Uint8Array([0,0,0,0,0,0]);const bytes=byteArray.length-1;for(var index=0;index<byteArray.length;index++){var byte=long&255;byteArray[bytes-index]=byte;long=(long-byte)/256}return byteArray}__name(longToByteArray,"longToByteArray");function suidBytes(){const ms=getTimestamp()-ReferenceDateInMS;return new Uint8Array([...longToByteArray(ms),...randomUint8Array(10)])}__name(suidBytes,"suidBytes");function suid(){return encode62(suidBytes(),22)}__name(suid,"suid");function suidDate(id){return suidBytesDate(decode62(id,16))}__name(suidDate,"suidDate");function suidBytesDate(id){return new Date(ReferenceDateInMS+id.slice(0,6).reduce((acc,byte)=>{return acc*256+byte},0))}__name(suidBytesDate,"suidBytesDate");var Channel=class extends Emitter{constructor(){super(...arguments);this.id=uuid()}close(){}};__name(Channel,"Channel");var LocalChannel=class extends Channel{constructor(){super(...arguments);this.isConnected=true}postMessage(data){var _a;(_a=this.other)==null?void 0:_a.emit("message",{data:cloneObject(data),origin:"local",lastEventId:uuid()})}};__name(LocalChannel,"LocalChannel");function fakeWorkerPair(){let w1=new LocalChannel;let w2=new LocalChannel;w1.other=w2;w2.other=w1;return[w1,w2]}__name(fakeWorkerPair,"fakeWorkerPair");var JsonEncoder=class{encode(data){return JSON.stringify(data)}decode(data){return JSON.parse(data)}};__name(JsonEncoder,"JsonEncoder");function useMessages(opt={}){let{handlers,encoder=new JsonEncoder,retryAfter=1e3,ignoreUnhandled=true}=opt;const log5=Logger(`messages:${uname(!!handlers?"server":"client")}`);let channel;let queue=[];let queueRetryTimer;let waitingForResponse={};const dispose=__name(()=>{clearTimeout(queueRetryTimer)},"dispose");const postNext=__name(()=>{clearTimeout(queueRetryTimer);if(channel){if(channel.isConnected){while(queue.length){let message=queue[0];try{channel.postMessage(encoder.encode(message));queue.shift()}catch(err){log5.warn("postMessage",err);break}}}if(queue.length>0&&retryAfter>0){queueRetryTimer=setTimeout(postNext,retryAfter)}}},"postNext");const postMessage=__name(message=>{log5("enqueue postMessage",message);queue.push(message);postNext()},"postMessage");const connect=__name(newChannel=>{channel=newChannel;channel.on("connect",postNext);if(handlers){channel.on("message",async msg=>{const{name,args,id}=encoder.decode(msg.data);if(name){log5(`name ${name} id ${id}`);try{let result=await promisify(handlers[name](...args));log5(`result ${result}`);if(id){postMessage({id,result})}}catch(error){log5("execution error",error);let err=error instanceof Error?error:new Error(valueToString(error));postMessage({id,error:{message:err.message,stack:err.stack,name:err.name}})}}else if(!ignoreUnhandled){log5.warn("Unhandled message",msg)}})}channel.on("message",async msg=>{const{name,args,id,result,error}=encoder.decode(msg.data);if(!name&&id){log5(`response for id=${id}: result=${result}, error=${error}`);const[resolve,reject]=waitingForResponse[id];if(resolve&&reject){delete waitingForResponse[id];if(error){let err=new Error(error.message);err.stack=error.stack;err.name=error.name;log5("reject",err);reject(err)}else{log5("resolve",result);resolve(result)}}}});postNext()},"connect");const fetchMessage=__name(async(name,args,opt2={})=>{const{timeout:timeout2=5e3}=opt2;const id=uuid();postMessage({name,args,id});return tryTimeout(new Promise((resolve,reject)=>waitingForResponse[id]=[resolve,reject]),timeout2)},"fetchMessage");if(opt.channel){connect(opt.channel)}const createPromiseProxy2=__name((opt2,predefinedMethods={})=>{const{timeout:timeout2=5e3}=opt2;return new Proxy(predefinedMethods,{get:(target,name)=>{if(name in target)return target[name];return(...args)=>{if(!handlers){return fetchMessage(name,args,opt2)}}}})},"createPromiseProxy");return createPromiseProxy2({},{dispose,connect,options(perCallopt){return createPromiseProxy2(__spreadValues({},perCallopt))}})}__name(useMessages,"useMessages");var createPromiseProxy=__name((fn,opt,predefinedMethods={})=>new Proxy(predefinedMethods,{get:(target,name)=>{if(name in target)return target[name];return(...args)=>fn(name,args,opt)}}),"createPromiseProxy");function useMessageHub(opt={}){let{name=uname("hub"),encoder=new JsonEncoder,retryAfter=1e3,ignoreUnhandled=true}=opt;const log5=Logger(name);let handlers={};let channel;let queue=[];let queueRetryTimer;let waitingForResponse={};const dispose=__name(()=>{clearTimeout(queueRetryTimer)},"dispose");const postNext=__name(()=>{clearTimeout(queueRetryTimer);if(channel){if(channel.isConnected){while(queue.length){let message=queue[0];try{channel.postMessage(encoder.encode(message));queue.shift()}catch(err){log5.warn("postMessage",err);break}}}if(queue.length>0&&retryAfter>0){queueRetryTimer=setTimeout(postNext,retryAfter)}}},"postNext");const postMessage=__name(message=>{log5("enqueue postMessage",message);queue.push(message);postNext()},"postMessage");const connect=__name(newChannel=>{channel=newChannel;channel.on("connect",postNext);channel.on("message",async msg=>{const{name:name2,args,id,result,error}=encoder.decode(msg.data);if(name2){log5(`name ${name2} id ${id}`);try{let result2=await promisify(handlers[name2](...args));log5(`result ${result2}`);if(id){postMessage({id,result:result2})}}catch(error2){log5("execution error",error2);let err=error2 instanceof Error?error2:new Error(valueToString(error2));postMessage({id,error:{message:err.message,stack:err.stack,name:err.name}})}}else if(id){log5(`response for id=${id}: result=${result}, error=${error}`);const[resolve,reject]=waitingForResponse[id];if(resolve&&reject){delete waitingForResponse[id];if(error){let err=new Error(error.message);err.stack=error.stack;err.name=error.name;log5("reject",err);reject(err)}else{log5("resolve",result);resolve(result)}}}else if(!ignoreUnhandled){log5.warn("Unhandled message",msg)}});postNext()},"connect");const fetchMessage=__name(async(name2,args,opt2={})=>{const{timeout:timeout2=5e3}=opt2;const id=uuid();postMessage({name:name2,args,id});return tryTimeout(new Promise((resolve,reject)=>waitingForResponse[id]=[resolve,reject]),timeout2)},"fetchMessage");if(opt.channel){connect(opt.channel)}return{dispose,connect,listen(newHandlers){Object.assign(handlers,newHandlers)},send(){return createPromiseProxy(fetchMessage,{},{options(perCallopt){return createPromiseProxy(fetchMessage,__spreadValues({},perCallopt))}})}}}__name(useMessageHub,"useMessageHub");function createMutex(){let token=true;return(fn,elseFn)=>{let executed=false;if(token){token=false;try{fn();executed=true}finally{token=true}}else if(elseFn!==void 0){elseFn()}return executed}}__name(createMutex,"createMutex");var log3=Logger("zeed:queue");var SerialQueue=class{constructor(opt={}){this.queue=[];this.isPaused=false;this.waitToFinish=[];const{name=uname("queue"),logLevel}=opt;this.name=name;this.log=Logger(`zeed:queue:${name}`);this.log.level=logLevel!=null?logLevel:LogLevel.off}async performNext(){this.log(`performNext, queue.length =`,this.queue.length);if(this.currentTask!=null){this.log(`performNext => skip while another task is running`);return}if(this.isPaused){this.log(`performNext => skip while is paused`);return}while(this.currentTask==null&&!this.isPaused){let info=this.queue.shift();this.log(`performNext => ${info==null?void 0:info.name}`);if(info==null){break}const{name,task,resolve}=info;this.currentTask=task();let result=void 0;try{this.log.info(`start task ${name}`);result=await this.currentTask;this.log(`finished task ${name} with result =`,result)}catch(err){log3.warn("Error performing task",err)}resolve(result);this.currentTask=void 0}while(this.waitToFinish.length>0){this.waitToFinish.shift()()}}async enqueue(task,opt={}){const{immediate:immediate2=false,name=uname(this.name)}=opt;if(immediate2){this.log.info(`immediate execution ${name}`);return await task()}this.log(`enqueue ${name}`);return new Promise(resolve=>{this.queue.push({name,task,resolve});this.performNext()})}async enqueueReentrant(task,opt={}){return this.enqueue(task,{immediate:this.currentTask!=null,name:opt.name})}async cancelAll(unblock=true){this.log(`cancelAll`);let resolver=this.queue.map(task=>task.resolve);this.queue=[];resolver.forEach(r=>r(void 0));await this.wait()}async pause(){this.log(`pause`);this.isPaused=true;await this.wait()}resume(){this.log(`resume`);this.isPaused=false;this.performNext()}async wait(){this.log(`wait`);if(this.currentTask==null&&(this.queue.length===0||this.isPaused)){return}return new Promise(resolve=>{this.waitToFinish.push(resolve)})}};__name(SerialQueue,"SerialQueue");var log4=Logger("zeed:memstorage");var MemStorage=class{constructor(opt={}){this.store={};this.pretty=false;var _a,_b;this.objectToString=(_a=opt.objectToString)!=null?_a:data=>{return this.pretty?JSON.stringify(data,null,2):JSON.stringify(data)};this.objectFromString=(_b=opt.objectFromString)!=null?_b:data=>{try{return JSON.parse(data)}catch(err){log4.warn(`MemStorage parse error '${err}' in`,data)}}}setItem(key,value){const data=this.objectToString(value);this.store[key]=data}getItem(key){if(this.store.hasOwnProperty(key)){let value=this.store[key];return this.objectFromString(value)}}removeItem(key){delete this.store[key]}clear(){this.store={}}allKeys(){return Object.keys(this.store)}};__name(MemStorage,"MemStorage");function throttle(callback,opt={}){const{delay=100,noTrailing=false,debounceMode=false}=opt;let timeoutID;let cancelled=false;let lastExec=0;function clearExistingTimeout(){if(timeoutID){clearTimeout(timeoutID)}}__name(clearExistingTimeout,"clearExistingTimeout");function cancel(){clearExistingTimeout();cancelled=true}__name(cancel,"cancel");function wrapper(...arguments_){let self=this;let elapsed=Date.now()-lastExec;if(cancelled){return}function exec(){lastExec=Date.now();callback.apply(self,arguments_)}__name(exec,"exec");function clear(){timeoutID=void 0}__name(clear,"clear");if(debounceMode&&!timeoutID){exec()}clearExistingTimeout();if(debounceMode===void 0&&elapsed>delay){exec()}else if(noTrailing!==true){timeoutID=setTimeout(debounceMode?clear:exec,debounceMode===void 0?delay-elapsed:delay)}}__name(wrapper,"wrapper");wrapper.cancel=cancel;wrapper.dispose=cancel;return wrapper}__name(throttle,"throttle");function debounce(callback,opt={}){opt.debounceMode=true;return throttle(callback,opt)}__name(debounce,"debounce");function throttleAnimationFrame(callback){let requestId;let lastArgs;const later=__name(context=>()=>{requestId=void 0;callback.apply(context,lastArgs)},"later");const throttled=__name(function(...args){lastArgs=args;if(requestId==null){requestId=requestAnimationFrame(later(this))}},"throttled");throttled.cancel=throttled.dispose=()=>{cancelAnimationFrame(requestId);requestId=void 0};return throttled}__name(throttleAnimationFrame,"throttleAnimationFrame");function useDisposer(){let tracked=[];const untrack=__name(async disposable=>{if(tracked.includes(disposable)){arrayFilterInPlace(tracked,el=>el!==disposable);if(typeof disposable==="function"){await promisify(disposable())}else if(isPromise(disposable)){await disposable}else if(typeof disposable.dispose==="function"){await promisify(disposable.dispose())}else if(isPromise(disposable.dispose)){await disposable.dispose}else if(typeof disposable.cleanup==="function"){await promisify(disposable.cleanup())}else if(isPromise(disposable.cleanup)){await disposable.cleanup}}},"untrack");const dispose=__name(async()=>{while(tracked.length>0){await untrack(tracked[0])}},"dispose");const track=__name(obj=>{tracked.unshift(obj);return()=>untrack(obj)},"track");return Object.assign(dispose,{track,untrack,dispose,getSize(){return tracked.length}})}__name(useDisposer,"useDisposer");function useTimeout(fn,timeout2=0){let timeoutHandle=setTimeout(fn,timeout2);return()=>{if(timeoutHandle){clearTimeout(timeoutHandle);timeoutHandle=void 0}}}__name(useTimeout,"useTimeout");function useInterval(fn,interval){let intervalHandle=setInterval(fn,interval);return()=>{if(intervalHandle){clearInterval(intervalHandle);intervalHandle=void 0}}}__name(useInterval,"useInterval");function useEventListener(emitter,eventName,fn,...args){if(emitter==null)return()=>{};if(emitter.on){emitter.on(eventName,fn,...args)}else if(emitter.addEventListener){emitter.addEventListener(eventName,fn,...args)}return()=>{if(emitter.off){emitter.off(eventName,fn,...args)}else if(emitter.removeEventListener){emitter.removeEventListener(eventName,fn,...args)}}}__name(useEventListener,"useEventListener");export{csv,useBase,encodeBase16,decodeBase16,encodeBase32,decodeBase32,encodeBase58,decodeBase58,encodeBase62,decodeBase62,toCamelCase,toCapitalize,toCapitalizeWords,jsonStringify,stringToBoolean,stringToInteger,stringToFloat,valueToBoolean,valueToInteger,valueToFloat,valueToString,toFloat,toInt,toString,toBool,formatMessages,renderMessages,escapeHTML,unescapeHTML,parseOrderby,composeOrderby,cmp,sortedOrderby,toValidFilename,escapeRegExp,startSortWeight,endSortWeight,moveSortWeight,sortedItems,linkifyPlainText,toHumanReadableUrl,size,last,empty,cloneObject,arrayUnique,arrayMinus,arrayUnion,arrayFlatten,arrayIntersection,arraySymmetricDifference,arrayRemoveElement,arraySetElement,arrayFilterInPlace,arrayToggleInPlace,arrayEmptyInPlace,arraySorted,arraySortedNumbers,arrayIsEqual,arrayShuffleInPlace,arrayShuffle,arrayShuffleForce,arrayRandomElement,getStackLlocationList,getSourceLocation,sleep,immediate,timeoutReached,timeout,timoutError,isTimeout,tryTimeout,waitOn,isPromise,promisify,Emitter,getGlobalEmitter,messages,lazyListener,uuid,uuidB32,uname,qid,uuidv4,suidBytes,suid,suidDate,suidBytesDate,Channel,LocalChannel,fakeWorkerPair,JsonEncoder,useMessages,createPromiseProxy,useMessageHub,createMutex,SerialQueue,MemStorage,throttle,debounce,throttleAnimationFrame,useDisposer,useTimeout,useInterval,useEventListener};
|
|
3
|
+
//# sourceMappingURL=chunk-IPMT2EQ4.js.map
|