w-converhp 2.0.32 → 2.0.34

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.
@@ -720,37 +720,100 @@ function WConverhpClient(opt) {
720
720
  //fileTotalSize
721
721
  let fileTotalSize = n
722
722
 
723
+ //chunkTotal
724
+ let chunkTotal = Math.ceil(fileTotalSize / sizeSlice)
725
+ // console.log('chunkTotal', chunkTotal)
726
+
723
727
  //fileTotalHash
728
+ // console.log(`calc hash for fileTotalSize[${fileTotalSize}]...`)
724
729
  let fileTotalHash = await calcHash(bb)
725
- // console.log('fileTotalHash', fileTotalHash)
726
-
727
- //ckh
728
- let ckh = async({ filename, fileSize, fileHash }) => {
729
-
730
- //send upload-check
731
- let resCk = await send('upload-check', { filename, fileSize, fileHash }, { dataType: 'json' })
732
- // console.log('resCk', resCk)
733
-
734
- return resCk
735
- }
736
-
737
- //rAll
738
- let rAll = await ckh({ filename: fileTotalHash, fileSize: fileTotalSize, fileHash: fileTotalHash })
739
- // console.log('rAll', rAll)
730
+ // console.log(`calc hash for fileTotalSize[${fileTotalSize}] done`, fileTotalHash)
731
+
732
+ //send upload-check
733
+ // console.log(`send check-total-hash...`)
734
+ let resCk = await send('upload-check', { mode: 'check-total-hash', fileHash: fileTotalHash, fileSize: fileTotalSize }, { dataType: 'json' })
735
+ // console.log('resCk', resCk)
736
+ // resCk {
737
+ // path: 'uploadTemp\\2429b7ef08ce6ba9',
738
+ // bAllExist: false,
739
+ // bAllSize: false,
740
+ // bAllHash: false,
741
+ // bSls: true,
742
+ // slks: [
743
+ // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
744
+ // 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
745
+ // 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
746
+ // 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
747
+ // 48, 49, 50, 51, 52, 53
748
+ // ]
749
+ // }
740
750
 
741
751
  //check
742
- if (rAll.existed) {
752
+ if (resCk.bAllHash) {
743
753
  // console.log('已有上傳大檔')
744
754
  let resMg = {
745
755
  filename: fileTotalName,
746
- path: rAll.path,
756
+ path: resCk.path,
747
757
  }
748
758
  return resMg
749
759
  }
750
760
 
751
- //chunkTotal
752
- let chunkTotal = Math.ceil(n / sizeSlice)
753
- // console.log('chunkTotal', chunkTotal)
761
+ //針對伺服器上已有切片檔案計算hash與比對
762
+ if (resCk.slks.length > 0) {
763
+ // console.log('receive slks...', resCk.slks[0], size(resCk.slks))
764
+
765
+ //fileSliceHashs
766
+ let fileSliceHashs = []
767
+ // let n = Math.max(resCk.slks.length, 1)
768
+ // let nr = Math.floor(n / 200)
769
+ for (let k = 0; k < resCk.slks.length; k++) {
770
+ // if (k % nr === 0) {
771
+ // console.log(`calc hash for slices`, round(k / resCk.slks.length * 100, 1), '%')
772
+ // }
773
+
774
+ //i
775
+ let i = resCk.slks[k]
776
+
777
+ //start
778
+ let start = i * sizeSlice
779
+
780
+ //end
781
+ let end = Math.min(start + sizeSlice, fileTotalSize)
782
+
783
+ //chunk
784
+ let chunk = bb.slice(start, end)
785
+
786
+ //fileSliceHash
787
+ let fileSliceHash = await calcHash(chunk)
788
+ // console.log('fileSliceHash', fileSliceHash)
789
+
790
+ //push
791
+ fileSliceHashs.push({
792
+ i,
793
+ h: fileSliceHash,
794
+ })
795
+
796
+ }
797
+ // console.log('fileSliceHashs', fileSliceHashs)
798
+
799
+ //send upload-check
800
+ // console.log(`send check-slices-hash...`)
801
+ let resCks = await send('upload-check', { mode: 'check-slices-hash', fileHash: fileTotalHash, fileSliceHashs }, { dataType: 'json' })
802
+ // console.log('resCks', resCks)
803
+ // resCks {
804
+ // slks: [
805
+ // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
806
+ // 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
807
+ // 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
808
+ // 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
809
+ // 48, 49, 50, 51, 52, 53
810
+ // ]
811
+ // }
812
+
813
+ //update
814
+ resCk.slks = resCks.slks
815
+
816
+ }
754
817
 
755
818
  //packageId
756
819
  let packageId = fileTotalHash
@@ -769,7 +832,7 @@ function WConverhpClient(opt) {
769
832
  progCount++
770
833
  let r = progCount / chunkTotal
771
834
  let prog = r * progWeightSlice * 100
772
- let psiz = r * n
835
+ let psiz = r * fileTotalSize
773
836
  cbProgress({ prog, p: psiz, m: 'upload' })
774
837
  }
775
838
  }
@@ -779,44 +842,30 @@ function WConverhpClient(opt) {
779
842
  let perc = msg.prog
780
843
  let dir = msg.m
781
844
  if (dir === 'download' && perc === 100) {
782
- cbProgress({ prog: 100, p: n, m: 'upload' })
845
+ cbProgress({ prog: 100, p: fileTotalSize, m: 'upload' })
783
846
  }
784
847
  }
785
848
 
786
849
  //upload slice
850
+ // console.log(`upload slice...`)
787
851
  for (let i = 0; i < chunkTotal; i++) {
788
852
 
789
- //fileSliceName
790
- let fileSliceName = `${fileTotalHash}_${i}`
791
- // console.log('fileSliceName', fileSliceName)
853
+ //check
854
+ if (resCk.slks.indexOf(i) >= 0) {
855
+ // console.log('已有上傳切片檔')
856
+ cbProgressSlice({ prog: 100, m: 'upload' }) //直接觸發更新進度
857
+ continue
858
+ }
792
859
 
793
860
  //start
794
861
  let start = i * sizeSlice
795
862
 
796
863
  //end
797
- let end = Math.min(start + sizeSlice, n)
864
+ let end = Math.min(start + sizeSlice, fileTotalSize)
798
865
 
799
866
  //chunk
800
867
  let chunk = bb.slice(start, end)
801
868
 
802
- //fileSliceHash
803
- let fileSliceHash = await calcHash(chunk)
804
- // console.log('fileSliceHash', fileSliceHash)
805
-
806
- //rChunk
807
- let rChunk = await ckh({ filename: fileSliceName, fileSize: sizeSlice, fileHash: fileSliceHash })
808
- // console.log('fileSliceName', fileSliceName)
809
- // console.log('fileSliceHash', fileSliceHash)
810
- // console.log('rChunk', rChunk)
811
- // console.log('')
812
-
813
- //check
814
- if (rChunk.existed) {
815
- // console.log('已有上傳切片檔')
816
- cbProgressSlice({ prog: 100, m: 'upload' }) //直接觸發更新進度
817
- continue
818
- }
819
-
820
869
  //send slice
821
870
  let hd = {
822
871
  'chunk-index': i,
@@ -836,6 +885,7 @@ function WConverhpClient(opt) {
836
885
  }
837
886
  let resMg = await send('slice-merge', msg, { dataType: 'json', cbProgress: cbProgressMerge })
838
887
 
888
+ // console.log(`upload slice done`)
839
889
  return resMg
840
890
  }
841
891
 
@@ -996,7 +1046,7 @@ export default WConverhpClient
996
1046
  <br class="clear">
997
1047
 
998
1048
  <footer>
999
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Apr 13 2025 11:30:23 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1049
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Apr 14 2025 15:05:12 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1000
1050
  </footer>
1001
1051
 
1002
1052
  <script>prettyPrint();</script>
@@ -80,7 +80,7 @@
80
80
 
81
81
  <dt class="tag-source">Source:</dt>
82
82
  <dd class="tag-source"><ul class="dummy"><li>
83
- <a href="WConverhpServer.mjs.html">WConverhpServer.mjs</a>, <a href="WConverhpServer.mjs.html#line193">line 193</a>
83
+ <a href="WConverhpServer.mjs.html">WConverhpServer.mjs</a>, <a href="WConverhpServer.mjs.html#line198">line 198</a>
84
84
  </li></ul></dd>
85
85
 
86
86
 
@@ -462,6 +462,46 @@
462
462
 
463
463
 
464
464
 
465
+ <tr>
466
+
467
+ <td class="name"><code>sizeSlice</code></td>
468
+
469
+
470
+ <td class="type">
471
+
472
+
473
+ <span class="param-type">Integer</span>
474
+
475
+
476
+
477
+
478
+ </td>
479
+
480
+
481
+ <td class="attributes">
482
+
483
+ &lt;optional><br>
484
+
485
+
486
+
487
+
488
+
489
+ </td>
490
+
491
+
492
+
493
+ <td class="default">
494
+
495
+ <code>1024*1024</code>
496
+
497
+ </td>
498
+
499
+
500
+ <td class="description last"><p>輸入切片上傳檔案之切片檔案大小整數,單位為Byte,預設為1024*1024</p></td>
501
+ </tr>
502
+
503
+
504
+
465
505
  <tr>
466
506
 
467
507
  <td class="name"><code>verifyConn</code></td>
@@ -749,7 +789,7 @@
749
789
  <br class="clear">
750
790
 
751
791
  <footer>
752
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Apr 13 2025 11:30:23 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
792
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Apr 14 2025 15:05:12 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
753
793
  </footer>
754
794
 
755
795
  <script>prettyPrint();</script>
@@ -51,6 +51,8 @@ import stream from 'stream'
51
51
  import Hapi from '@hapi/hapi'
52
52
  import Inert from '@hapi/inert' //提供靜態檔案
53
53
  import get from 'lodash-es/get.js'
54
+ import each from 'lodash-es/each.js'
55
+ import size from 'lodash-es/size.js'
54
56
  import isNumber from 'lodash-es/isNumber.js'
55
57
  import genPm from 'wsemi/src/genPm.mjs'
56
58
  import evem from 'wsemi/src/evem.mjs'
@@ -72,6 +74,8 @@ import u8arr2obj from 'wsemi/src/u8arr2obj.mjs'
72
74
  import fsIsFile from 'wsemi/src/fsIsFile.mjs'
73
75
  import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
74
76
  import fsCreateFolder from 'wsemi/src/fsCreateFolder.mjs'
77
+ import fsGetFilesInFolder from 'wsemi/src/fsGetFilesInFolder.mjs'
78
+ import getFileXxHash from 'wsemi/src/getFileXxHash.mjs'
75
79
  // import calcFileHash from './calcFileHash.mjs'
76
80
  import calcFileHash from './calcFileHash.wk.umd.js'
77
81
  // import mergeFiles from './mergeFiles.mjs'
@@ -94,6 +98,7 @@ import mergeFiles from './mergeFiles.wk.umd.js'
94
98
  * @param {String} [opt.apiName='api'] 輸入API名稱字串,預設'api'
95
99
  * @param {String} [opt.pathUploadTemp='./uploadTemp'] 輸入暫時存放切片上傳檔案資料夾字串,預設'./uploadTemp'
96
100
  * @param {String} [opt.tokenType='Bearer'] 輸入token類型字串,預設'Bearer'
101
+ * @param {Integer} [opt.sizeSlice=1024*1024] 輸入切片上傳檔案之切片檔案大小整數,單位為Byte,預設為1024*1024
97
102
  * @param {Function} [opt.verifyConn=()=>{return true}] 輸入呼叫API時檢測函數,預設()=>{return true}
98
103
  * @param {Array} [opt.corsOrigins=['*']] 輸入允許跨域網域陣列,若給予['*']代表允許全部,預設['*']
99
104
  * @param {Integer} [opt.delayForBasic=0] 輸入基本API用延遲響應時間,單位ms,預設0
@@ -278,6 +283,12 @@ function WConverhpServer(opt = {}) {
278
283
  tokenType = 'Bearer'
279
284
  }
280
285
 
286
+ //sizeSlice
287
+ let sizeSlice = get(opt, 'sizeSlice')
288
+ if (!ispint(sizeSlice)) {
289
+ sizeSlice = 1024 * 1024 //1m
290
+ }
291
+
281
292
  //verifyConn
282
293
  let verifyConn = get(opt, 'verifyConn')
283
294
  if (!isfun(verifyConn)) {
@@ -471,12 +482,6 @@ function WConverhpServer(opt = {}) {
471
482
  }
472
483
 
473
484
  return r
474
- // return res.response(smr)
475
- // .header('Return-Type', returnType)
476
- // .header('Return-Msg', returnMsg)
477
- // .header('Cache-Control', 'no-cache, no-store, must-revalidate')
478
- // .header('Content-Type', 'application/octet-stream')
479
- // .header('Content-Length', smr.readableLength)
480
485
  }
481
486
 
482
487
  //responseU8aStreamWithError
@@ -707,25 +712,17 @@ function WConverhpServer(opt = {}) {
707
712
  query,
708
713
  })
709
714
 
710
- //filename, fileSize, fileHash, 從payload接收
711
- let filename = get(req, 'payload.filename', '')
712
- let fileSize = get(req, 'payload.fileSize', '')
713
- let fileHash = get(req, 'payload.fileHash', '')
714
- // console.log('filename', filename)
715
- // console.log('fileSize', fileSize)
716
- // console.log('fileHash', fileHash)
715
+ //mode, 從payload接收
716
+ let mode = get(req, 'payload.mode', '')
717
717
 
718
718
  //check
719
- if (!isestr(filename)) {
720
- // console.log('invalid filename in payload')
721
- return responseU8aStreamWithError(res, 'invalid filename in payload')
719
+ if (mode !== 'check-total-hash' &amp;&amp; mode !== 'check-slices-hash') {
720
+ // console.log('invalid mode in payload')
721
+ return responseU8aStreamWithError(res, `invalid mode[${mode}] in payload`)
722
722
  }
723
723
 
724
- //check
725
- if (!isnum(fileSize)) {
726
- // console.log('invalid fileSize in payload')
727
- return responseU8aStreamWithError(res, 'invalid fileSize in payload')
728
- }
724
+ //fileHash, 從payload接收
725
+ let fileHash = get(req, 'payload.fileHash', '')
729
726
 
730
727
  //check
731
728
  if (!isestr(fileHash)) {
@@ -733,69 +730,189 @@ function WConverhpServer(opt = {}) {
733
730
  return responseU8aStreamWithError(res, 'invalid fileHash in payload')
734
731
  }
735
732
 
736
- //pathFile
737
- let pathFile = path.join(pathUploadTemp, filename)
738
- // console.log('pathFile', pathFile)
733
+ //checkTotalHash
734
+ let checkTotalHash = async () => {
739
735
 
740
- //check
741
- if (!fsIsFile(pathFile)) {
742
- let out = {
743
- success: {
744
- existed: false,
745
- msg: 'not exist',
746
- },
736
+ //pathFile
737
+ let pathFile = path.join(pathUploadTemp, fileHash)
738
+ // console.log('pathFile', pathFile)
739
+
740
+ //bAllExist
741
+ let bAllExist = false
742
+ if (true) {
743
+ // console.log(`check exist for pathFile[${pathFile}]...`)
744
+
745
+ bAllExist = fsIsFile(pathFile)
746
+
747
+ // console.log(`check exist for pathFile[${pathFile}] done`, bAllExist)
747
748
  }
748
- let u8aOut = obj2u8arr(out)
749
- return responseU8aStream(res, u8aOut, { returnType: 'success', returnMsg: 'need to parse' })
750
- }
751
749
 
752
- //_fileSize
753
- let stats = fs.statSync(pathFile)
754
- let _fileSize = stats.size
750
+ //fileSize, 從payload接收
751
+ let fileSize = get(req, 'payload.fileSize', '')
755
752
 
756
- //check
757
- if (fileSize !== _fileSize) {
758
- let out = {
759
- success: {
760
- existed: false,
761
- msg: 'not equal size',
762
- },
753
+ //check
754
+ if (!isnum(fileSize)) {
755
+ // console.log('invalid fileSize in payload')
756
+ let r = {
757
+ error: 'invalid fileSize in payload',
758
+ }
759
+ return r
763
760
  }
764
- let u8aOut = obj2u8arr(out)
765
- return responseU8aStream(res, u8aOut, { returnType: 'success', returnMsg: 'need to parse' })
766
- }
767
761
 
768
- //_fileHash
769
- let _fileHash = await calcFileHash(pathFile)
770
- // console.log('path', pathFile)
771
- // console.log('hash(front)', fileHash)
772
- // console.log('hash(backend)', _fileHash)
773
- // console.log('')
762
+ //bAllSize
763
+ let bAllSize = false
764
+ if (bAllExist) {
765
+ // console.log(`check size for pathFile[${pathFile}]...`)
774
766
 
775
- //check
776
- if (fileHash !== _fileHash) {
777
- let out = {
767
+ //_fileSize
768
+ let stats = fs.statSync(pathFile)
769
+ let _fileSize = stats.size
770
+
771
+ //bAllSize
772
+ bAllSize = fileSize === _fileSize
773
+
774
+ // console.log(`check size for pathFile[${pathFile}] done`, bAllSize)
775
+ }
776
+
777
+ //bAllHash
778
+ let bAllHash = false
779
+ if (bAllExist &amp;&amp; bAllSize) {
780
+ // console.log(`check hash for pathFile[${pathFile}]...`)
781
+
782
+ //bAllHash
783
+ await calcFileHash(pathFile)
784
+ .then((_fileHash) => {
785
+ bAllHash = fileHash === _fileHash
786
+ })
787
+ .catch((err) => {
788
+ console.log(err)
789
+ console.log(`fsIsFile(pathFile)`, pathFile, fsIsFile(pathFile))
790
+ bAllHash = false
791
+ })
792
+
793
+ // console.log(`check hash for pathFile[${pathFile}] done`, bAllHash)
794
+ }
795
+
796
+ //vfps
797
+ let vfps = fsGetFilesInFolder(pathUploadTemp)
798
+ // console.log('vfps', vfps)
799
+
800
+ //slks
801
+ let slks = []
802
+ if (true) {
803
+ each(vfps, (v, k) => {
804
+ let b1 = (v.name).indexOf(`${fileHash}_`) >= 0
805
+ let stats = fs.statSync(v.path)
806
+ let b2 = stats.size === sizeSlice
807
+ let b = b1 &amp;&amp; b2
808
+ if (b) {
809
+ slks.push(k)
810
+ }
811
+ })
812
+ }
813
+ // console.log('slks', slks)
814
+
815
+ //bSls
816
+ let bSls = size(slks) > 0
817
+ // console.log('bSls', bSls)
818
+
819
+ //r
820
+ let r = {
778
821
  success: {
779
- existed: false,
780
- msg: 'not equal hash',
822
+ path: pathFile,
823
+ bAllExist,
824
+ bAllSize,
825
+ bAllHash,
826
+ bSls,
827
+ slks,
781
828
  },
782
829
  }
783
- let u8aOut = obj2u8arr(out)
784
- return responseU8aStream(res, u8aOut, { returnType: 'success', returnMsg: 'need to parse' })
830
+
831
+ return r
785
832
  }
786
833
 
787
- if (true) {
788
- let out = {
834
+ //checkSlicesHash
835
+ let checkSlicesHash = async() => {
836
+
837
+ //fileSliceHashs, 從payload接收
838
+ let fileSliceHashs = get(req, 'payload.fileSliceHashs', [])
839
+ // console.log('fileSliceHashs', fileSliceHashs)
840
+
841
+ //check, 前端須檢核, 若之前已回應無切片, 就不能再調用檢測切片hash的API
842
+ if (size(fileSliceHashs) === 0) {
843
+ let r = {
844
+ error: 'no fileSliceHashs',
845
+ }
846
+ return r
847
+ }
848
+
849
+ //slksCfm, 已確定hash值一致的切片
850
+ // console.log(`check hash for slices fileHash[${fileHash}]...`, fileSliceHashs[0], size(fileSliceHashs))
851
+ let slksCfm = []
852
+ // let n = Math.max(fileSliceHashs.length, 1)
853
+ // let nr = Math.floor(n / 200)
854
+ for (let k = 0; k &lt; fileSliceHashs.length; k++) {
855
+ // if (k % nr === 0) {
856
+ // console.log(`calc hash for slices`, round(k / fileSliceHashs.length * 100, 1), '%')
857
+ // }
858
+
859
+ //v
860
+ let v = fileSliceHashs[k]
861
+
862
+ //_pathFile
863
+ let _pathFile = path.join(pathUploadTemp, `${fileHash}_${v.i}`)
864
+ // console.log('_pathFile', _pathFile)
865
+
866
+ //_fileHash
867
+ let _fileHash = ''
868
+ // await calcFileHash(_pathFile)
869
+ await getFileXxHash(new Blob([fs.readFileSync(_pathFile)])) //計算切片因檔案很小, 直接用getFileXxHash速度比較快
870
+ .then((res) => {
871
+ _fileHash = res
872
+ })
873
+ .catch((err) => {
874
+ console.log(err)
875
+ console.log(`fsIsFile(_pathFile)`, _pathFile, fsIsFile(_pathFile))
876
+ })
877
+ // console.log('_fileHash', _fileHash)
878
+
879
+ //check
880
+ if (v.h === _fileHash) {
881
+ slksCfm.push(v.i)
882
+ }
883
+ // else {
884
+ // console.log(`hash is not equal`, `hash(front)`, v.h, `hash(backend)`, _fileHash)
885
+ // }
886
+
887
+ }
888
+ // console.log(`check hash for slices fileHash[${fileHash}] done`, slksCfm[0], size(slksCfm))
889
+
890
+ //r
891
+ let r = {
789
892
  success: {
790
- existed: true,
791
- msg: 'equal',
792
- path: pathFile,
893
+ slks: slksCfm,
793
894
  },
794
895
  }
896
+
897
+ return r
898
+ }
899
+
900
+ //out
901
+ let out = null
902
+ if (mode === 'check-total-hash') {
903
+ out = await checkTotalHash()
904
+ }
905
+ else if (mode === 'check-slices-hash') {
906
+ out = await checkSlicesHash()
907
+ }
908
+
909
+ if (out.error) {
910
+ return responseU8aStreamWithError(res, out.error)
911
+ }
912
+ else {
795
913
  let u8aOut = obj2u8arr(out)
796
914
  return responseU8aStream(res, u8aOut, { returnType: 'success', returnMsg: 'need to parse' })
797
915
  }
798
-
799
916
  },
800
917
  }
801
918
 
@@ -1533,7 +1650,7 @@ export default WConverhpServer
1533
1650
  <br class="clear">
1534
1651
 
1535
1652
  <footer>
1536
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Apr 13 2025 11:30:23 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1653
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Apr 14 2025 15:05:12 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1537
1654
  </footer>
1538
1655
 
1539
1656
  <script>prettyPrint();</script>
package/docs/index.html CHANGED
@@ -71,7 +71,7 @@
71
71
  <br class="clear">
72
72
 
73
73
  <footer>
74
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Apr 13 2025 11:30:23 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
74
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Mon Apr 14 2025 15:05:12 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "w-converhp",
3
- "version": "2.0.32",
3
+ "version": "2.0.34",
4
4
  "main": "dist/w-converhp-server.umd.js",
5
5
  "dependencies": {
6
6
  "@hapi/hapi": "^21.4.0",
@@ -16,7 +16,7 @@
16
16
  "scripts": {
17
17
  "@hapi/hapi": "^20.2.1",
18
18
  "@hapi/inert": "^6.0.5",
19
- "test": "mocha --parallel --timeout 60000 --experimental-modules",
19
+ "test": "mocha --parallel --timeout 60000",
20
20
  "deploy": "gh-pages -d docs"
21
21
  },
22
22
  "repository": {
package/scla.mjs CHANGED
@@ -79,4 +79,4 @@ function executeWithU8a() {
79
79
  executeWithU8a()
80
80
 
81
81
 
82
- //node --experimental-modules scla.mjs
82
+ //node scla.mjs
package/sclb.mjs CHANGED
@@ -80,4 +80,4 @@ function executeWithFile() {
80
80
  executeWithFile()
81
81
 
82
82
 
83
- //node --experimental-modules sclb.mjs
83
+ //node sclb.mjs
package/sclc.mjs CHANGED
@@ -59,4 +59,4 @@ function uploadLargeFile() {
59
59
  uploadLargeFile()
60
60
 
61
61
 
62
- //node --experimental-modules sclc.mjs
62
+ //node sclc.mjs
package/scld.mjs CHANGED
@@ -54,4 +54,4 @@ function downloadLargeFile() {
54
54
  downloadLargeFile()
55
55
 
56
56
 
57
- //node --experimental-modules scld.mjs
57
+ //node scld.mjs