wsemi 1.9.13 → 1.9.14
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 +1 -1
- package/dist/wsemi.umd.js +7 -7
- package/dist/wsemi.umd.js.map +1 -1
- package/docs/-_class.mjs.html +1 -1
- package/docs/-_const.mjs.html +1 -1
- package/docs/-_detector.mjs.html +1 -1
- package/docs/-_optNum.mjs.html +1 -1
- package/docs/ab2blob.mjs.html +1 -1
- package/docs/ab2u8arr.mjs.html +1 -1
- package/docs/addExcelWorksheetFromData.mjs.html +1 -1
- package/docs/addMonth.mjs.html +1 -1
- package/docs/aes2str.mjs.html +1 -1
- package/docs/alive.mjs.html +106 -5
- package/docs/arr2dt.mjs.html +1 -1
- package/docs/arrAccum.mjs.html +1 -1
- package/docs/arrAdd.mjs.html +1 -1
- package/docs/arrAt.mjs.html +1 -1
- package/docs/arrDiff.mjs.html +1 -1
- package/docs/arrFilterByKeywords.mjs.html +1 -1
- package/docs/arrFilterByNum.mjs.html +1 -1
- package/docs/arrFilterByPnum.mjs.html +1 -1
- package/docs/arrFilterByPnumAndToLog.mjs.html +1 -1
- package/docs/arrFind.mjs.html +1 -1
- package/docs/arrGroupByMaxmin.mjs.html +1 -1
- package/docs/arrHas.mjs.html +1 -1
- package/docs/arrInsert.mjs.html +1 -1
- package/docs/arrLookupByMaxmin.mjs.html +1 -1
- package/docs/arrMax.mjs.html +1 -1
- package/docs/arrMin.mjs.html +1 -1
- package/docs/arrMulti.mjs.html +1 -1
- package/docs/arrNorm.mjs.html +1 -1
- package/docs/arrProduct.mjs.html +1 -1
- package/docs/arrPull.mjs.html +1 -1
- package/docs/arrPullAt.mjs.html +1 -1
- package/docs/arrReduce.mjs.html +1 -1
- package/docs/arrReverse.mjs.html +1 -1
- package/docs/arrSep.mjs.html +1 -1
- package/docs/arrSort.mjs.html +1 -1
- package/docs/asind.mjs.html +1 -1
- package/docs/atan2d.mjs.html +1 -1
- package/docs/atand.mjs.html +1 -1
- package/docs/attstr.mjs.html +1 -1
- package/docs/b642obj.mjs.html +1 -1
- package/docs/b642str.mjs.html +1 -1
- package/docs/b642u16arr.mjs.html +1 -1
- package/docs/b642u8arr.mjs.html +1 -1
- package/docs/binstr.mjs.html +1 -1
- package/docs/blob2ab.mjs.html +1 -1
- package/docs/blob2b64.mjs.html +1 -1
- package/docs/blob2str.mjs.html +1 -1
- package/docs/blob2u8arr.mjs.html +1 -1
- package/docs/blobs2b64s.mjs.html +1 -1
- package/docs/blobs2u8arrs.mjs.html +1 -1
- package/docs/bodyLog.mjs.html +1 -1
- package/docs/browserView.mjs.html +1 -1
- package/docs/browserViewFromBlob.mjs.html +1 -1
- package/docs/browserViewFromText.mjs.html +1 -1
- package/docs/browserViewFromU8arr.mjs.html +1 -1
- package/docs/bs2u8arr.mjs.html +1 -1
- package/docs/bufRead.mjs.html +1 -1
- package/docs/bufReadDbl.mjs.html +1 -1
- package/docs/bufWrite.mjs.html +1 -1
- package/docs/bufWriteDbl.mjs.html +1 -1
- package/docs/cache.mjs.html +3 -3
- package/docs/cacheBd.mjs.html +1 -1
- package/docs/cacheSt.mjs.html +2 -2
- package/docs/cbol.mjs.html +1 -1
- package/docs/cdbl.mjs.html +1 -1
- package/docs/ceil.mjs.html +1 -1
- package/docs/cfilesize.mjs.html +1 -1
- package/docs/cfinancial.mjs.html +1 -1
- package/docs/cint.mjs.html +1 -1
- package/docs/clearXSS.mjs.html +1 -1
- package/docs/clearXSSDyn.mjs.html +1 -1
- package/docs/color.mjs.html +1 -1
- package/docs/composeToTree.mjs.html +1 -1
- package/docs/convertToTree.mjs.html +1 -1
- package/docs/copyStrToClipboard.mjs.html +1 -1
- package/docs/cosd.mjs.html +1 -1
- package/docs/cotd.mjs.html +1 -1
- package/docs/createExcelWorkbook.mjs.html +1 -1
- package/docs/cscd.mjs.html +1 -1
- package/docs/cstr.mjs.html +1 -1
- package/docs/day2cht.mjs.html +1 -1
- package/docs/debounce.mjs.html +1 -1
- package/docs/delay.mjs.html +1 -1
- package/docs/detectXSS.mjs.html +1 -1
- package/docs/detectXSSDyn.mjs.html +1 -1
- package/docs/dig.mjs.html +1 -1
- package/docs/digExp.mjs.html +1 -1
- package/docs/domAlert.mjs.html +1 -1
- package/docs/domAppend.mjs.html +1 -1
- package/docs/domCancelEvent.mjs.html +1 -1
- package/docs/domCompareText.mjs.html +1 -1
- package/docs/domConvertToPic.mjs.html +1 -1
- package/docs/domConvertToPicDyn.mjs.html +1 -1
- package/docs/domDetect.mjs.html +1 -1
- package/docs/domDrag.mjs.html +1 -1
- package/docs/domDragBarAndScroll.mjs.html +1 -1
- package/docs/domDragPointer.mjs.html +1 -1
- package/docs/domDragPreview.mjs.html +1 -1
- package/docs/domDropFiles.mjs.html +1 -1
- package/docs/domElementsFromPoint.mjs.html +1 -1
- package/docs/domFadeIn.mjs.html +1 -1
- package/docs/domFadeOut.mjs.html +1 -1
- package/docs/domFind.mjs.html +1 -1
- package/docs/domFinds.mjs.html +1 -1
- package/docs/domGetAttr.mjs.html +1 -1
- package/docs/domGetBoudRect.mjs.html +1 -1
- package/docs/domGetBoudRectRefSelf.mjs.html +1 -1
- package/docs/domGetFileAccept.mjs.html +1 -1
- package/docs/domGetFiles.mjs.html +1 -1
- package/docs/domGetParents.mjs.html +1 -1
- package/docs/domGetPointFromEvent.mjs.html +1 -1
- package/docs/domGetScrollableParent.mjs.html +1 -1
- package/docs/domGetWindowSize.mjs.html +1 -1
- package/docs/domIsClientXYIn.mjs.html +1 -1
- package/docs/domIsFocused.mjs.html +1 -1
- package/docs/domIsRendered.mjs.html +1 -1
- package/docs/domIsStable.mjs.html +1 -1
- package/docs/domIsVisible.mjs.html +1 -1
- package/docs/domPrepend.mjs.html +1 -1
- package/docs/domRemove.mjs.html +1 -1
- package/docs/domRenderMarkdownMind.mjs.html +1 -1
- package/docs/domRenderMarkdownMindDyn.mjs.html +1 -1
- package/docs/domRipple.mjs.html +1 -1
- package/docs/domScrollIntoView.mjs.html +1 -1
- package/docs/domScrollTo.mjs.html +1 -1
- package/docs/domSetAttr.mjs.html +1 -1
- package/docs/domShowImages.mjs.html +1 -1
- package/docs/domShowImagesDyn.mjs.html +1 -1
- package/docs/domShowInputAndGetFiles.mjs.html +1 -1
- package/docs/domShowInputAndGetFilesU8Arrs.mjs.html +1 -1
- package/docs/domShowInputDatatime.mjs.html +1 -1
- package/docs/domTooltip.mjs.html +1 -1
- package/docs/domTriggerEvent.mjs.html +1 -1
- package/docs/domVirtualCreate.mjs.html +1 -1
- package/docs/domVirtualCreateQueue.mjs.html +1 -1
- package/docs/downloadExcelFileFromData.mjs.html +1 -1
- package/docs/downloadExcelFileFromDataDyn.mjs.html +1 -1
- package/docs/downloadFileFromB64.mjs.html +1 -1
- package/docs/downloadFileFromBlob.mjs.html +1 -1
- package/docs/downloadFileFromText.mjs.html +1 -1
- package/docs/downloadFileFromU8Arr.mjs.html +1 -1
- package/docs/dtmapping.mjs.html +1 -1
- package/docs/dtpick.mjs.html +1 -1
- package/docs/estimateTicks.mjs.html +1 -1
- package/docs/evEmit.mjs.html +2 -2
- package/docs/evEmitDelay.mjs.html +1 -1
- package/docs/evem.mjs.html +1 -1
- package/docs/examples/ex-blob2b64.html +1 -1
- package/docs/examples/ex-clearXSS.html +1 -1
- package/docs/examples/ex-clearXSSDyn.html +1 -1
- package/docs/examples/ex-colorConverter.html +1 -1
- package/docs/examples/ex-detectXSS.html +1 -1
- package/docs/examples/ex-detectXSSDyn.html +1 -1
- package/docs/examples/ex-domCompareText.html +1 -1
- package/docs/examples/ex-domConvertToPic.html +1 -1
- package/docs/examples/ex-domDrag.html +1 -1
- package/docs/examples/ex-domDropFiles.html +1 -1
- package/docs/examples/ex-domIsVisible.html +1 -1
- package/docs/examples/ex-domRenderMarkdownMind.html +1 -1
- package/docs/examples/ex-domRenderMarkdownMindDyn.html +1 -1
- package/docs/examples/ex-domRipple.html +1 -1
- package/docs/examples/ex-domScrollIntoView.html +1 -1
- package/docs/examples/ex-domScrollTo.html +1 -1
- package/docs/examples/ex-domShowImages.html +1 -1
- package/docs/examples/ex-domShowImagesDyn.html +1 -1
- package/docs/examples/ex-domShowInputAndGetFiles.html +1 -1
- package/docs/examples/ex-domTooltip.html +1 -1
- package/docs/examples/ex-getFileHash.html +1 -1
- package/docs/examples/ex-getUserAgent.html +1 -1
- package/docs/examples/ex-getUserAgentDyn.html +1 -1
- package/docs/examples/ex-html2str.html +1 -1
- package/docs/examples/ex-obj2u8arr-u8arr2obj.html +1 -1
- package/docs/examples/ex-openLink.html +1 -1
- package/docs/examples/ex-str2aes-aes2str.html +1 -1
- package/docs/examples/ex-str2b64-b642str.html +1 -1
- package/docs/examples/ex-strFindFuzz.html +1 -1
- package/docs/examples/ex-timeTZ2expire-timeTZ2past.html +1 -1
- package/docs/examples/ex-xlsx.html +1 -1
- package/docs/execCli.mjs.html +1 -1
- package/docs/execCliCore.mjs.html +1 -1
- package/docs/execCliJsonRpc.mjs.html +1 -1
- package/docs/execCliSession.mjs.html +1 -1
- package/docs/execJsCode.mjs.html +1 -1
- package/docs/execProcess.mjs.html +1 -1
- package/docs/execProcessKillPid.mjs.html +1 -1
- package/docs/filepathToTree.mjs.html +1 -1
- package/docs/files2data.mjs.html +1 -1
- package/docs/flattenToConn.mjs.html +1 -1
- package/docs/flattenTree.mjs.html +1 -1
- package/docs/floor.mjs.html +1 -1
- package/docs/fsBuildReadStreamText.mjs.html +1 -1
- package/docs/fsBuildWriteStreamText.mjs.html +1 -1
- package/docs/fsCleanFolder.mjs.html +1 -1
- package/docs/fsCleanFolderCore.mjs.html +1 -1
- package/docs/fsCopyFile.mjs.html +1 -1
- package/docs/fsCopyFileCore.mjs.html +1 -1
- package/docs/fsCopyFolder.mjs.html +1 -1
- package/docs/fsCopyFolderCore.mjs.html +1 -1
- package/docs/fsCreateFile.mjs.html +1 -1
- package/docs/fsCreateFileCore.mjs.html +1 -1
- package/docs/fsCreateFolder.mjs.html +1 -1
- package/docs/fsCreateFolderCore.mjs.html +1 -1
- package/docs/fsDeleteFile.mjs.html +1 -1
- package/docs/fsDeleteFileCore.mjs.html +1 -1
- package/docs/fsDeleteFileSafe.mjs.html +1 -1
- package/docs/fsDeleteFileSafeCore.mjs.html +1 -1
- package/docs/fsDeleteFolder.mjs.html +1 -1
- package/docs/fsDeleteFolderCore.mjs.html +1 -1
- package/docs/fsDeleteFolderSafe.mjs.html +1 -1
- package/docs/fsDeleteFolderSafeCore.mjs.html +1 -1
- package/docs/fsDownloadFile.mjs.html +1 -1
- package/docs/fsDownloadFileCore.mjs.html +1 -1
- package/docs/fsEvem.mjs.html +1 -1
- package/docs/fsExists.mjs.html +1 -1
- package/docs/fsExistsCore.mjs.html +1 -1
- package/docs/fsGetFileBasicHash.mjs.html +1 -1
- package/docs/fsGetFileBasicHashCore.mjs.html +1 -1
- package/docs/fsGetFileHash.mjs.html +1 -1
- package/docs/fsGetFileHashCore.mjs.html +1 -1
- package/docs/fsGetFileXxHash.mjs.html +1 -1
- package/docs/fsGetFileXxHashCore.mjs.html +1 -1
- package/docs/fsGetFilesInFolder.mjs.html +1 -1
- package/docs/fsGetFilesInFolderCore.mjs.html +1 -1
- package/docs/fsGetFilesWithHashInFolder.mjs.html +1 -1
- package/docs/fsGetFilesWithHashInFolderCore.mjs.html +1 -1
- package/docs/fsGetFolderBasicHash.mjs.html +1 -1
- package/docs/fsGetFolderBasicHashCore.mjs.html +1 -1
- package/docs/fsGetFoldersInFolder.mjs.html +1 -1
- package/docs/fsGetFoldersInFolderCore.mjs.html +1 -1
- package/docs/fsIsFile.mjs.html +1 -1
- package/docs/fsIsFileCore.mjs.html +1 -1
- package/docs/fsIsFolder.mjs.html +1 -1
- package/docs/fsIsFolderCore.mjs.html +1 -1
- package/docs/fsMergeFiles.mjs.html +1 -1
- package/docs/fsMergeFilesCore.mjs.html +1 -1
- package/docs/fsReadJson.mjs.html +1 -1
- package/docs/fsReadText.mjs.html +1 -1
- package/docs/fsReadTextCore.mjs.html +1 -1
- package/docs/fsRenameFile.mjs.html +1 -1
- package/docs/fsRenameFileCore.mjs.html +1 -1
- package/docs/fsRenameFolder.mjs.html +1 -1
- package/docs/fsRenameFolderCore.mjs.html +1 -1
- package/docs/fsSrlog.mjs.html +1 -1
- package/docs/fsSyncFolder.mjs.html +1 -1
- package/docs/fsSyncFolderCore.mjs.html +1 -1
- package/docs/fsTask.mjs.html +1 -1
- package/docs/fsTaskCp.mjs.html +1 -1
- package/docs/fsTreeFolder.mjs.html +1 -1
- package/docs/fsTreeFolderCore.mjs.html +1 -1
- package/docs/fsTreeFolderWithHash.mjs.html +1 -1
- package/docs/fsTreeFolderWithHashCore.mjs.html +1 -1
- package/docs/fsWatchFile.mjs.html +1 -1
- package/docs/fsWatchFolder.mjs.html +1 -1
- package/docs/fsWriteJson.mjs.html +1 -1
- package/docs/fsWriteText.mjs.html +1 -1
- package/docs/fsWriteTextCore.mjs.html +1 -1
- package/docs/genGradientColor.mjs.html +1 -1
- package/docs/genID.mjs.html +1 -1
- package/docs/genIDSeq.mjs.html +1 -1
- package/docs/genPm.mjs.html +1 -1
- package/docs/getBufferSize.mjs.html +1 -1
- package/docs/getClearPathName.mjs.html +1 -1
- package/docs/getCsvStrFromData.mjs.html +1 -1
- package/docs/getDataFromExcelFileU8Arr.mjs.html +1 -1
- package/docs/getDataFromExcelFileU8ArrDyn.mjs.html +1 -1
- package/docs/getEnv.mjs.html +1 -1
- package/docs/getErrorMessage.mjs.html +1 -1
- package/docs/getExcelU8ArrFromData.mjs.html +1 -1
- package/docs/getExcelU8ArrFromWorkbook.mjs.html +1 -1
- package/docs/getExcelWorkbookFromData.mjs.html +1 -1
- package/docs/getExcelWorkbookFromWorksheet.mjs.html +1 -1
- package/docs/getExcelWorksheetFromData.mjs.html +1 -1
- package/docs/getFileAccept.mjs.html +1 -1
- package/docs/getFileBasicHash.mjs.html +1 -1
- package/docs/getFileHash.mjs.html +1 -1
- package/docs/getFileName.mjs.html +1 -1
- package/docs/getFileNameExt.mjs.html +1 -1
- package/docs/getFileTrueName.mjs.html +1 -1
- package/docs/getFileType.mjs.html +1 -1
- package/docs/getFileXxHash.mjs.html +1 -1
- package/docs/getGlobal.mjs.html +1 -1
- package/docs/getObjSize.mjs.html +1 -1
- package/docs/getPathParent.mjs.html +1 -1
- package/docs/getTimeBetween.mjs.html +1 -1
- package/docs/getTimeFromUnit.mjs.html +1 -1
- package/docs/getTimeHp.mjs.html +1 -1
- package/docs/getTimeObject.mjs.html +1 -1
- package/docs/getTimeRange.mjs.html +1 -1
- package/docs/getUserAgent.mjs.html +1 -1
- package/docs/getUserAgentDyn.mjs.html +1 -1
- package/docs/getltdtkeys.mjs.html +1 -1
- package/docs/global.html +1 -1
- package/docs/haskey.mjs.html +1 -1
- package/docs/html2str.mjs.html +1 -1
- package/docs/htmlDecode.mjs.html +1 -1
- package/docs/htmlEncode.mjs.html +1 -1
- package/docs/importResources.mjs.html +1 -1
- package/docs/index.html +1 -1
- package/docs/interp1.mjs.html +1 -1
- package/docs/isDate.mjs.html +1 -1
- package/docs/isDev.mjs.html +1 -1
- package/docs/isEle.mjs.html +1 -1
- package/docs/isEleExistByID.mjs.html +1 -1
- package/docs/isEmail.mjs.html +1 -1
- package/docs/isErr.mjs.html +1 -1
- package/docs/isIE.mjs.html +1 -1
- package/docs/isNarrow.mjs.html +1 -1
- package/docs/isStrHasCapital.mjs.html +1 -1
- package/docs/isStrHasLetter.mjs.html +1 -1
- package/docs/isStrHasLowerCase.mjs.html +1 -1
- package/docs/isStrHasNumber.mjs.html +1 -1
- package/docs/isStrHasSpace.mjs.html +1 -1
- package/docs/isStrHasSymbol.mjs.html +1 -1
- package/docs/isUserIdentify.mjs.html +1 -1
- package/docs/isUserName.mjs.html +1 -1
- package/docs/isUserPw.mjs.html +1 -1
- package/docs/isWindow.mjs.html +1 -1
- package/docs/isab.mjs.html +1 -1
- package/docs/isarr.mjs.html +1 -1
- package/docs/isarr0.mjs.html +1 -1
- package/docs/isarr1.mjs.html +1 -1
- package/docs/isbigint.mjs.html +1 -1
- package/docs/isblob.mjs.html +1 -1
- package/docs/isbol.mjs.html +1 -1
- package/docs/isday.mjs.html +1 -1
- package/docs/isearr.mjs.html +1 -1
- package/docs/iseobj.mjs.html +1 -1
- package/docs/iser.mjs.html +1 -1
- package/docs/isernot.mjs.html +1 -1
- package/docs/isestr.mjs.html +1 -1
- package/docs/isfile.mjs.html +1 -1
- package/docs/isfun.mjs.html +1 -1
- package/docs/isint.mjs.html +1 -1
- package/docs/ismonth.mjs.html +1 -1
- package/docs/isn0int.mjs.html +1 -1
- package/docs/isn0num.mjs.html +1 -1
- package/docs/isnan.mjs.html +1 -1
- package/docs/isnbr.mjs.html +1 -1
- package/docs/isnint.mjs.html +1 -1
- package/docs/isnnum.mjs.html +1 -1
- package/docs/isnull.mjs.html +1 -1
- package/docs/isnum.mjs.html +1 -1
- package/docs/isobj.mjs.html +1 -1
- package/docs/isobj0.mjs.html +1 -1
- package/docs/isp0int.mjs.html +1 -1
- package/docs/isp0num.mjs.html +1 -1
- package/docs/ispint.mjs.html +1 -1
- package/docs/ispm.mjs.html +1 -1
- package/docs/ispnum.mjs.html +1 -1
- package/docs/isstr.mjs.html +1 -1
- package/docs/isstr0.mjs.html +1 -1
- package/docs/istime.mjs.html +1 -1
- package/docs/istimeTZ.mjs.html +1 -1
- package/docs/istimems.mjs.html +1 -1
- package/docs/istimemsTZ.mjs.html +1 -1
- package/docs/isu16arr.mjs.html +1 -1
- package/docs/isu8arr.mjs.html +1 -1
- package/docs/isundefined.mjs.html +1 -1
- package/docs/j2o.mjs.html +1 -1
- package/docs/judge.mjs.html +1 -1
- package/docs/keysmat2ltdt.mjs.html +1 -1
- package/docs/ltdt2vrtsable.mjs.html +1 -1
- package/docs/ltdtDiff.mjs.html +1 -1
- package/docs/ltdtDiffByKey.mjs.html +1 -1
- package/docs/ltdtkeys2mat.mjs.html +1 -1
- package/docs/ltdtkeysheads2mat.mjs.html +1 -1
- package/docs/ltdtmapping.mjs.html +1 -1
- package/docs/ltdtmerge.mjs.html +1 -1
- package/docs/ltdtpick.mjs.html +1 -1
- package/docs/ltdtpull.mjs.html +1 -1
- package/docs/mat2ltdt.mjs.html +1 -1
- package/docs/matConcat.mjs.html +1 -1
- package/docs/matDiff.mjs.html +1 -1
- package/docs/matat.mjs.html +1 -1
- package/docs/now2str.mjs.html +1 -1
- package/docs/now2strp.mjs.html +1 -1
- package/docs/nowDay2str.mjs.html +1 -1
- package/docs/nowms2str.mjs.html +1 -1
- package/docs/nowms2strp.mjs.html +1 -1
- package/docs/o2j.mjs.html +1 -1
- package/docs/obj2b64.mjs.html +1 -1
- package/docs/obj2pb64.mjs.html +1 -1
- package/docs/obj2str.mjs.html +1 -1
- package/docs/obj2stru8arr.mjs.html +1 -1
- package/docs/obj2u8arr.mjs.html +1 -1
- package/docs/objSortBy.mjs.html +1 -1
- package/docs/objSortByKeys.mjs.html +1 -1
- package/docs/oo.mjs.html +1 -1
- package/docs/openLink.mjs.html +1 -1
- package/docs/pb642obj.mjs.html +1 -1
- package/docs/pmChain.mjs.html +1 -1
- package/docs/pmConvertResolve.mjs.html +1 -1
- package/docs/pmDebounce.mjs.html +1 -1
- package/docs/pmHook.mjs.html +1 -1
- package/docs/pmHookReject.mjs.html +1 -1
- package/docs/pmIni.mjs.html +1 -1
- package/docs/pmInvResolve.mjs.html +1 -1
- package/docs/pmKeyMutex.mjs.html +1 -1
- package/docs/pmMap.mjs.html +1 -1
- package/docs/pmQueue.mjs.html +1 -1
- package/docs/pmSeries.mjs.html +1 -1
- package/docs/pmThrottle.mjs.html +1 -1
- package/docs/pmTimeout.mjs.html +1 -1
- package/docs/preciseNum.mjs.html +1 -1
- package/docs/pseudoRandom.mjs.html +1 -1
- package/docs/pseudoRandomIntRange.mjs.html +1 -1
- package/docs/pseudoRandomIntsNdpRange.mjs.html +1 -1
- package/docs/pseudoRandomIntsRange.mjs.html +1 -1
- package/docs/pseudoRandomRange.mjs.html +1 -1
- package/docs/pseudoRandomsRange.mjs.html +1 -1
- package/docs/queue.mjs.html +1 -1
- package/docs/random.mjs.html +1 -1
- package/docs/randomIntRange.mjs.html +1 -1
- package/docs/randomIntsNdpRange.mjs.html +1 -1
- package/docs/randomIntsRange.mjs.html +1 -1
- package/docs/randomRange.mjs.html +1 -1
- package/docs/randomsRange.mjs.html +1 -1
- package/docs/rang.mjs.html +1 -1
- package/docs/rep.mjs.html +1 -1
- package/docs/repObj.mjs.html +1 -1
- package/docs/replace.mjs.html +1 -1
- package/docs/replaceObj.mjs.html +1 -1
- package/docs/replacePlus.mjs.html +1 -1
- package/docs/round.mjs.html +1 -1
- package/docs/secd.mjs.html +1 -1
- package/docs/sep.mjs.html +1 -1
- package/docs/sepInt.mjs.html +1 -1
- package/docs/setIntervalHp.mjs.html +1 -1
- package/docs/setTimeoutHp.mjs.html +1 -1
- package/docs/sind.mjs.html +1 -1
- package/docs/split.mjs.html +1 -1
- package/docs/str2aes.mjs.html +1 -1
- package/docs/str2b64.mjs.html +1 -1
- package/docs/str2hint.mjs.html +1 -1
- package/docs/str2md5.mjs.html +1 -1
- package/docs/str2obj.mjs.html +1 -1
- package/docs/str2sha.mjs.html +1 -1
- package/docs/str2sha512.mjs.html +1 -1
- package/docs/str2u8arr.mjs.html +1 -1
- package/docs/strCompare.mjs.html +1 -1
- package/docs/strCompareForVersion.mjs.html +1 -1
- package/docs/strDiff.mjs.html +1 -1
- package/docs/strDiffToHtml.mjs.html +1 -1
- package/docs/strFindFuzz.mjs.html +1 -1
- package/docs/strFindSimilar.mjs.html +1 -1
- package/docs/strTruncate.mjs.html +1 -1
- package/docs/strdelleft.mjs.html +1 -1
- package/docs/strdelright.mjs.html +1 -1
- package/docs/strleft.mjs.html +1 -1
- package/docs/strmid.mjs.html +1 -1
- package/docs/strright.mjs.html +1 -1
- package/docs/stru8arr2obj.mjs.html +1 -1
- package/docs/tand.mjs.html +1 -1
- package/docs/time2day.mjs.html +1 -1
- package/docs/time2hour.mjs.html +1 -1
- package/docs/time2min.mjs.html +1 -1
- package/docs/timeTZ2day.mjs.html +1 -1
- package/docs/timeTZ2expire.mjs.html +1 -1
- package/docs/timeTZ2hour.mjs.html +1 -1
- package/docs/timeTZ2min.mjs.html +1 -1
- package/docs/timeTZ2past.mjs.html +1 -1
- package/docs/timems2day.mjs.html +1 -1
- package/docs/timems2hour.mjs.html +1 -1
- package/docs/timems2min.mjs.html +1 -1
- package/docs/timems2time.mjs.html +1 -1
- package/docs/timemsTZ2day.mjs.html +1 -1
- package/docs/timemsTZ2expire.mjs.html +1 -1
- package/docs/timemsTZ2hour.mjs.html +1 -1
- package/docs/timemsTZ2min.mjs.html +1 -1
- package/docs/timemsTZ2past.mjs.html +1 -1
- package/docs/timemsTZ2time.mjs.html +1 -1
- package/docs/treeObj.mjs.html +1 -1
- package/docs/treeToFilepath.mjs.html +1 -1
- package/docs/trim.mjs.html +1 -1
- package/docs/u16arr2b64.mjs.html +1 -1
- package/docs/u16arr2u8arr.mjs.html +1 -1
- package/docs/u8arr2ab.mjs.html +1 -1
- package/docs/u8arr2b64.mjs.html +1 -1
- package/docs/u8arr2blob.mjs.html +1 -1
- package/docs/u8arr2bs.mjs.html +1 -1
- package/docs/u8arr2obj.mjs.html +1 -1
- package/docs/u8arr2str.mjs.html +1 -1
- package/docs/u8arr2u16arr.mjs.html +1 -1
- package/docs/urlParse.mjs.html +1 -1
- package/docs/verifyValue.mjs.html +1 -1
- package/docs/waitFun.mjs.html +1 -1
- package/docs/wsemi.html +5 -5
- package/package.json +1 -1
- package/src/alive.mjs +105 -4
- package/src/cache.mjs +2 -2
- package/src/cacheSt.mjs +1 -1
- package/src/evEmit.mjs +1 -1
- package/test/alive.test.mjs +201 -0
- package/test/cache.test.mjs +26 -0
- package/test/cacheSt.test.mjs +40 -0
- package/toolfp/dist/wsemip.umd.js +1 -1
- package/toolparfor/dist/wpf.umd.js +1 -1
- package/toolparfor/dist/wpf_pmSeries.umd.js +1 -1
package/docs/u16arr2b64.mjs.html
CHANGED
|
@@ -141,7 +141,7 @@ export default u16arr2b64
|
|
|
141
141
|
<br class="clear">
|
|
142
142
|
|
|
143
143
|
<footer>
|
|
144
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
144
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
145
145
|
</footer>
|
|
146
146
|
|
|
147
147
|
<script>prettyPrint();</script>
|
|
@@ -130,7 +130,7 @@ export default u16arr2u8arr
|
|
|
130
130
|
<br class="clear">
|
|
131
131
|
|
|
132
132
|
<footer>
|
|
133
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
133
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
134
134
|
</footer>
|
|
135
135
|
|
|
136
136
|
<script>prettyPrint();</script>
|
package/docs/u8arr2ab.mjs.html
CHANGED
|
@@ -131,7 +131,7 @@ export default u8arr2ab
|
|
|
131
131
|
<br class="clear">
|
|
132
132
|
|
|
133
133
|
<footer>
|
|
134
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
134
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
135
135
|
</footer>
|
|
136
136
|
|
|
137
137
|
<script>prettyPrint();</script>
|
package/docs/u8arr2b64.mjs.html
CHANGED
|
@@ -136,7 +136,7 @@ export default u8arr2b64
|
|
|
136
136
|
<br class="clear">
|
|
137
137
|
|
|
138
138
|
<footer>
|
|
139
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
139
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
140
140
|
</footer>
|
|
141
141
|
|
|
142
142
|
<script>prettyPrint();</script>
|
package/docs/u8arr2blob.mjs.html
CHANGED
|
@@ -133,7 +133,7 @@ export default u8arr2blob
|
|
|
133
133
|
<br class="clear">
|
|
134
134
|
|
|
135
135
|
<footer>
|
|
136
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
136
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
137
137
|
</footer>
|
|
138
138
|
|
|
139
139
|
<script>prettyPrint();</script>
|
package/docs/u8arr2bs.mjs.html
CHANGED
|
@@ -133,7 +133,7 @@ export default u8arr2bs
|
|
|
133
133
|
<br class="clear">
|
|
134
134
|
|
|
135
135
|
<footer>
|
|
136
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
136
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
137
137
|
</footer>
|
|
138
138
|
|
|
139
139
|
<script>prettyPrint();</script>
|
package/docs/u8arr2obj.mjs.html
CHANGED
|
@@ -200,7 +200,7 @@ export default u8arr2obj
|
|
|
200
200
|
<br class="clear">
|
|
201
201
|
|
|
202
202
|
<footer>
|
|
203
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
203
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
204
204
|
</footer>
|
|
205
205
|
|
|
206
206
|
<script>prettyPrint();</script>
|
package/docs/u8arr2str.mjs.html
CHANGED
|
@@ -132,7 +132,7 @@ export default u8arr2str
|
|
|
132
132
|
<br class="clear">
|
|
133
133
|
|
|
134
134
|
<footer>
|
|
135
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
135
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
136
136
|
</footer>
|
|
137
137
|
|
|
138
138
|
<script>prettyPrint();</script>
|
|
@@ -130,7 +130,7 @@ export default u8arr2u16arr
|
|
|
130
130
|
<br class="clear">
|
|
131
131
|
|
|
132
132
|
<footer>
|
|
133
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
133
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
134
134
|
</footer>
|
|
135
135
|
|
|
136
136
|
<script>prettyPrint();</script>
|
package/docs/urlParse.mjs.html
CHANGED
|
@@ -111,7 +111,7 @@ export default urlParse
|
|
|
111
111
|
<br class="clear">
|
|
112
112
|
|
|
113
113
|
<footer>
|
|
114
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
114
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
115
115
|
</footer>
|
|
116
116
|
|
|
117
117
|
<script>prettyPrint();</script>
|
|
@@ -224,7 +224,7 @@ export default verifyValue
|
|
|
224
224
|
<br class="clear">
|
|
225
225
|
|
|
226
226
|
<footer>
|
|
227
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
227
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
228
228
|
</footer>
|
|
229
229
|
|
|
230
230
|
<script>prettyPrint();</script>
|
package/docs/waitFun.mjs.html
CHANGED
|
@@ -215,7 +215,7 @@ export default waitFun
|
|
|
215
215
|
<br class="clear">
|
|
216
216
|
|
|
217
217
|
<footer>
|
|
218
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
218
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
219
219
|
</footer>
|
|
220
220
|
|
|
221
221
|
<script>prettyPrint();</script>
|
package/docs/wsemi.html
CHANGED
|
@@ -1689,7 +1689,7 @@ str與base64須與加密時str2aes所用之設定相同,否則解不出原文
|
|
|
1689
1689
|
|
|
1690
1690
|
<dt class="tag-source">Source:</dt>
|
|
1691
1691
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
1692
|
-
<a href="alive.mjs.html">alive.mjs</a>, <a href="alive.mjs.html#
|
|
1692
|
+
<a href="alive.mjs.html">alive.mjs</a>, <a href="alive.mjs.html#line118">line 118</a>
|
|
1693
1693
|
</li></ul></dd>
|
|
1694
1694
|
|
|
1695
1695
|
|
|
@@ -1736,7 +1736,7 @@ str與base64須與加密時str2aes所用之設定相同,否則解不出原文
|
|
|
1736
1736
|
|
|
1737
1737
|
<h5 class="h5-examples">Example</h5>
|
|
1738
1738
|
|
|
1739
|
-
<pre class="prettyprint"><code>async function topAsync() {
|
|
1740
1739
|
function test1() {
|
|
1741
1740
|
return new Promise((resolve, reject) => {
|
|
1742
1741
|
let ms = []
|
|
1743
1742
|
let oAL = alive({ timeAlive: 1500 })
|
|
1744
1743
|
let t = Date.now()
|
|
1745
1744
|
let a = { data: 123 }
|
|
1746
1745
|
let b = { data: '34.56' }
|
|
1747
1746
|
setTimeout(() => {
|
|
1748
1747
|
console.log(parseInt((Date.now() - t)) + 'ms', 'trigger a1')
|
|
1749
1748
|
oAL.trigger('a', a)
|
|
1750
1749
|
}, 500)
|
|
1751
1750
|
setTimeout(() => {
|
|
1752
1751
|
console.log(parseInt((Date.now() - t)) + 'ms', 'trigger a2')
|
|
1753
1752
|
oAL.trigger('a', a)
|
|
1754
1753
|
}, 1900)
|
|
1755
1754
|
setTimeout(() => {
|
|
1756
1755
|
console.log(parseInt((Date.now() - t)) + 'ms', 'trigger b1')
|
|
1757
1756
|
oAL.trigger('b', b)
|
|
1758
1757
|
}, 1000)
|
|
1759
1758
|
setTimeout(() => {
|
|
1760
1759
|
console.log(parseInt((Date.now() - t)) + 'ms', 'trigger b2')
|
|
1761
1760
|
oAL.trigger('b', b)
|
|
1762
1761
|
}, 3000)
|
|
1763
1762
|
oAL.on('message', function({ eventName, key, data, now }) {
|
|
1764
1763
|
console.log(parseInt((Date.now() - t)) + 'ms', { eventName, key, data, now })
|
|
1765
1764
|
ms.push(eventName + '|' + key)
|
|
1766
1765
|
})
|
|
1767
1766
|
setTimeout(() => {
|
|
1768
1767
|
resolve(ms)
|
|
1769
1768
|
}, 5000)
|
|
1770
1769
|
})
|
|
1771
1770
|
}
|
|
1772
1771
|
console.log('test1')
|
|
1773
1772
|
let r1 = await test1()
|
|
1774
1773
|
console.log(JSON.stringify(r1))
|
|
1775
1774
|
// test1
|
|
1776
1775
|
// 503ms trigger a1
|
|
1777
1776
|
// 508ms { eventName: 'enter', key: 'a', data: { data: 123 }, now: 1 }
|
|
1778
1777
|
// 1001ms trigger b1
|
|
1779
1778
|
// 1003ms { eventName: 'enter', key: 'b', data: { data: '34.56' }, now: 2 }
|
|
1780
1779
|
// 1901ms trigger a2
|
|
1781
1780
|
// 2523ms { eventName: 'leave', key: 'b', data: { data: '34.56' }, now: 1 }
|
|
1782
1781
|
// 3002ms trigger b2
|
|
1783
1782
|
// 3004ms { eventName: 'enter', key: 'b', data: { data: '34.56' }, now: 2 }
|
|
1784
1783
|
// 3430ms { eventName: 'leave', key: 'a', data: { data: 123 }, now: 1 }
|
|
1785
1784
|
// 4544ms { eventName: 'leave', key: 'b', data: { data: '34.56' }, now: 0 }
|
|
1786
1785
|
// ["enter|a","enter|b","leave|b","enter|b","leave|a","leave|b"]
|
|
1786
|
+
<pre class="prettyprint"><code>async function topAsync() {
|
|
1787
1787
|
function test1() {
|
|
1788
1788
|
return new Promise((resolve, reject) => {
|
|
1789
1789
|
let ms = []
|
|
1790
1790
|
let oAL = alive({ timeAlive: 1500 })
|
|
1791
1791
|
let t = Date.now()
|
|
1792
1792
|
let a = { data: 123 }
|
|
1793
1793
|
let b = { data: '34.56' }
|
|
1794
1794
|
setTimeout(() => {
|
|
1795
1795
|
console.log(parseInt((Date.now() - t)) + 'ms', 'trigger a1')
|
|
1796
1796
|
oAL.trigger('a', a)
|
|
1797
1797
|
}, 500)
|
|
1798
1798
|
setTimeout(() => {
|
|
1799
1799
|
console.log(parseInt((Date.now() - t)) + 'ms', 'trigger a2')
|
|
1800
1800
|
oAL.trigger('a', a)
|
|
1801
1801
|
}, 1900)
|
|
1802
1802
|
setTimeout(() => {
|
|
1803
1803
|
console.log(parseInt((Date.now() - t)) + 'ms', 'trigger b1')
|
|
1804
1804
|
oAL.trigger('b', b)
|
|
1805
1805
|
}, 1000)
|
|
1806
1806
|
setTimeout(() => {
|
|
1807
1807
|
console.log(parseInt((Date.now() - t)) + 'ms', 'trigger b2')
|
|
1808
1808
|
oAL.trigger('b', b)
|
|
1809
1809
|
}, 3000)
|
|
1810
1810
|
oAL.on('message', function({ eventName, key, data, now }) {
|
|
1811
1811
|
console.log(parseInt((Date.now() - t)) + 'ms', { eventName, key, data, now })
|
|
1812
1812
|
ms.push(eventName + '|' + key)
|
|
1813
1813
|
})
|
|
1814
1814
|
setTimeout(() => {
|
|
1815
1815
|
resolve(ms)
|
|
1816
1816
|
}, 5000)
|
|
1817
1817
|
})
|
|
1818
1818
|
}
|
|
1819
1819
|
console.log('test1')
|
|
1820
1820
|
let r1 = await test1()
|
|
1821
1821
|
console.log(JSON.stringify(r1))
|
|
1822
1822
|
// test1
|
|
1823
1823
|
// 503ms trigger a1
|
|
1824
1824
|
// 508ms { eventName: 'enter', key: 'a', data: { data: 123 }, now: 1 }
|
|
1825
1825
|
// 1001ms trigger b1
|
|
1826
1826
|
// 1003ms { eventName: 'enter', key: 'b', data: { data: '34.56' }, now: 2 }
|
|
1827
1827
|
// 1901ms trigger a2
|
|
1828
1828
|
// 2523ms { eventName: 'leave', key: 'b', data: { data: '34.56' }, now: 1 }
|
|
1829
1829
|
// 3002ms trigger b2
|
|
1830
1830
|
// 3004ms { eventName: 'enter', key: 'b', data: { data: '34.56' }, now: 2 }
|
|
1831
1831
|
// 3430ms { eventName: 'leave', key: 'a', data: { data: 123 }, now: 1 }
|
|
1832
1832
|
// 4544ms { eventName: 'leave', key: 'b', data: { data: '34.56' }, now: 0 }
|
|
1833
1833
|
// ["enter|a","enter|b","leave|b","enter|b","leave|a","leave|b"]
|
|
1834
1834
|
function test2() {
|
|
1835
1835
|
return new Promise((resolve, reject) => {
|
|
1836
1836
|
let ms = []
|
|
1837
1837
|
let oAL = alive({ timeAlive: 1500 })
|
|
1838
1838
|
oAL.on('message', function({ eventName, key }) {
|
|
1839
1839
|
ms.push(eventName + '|' + key)
|
|
1840
1840
|
})
|
|
1841
1841
|
oAL.trigger('a', { data: 123 })
|
|
1842
1842
|
setTimeout(() => {
|
|
1843
1843
|
oAL.trigger('b', { data: '34.56' })
|
|
1844
1844
|
let r = oAL.clear() //b剛trigger尚未發出enter, 故只回傳a, 且b之enter不再發出
|
|
1845
1845
|
ms.push('clear|' + r.map((v) => v.key).join(','))
|
|
1846
1846
|
}, 500)
|
|
1847
1847
|
setTimeout(() => {
|
|
1848
1848
|
resolve(ms)
|
|
1849
1849
|
}, 2500)
|
|
1850
1850
|
})
|
|
1851
1851
|
}
|
|
1852
1852
|
console.log('test2')
|
|
1853
1853
|
let r2 = await test2()
|
|
1854
1854
|
console.log(JSON.stringify(r2))
|
|
1855
1855
|
// test2
|
|
1856
1856
|
// ["enter|a","clear|a"]
|
|
1857
1857
|
|
|
1858
1858
|
|
|
1859
1859
|
|
|
@@ -1869,7 +1869,7 @@ str與base64須與加密時str2aes所用之設定相同,否則解不出原文
|
|
|
1869
1869
|
|
|
1870
1870
|
|
|
1871
1871
|
<div class="param-desc">
|
|
1872
|
-
<p>回傳事件物件,可呼叫函數on、trigger、get。trigger給予單元的唯一key字串與攜帶數據data物件,on為監聽事件,需自行監聽message事件取得單元進出事件。get事件可取得alive
|
|
1872
|
+
<p>回傳事件物件,可呼叫函數on、trigger、get、clear。trigger給予單元的唯一key字串與攜帶數據data物件,on為監聽事件,需自行監聽message事件取得單元進出事件。get事件可取得alive內視為存活的單元清單(含剛trigger而尚未發出enter者)。clear為釋放:立即清除偵測計時器、取消尚未發出之enter、清空佇列,本身不發事件,其後不再發出任何事件、trigger無效、get回傳[],可重複呼叫(釋放為終態,需重新偵測者另建alive);clear回傳已發出enter且尚未leave之單元陣列[{ key, data }],供使用端補發離線通知,再次呼叫回傳[];監聽器於派發中呼叫clear亦安全,同一輪尚未處理之單元不再派發。事件物件為原生EventEmitter(eventemitter3)。本模組於派發處以try攔截監聽器之同步拋錯,故其不會使行程崩潰,會改以error事件回報{ fun: 'listener', name, msg, args },無error監聽者則console.error;惟依EventEmitter規範,同一次派發中先拋錯之監聽器會中止該次派發,其後之監聽器不再被呼叫。async監聽器之reject不被攔截(規範上emit不觀察監聽器回傳值),須由監聽器自行處理,否則為unhandledRejection</p>
|
|
1873
1873
|
</div>
|
|
1874
1874
|
|
|
1875
1875
|
|
|
@@ -35253,7 +35253,7 @@ once自動移除等),封裝層自身反而成為「調用方拿到非預期
|
|
|
35253
35253
|
<p>【為何不以setTimeout脫勾來迴避】</p>
|
|
35254
35254
|
<p>setTimeout會開一個「沒有呼叫者」的堆疊,監聽器之同步拋錯於該處即為uncaughtException,
|
|
35255
35255
|
且呼叫端無論如何try都攔不到(此與監聽器是否為async無關,純同步監聽器亦然)。
|
|
35256
|
-
於呼叫端之堆疊上派發,一個普通的try即可攔下。確實需要脫勾者請改用
|
|
35256
|
+
於呼叫端之堆疊上派發,一個普通的try即可攔下。確實需要脫勾者請改用evEmitDelay,
|
|
35257
35257
|
其內部即以本函數派發,故仍有攔截。</p>
|
|
35258
35258
|
<p>【為何不處理async監聽器之reject】</p>
|
|
35259
35259
|
<p>emit依EventEmitter規範丟棄監聽器之回傳值,其rejection無人觀察;nodejs文件亦明載
|
|
@@ -110651,7 +110651,7 @@ console.log(u8arr2u16arr('abc', { returnWithStateAndMsg: true }))
|
|
|
110651
110651
|
<br class="clear">
|
|
110652
110652
|
|
|
110653
110653
|
<footer>
|
|
110654
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on
|
|
110654
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 09:13:16 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
110655
110655
|
</footer>
|
|
110656
110656
|
|
|
110657
110657
|
<script>prettyPrint();</script>
|
package/package.json
CHANGED
package/src/alive.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import get from 'lodash-es/get.js'
|
|
|
2
2
|
import each from 'lodash-es/each.js'
|
|
3
3
|
import cloneDeep from 'lodash-es/cloneDeep.js'
|
|
4
4
|
import size from 'lodash-es/size.js'
|
|
5
|
-
import cst from './_const.mjs'
|
|
5
|
+
import cst from './_const.mjs'
|
|
6
6
|
import evem from './evem.mjs'
|
|
7
7
|
import evEmit from './evEmit.mjs'
|
|
8
8
|
import ispint from './ispint.mjs'
|
|
@@ -19,7 +19,7 @@ import cint from './cint.mjs'
|
|
|
19
19
|
* @memberOf wsemi
|
|
20
20
|
* @param {Integer} [timeAlive=10000] 輸入判斷單元是否斷線之延時整數,單位為毫秒ms,預設為10000
|
|
21
21
|
* @param {Integer} [timeDetect=50] 輸入偵測佇列間隔時間整數,單位為毫秒ms,預設為50
|
|
22
|
-
* @returns {Object} 回傳事件物件,可呼叫函數on、trigger、get。trigger給予單元的唯一key字串與攜帶數據data物件,on為監聽事件,需自行監聽message事件取得單元進出事件。get事件可取得alive
|
|
22
|
+
* @returns {Object} 回傳事件物件,可呼叫函數on、trigger、get、clear。trigger給予單元的唯一key字串與攜帶數據data物件,on為監聽事件,需自行監聽message事件取得單元進出事件。get事件可取得alive內視為存活的單元清單(含剛trigger而尚未發出enter者)。clear為釋放:立即清除偵測計時器、取消尚未發出之enter、清空佇列,本身不發事件,其後不再發出任何事件、trigger無效、get回傳[],可重複呼叫(釋放為終態,需重新偵測者另建alive);clear回傳已發出enter且尚未leave之單元陣列[{ key, data }],供使用端補發離線通知,再次呼叫回傳[];監聽器於派發中呼叫clear亦安全,同一輪尚未處理之單元不再派發。事件物件為原生EventEmitter(eventemitter3)。本模組於派發處以try攔截監聽器之同步拋錯,故其不會使行程崩潰,會改以error事件回報{ fun: 'listener', name, msg, args },無error監聽者則console.error;惟依EventEmitter規範,同一次派發中先拋錯之監聽器會中止該次派發,其後之監聽器不再被呼叫。async監聽器之reject不被攔截(規範上emit不觀察監聽器回傳值),須由監聽器自行處理,否則為unhandledRejection
|
|
23
23
|
* @example
|
|
24
24
|
*
|
|
25
25
|
* async function topAsync() {
|
|
@@ -81,14 +81,47 @@ import cint from './cint.mjs'
|
|
|
81
81
|
* // 4544ms { eventName: 'leave', key: 'b', data: { data: '34.56' }, now: 0 }
|
|
82
82
|
* // ["enter|a","enter|b","leave|b","enter|b","leave|a","leave|b"]
|
|
83
83
|
*
|
|
84
|
+
* function test2() {
|
|
85
|
+
* return new Promise((resolve, reject) => {
|
|
86
|
+
* let ms = []
|
|
87
|
+
*
|
|
88
|
+
* let oAL = alive({ timeAlive: 1500 })
|
|
89
|
+
*
|
|
90
|
+
* oAL.on('message', function({ eventName, key }) {
|
|
91
|
+
* ms.push(eventName + '|' + key)
|
|
92
|
+
* })
|
|
93
|
+
*
|
|
94
|
+
* oAL.trigger('a', { data: 123 })
|
|
95
|
+
*
|
|
96
|
+
* setTimeout(() => {
|
|
97
|
+
* oAL.trigger('b', { data: '34.56' })
|
|
98
|
+
* let r = oAL.clear() //b剛trigger尚未發出enter, 故只回傳a, 且b之enter不再發出
|
|
99
|
+
* ms.push('clear|' + r.map((v) => v.key).join(','))
|
|
100
|
+
* }, 500)
|
|
101
|
+
*
|
|
102
|
+
* setTimeout(() => {
|
|
103
|
+
* resolve(ms)
|
|
104
|
+
* }, 2500)
|
|
105
|
+
*
|
|
106
|
+
* })
|
|
107
|
+
* }
|
|
108
|
+
* console.log('test2')
|
|
109
|
+
* let r2 = await test2()
|
|
110
|
+
* console.log(JSON.stringify(r2))
|
|
111
|
+
* // test2
|
|
112
|
+
* // ["enter|a","clear|a"]
|
|
113
|
+
*
|
|
84
114
|
* }
|
|
85
115
|
* topAsync().catch(() => {})
|
|
86
116
|
*
|
|
87
117
|
*/
|
|
88
118
|
function alive(opt = {}) {
|
|
89
119
|
let ev = evem() //message事件於timer內派發, 監聽器出錯不得殺行程, 故派發處以evEmit攔截
|
|
90
|
-
let q =
|
|
120
|
+
let q = Object.create(null) //queue, 以trigger之key為鍵; 用無原型物件使任意字串皆為一般鍵, 一般物件時__proto__會改掉佇列之原型、constructor等原型屬性名會被haskey誤判為已存在而不發enter
|
|
91
121
|
let t = null //timer
|
|
122
|
+
let tEnters = new Set() //尚未發出enter之計時器, 供clear取消
|
|
123
|
+
let entered = new Set() //已發出enter且尚未leave之單元key, 供clear回傳
|
|
124
|
+
let cleared = false //是否已clear, clear為終態
|
|
92
125
|
|
|
93
126
|
//timeAlive
|
|
94
127
|
let timeAlive = get(opt, 'timeAlive')
|
|
@@ -107,6 +140,9 @@ function alive(opt = {}) {
|
|
|
107
140
|
timeDetect = Math.min(timeDetect, cst.TIMER_TIME_MAX) //同上
|
|
108
141
|
|
|
109
142
|
function detect() {
|
|
143
|
+
if (cleared) {
|
|
144
|
+
return
|
|
145
|
+
}
|
|
110
146
|
if (t !== null) {
|
|
111
147
|
return
|
|
112
148
|
}
|
|
@@ -127,13 +163,25 @@ function alive(opt = {}) {
|
|
|
127
163
|
|
|
128
164
|
//刪除佇列內key紀錄
|
|
129
165
|
delete q[key]
|
|
166
|
+
entered.delete(key)
|
|
130
167
|
|
|
131
168
|
//emit leave
|
|
132
169
|
evEmit(ev, 'message', [{ eventName: 'leave', key, data: r.data, now: size(q) }], { tag: 'alive' })
|
|
133
170
|
|
|
171
|
+
//監聽器於派發中呼叫clear時須立即停止本輪, 不再處理或派發
|
|
172
|
+
// each走的是本輪開始時之鍵清單, 而clear已清空佇列, 續走會讀到不存在之單元而拋錯
|
|
173
|
+
if (cleared) {
|
|
174
|
+
return false
|
|
175
|
+
}
|
|
176
|
+
|
|
134
177
|
}
|
|
135
178
|
})
|
|
136
179
|
|
|
180
|
+
//已clear者計時器已於clear內清除
|
|
181
|
+
if (cleared) {
|
|
182
|
+
return
|
|
183
|
+
}
|
|
184
|
+
|
|
137
185
|
//clear, 當無任何訊息存在
|
|
138
186
|
if (!iseobj(q)) {
|
|
139
187
|
clearInterval(t)
|
|
@@ -145,6 +193,11 @@ function alive(opt = {}) {
|
|
|
145
193
|
|
|
146
194
|
function trigger(key, data) {
|
|
147
195
|
|
|
196
|
+
//已clear為終態, 不建立計時器亦不發事件
|
|
197
|
+
if (cleared) {
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
|
|
148
201
|
//check
|
|
149
202
|
if (!isestr(key)) {
|
|
150
203
|
console.log('trigger need key')
|
|
@@ -153,12 +206,23 @@ function alive(opt = {}) {
|
|
|
153
206
|
|
|
154
207
|
//check
|
|
155
208
|
if (!haskey(q, key)) {
|
|
156
|
-
|
|
209
|
+
//因需判斷是否為新單元故需放於update前, 而emit內可能會被存取q, 故需要用setTimeout脫勾使q為被更新資訊, 才能正確取得當前單元數量
|
|
210
|
+
//不用evEmitDelay, 因其參數於呼叫時即求值, now會少計本單元; 計時器存入tEnters供clear取消
|
|
211
|
+
let te = setTimeout(() => {
|
|
212
|
+
|
|
213
|
+
//已發出, 移出待取消清單
|
|
214
|
+
tEnters.delete(te)
|
|
215
|
+
|
|
216
|
+
//派發前即標記已enter, 使監聽器於派發中呼叫clear時能回傳本單元, 以與其leave配對
|
|
217
|
+
if (haskey(q, key)) {
|
|
218
|
+
entered.add(key)
|
|
219
|
+
}
|
|
157
220
|
|
|
158
221
|
//emit enter
|
|
159
222
|
evEmit(ev, 'message', [{ eventName: 'enter', key, data, now: size(q) }], { tag: 'alive' })
|
|
160
223
|
|
|
161
224
|
}, 1)
|
|
225
|
+
tEnters.add(te)
|
|
162
226
|
}
|
|
163
227
|
|
|
164
228
|
//update
|
|
@@ -178,9 +242,46 @@ function alive(opt = {}) {
|
|
|
178
242
|
return rs
|
|
179
243
|
}
|
|
180
244
|
|
|
245
|
+
function clear() {
|
|
246
|
+
|
|
247
|
+
//已clear則回傳[], 可重複呼叫
|
|
248
|
+
if (cleared) {
|
|
249
|
+
return []
|
|
250
|
+
}
|
|
251
|
+
cleared = true
|
|
252
|
+
|
|
253
|
+
//清除偵測計時器
|
|
254
|
+
if (t !== null) {
|
|
255
|
+
clearInterval(t)
|
|
256
|
+
t = null
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
//取消尚未發出之enter
|
|
260
|
+
for (let te of tEnters) {
|
|
261
|
+
clearTimeout(te)
|
|
262
|
+
}
|
|
263
|
+
tEnters.clear()
|
|
264
|
+
|
|
265
|
+
//已發出enter且尚未leave之單元, 形狀同get; get含尚未發出enter者, 使用端拿其配對leave會出現有leave無enter
|
|
266
|
+
let rs = []
|
|
267
|
+
each(q, (v, k) => {
|
|
268
|
+
if (entered.has(k)) {
|
|
269
|
+
rs.push({ key: k, data: v.data })
|
|
270
|
+
}
|
|
271
|
+
})
|
|
272
|
+
rs = cloneDeep(rs) //使用cloneDeep避免外部修改內部數據
|
|
273
|
+
|
|
274
|
+
//清空佇列, 同建立時用無原型物件
|
|
275
|
+
q = Object.create(null)
|
|
276
|
+
entered.clear()
|
|
277
|
+
|
|
278
|
+
return rs
|
|
279
|
+
}
|
|
280
|
+
|
|
181
281
|
//save
|
|
182
282
|
ev.trigger = trigger
|
|
183
283
|
ev.get = _get
|
|
284
|
+
ev.clear = clear
|
|
184
285
|
|
|
185
286
|
return ev
|
|
186
287
|
}
|
package/src/cache.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import loGet from 'lodash-es/get.js'
|
|
2
2
|
import cloneDeep from 'lodash-es/cloneDeep.js'
|
|
3
3
|
import evem from './evem.mjs'
|
|
4
|
-
import evEmitDelay from './evEmitDelay.mjs'
|
|
4
|
+
import evEmitDelay from './evEmitDelay.mjs'
|
|
5
5
|
import isfun from './isfun.mjs'
|
|
6
6
|
import isbol from './isbol.mjs'
|
|
7
7
|
import haskey from './haskey.mjs'
|
|
@@ -538,7 +538,7 @@ import cint from './cint.mjs'
|
|
|
538
538
|
*/
|
|
539
539
|
function cache() {
|
|
540
540
|
let ev = evem() //事件以timer脫勾派發, 監聽器出錯不得殺行程, 故派發處以evEmit攔截
|
|
541
|
-
let data =
|
|
541
|
+
let data = Object.create(null) //快取資料, 以呼叫端之key為鍵; 用無原型物件使任意字串皆為一般鍵, 一般物件時__proto__會改掉其原型、constructor等原型屬性名會被haskey誤判為已存在, 對其update會寫到Object本身
|
|
542
542
|
|
|
543
543
|
function emit(mode, data) {
|
|
544
544
|
evEmitDelay(ev, mode, [data], { tag: 'cache' }) //用timer脫勾, 並於該新堆疊內攔截監聽器之同步拋錯
|
package/src/cacheSt.mjs
CHANGED
|
@@ -112,7 +112,7 @@ function cacheSt(opt = {}) {
|
|
|
112
112
|
|
|
113
113
|
let ev = evem() //detect事件於setInterval內派發, 其餘於呼叫端同步堆疊或await之後派發且監聽器可能為async, 監聽器出錯不得殺行程, 故派發處以evEmit攔截
|
|
114
114
|
|
|
115
|
-
let _gs =
|
|
115
|
+
let _gs = Object.create(null) //以呼叫端之key為鍵; 用無原型物件使任意字串皆為一般鍵, 一般物件時__proto__會改掉其原型(且不會過期)、constructor等原型屬性名會被haskey誤判為已存在
|
|
116
116
|
|
|
117
117
|
let _set = async (key, value = true) => {
|
|
118
118
|
_gs[key] = {
|
package/src/evEmit.mjs
CHANGED
|
@@ -16,7 +16,7 @@ import isfun from './isfun.mjs'
|
|
|
16
16
|
*
|
|
17
17
|
* setTimeout會開一個「沒有呼叫者」的堆疊,監聽器之同步拋錯於該處即為uncaughtException,
|
|
18
18
|
* 且呼叫端無論如何try都攔不到(此與監聽器是否為async無關,純同步監聽器亦然)。
|
|
19
|
-
* 於呼叫端之堆疊上派發,一個普通的try即可攔下。確實需要脫勾者請改用
|
|
19
|
+
* 於呼叫端之堆疊上派發,一個普通的try即可攔下。確實需要脫勾者請改用evEmitDelay,
|
|
20
20
|
* 其內部即以本函數派發,故仍有攔截。
|
|
21
21
|
*
|
|
22
22
|
* 【為何不處理async監聽器之reject】
|