wsemi 1.9.21 → 1.9.22

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.
Files changed (518) hide show
  1. package/README.md +1 -1
  2. package/dist/wsemi.umd.js +6 -6
  3. package/dist/wsemi.umd.js.map +1 -1
  4. package/docs/-_class.mjs.html +1 -1
  5. package/docs/-_const.mjs.html +1 -1
  6. package/docs/-_detector.mjs.html +1 -1
  7. package/docs/-_errToStr.mjs.html +1 -1
  8. package/docs/-_execThrownMsg.mjs.html +1 -1
  9. package/docs/-_isRealError.mjs.html +1 -1
  10. package/docs/-_optNum.mjs.html +1 -1
  11. package/docs/-_pmMarkHandled.mjs.html +1 -1
  12. package/docs/-_pmReadItems.mjs.html +1 -1
  13. package/docs/-_pmSettleByState.mjs.html +1 -1
  14. package/docs/-_realErrorToStr.mjs.html +1 -1
  15. package/docs/-_toResultError.mjs.html +1 -1
  16. package/docs/ab2blob.mjs.html +1 -1
  17. package/docs/ab2u8arr.mjs.html +1 -1
  18. package/docs/addExcelWorksheetFromData.mjs.html +1 -1
  19. package/docs/addMonth.mjs.html +1 -1
  20. package/docs/aes2str.mjs.html +1 -1
  21. package/docs/alive.mjs.html +1 -1
  22. package/docs/arr2dt.mjs.html +1 -1
  23. package/docs/arrAccum.mjs.html +1 -1
  24. package/docs/arrAdd.mjs.html +1 -1
  25. package/docs/arrAt.mjs.html +1 -1
  26. package/docs/arrDiff.mjs.html +1 -1
  27. package/docs/arrFilterByKeywords.mjs.html +1 -1
  28. package/docs/arrFilterByNum.mjs.html +1 -1
  29. package/docs/arrFilterByPnum.mjs.html +1 -1
  30. package/docs/arrFilterByPnumAndToLog.mjs.html +1 -1
  31. package/docs/arrFind.mjs.html +1 -1
  32. package/docs/arrGroupByMaxmin.mjs.html +1 -1
  33. package/docs/arrHas.mjs.html +1 -1
  34. package/docs/arrInsert.mjs.html +1 -1
  35. package/docs/arrLookupByMaxmin.mjs.html +1 -1
  36. package/docs/arrMax.mjs.html +1 -1
  37. package/docs/arrMin.mjs.html +1 -1
  38. package/docs/arrMulti.mjs.html +1 -1
  39. package/docs/arrNorm.mjs.html +1 -1
  40. package/docs/arrProduct.mjs.html +1 -1
  41. package/docs/arrPull.mjs.html +1 -1
  42. package/docs/arrPullAt.mjs.html +1 -1
  43. package/docs/arrReduce.mjs.html +1 -1
  44. package/docs/arrReverse.mjs.html +1 -1
  45. package/docs/arrSep.mjs.html +1 -1
  46. package/docs/arrSort.mjs.html +1 -1
  47. package/docs/asind.mjs.html +1 -1
  48. package/docs/atan2d.mjs.html +1 -1
  49. package/docs/atand.mjs.html +1 -1
  50. package/docs/attstr.mjs.html +1 -1
  51. package/docs/b642obj.mjs.html +1 -1
  52. package/docs/b642str.mjs.html +1 -1
  53. package/docs/b642u16arr.mjs.html +1 -1
  54. package/docs/b642u8arr.mjs.html +1 -1
  55. package/docs/binstr.mjs.html +1 -1
  56. package/docs/blob2ab.mjs.html +1 -1
  57. package/docs/blob2b64.mjs.html +1 -1
  58. package/docs/blob2str.mjs.html +1 -1
  59. package/docs/blob2u8arr.mjs.html +1 -1
  60. package/docs/blobs2b64s.mjs.html +1 -1
  61. package/docs/blobs2u8arrs.mjs.html +1 -1
  62. package/docs/bodyLog.mjs.html +1 -1
  63. package/docs/browserView.mjs.html +1 -1
  64. package/docs/browserViewFromBlob.mjs.html +1 -1
  65. package/docs/browserViewFromText.mjs.html +1 -1
  66. package/docs/browserViewFromU8arr.mjs.html +1 -1
  67. package/docs/bs2u8arr.mjs.html +1 -1
  68. package/docs/bufRead.mjs.html +1 -1
  69. package/docs/bufReadDbl.mjs.html +1 -1
  70. package/docs/bufWrite.mjs.html +1 -1
  71. package/docs/bufWriteDbl.mjs.html +1 -1
  72. package/docs/cache.mjs.html +1 -1
  73. package/docs/cacheBd.mjs.html +1 -1
  74. package/docs/cacheSt.mjs.html +1 -1
  75. package/docs/cbol.mjs.html +1 -1
  76. package/docs/cdbl.mjs.html +1 -1
  77. package/docs/ceil.mjs.html +1 -1
  78. package/docs/cfilesize.mjs.html +1 -1
  79. package/docs/cfinancial.mjs.html +1 -1
  80. package/docs/cint.mjs.html +1 -1
  81. package/docs/clearXSS.mjs.html +263 -25
  82. package/docs/clearXSSDyn.mjs.html +1 -1
  83. package/docs/color.mjs.html +1 -1
  84. package/docs/composeToTree.mjs.html +1 -1
  85. package/docs/convertToTree.mjs.html +1 -1
  86. package/docs/copyStrToClipboard.mjs.html +1 -1
  87. package/docs/cosd.mjs.html +1 -1
  88. package/docs/cotd.mjs.html +1 -1
  89. package/docs/createExcelWorkbook.mjs.html +1 -1
  90. package/docs/cscd.mjs.html +1 -1
  91. package/docs/cstr.mjs.html +1 -1
  92. package/docs/cvOrmFind.mjs.html +1 -1
  93. package/docs/day2cht.mjs.html +1 -1
  94. package/docs/debounce.mjs.html +1 -1
  95. package/docs/delay.mjs.html +1 -1
  96. package/docs/detectXSS.mjs.html +1 -1
  97. package/docs/detectXSSDyn.mjs.html +1 -1
  98. package/docs/dig.mjs.html +1 -1
  99. package/docs/digExp.mjs.html +1 -1
  100. package/docs/domAlert.mjs.html +1 -1
  101. package/docs/domAppend.mjs.html +1 -1
  102. package/docs/domCancelEvent.mjs.html +1 -1
  103. package/docs/domCompareText.mjs.html +1 -1
  104. package/docs/domConvertToPic.mjs.html +1 -1
  105. package/docs/domConvertToPicDyn.mjs.html +1 -1
  106. package/docs/domDetect.mjs.html +1 -1
  107. package/docs/domDrag.mjs.html +1 -1
  108. package/docs/domDragBarAndScroll.mjs.html +1 -1
  109. package/docs/domDragPointer.mjs.html +1 -1
  110. package/docs/domDragPreview.mjs.html +1 -1
  111. package/docs/domDropFiles.mjs.html +1 -1
  112. package/docs/domElementsFromPoint.mjs.html +1 -1
  113. package/docs/domFadeIn.mjs.html +1 -1
  114. package/docs/domFadeOut.mjs.html +1 -1
  115. package/docs/domFind.mjs.html +1 -1
  116. package/docs/domFinds.mjs.html +1 -1
  117. package/docs/domGetAttr.mjs.html +1 -1
  118. package/docs/domGetBoudRect.mjs.html +1 -1
  119. package/docs/domGetBoudRectRefSelf.mjs.html +1 -1
  120. package/docs/domGetFileAccept.mjs.html +1 -1
  121. package/docs/domGetFiles.mjs.html +1 -1
  122. package/docs/domGetParents.mjs.html +1 -1
  123. package/docs/domGetPointFromEvent.mjs.html +1 -1
  124. package/docs/domGetScrollableParent.mjs.html +1 -1
  125. package/docs/domGetWindowSize.mjs.html +1 -1
  126. package/docs/domIsClientXYIn.mjs.html +1 -1
  127. package/docs/domIsFocused.mjs.html +1 -1
  128. package/docs/domIsRendered.mjs.html +1 -1
  129. package/docs/domIsStable.mjs.html +1 -1
  130. package/docs/domIsVisible.mjs.html +1 -1
  131. package/docs/domPrepend.mjs.html +1 -1
  132. package/docs/domRemove.mjs.html +1 -1
  133. package/docs/domRenderMarkdownMind.mjs.html +1 -1
  134. package/docs/domRenderMarkdownMindDyn.mjs.html +1 -1
  135. package/docs/domRipple.mjs.html +1 -1
  136. package/docs/domScrollIntoView.mjs.html +1 -1
  137. package/docs/domScrollTo.mjs.html +1 -1
  138. package/docs/domSetAttr.mjs.html +1 -1
  139. package/docs/domShowImages.mjs.html +1 -1
  140. package/docs/domShowImagesDyn.mjs.html +1 -1
  141. package/docs/domShowInputAndGetFiles.mjs.html +1 -1
  142. package/docs/domShowInputAndGetFilesU8Arrs.mjs.html +1 -1
  143. package/docs/domShowInputDatatime.mjs.html +1 -1
  144. package/docs/domTooltip.mjs.html +1 -1
  145. package/docs/domTriggerEvent.mjs.html +1 -1
  146. package/docs/domVirtualCreate.mjs.html +1 -1
  147. package/docs/domVirtualCreateQueue.mjs.html +1 -1
  148. package/docs/downloadExcelFileFromData.mjs.html +1 -1
  149. package/docs/downloadExcelFileFromDataDyn.mjs.html +1 -1
  150. package/docs/downloadFileFromB64.mjs.html +1 -1
  151. package/docs/downloadFileFromBlob.mjs.html +1 -1
  152. package/docs/downloadFileFromText.mjs.html +1 -1
  153. package/docs/downloadFileFromU8Arr.mjs.html +1 -1
  154. package/docs/dtmapping.mjs.html +1 -1
  155. package/docs/dtpick.mjs.html +1 -1
  156. package/docs/estimateTicks.mjs.html +1 -1
  157. package/docs/evEmit.mjs.html +1 -1
  158. package/docs/evEmitDelay.mjs.html +1 -1
  159. package/docs/evem.mjs.html +1 -1
  160. package/docs/examples/ex-blob2b64.html +1 -1
  161. package/docs/examples/ex-clearXSS.html +1 -1
  162. package/docs/examples/ex-clearXSSDyn.html +1 -1
  163. package/docs/examples/ex-colorConverter.html +1 -1
  164. package/docs/examples/ex-detectXSS.html +1 -1
  165. package/docs/examples/ex-detectXSSDyn.html +1 -1
  166. package/docs/examples/ex-domCompareText.html +1 -1
  167. package/docs/examples/ex-domConvertToPic.html +1 -1
  168. package/docs/examples/ex-domDrag.html +1 -1
  169. package/docs/examples/ex-domDropFiles.html +1 -1
  170. package/docs/examples/ex-domIsVisible.html +1 -1
  171. package/docs/examples/ex-domRenderMarkdownMind.html +1 -1
  172. package/docs/examples/ex-domRenderMarkdownMindDyn.html +1 -1
  173. package/docs/examples/ex-domRipple.html +1 -1
  174. package/docs/examples/ex-domScrollIntoView.html +1 -1
  175. package/docs/examples/ex-domScrollTo.html +1 -1
  176. package/docs/examples/ex-domShowImages.html +1 -1
  177. package/docs/examples/ex-domShowImagesDyn.html +1 -1
  178. package/docs/examples/ex-domShowInputAndGetFiles.html +1 -1
  179. package/docs/examples/ex-domTooltip.html +1 -1
  180. package/docs/examples/ex-getFileHash.html +1 -1
  181. package/docs/examples/ex-getUserAgent.html +1 -1
  182. package/docs/examples/ex-getUserAgentDyn.html +1 -1
  183. package/docs/examples/ex-html2str.html +1 -1
  184. package/docs/examples/ex-obj2u8arr-u8arr2obj.html +1 -1
  185. package/docs/examples/ex-openLink.html +1 -1
  186. package/docs/examples/ex-str2aes-aes2str.html +1 -1
  187. package/docs/examples/ex-str2b64-b642str.html +1 -1
  188. package/docs/examples/ex-strFindFuzz.html +1 -1
  189. package/docs/examples/ex-timeTZ2expire-timeTZ2past.html +1 -1
  190. package/docs/examples/ex-xlsx.html +1 -1
  191. package/docs/execCli.mjs.html +1 -1
  192. package/docs/execCliCore.mjs.html +1 -1
  193. package/docs/execCliJsonRpc.mjs.html +1 -1
  194. package/docs/execCliSession.mjs.html +1 -1
  195. package/docs/execJsCode.mjs.html +1 -1
  196. package/docs/execProcess.mjs.html +1 -1
  197. package/docs/execProcessKillPid.mjs.html +1 -1
  198. package/docs/filepathToTree.mjs.html +1 -1
  199. package/docs/files2data.mjs.html +1 -1
  200. package/docs/flattenToConn.mjs.html +12 -8
  201. package/docs/flattenTree.mjs.html +9 -9
  202. package/docs/floor.mjs.html +1 -1
  203. package/docs/fsBuildReadStreamText.mjs.html +1 -1
  204. package/docs/fsBuildWriteStreamText.mjs.html +1 -1
  205. package/docs/fsCleanFolder.mjs.html +1 -1
  206. package/docs/fsCleanFolderCore.mjs.html +1 -1
  207. package/docs/fsCopyFile.mjs.html +1 -1
  208. package/docs/fsCopyFileCore.mjs.html +1 -1
  209. package/docs/fsCopyFolder.mjs.html +1 -1
  210. package/docs/fsCopyFolderCore.mjs.html +1 -1
  211. package/docs/fsCreateFile.mjs.html +1 -1
  212. package/docs/fsCreateFileCore.mjs.html +1 -1
  213. package/docs/fsCreateFolder.mjs.html +1 -1
  214. package/docs/fsCreateFolderCore.mjs.html +1 -1
  215. package/docs/fsDeleteFile.mjs.html +1 -1
  216. package/docs/fsDeleteFileCore.mjs.html +1 -1
  217. package/docs/fsDeleteFileSafe.mjs.html +1 -1
  218. package/docs/fsDeleteFileSafeCore.mjs.html +1 -1
  219. package/docs/fsDeleteFolder.mjs.html +1 -1
  220. package/docs/fsDeleteFolderCore.mjs.html +1 -1
  221. package/docs/fsDeleteFolderSafe.mjs.html +1 -1
  222. package/docs/fsDeleteFolderSafeCore.mjs.html +1 -1
  223. package/docs/fsDownloadFile.mjs.html +1 -1
  224. package/docs/fsDownloadFileCore.mjs.html +1 -1
  225. package/docs/fsEvem.mjs.html +1 -1
  226. package/docs/fsExists.mjs.html +1 -1
  227. package/docs/fsExistsCore.mjs.html +1 -1
  228. package/docs/fsGetFileBasicHash.mjs.html +1 -1
  229. package/docs/fsGetFileBasicHashCore.mjs.html +1 -1
  230. package/docs/fsGetFileHash.mjs.html +1 -1
  231. package/docs/fsGetFileHashCore.mjs.html +1 -1
  232. package/docs/fsGetFileXxHash.mjs.html +1 -1
  233. package/docs/fsGetFileXxHashCore.mjs.html +1 -1
  234. package/docs/fsGetFilesInFolder.mjs.html +1 -1
  235. package/docs/fsGetFilesInFolderCore.mjs.html +1 -1
  236. package/docs/fsGetFilesWithHashInFolder.mjs.html +1 -1
  237. package/docs/fsGetFilesWithHashInFolderCore.mjs.html +1 -1
  238. package/docs/fsGetFolderBasicHash.mjs.html +1 -1
  239. package/docs/fsGetFolderBasicHashCore.mjs.html +1 -1
  240. package/docs/fsGetFoldersInFolder.mjs.html +1 -1
  241. package/docs/fsGetFoldersInFolderCore.mjs.html +1 -1
  242. package/docs/fsIsFile.mjs.html +1 -1
  243. package/docs/fsIsFileCore.mjs.html +1 -1
  244. package/docs/fsIsFolder.mjs.html +1 -1
  245. package/docs/fsIsFolderCore.mjs.html +1 -1
  246. package/docs/fsMergeFiles.mjs.html +1 -1
  247. package/docs/fsMergeFilesCore.mjs.html +1 -1
  248. package/docs/fsReadJson.mjs.html +1 -1
  249. package/docs/fsReadText.mjs.html +1 -1
  250. package/docs/fsReadTextCore.mjs.html +1 -1
  251. package/docs/fsRenameFile.mjs.html +1 -1
  252. package/docs/fsRenameFileCore.mjs.html +1 -1
  253. package/docs/fsRenameFolder.mjs.html +1 -1
  254. package/docs/fsRenameFolderCore.mjs.html +1 -1
  255. package/docs/fsSrlog.mjs.html +1 -1
  256. package/docs/fsSyncFolder.mjs.html +1 -1
  257. package/docs/fsSyncFolderCore.mjs.html +1 -1
  258. package/docs/fsTask.mjs.html +14 -13
  259. package/docs/fsTaskCp.mjs.html +1 -1
  260. package/docs/fsTreeFolder.mjs.html +1 -1
  261. package/docs/fsTreeFolderCore.mjs.html +1 -1
  262. package/docs/fsTreeFolderWithHash.mjs.html +1 -1
  263. package/docs/fsTreeFolderWithHashCore.mjs.html +1 -1
  264. package/docs/fsWatchFile.mjs.html +1 -1
  265. package/docs/fsWatchFolder.mjs.html +1 -1
  266. package/docs/fsWriteJson.mjs.html +1 -1
  267. package/docs/fsWriteText.mjs.html +1 -1
  268. package/docs/fsWriteTextCore.mjs.html +1 -1
  269. package/docs/genGradientColor.mjs.html +1 -1
  270. package/docs/genID.mjs.html +1 -1
  271. package/docs/genIDSeq.mjs.html +1 -1
  272. package/docs/genPm.mjs.html +1 -1
  273. package/docs/getBufferSize.mjs.html +1 -1
  274. package/docs/getClearPathName.mjs.html +1 -1
  275. package/docs/getCsvStrFromData.mjs.html +1 -1
  276. package/docs/getDataFromExcelFileU8Arr.mjs.html +1 -1
  277. package/docs/getDataFromExcelFileU8ArrDyn.mjs.html +1 -1
  278. package/docs/getEnv.mjs.html +1 -1
  279. package/docs/getErrorMessage.mjs.html +1 -1
  280. package/docs/getExcelU8ArrFromData.mjs.html +1 -1
  281. package/docs/getExcelU8ArrFromWorkbook.mjs.html +1 -1
  282. package/docs/getExcelWorkbookFromData.mjs.html +1 -1
  283. package/docs/getExcelWorkbookFromWorksheet.mjs.html +1 -1
  284. package/docs/getExcelWorksheetFromData.mjs.html +1 -1
  285. package/docs/getFileAccept.mjs.html +1 -1
  286. package/docs/getFileBasicHash.mjs.html +1 -1
  287. package/docs/getFileHash.mjs.html +1 -1
  288. package/docs/getFileName.mjs.html +1 -1
  289. package/docs/getFileNameExt.mjs.html +1 -1
  290. package/docs/getFileTrueName.mjs.html +1 -1
  291. package/docs/getFileType.mjs.html +1 -1
  292. package/docs/getFileXxHash.mjs.html +1 -1
  293. package/docs/getGlobal.mjs.html +1 -1
  294. package/docs/getObjSize.mjs.html +1 -1
  295. package/docs/getPathParent.mjs.html +1 -1
  296. package/docs/getTimeBetween.mjs.html +1 -1
  297. package/docs/getTimeFromUnit.mjs.html +1 -1
  298. package/docs/getTimeHp.mjs.html +1 -1
  299. package/docs/getTimeObject.mjs.html +1 -1
  300. package/docs/getTimeRange.mjs.html +1 -1
  301. package/docs/getUserAgent.mjs.html +1 -1
  302. package/docs/getUserAgentDyn.mjs.html +1 -1
  303. package/docs/getltdtkeys.mjs.html +7 -6
  304. package/docs/global.html +1 -1
  305. package/docs/haskey.mjs.html +1 -1
  306. package/docs/html2str.mjs.html +1 -1
  307. package/docs/htmlDecode.mjs.html +1 -1
  308. package/docs/htmlEncode.mjs.html +1 -1
  309. package/docs/importResources.mjs.html +1 -1
  310. package/docs/index.html +1 -1
  311. package/docs/interp1.mjs.html +1 -1
  312. package/docs/isDate.mjs.html +1 -1
  313. package/docs/isDev.mjs.html +1 -1
  314. package/docs/isEle.mjs.html +1 -1
  315. package/docs/isEleExistByID.mjs.html +1 -1
  316. package/docs/isEmail.mjs.html +1 -1
  317. package/docs/isErr.mjs.html +1 -1
  318. package/docs/isIE.mjs.html +1 -1
  319. package/docs/isNarrow.mjs.html +1 -1
  320. package/docs/isStrHasCapital.mjs.html +1 -1
  321. package/docs/isStrHasLetter.mjs.html +1 -1
  322. package/docs/isStrHasLowerCase.mjs.html +1 -1
  323. package/docs/isStrHasNumber.mjs.html +1 -1
  324. package/docs/isStrHasSpace.mjs.html +1 -1
  325. package/docs/isStrHasSymbol.mjs.html +1 -1
  326. package/docs/isUserIdentify.mjs.html +1 -1
  327. package/docs/isUserName.mjs.html +1 -1
  328. package/docs/isUserPw.mjs.html +1 -1
  329. package/docs/isWindow.mjs.html +1 -1
  330. package/docs/isab.mjs.html +1 -1
  331. package/docs/isarr.mjs.html +1 -1
  332. package/docs/isarr0.mjs.html +1 -1
  333. package/docs/isarr1.mjs.html +1 -1
  334. package/docs/isbigint.mjs.html +1 -1
  335. package/docs/isblob.mjs.html +1 -1
  336. package/docs/isbol.mjs.html +1 -1
  337. package/docs/isday.mjs.html +1 -1
  338. package/docs/isearr.mjs.html +1 -1
  339. package/docs/iseobj.mjs.html +1 -1
  340. package/docs/iser.mjs.html +1 -1
  341. package/docs/isernot.mjs.html +1 -1
  342. package/docs/isestr.mjs.html +1 -1
  343. package/docs/isfile.mjs.html +1 -1
  344. package/docs/isfun.mjs.html +1 -1
  345. package/docs/isint.mjs.html +1 -1
  346. package/docs/ismonth.mjs.html +1 -1
  347. package/docs/isn0int.mjs.html +1 -1
  348. package/docs/isn0num.mjs.html +1 -1
  349. package/docs/isnan.mjs.html +1 -1
  350. package/docs/isnbr.mjs.html +1 -1
  351. package/docs/isnint.mjs.html +1 -1
  352. package/docs/isnnum.mjs.html +1 -1
  353. package/docs/isnull.mjs.html +1 -1
  354. package/docs/isnum.mjs.html +1 -1
  355. package/docs/isobj.mjs.html +1 -1
  356. package/docs/isobj0.mjs.html +1 -1
  357. package/docs/isp0int.mjs.html +1 -1
  358. package/docs/isp0num.mjs.html +1 -1
  359. package/docs/ispint.mjs.html +1 -1
  360. package/docs/ispm.mjs.html +1 -1
  361. package/docs/ispnum.mjs.html +1 -1
  362. package/docs/isstr.mjs.html +1 -1
  363. package/docs/isstr0.mjs.html +1 -1
  364. package/docs/istime.mjs.html +1 -1
  365. package/docs/istimeTZ.mjs.html +1 -1
  366. package/docs/istimems.mjs.html +1 -1
  367. package/docs/istimemsTZ.mjs.html +1 -1
  368. package/docs/isu16arr.mjs.html +1 -1
  369. package/docs/isu8arr.mjs.html +1 -1
  370. package/docs/isundefined.mjs.html +1 -1
  371. package/docs/j2o.mjs.html +1 -1
  372. package/docs/judge.mjs.html +1 -1
  373. package/docs/keysmat2ltdt.mjs.html +1 -1
  374. package/docs/ltdt2vrtsable.mjs.html +1 -1
  375. package/docs/ltdtDiff.mjs.html +1 -1
  376. package/docs/ltdtDiffByKey.mjs.html +1 -1
  377. package/docs/ltdtkeys2mat.mjs.html +1 -1
  378. package/docs/ltdtkeysheads2mat.mjs.html +1 -1
  379. package/docs/ltdtmapping.mjs.html +1 -1
  380. package/docs/ltdtmerge.mjs.html +1 -1
  381. package/docs/ltdtpick.mjs.html +1 -1
  382. package/docs/ltdtpull.mjs.html +1 -1
  383. package/docs/mat2ltdt.mjs.html +1 -1
  384. package/docs/matConcat.mjs.html +1 -1
  385. package/docs/matDiff.mjs.html +1 -1
  386. package/docs/matat.mjs.html +1 -1
  387. package/docs/now2str.mjs.html +1 -1
  388. package/docs/now2strp.mjs.html +1 -1
  389. package/docs/nowDay2str.mjs.html +1 -1
  390. package/docs/nowms2str.mjs.html +1 -1
  391. package/docs/nowms2strp.mjs.html +1 -1
  392. package/docs/o2j.mjs.html +1 -1
  393. package/docs/obj2b64.mjs.html +1 -1
  394. package/docs/obj2pb64.mjs.html +1 -1
  395. package/docs/obj2str.mjs.html +1 -1
  396. package/docs/obj2stru8arr.mjs.html +1 -1
  397. package/docs/obj2u8arr.mjs.html +1 -1
  398. package/docs/objSortBy.mjs.html +1 -1
  399. package/docs/objSortByKeys.mjs.html +1 -1
  400. package/docs/oo.mjs.html +1 -1
  401. package/docs/openLink.mjs.html +1 -1
  402. package/docs/pb642obj.mjs.html +1 -1
  403. package/docs/pmChain.mjs.html +1 -1
  404. package/docs/pmConvertResolve.mjs.html +1 -1
  405. package/docs/pmDebounce.mjs.html +1 -1
  406. package/docs/pmHook.mjs.html +1 -1
  407. package/docs/pmHookReject.mjs.html +1 -1
  408. package/docs/pmIni.mjs.html +1 -1
  409. package/docs/pmInvResolve.mjs.html +1 -1
  410. package/docs/pmKeyMutex.mjs.html +1 -1
  411. package/docs/pmMap.mjs.html +1 -1
  412. package/docs/pmQueue.mjs.html +1 -1
  413. package/docs/pmSeries.mjs.html +1 -1
  414. package/docs/pmThrottle.mjs.html +1 -1
  415. package/docs/pmTimeout.mjs.html +1 -1
  416. package/docs/preciseNum.mjs.html +1 -1
  417. package/docs/pseudoRandom.mjs.html +1 -1
  418. package/docs/pseudoRandomIntRange.mjs.html +1 -1
  419. package/docs/pseudoRandomIntsNdpRange.mjs.html +1 -1
  420. package/docs/pseudoRandomIntsRange.mjs.html +1 -1
  421. package/docs/pseudoRandomRange.mjs.html +1 -1
  422. package/docs/pseudoRandomsRange.mjs.html +1 -1
  423. package/docs/queue.mjs.html +1 -1
  424. package/docs/random.mjs.html +1 -1
  425. package/docs/randomIntRange.mjs.html +1 -1
  426. package/docs/randomIntsNdpRange.mjs.html +1 -1
  427. package/docs/randomIntsRange.mjs.html +1 -1
  428. package/docs/randomRange.mjs.html +1 -1
  429. package/docs/randomsRange.mjs.html +1 -1
  430. package/docs/rang.mjs.html +1 -1
  431. package/docs/rep.mjs.html +1 -1
  432. package/docs/repObj.mjs.html +1 -1
  433. package/docs/replace.mjs.html +1 -1
  434. package/docs/replaceObj.mjs.html +1 -1
  435. package/docs/replacePlus.mjs.html +1 -1
  436. package/docs/round.mjs.html +1 -1
  437. package/docs/secd.mjs.html +1 -1
  438. package/docs/sep.mjs.html +1 -1
  439. package/docs/sepInt.mjs.html +1 -1
  440. package/docs/setIntervalHp.mjs.html +1 -1
  441. package/docs/setTimeoutHp.mjs.html +1 -1
  442. package/docs/sind.mjs.html +1 -1
  443. package/docs/split.mjs.html +1 -1
  444. package/docs/str2aes.mjs.html +1 -1
  445. package/docs/str2b64.mjs.html +1 -1
  446. package/docs/str2hint.mjs.html +1 -1
  447. package/docs/str2md5.mjs.html +1 -1
  448. package/docs/str2obj.mjs.html +1 -1
  449. package/docs/str2sha.mjs.html +1 -1
  450. package/docs/str2sha512.mjs.html +1 -1
  451. package/docs/str2u8arr.mjs.html +1 -1
  452. package/docs/strCompare.mjs.html +1 -1
  453. package/docs/strCompareForVersion.mjs.html +1 -1
  454. package/docs/strDiff.mjs.html +1 -1
  455. package/docs/strDiffToHtml.mjs.html +1 -1
  456. package/docs/strFindFuzz.mjs.html +1 -1
  457. package/docs/strFindSimilar.mjs.html +1 -1
  458. package/docs/strTruncate.mjs.html +1 -1
  459. package/docs/strdelleft.mjs.html +1 -1
  460. package/docs/strdelright.mjs.html +1 -1
  461. package/docs/strleft.mjs.html +1 -1
  462. package/docs/strmid.mjs.html +1 -1
  463. package/docs/strright.mjs.html +1 -1
  464. package/docs/stru8arr2obj.mjs.html +1 -1
  465. package/docs/tand.mjs.html +1 -1
  466. package/docs/time2day.mjs.html +1 -1
  467. package/docs/time2hour.mjs.html +1 -1
  468. package/docs/time2min.mjs.html +1 -1
  469. package/docs/timeTZ2day.mjs.html +1 -1
  470. package/docs/timeTZ2expire.mjs.html +1 -1
  471. package/docs/timeTZ2hour.mjs.html +1 -1
  472. package/docs/timeTZ2min.mjs.html +1 -1
  473. package/docs/timeTZ2past.mjs.html +1 -1
  474. package/docs/timems2day.mjs.html +1 -1
  475. package/docs/timems2hour.mjs.html +1 -1
  476. package/docs/timems2min.mjs.html +1 -1
  477. package/docs/timems2time.mjs.html +1 -1
  478. package/docs/timemsTZ2day.mjs.html +1 -1
  479. package/docs/timemsTZ2expire.mjs.html +1 -1
  480. package/docs/timemsTZ2hour.mjs.html +1 -1
  481. package/docs/timemsTZ2min.mjs.html +1 -1
  482. package/docs/timemsTZ2past.mjs.html +1 -1
  483. package/docs/timemsTZ2time.mjs.html +1 -1
  484. package/docs/treeObj.mjs.html +7 -7
  485. package/docs/treeToFilepath.mjs.html +1 -1
  486. package/docs/trim.mjs.html +1 -1
  487. package/docs/u16arr2b64.mjs.html +1 -1
  488. package/docs/u16arr2u8arr.mjs.html +1 -1
  489. package/docs/u8arr2ab.mjs.html +1 -1
  490. package/docs/u8arr2b64.mjs.html +1 -1
  491. package/docs/u8arr2blob.mjs.html +1 -1
  492. package/docs/u8arr2bs.mjs.html +1 -1
  493. package/docs/u8arr2obj.mjs.html +17 -3
  494. package/docs/u8arr2str.mjs.html +1 -1
  495. package/docs/u8arr2u16arr.mjs.html +1 -1
  496. package/docs/urlParse.mjs.html +1 -1
  497. package/docs/verifyValue.mjs.html +1 -1
  498. package/docs/waitFun.mjs.html +1 -1
  499. package/docs/wsemi.html +36 -13
  500. package/package.json +1 -1
  501. package/src/clearXSS.mjs +262 -24
  502. package/src/flattenToConn.mjs +11 -7
  503. package/src/flattenTree.mjs +8 -8
  504. package/src/fsTask.mjs +13 -12
  505. package/src/getltdtkeys.mjs +6 -5
  506. package/src/treeObj.mjs +6 -6
  507. package/src/u8arr2obj.mjs +16 -2
  508. package/test/clearXSS.test.mjs +1276 -1
  509. package/test/flattenToConn.test.mjs +83 -0
  510. package/test/flattenTree.test.mjs +49 -0
  511. package/test/fsTask.test.mjs +144 -0
  512. package/test/getltdtkeys.test.mjs +71 -0
  513. package/test/tools/clearXssWalkRunner.mjs +202 -0
  514. package/test/treeObj.test.mjs +119 -0
  515. package/test/u8arr2obj.test.mjs +107 -2
  516. package/toolfp/dist/wsemip.umd.js +1 -1
  517. package/toolparfor/dist/wpf.umd.js +1 -1
  518. package/toolparfor/dist/wpf_pmSeries.umd.js +1 -1
@@ -2,6 +2,125 @@ import assert from 'assert'
2
2
  import treeObj from '../src/treeObj.mjs'
3
3
 
4
4
 
5
+ describe(`treeObj 偽稱Array之物件視為物件(R-OBJ-ITER-01 候選10)`, function() {
6
+
7
+ //以Symbol.toStringTag偽稱'Array'之物件(isarr為真而非真陣列), 可寫與不可寫兩種標籤
8
+ let mkFake = (len, writable) => {
9
+ let o = { a: 'kept', length: len }
10
+ if (writable) {
11
+ o[Symbol.toStringTag] = 'Array'
12
+ }
13
+ else {
14
+ Object.defineProperty(o, Symbol.toStringTag, { value: 'Array' })
15
+ }
16
+ return o
17
+ }
18
+ let ident = (v) => v
19
+
20
+ for (let writable of [true, false]) {
21
+ let tag = writable ? 'writable' : 'non-writable'
22
+ for (let len of [0, 2, 1000]) {
23
+ it(`should keep the keys of a nested object faking Array (${tag} tag, length ${len}) and not turn it into an index array`, function() {
24
+ let r = treeObj({ child: mkFake(len, writable) }, ident)
25
+ assert.ok(!Array.isArray(r.child))
26
+ assert.strict.deepStrictEqual(Object.keys(r.child), ['a', 'length'])
27
+ assert.strict.strictEqual(r.child.a, 'kept')
28
+ assert.strict.strictEqual(r.child.length, len)
29
+ })
30
+ }
31
+
32
+ it(`should call the hook for the keys of an object faking Array (${tag} tag) with the path, as for a plain object`, function() {
33
+ let m = []
34
+ treeObj({ child: mkFake(2, writable) }, (value, key, nk) => {
35
+ m.push({ value, key, nk })
36
+ return value
37
+ })
38
+ let mm = []
39
+ treeObj({ child: { a: 'kept', length: 2 } }, (value, key, nk) => {
40
+ mm.push({ value, key, nk })
41
+ return value
42
+ })
43
+ //第0筆為child本身(其value為物件, 比對鍵與路徑), 其後為a與length
44
+ assert.strict.deepStrictEqual(m.map((v) => [v.key, v.nk]), mm.map((v) => [v.key, v.nk]))
45
+ assert.strict.deepStrictEqual(m.slice(1).map((v) => v.value), ['kept', 2])
46
+ })
47
+
48
+ it(`should handle an object faking Array (${tag} tag) at the root as an object`, function() {
49
+ let r = treeObj(mkFake(2, writable), ident)
50
+ assert.ok(!Array.isArray(r))
51
+ assert.strict.deepStrictEqual(Object.keys(r), ['a', 'length'])
52
+ assert.strict.strictEqual(r.length, 2)
53
+ })
54
+ }
55
+
56
+ it(`should keep Symbol keys of an object faking Array with force`, function() {
57
+ let sym = Symbol('s')
58
+ let o = mkFake(1, false)
59
+ o[sym] = 'sv'
60
+ let r = treeObj({ child: o }, ident, { force: true })
61
+ assert.strict.strictEqual(r.child[sym], 'sv')
62
+ assert.strict.strictEqual(r.child.a, 'kept')
63
+ })
64
+
65
+ it(`should still turn real arrays (including Array subclasses and holes) into arrays by index`, function() {
66
+ class Arr2 extends Array {}
67
+ let r = treeObj({ a: [1, [2, 3]], b: Arr2.from([4, 5]), c: [, 6] }, ident) // eslint-disable-line no-sparse-arrays
68
+ assert.ok(Array.isArray(r.a) && Array.isArray(r.a[1]) && Array.isArray(r.b) && Array.isArray(r.c))
69
+ assert.strict.deepStrictEqual(r.a, [1, [2, 3]])
70
+ assert.strict.deepStrictEqual([...r.b], [4, 5])
71
+ assert.strict.deepStrictEqual(r.c, [undefined, 6])
72
+ })
73
+
74
+ it(`should visit the non-enumerable string keys of an object faking Array like those of a plain object (own property names)`, function() {
75
+ let mk = (fake) => {
76
+ let o = { a: 1 }
77
+ Object.defineProperty(o, 'h', { value: 2, enumerable: false })
78
+ if (fake) {
79
+ Object.defineProperty(o, Symbol.toStringTag, { value: 'Array' })
80
+ }
81
+ return o
82
+ }
83
+ let keysOf = (o) => {
84
+ let m = []
85
+ treeObj({ child: o }, (value, key) => {
86
+ m.push(key)
87
+ return value
88
+ })
89
+ return m
90
+ }
91
+ assert.strict.deepStrictEqual(keysOf(mk(false)), ['child', 'a', 'h'])
92
+ assert.strict.deepStrictEqual(keysOf(mk(true)), ['child', 'a', 'h'])
93
+ })
94
+
95
+ for (let tag of ['Foo', 'Object', 'Arguments']) {
96
+ it(`should still traverse a real array with another Symbol.toStringTag (${tag}) by index, nested and at the root`, function() {
97
+ let mk = () => Object.defineProperty([1, 2], Symbol.toStringTag, { value: tag })
98
+ let m = []
99
+ let r = treeObj({ child: mk() }, (value, key, nk) => {
100
+ m.push([key, nk.length])
101
+ return value
102
+ })
103
+ assert.ok(Array.isArray(r.child))
104
+ assert.strict.deepStrictEqual(r.child, [1, 2])
105
+ assert.strict.deepStrictEqual(m, [['child', 0], [0, 1], [1, 1]])
106
+ let m2 = []
107
+ let r2 = treeObj(mk(), (value, key) => {
108
+ m2.push(key)
109
+ return value
110
+ })
111
+ assert.ok(Array.isArray(r2))
112
+ assert.strict.deepStrictEqual(r2, [1, 2])
113
+ assert.strict.deepStrictEqual(m2, [0, 1])
114
+ })
115
+ }
116
+
117
+ it(`should treat an object with a numeric length key as an ordinary object`, function() {
118
+ let r = treeObj({ child: { a: 'kept', length: 2 } }, ident)
119
+ assert.strict.deepStrictEqual(r, { child: { a: 'kept', length: 2 } })
120
+ })
121
+
122
+ })
123
+
5
124
  describe(`treeObj`, function() {
6
125
  let data = {
7
126
  a: 123,
@@ -220,13 +220,21 @@ describe(`u8arr2obj`, function() {
220
220
  assert.strict.deepStrictEqual(r.msg.indexOf('TypeError') === 0, true, `msg 應為型別錯誤, got ${r.msg}`)
221
221
  })
222
222
 
223
- it(`should return { state: 'error', msg: <SyntaxError> } when input a corrupted packet with returnWithStateAndMsg`, function() {
224
- let r = u8arr2obj(new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9]), { returnWithStateAndMsg: true })
223
+ it(`should return { state: 'error', msg: <SyntaxError> } when input a packet whose header block is not valid JSON with returnWithStateAndMsg`, function() {
224
+ //標頭長度為合法之3, 其後3位元組'abc'不是合法JSON(分塊資訊須為JSON陣列)
225
+ let bad = new Uint8Array([0x40, 0x08, 0, 0, 0, 0, 0, 0, 97, 98, 99])
226
+ let r = u8arr2obj(bad, { returnWithStateAndMsg: true })
225
227
  assert.strict.deepStrictEqual(Object.keys(r).sort(), ['msg', 'state'])
226
228
  assert.strict.deepStrictEqual(r.state, 'error')
227
229
  assert.strict.deepStrictEqual(r.msg.indexOf('SyntaxError') === 0, true, `msg 應為解析錯誤, got ${r.msg}`)
228
230
  })
229
231
 
232
+ it(`should return { state: 'error', msg: 'invalid pks, head length …' } when the head length is not a non-negative integer with returnWithStateAndMsg (R-OBJ-ITER-01 規則6)`, function() {
233
+ //標頭前8位元組以大端double讀取: [1..8]為極小非整數, 修前由JSON.parse失敗(SyntaxError)擋下, 現於分割前即拒收
234
+ let r = u8arr2obj(new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8, 9]), { returnWithStateAndMsg: true })
235
+ assert.strict.deepStrictEqual(r, { state: 'error', msg: 'invalid pks, head length must be a non-negative integer not exceeding the packet' })
236
+ })
237
+
230
238
  it(`should return { state: 'error', msg: 'stru8arr2obj: <SyntaxError>' } when the inner stru8arr2obj fails with returnWithStateAndMsg`, function() {
231
239
  //內部呼叫之錯誤須前置來源函數名, 供辨識是哪一步出錯
232
240
  let bad = obj2u8arr({ a: 1 })
@@ -288,6 +296,103 @@ describe(`u8arr2obj 非Error拋出值(R-CODEC-ERR-01之2)`, function() {
288
296
 
289
297
  })
290
298
 
299
+ describe(`u8arr2obj 標頭長度lenHead須為非負整數且不逾封包(R-OBJ-ITER-01 規則6)`, function() {
300
+
301
+ //標頭前8位元組為大端double: 分塊資訊區之位元組數; 來自封包(不可信), 小數與負數經slice被靜默截斷或自尾端算而得同一分割(非正規編碼), 須拒收
302
+ let INV = 'invalid pks, head length must be a non-negative integer not exceeding the packet'
303
+ let packet = obj2u8arr({ a: 1, b: new Uint8Array([7, 8, 9]) })
304
+ let good = new DataView(packet.buffer, packet.byteOffset, 8).getFloat64(0, false)
305
+ let others = packet.length - 8
306
+ let withHead = (v) => {
307
+ let q = packet.slice()
308
+ new DataView(q.buffer, q.byteOffset, 8).setFloat64(0, v, false)
309
+ return q
310
+ }
311
+
312
+ it(`should decode the canonical packet (precondition: the head length is a positive integer inside the packet)`, function() {
313
+ assert.ok(Number.isInteger(good) && good > 0 && good < others, `good=${good} others=${others}`)
314
+ let r = u8arr2obj(packet, { returnWithStateAndMsg: true })
315
+ assert.strict.deepStrictEqual(r.state, 'success')
316
+ assert.strict.deepStrictEqual(r.msg.a, 1)
317
+ assert.strict.deepStrictEqual([...r.msg.b], [7, 8, 9])
318
+ })
319
+
320
+ let rejects = [
321
+ ['a fraction (head length + 0.5)', good + 0.5],
322
+ ['a fraction (head length + 0.99)', good + 0.99],
323
+ ['a negative number counted from the end that would give the same split', -(others - good)],
324
+ ['-1', -1],
325
+ ['NaN', NaN],
326
+ ['Infinity', Infinity],
327
+ ['-Infinity', -Infinity],
328
+ ['a number above the packet size (size + 1)', others + 1],
329
+ ['2^53', 2 ** 53],
330
+ ['1e308', 1e308],
331
+ ]
332
+ for (let [name, v] of rejects) {
333
+ it(`should reject ${name} before splitting the packet: strict mode gives { state: 'error', msg: INV }, loose mode gives {}`, function() {
334
+ assert.strict.deepStrictEqual(u8arr2obj(withHead(v), { returnWithStateAndMsg: true }), { state: 'error', msg: INV })
335
+ assert.strict.deepStrictEqual(u8arr2obj(withHead(v)), {})
336
+ })
337
+ }
338
+
339
+ //整數且不逾封包者通過標頭檢查, 後續由JSON解析或分塊資訊檢查失敗(不是INV)
340
+ let passesHeadCheck = [
341
+ ['0', 0],
342
+ ['-0', -0],
343
+ ['head length - 1', good - 1],
344
+ ['head length + 1', good + 1],
345
+ ['the packet size (all is header)', others],
346
+ ]
347
+ for (let [name, v] of passesHeadCheck) {
348
+ it(`should pass the head length check for ${name} and fail later as a corrupted packet, not by the head length rule`, function() {
349
+ let r = u8arr2obj(withHead(v), { returnWithStateAndMsg: true })
350
+ assert.strict.deepStrictEqual(r.state, 'error')
351
+ assert.ok(r.msg !== INV, `msg=${r.msg}`)
352
+ })
353
+ }
354
+
355
+ for (let n of [0, 1, 3, 7]) {
356
+ it(`should reject a packet shorter than the 8-byte head (${n} bytes) by the head length rule`, function() {
357
+ let r = u8arr2obj(new Uint8Array(n).fill(1), { returnWithStateAndMsg: true })
358
+ assert.strict.deepStrictEqual(r, { state: 'error', msg: INV })
359
+ })
360
+ }
361
+
362
+ it(`should reject an invalid head length before slicing the head block (only the head and the rest are sliced)`, function() {
363
+ //來自封包之長度須先驗證才可用於切分; 以計次之Uint8Array子類別確認拒收時只切了標頭8位元組與其餘兩次
364
+ let n = 0
365
+ class CountU8 extends Uint8Array {
366
+ slice(...a) {
367
+ n++
368
+ return new CountU8(super.slice(...a))
369
+ }
370
+ }
371
+ let u = new CountU8(withHead(good + 0.5))
372
+ n = 0
373
+ assert.strict.deepStrictEqual(u8arr2obj(u, { returnWithStateAndMsg: true }), { state: 'error', msg: INV })
374
+ assert.strict.strictEqual(n, 2)
375
+ n = 0
376
+ let ok = u8arr2obj(new CountU8(packet), { returnWithStateAndMsg: true })
377
+ assert.strict.strictEqual(ok.state, 'success')
378
+ assert.ok(n >= 4, `n=${n}`)
379
+ })
380
+
381
+ it(`should decode the same packet when the head length is an exact integer written in the other valid ways (handmade packet with head length 3)`, function() {
382
+ let enc = new TextEncoder()
383
+ let body = enc.encode('[7]{"a":1}')
384
+ let q = new Uint8Array(8 + body.length)
385
+ q.set(body, 8)
386
+ new DataView(q.buffer, 0, 8).setFloat64(0, 3, false)
387
+ assert.strict.deepStrictEqual(u8arr2obj(q, { returnWithStateAndMsg: true }), { state: 'success', msg: { a: 1 } })
388
+ new DataView(q.buffer, 0, 8).setFloat64(0, 3.9, false)
389
+ assert.strict.deepStrictEqual(u8arr2obj(q, { returnWithStateAndMsg: true }), { state: 'error', msg: INV })
390
+ new DataView(q.buffer, 0, 8).setFloat64(0, -7, false)
391
+ assert.strict.deepStrictEqual(u8arr2obj(q, { returnWithStateAndMsg: true }), { state: 'error', msg: INV })
392
+ })
393
+
394
+ })
395
+
291
396
  describe(`u8arr2obj 使用端物件之迭代(R-OBJ-ITER-01)`, function() {
292
397
 
293
398
  //封包來自網路/檔案, 標頭內之分塊資訊不可信(規則6): 須為真陣列、各項為非負有限整數、總量不逾封包資料區, 否則失敗回報, 不依其內容迭代或配置記憶體
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wsemip v1.9.21
2
+ * wsemip v1.9.22
3
3
  * (c) 2018-2021 yuda-lyu(semisphere)
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wpf v1.9.21
2
+ * wpf v1.9.22
3
3
  * (c) 2018-2021 yuda-lyu(semisphere)
4
4
  * Released under the MIT License.
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * wpf_pmSeries v1.9.21
2
+ * wpf_pmSeries v1.9.22
3
3
  * (c) 2018-2021 yuda-lyu(semisphere)
4
4
  * Released under the MIT License.
5
5
  */