w-dwload-reel 1.0.0

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 (51) hide show
  1. package/.editorconfig +9 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.js +55 -0
  4. package/.jsdoc +25 -0
  5. package/LICENSE +21 -0
  6. package/README.md +63 -0
  7. package/SECURITY.md +5 -0
  8. package/babel.config.js +16 -0
  9. package/dist/w-dwload-reel.umd.js +7 -0
  10. package/dist/w-dwload-reel.umd.js.map +1 -0
  11. package/docs/WDwloadReel.mjs.html +317 -0
  12. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  13. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  14. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  15. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  16. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  17. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  18. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  19. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  20. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  21. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
  22. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  23. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  24. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  25. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  26. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
  27. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  28. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  29. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  30. package/docs/global.html +520 -0
  31. package/docs/index.html +84 -0
  32. package/docs/scripts/collapse.js +39 -0
  33. package/docs/scripts/commonNav.js +28 -0
  34. package/docs/scripts/linenumber.js +25 -0
  35. package/docs/scripts/nav.js +12 -0
  36. package/docs/scripts/polyfill.js +4 -0
  37. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  38. package/docs/scripts/prettify/lang-css.js +2 -0
  39. package/docs/scripts/prettify/prettify.js +28 -0
  40. package/docs/scripts/search.js +99 -0
  41. package/docs/styles/jsdoc.css +776 -0
  42. package/docs/styles/prettify.css +80 -0
  43. package/g.mjs +42 -0
  44. package/package.json +29 -0
  45. package/script.txt +17 -0
  46. package/src/WDwloadReel.mjs +245 -0
  47. package/test/WDwloadReel.test.mjs +47 -0
  48. package/toolg/addVersion.mjs +4 -0
  49. package/toolg/cleanFolder.mjs +4 -0
  50. package/toolg/gDistRollup.mjs +26 -0
  51. package/toolg/modifyReadme.mjs +4 -0
package/.editorconfig ADDED
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ indent_style = space
6
+ indent_size = 4
7
+ end_of_line = lf
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
package/.eslintignore ADDED
@@ -0,0 +1,3 @@
1
+ /build/
2
+ /config/
3
+ /dist/
package/.eslintrc.js ADDED
@@ -0,0 +1,55 @@
1
+ module.exports = {
2
+ 'env': {
3
+ 'browser': true,
4
+ 'es6': true,
5
+ 'mocha': true
6
+ },
7
+ 'extends': ['plugin:vue/base', 'plugin:vue/essential', 'standard'],
8
+ 'plugins': [
9
+ 'vue'
10
+ ],
11
+ 'globals': {
12
+ 'Atomics': 'readonly',
13
+ 'SharedArrayBuffer': 'readonly'
14
+ },
15
+ 'parser': 'vue-eslint-parser',
16
+ 'parserOptions': {
17
+ 'parser': '@babel/eslint-parser',
18
+ 'ecmaVersion': 2019,
19
+ 'sourceType': 'module',
20
+ },
21
+ 'rules': {
22
+ 'generator-star-spacing': 'off',
23
+ 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
24
+ 'indent': ['error', 4],
25
+ 'no-console': 'off',
26
+ 'comma-dangle': ['error', {
27
+ 'arrays': 'ignore',
28
+ 'objects': 'ignore',
29
+ 'imports': 'never',
30
+ 'exports': 'never',
31
+ 'functions': 'ignore'
32
+ }],
33
+ 'no-multiple-empty-lines': ['error', { 'max': 2, 'maxEOF': 2 }],
34
+ //'space-before-function-paren': ['error', { 'anonymous': 'always', 'named': 'never' }],
35
+ 'space-before-function-paren': 'off',
36
+ 'spaced-comment': 'off',
37
+ 'brace-style': ['error', 'stroustrup'],
38
+ 'padded-blocks': 'off',
39
+ 'no-constant-condition': 'off',
40
+ 'camelcase': 'off',
41
+ 'no-new': 'off',
42
+ 'prefer-const': 'off',
43
+ 'quote-props': ['error', 'consistent'],
44
+ 'dot-notation': 'off',
45
+ 'standard/no-callback-literal': 'off',
46
+ 'quotes': ['error', 'single', { 'allowTemplateLiterals': true }],
47
+ 'prefer-promise-reject-errors': 'off',
48
+ 'no-unused-vars': ['error', { 'args': 'none', 'ignoreRestSiblings': true, 'argsIgnorePattern': '^_' }],
49
+ 'node/no-callback-literal': 'off',
50
+ 'prefer-regex-literals': 'off',
51
+ 'array-callback-return': 'off',
52
+ 'no-unreachable-loop': 'off',
53
+ 'vue/multi-word-component-names': 'off',
54
+ }
55
+ }
package/.jsdoc ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "tags": {
3
+ "allowUnknownTags": false
4
+ },
5
+ "source": {
6
+ "include": ["src/", "server/"],
7
+ "includePattern": ".+\\.(js(doc|x)?|mjs|vue)$",
8
+ "excludePattern": "(node_modules/|docs)"
9
+ },
10
+ "plugins": [
11
+ "plugins/markdown",
12
+ "node_modules/jsdoc-vuejs"
13
+ ],
14
+ "opts": {
15
+ "template": "node_modules/docdash",
16
+ "encoding": "utf8",
17
+ "destination": "docs/",
18
+ "recurse": true,
19
+ "verbose": true
20
+ },
21
+ "templates": {
22
+ "cleverLinks": false,
23
+ "monospaceLinks": false
24
+ }
25
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 semisphere(yu-da, lyu 呂昱達)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,63 @@
1
+ # w-dwload-reel
2
+ A download tool for fb reel.
3
+
4
+ ![language](https://img.shields.io/badge/language-JavaScript-orange.svg)
5
+ [![npm version](http://img.shields.io/npm/v/w-dwload-reel.svg?style=flat)](https://npmjs.org/package/w-dwload-reel)
6
+ [![license](https://img.shields.io/npm/l/w-dwload-reel.svg?style=flat)](https://npmjs.org/package/w-dwload-reel)
7
+ [![npm download](https://img.shields.io/npm/dt/w-dwload-reel.svg)](https://npmjs.org/package/w-dwload-reel)
8
+ [![npm download](https://img.shields.io/npm/dm/w-dwload-reel.svg)](https://npmjs.org/package/w-dwload-reel)
9
+ [![jsdelivr download](https://img.shields.io/jsdelivr/npm/hm/w-dwload-reel.svg)](https://www.jsdelivr.com/package/npm/w-dwload-reel)
10
+
11
+ ## Documentation
12
+ To view documentation or get support, visit [docs](https://yuda-lyu.github.io/w-dwload-reel/global.html).
13
+
14
+ ## Installation
15
+
16
+ ### Using npm(ES6 module):
17
+ ```alias
18
+ npm i w-dwload-reel
19
+ ```
20
+
21
+ #### Example:
22
+ > **Link:** [[dev source code](https://github.com/yuda-lyu/w-dwload-reel/blob/master/g.mjs)]
23
+ ```alias
24
+ import fs from 'fs'
25
+ import WDwloadReel from './src/WDwloadReel.mjs'
26
+
27
+ async function test() {
28
+
29
+ //url
30
+ let url = `https://www.facebook.com/reel/3403300299820247`
31
+
32
+ //fp
33
+ let fp = './abc.mp4'
34
+
35
+ //funProg
36
+ let funProg = (prog, nn, na) => {
37
+ console.log('prog', `${prog.toFixed(2)}%`, nn, na)
38
+ }
39
+
40
+ //WDwloadReel
41
+ await WDwloadReel(url, fp, {
42
+ clean: true, //單一程序執行時, 事先清除之前暫存檔, 減少浪費硬碟空間
43
+ funProg,
44
+ })
45
+
46
+ //len
47
+ let len = fs.statSync(fp).size
48
+ console.log('len', len)
49
+
50
+ console.log('done:', fp)
51
+ }
52
+ test()
53
+ .catch((err) => {
54
+ console.log('catch', err)
55
+ })
56
+ // prog 0.49% 1 99
57
+ // prog 5.05% 4 99
58
+ // ...
59
+ // prog 99.00% 98 99
60
+ // prog 100.00% 99 99
61
+ // len 8468825
62
+ // done: ./abc.mp4
63
+ ```
package/SECURITY.md ADDED
@@ -0,0 +1,5 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a Vulnerability
4
+
5
+ Please report security issues to `firsemisphere@gmail.com`
@@ -0,0 +1,16 @@
1
+ module.exports = {
2
+ 'presets': [
3
+ ['@babel/preset-env', {
4
+ 'useBuiltIns': 'entry',
5
+ 'corejs': 3
6
+ }]
7
+ ],
8
+ 'plugins': [
9
+ '@babel/plugin-transform-runtime',
10
+ '@babel/plugin-proposal-export-default-from',
11
+ // '@babel/plugin-syntax-import-assertions', //已被棄用
12
+ // '@babel/plugin-proposal-nullish-coalescing-operator', //browser與nodejs已支援
13
+ // '@babel/plugin-proposal-object-rest-spread', //browser與nodejs已支援
14
+ // '@babel/plugin-proposal-optional-chaining', //browser與nodejs已支援
15
+ ]
16
+ }
@@ -0,0 +1,7 @@
1
+ /*!
2
+ * w-dwload-reel v1.0.0
3
+ * (c) 2018-2021 yuda-lyu(semisphere)
4
+ * Released under the MIT License.
5
+ */
6
+ !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("fs")):"function"==typeof define&&define.amd?define(["fs"],e):(t="undefined"!=typeof globalThis?globalThis:t||self)["w-dwload-reel"]=e(t.fs)}(this,function(t){"use strict";var e=Array.isArray,r="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,i=r||n||Function("return this")(),o=i.Symbol,a=Object.prototype,u=a.hasOwnProperty,c=a.toString,s=o?o.toStringTag:void 0;var l=Object.prototype.toString;var f=o?o.toStringTag:void 0;function h(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":f&&f in Object(t)?function(t){var e=u.call(t,s),r=t[s];try{t[s]=void 0;var n=!0}catch(t){}var i=c.call(t);return n&&(e?t[s]=r:delete t[s]),i}(t):function(t){return l.call(t)}(t)}function p(t){return"symbol"==typeof t||function(t){return null!=t&&"object"==typeof t}(t)&&"[object Symbol]"==h(t)}var d=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,v=/^\w*$/;function y(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}var _,g=i["__core-js_shared__"],b=(_=/[^.]+$/.exec(g&&g.keys&&g.keys.IE_PROTO||""))?"Symbol(src)_1."+_:"";var m=Function.prototype.toString;var j=/^\[object .+?Constructor\]$/,w=Function.prototype,O=Object.prototype,S=w.toString,x=O.hasOwnProperty,A=RegExp("^"+S.call(x).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function P(t){if(!y(t)||(e=t,b&&b in e))return!1;var e,r=function(t){if(!y(t))return!1;var e=h(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}(t)?A:j;return r.test(function(t){if(null!=t){try{return m.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t))}function $(t,e){var r=function(t,e){return null==t?void 0:t[e]}(t,e);return P(r)?r:void 0}var R=$(Object,"create");var T=Object.prototype.hasOwnProperty;var z=Object.prototype.hasOwnProperty;function k(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}function F(t,e){return t===e||t!=t&&e!=e}function N(t,e){for(var r=t.length;r--;)if(F(t[r][0],e))return r;return-1}k.prototype.clear=function(){this.__data__=R?R(null):{},this.size=0},k.prototype.delete=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e},k.prototype.get=function(t){var e=this.__data__;if(R){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return T.call(e,t)?e[t]:void 0},k.prototype.has=function(t){var e=this.__data__;return R?void 0!==e[t]:z.call(e,t)},k.prototype.set=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=R&&void 0===e?"__lodash_hash_undefined__":e,this};var q=Array.prototype.splice;function C(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}C.prototype.clear=function(){this.__data__=[],this.size=0},C.prototype.delete=function(t){var e=this.__data__,r=N(e,t);return!(r<0)&&(r==e.length-1?e.pop():q.call(e,r,1),--this.size,!0)},C.prototype.get=function(t){var e=this.__data__,r=N(e,t);return r<0?void 0:e[r][1]},C.prototype.has=function(t){return N(this.__data__,t)>-1},C.prototype.set=function(t,e){var r=this.__data__,n=N(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this};var E=$(i,"Map");function B(t,e){var r,n,i=t.__data__;return("string"==(n=typeof(r=e))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?i["string"==typeof e?"string":"hash"]:i.map}function M(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}M.prototype.clear=function(){this.size=0,this.__data__={hash:new k,map:new(E||C),string:new k}},M.prototype.delete=function(t){var e=B(this,t).delete(t);return this.size-=e?1:0,e},M.prototype.get=function(t){return B(this,t).get(t)},M.prototype.has=function(t){return B(this,t).has(t)},M.prototype.set=function(t,e){var r=B(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this};function Q(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],o=r.cache;if(o.has(i))return o.get(i);var a=t.apply(this,n);return r.cache=o.set(i,a)||o,a};return r.cache=new(Q.Cache||M),r}Q.Cache=M;var W,H,I,Z=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,G=/\\(\\)?/g,V=(W=function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(Z,function(t,r,n,i){e.push(n?i.replace(G,"$1"):r||t)}),e},H=Q(W,function(t){return 500===I.size&&I.clear(),t}),I=H.cache,H),L=V;var U=o?o.prototype:void 0,X=U?U.toString:void 0;function K(t){if("string"==typeof t)return t;if(e(t))return function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r<n;)i[r]=e(t[r],r,t);return i}(t,K)+"";if(p(t))return X?X.call(t):"";var r=t+"";return"0"==r&&1/t==-1/0?"-0":r}function Y(t){return null==t?"":K(t)}function D(t,r){return e(t)?t:function(t,r){if(e(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!p(t))||v.test(t)||!d.test(t)||null!=r&&t in Object(r)}(t,r)?[t]:L(Y(t))}function J(t){if("string"==typeof t||p(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}function tt(t,e,r){var n=null==t?void 0:function(t,e){for(var r=0,n=(e=D(e,t)).length;null!=t&&r<n;)t=t[J(e[r++])];return r&&r==n?t:void 0}(t,e);return void 0===n?r:n}function et(t){return!(!function(t){return"[object String]"===Object.prototype.toString.call(t)}(t)||""===t)}var rt=/\s/;var nt=/^\s+/;function it(t){return t?t.slice(0,function(t){for(var e=t.length;e--&&rt.test(t.charAt(e)););return e}(t)+1).replace(nt,""):t}var ot=/^[-+]0x[0-9a-f]+$/i,at=/^0b[01]+$/i,ut=/^0o[0-7]+$/i,ct=parseInt;function st(t){if("number"==typeof t)return t;if(p(t))return NaN;if(y(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=y(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=it(t);var r=at.test(t);return r||ut.test(t)?ct(t.slice(2),r?2:8):ot.test(t)?NaN:+t}var lt=1/0;function ft(t){return t?(t=st(t))===lt||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ht(t){var e=ft(t),r=e%1;return e==e?r?e-r:e:0}var pt=i.isFinite,dt=Math.min;var vt=function(t){var e=Math[t];return function(t,r){if(t=st(t),(r=null==r?0:dt(ht(r),292))&&pt(t)){var n=(Y(t)+"e").split("e");return+((n=(Y(e(n[0]+"e"+(+n[1]+r)))+"e").split("e"))[0]+"e"+(+n[1]-r))}return e(t)}}("round"),yt=vt;function _t(t){let e=!1;if(et(t))e=!isNaN(Number(t));else if(function(t){return"[object Number]"===Object.prototype.toString.call(t)}(t)){if(function(t){return t!=t}(t))return!1;e=!0}return e}function gt(t){if(!_t(t))return 0;return ft(t)}function bt(t){if(!_t(t))return 0;t=gt(t);let e=yt(t);return"0"===String(e)?0:e}function mt(t){return!!_t(t)&&(t=gt(t),"number"==typeof(e=t)&&e==ht(e));var e}function jt(t){if(!mt(t))return!1;return bt(t)>=0}function wt(t,e){if(!et(t))return"";if(!jt(e))return"";if(0===(e=bt(e)))return"";let r=t.length-e;return r<0&&(r=0),t.substring(r,r+e)}function Ot(t,e){return et(t)&&jt(e)?0===(e=bt(e))?t:function(t,e){return et(t)&&jt(e)?0===(e=bt(e))?"":t.substring(0,e):""}(t,t.length-e):""}function St(t){if(!et(t))return{path:"",isRoot:!1};for(;t.indexOf("\\\\")>=0;)t=t.replace("\\\\","\\");for(;t.indexOf("//")>=0;)t=t.replace("//","/");if(":"===wt(t,1))return{path:`${t}\\`,isRoot:!0};if("\\"===wt(t,1)){let e=Ot(t,1);return":"===wt(e,1)?{path:t,isRoot:!0}:{path:e,isRoot:!1}}if("/"===wt(t,1)){let e=Ot(t,1);return 0===e.length?{path:t,isRoot:!0}:{path:e,isRoot:!1}}return{path:t,isRoot:!1}}function xt(t){if(!et(t))return"";let e=St(t);if(e.isRoot)return e.path;let r=function(t){if(!et(t))return"";let e=St(t);if(e.isRoot)return e.path;let r=e.path;try{r=r.split("\\").pop().split("/").pop()}catch(t){}return r}(t=e.path);if(!et(r))return t;let n=St(t=Ot(t,r.length));return n.isRoot,n.path}function At(t,e={}){let r=tt(e,"fs"),n=!1;try{r.statSync(t),n=!0}catch{n=!1}return n}function Pt(t,e={}){let r=tt(e,"fs");if(!At(t,{fs:r}))return!1;let n=r.lstatSync(t);return!n.isFile()&&!n.isSymbolicLink()}function $t(e){return function(t,e={}){let r=tt(e,"fs");if(Pt(t,{fs:r}))return{success:"input folder is already exists: "+t};if(At(t,{fs:r}))return{error:"input path already exists: "+t};try{r.mkdirSync(t,{recursive:!0})}catch(t){return{error:t}}return{success:"done: "+t}}(e,{fs:t})}return async function(e,r,n={}){let i=tt(n,"funProg"),o=function(t){let e=Object.prototype.toString.call(t);return"[object Function]"===e||"[object AsyncFunction]"===e}(i);if(!et(e))return Promise.reject("invalid url");if(!et(r))return Promise.reject("fp is not a string");let a,u=async t=>{let e=function(){let t,e,r=new Promise(function(){t=arguments[0],e=arguments[1]});return r.resolve=t,r.reject=e,r}();if(!et(t))return e.reject("invalid url"),e;let r=t=>JSON.parse(`{"text": "${t}"}`).text;return fetch(t,{headers:{"sec-fetch-user":"?1","sec-ch-ua-mobile":"?0","sec-fetch-site":"none","sec-fetch-dest":"document","sec-fetch-mode":"navigate","cache-control":"max-age=0",authority:"www.facebook.com","upgrade-insecure-requests":"1","accept-language":"en-GB,en;q=0.9,tr-TR;q=0.8,tr;q=0.7,en-US;q=0.6","sec-ch-ua":'"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36",accept:"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",cookie:"sb=Rn8BYQvCEb2fpMQZjsd6L382; datr=Rn8BYbyhXgw9RlOvmsosmVNT; c_user=100003164630629; _fbp=fb.1.1629876126997.444699739; wd=1920x939; spin=r.1004812505_b.trunk_t.1638730393_s.1_v.2_; xs=28%3A8ROnP0aeVF8XcQ%3A2%3A1627488145%3A-1%3A4916%3A%3AAcWIuSjPy2mlTPuZAeA2wWzHzEDuumXI89jH8a_QIV8; fr=0jQw7hcrFdas2ZeyT.AWVpRNl_4noCEs_hb8kaZahs-jA.BhrQqa.3E.AAA.0.0.BhrQqa.AWUu879ZtCw"}}).then(t=>{if(!t.ok)throw new Error(`HTTP ${t.status} ${t.statusText}`);return t.text()}).then(n=>{let i=(n=n.replace(/&quot;/g,'"').replace(/&amp;/g,"&")).match(/"browser_native_sd_url":"(.*?)"/)||n.match(/"playable_url":"(.*?)"/)||n.match(/sd_src\s*:\s*"([^"]*)"/)||n.match(/(?<="src":")[^"]*(https:\/\/[^"]*)/),o=n.match(/"browser_native_hd_url":"(.*?)"/)||n.match(/"playable_url_quality_hd":"(.*?)"/)||n.match(/hd_src\s*:\s*"([^"]*)"/),a=n.match(/<meta\sname="description"\scontent="(.*?)"/),u=n.match(/"preferred_thumbnail":{"image":{"uri":"(.*?)"/),c=n.match(/"playable_duration_in_ms":[0-9]+/gm);if(i&&i[1]){let s={url:t,duration_ms:bt(c[0].split(":")[1]),sd:r(i[1]),hd:o&&o[1]?r(o[1]):"",title:a&&a[1]?r(a[1]):n.match(/<title>(.*?)<\/title>/)?.[1]??"",thumbnail:u&&u[1]?r(u[1]):""};e.resolve(s)}else e.reject("no video url found in page")}).catch(t=>{e.reject(t)}),e};try{a=await u(e)}catch(t){return Promise.reject(t)}if(!a.hd&&!a.sd)return Promise.reject("can not get hd/sd mp4 url (reel may be private/deleted/FB changed)");let c,s=a.hd||a.sd;try{c=await fetch(s)}catch(t){return Promise.reject(`fetch mp4 fail: ${t.message}`)}if(!c.ok)return Promise.reject(`HTTP ${c.status} ${c.statusText}`);let l=bt(c.headers.get("content-length")),f=c.body.getReader(),h=[],p=0,d=-1;for(;;){let{done:t,value:e}=await f.read();if(t)break;if(h.push(e),p+=e.length,o&&l>0){let t=p/l*100,e=Math.floor(t);e>d&&(d=e,i(t,p,l))}}let v=Buffer.concat(h);if(!(t=>{if(t.length<12)return!1;if("ftyp"!==t.slice(4,8).toString("ascii"))return!1;let e=t.slice(8,12).toString("ascii");return["isom","mp41","mp42","avc1","iso2","iso5","iso6","mp4v"].includes(e)})(v))return Promise.reject(`downloaded but not valid mp4 (first 16 bytes: ${v.slice(0,16).toString("hex")})`);let y=xt(r);if(et(y)&&!Pt(y,{fs:t})&&$t(y),t.writeFileSync(r,v),o){let t=l||v.length;i(100,t,t)}return"ok"}});
7
+ //# sourceMappingURL=w-dwload-reel.umd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"w-dwload-reel.umd.js","sources":["../node_modules/lodash-es/isArray.js","../node_modules/lodash-es/_freeGlobal.js","../node_modules/lodash-es/_root.js","../node_modules/lodash-es/_Symbol.js","../node_modules/lodash-es/_getRawTag.js","../node_modules/lodash-es/_objectToString.js","../node_modules/lodash-es/_baseGetTag.js","../node_modules/lodash-es/isSymbol.js","../node_modules/lodash-es/isObjectLike.js","../node_modules/lodash-es/_isKey.js","../node_modules/lodash-es/isObject.js","../node_modules/lodash-es/_coreJsData.js","../node_modules/lodash-es/_isMasked.js","../node_modules/lodash-es/_toSource.js","../node_modules/lodash-es/_baseIsNative.js","../node_modules/lodash-es/isFunction.js","../node_modules/lodash-es/_getNative.js","../node_modules/lodash-es/_getValue.js","../node_modules/lodash-es/_nativeCreate.js","../node_modules/lodash-es/_hashGet.js","../node_modules/lodash-es/_hashHas.js","../node_modules/lodash-es/_Hash.js","../node_modules/lodash-es/eq.js","../node_modules/lodash-es/_assocIndexOf.js","../node_modules/lodash-es/_hashClear.js","../node_modules/lodash-es/_hashDelete.js","../node_modules/lodash-es/_hashSet.js","../node_modules/lodash-es/_listCacheDelete.js","../node_modules/lodash-es/_ListCache.js","../node_modules/lodash-es/_listCacheClear.js","../node_modules/lodash-es/_listCacheGet.js","../node_modules/lodash-es/_listCacheHas.js","../node_modules/lodash-es/_listCacheSet.js","../node_modules/lodash-es/_Map.js","../node_modules/lodash-es/_getMapData.js","../node_modules/lodash-es/_isKeyable.js","../node_modules/lodash-es/_MapCache.js","../node_modules/lodash-es/_mapCacheClear.js","../node_modules/lodash-es/_mapCacheDelete.js","../node_modules/lodash-es/_mapCacheGet.js","../node_modules/lodash-es/_mapCacheHas.js","../node_modules/lodash-es/_mapCacheSet.js","../node_modules/lodash-es/memoize.js","../node_modules/lodash-es/_stringToPath.js","../node_modules/lodash-es/_memoizeCapped.js","../node_modules/lodash-es/_baseToString.js","../node_modules/lodash-es/_arrayMap.js","../node_modules/lodash-es/toString.js","../node_modules/lodash-es/_castPath.js","../node_modules/lodash-es/_toKey.js","../node_modules/lodash-es/get.js","../node_modules/lodash-es/_baseGet.js","../node_modules/wsemi/src/isestr.mjs","../node_modules/wsemi/src/isstr.mjs","../node_modules/lodash-es/_trimmedEndIndex.js","../node_modules/lodash-es/_baseTrim.js","../node_modules/lodash-es/toNumber.js","../node_modules/lodash-es/toFinite.js","../node_modules/lodash-es/toInteger.js","../node_modules/lodash-es/_createRound.js","../node_modules/lodash-es/round.js","../node_modules/wsemi/src/isnum.mjs","../node_modules/wsemi/src/isnbr.mjs","../node_modules/wsemi/src/isnan.mjs","../node_modules/wsemi/src/cdbl.mjs","../node_modules/wsemi/src/cint.mjs","../node_modules/wsemi/src/isint.mjs","../node_modules/lodash-es/isInteger.js","../node_modules/wsemi/src/isp0int.mjs","../node_modules/wsemi/src/strright.mjs","../node_modules/wsemi/src/strdelright.mjs","../node_modules/wsemi/src/strleft.mjs","../node_modules/wsemi/src/getClearPathName.mjs","../node_modules/wsemi/src/getPathParent.mjs","../node_modules/wsemi/src/getFileName.mjs","../node_modules/wsemi/src/fsExistsCore.mjs","../node_modules/wsemi/src/fsIsFolderCore.mjs","../node_modules/wsemi/src/fsCreateFolder.mjs","../node_modules/wsemi/src/fsCreateFolderCore.mjs","../src/WDwloadReel.mjs","../node_modules/wsemi/src/isfun.mjs","../node_modules/wsemi/src/genPm.mjs","../node_modules/wsemi/src/fsIsFolder.mjs"],"sourcesContent":null,"names":["isArray$1","Array","isArray","freeGlobal$1","global","Object","freeSelf","self","root$1","freeGlobal","Function","Symbol$1","root","Symbol","objectProto","prototype","hasOwnProperty","nativeObjectToString","toString","symToStringTag","toStringTag","undefined","baseGetTag","value","isOwn","call","tag","unmasked","e","result","getRawTag","objectToString","isSymbol","isObjectLike","reIsDeepProp","reIsPlainProp","isObject","type","uid","coreJsData$1","maskSrcKey","exec","coreJsData","keys","IE_PROTO","funcToString","reIsHostCtor","funcProto","reIsNative","RegExp","replace","baseIsNative","func","pattern","isFunction","test","toSource","getNative","object","key","getValue","nativeCreate$1","Hash","entries","index","length","this","clear","entry","set","eq","other","assocIndexOf","array","__data__","nativeCreate","size","has","get","data","splice","ListCache","pop","push","Map$1","getMapData","map","MapCache","hash","Map","string","memoize","resolver","TypeError","memoized","args","arguments","apply","cache","Cache","rePropName","reEscapeChar","stringToPath","charCodeAt","match","number","quote","subString","stringToPath$1","symbolProto","symbolToString","baseToString","iteratee","arrayMap","castPath","isKey","toKey","path","defaultValue","baseGet","isestr","v","isstr","reWhitespace","reTrimStart","baseTrim","slice","charAt","trimmedEndIndex","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber","valueOf","isBinary","INFINITY","toFinite","toInteger","remainder","nativeIsFinite","isFinite","nativeMin","Math","min","round","methodName","precision","pair","split","createRound","round$1","isnum","b","isNaN","Number","isnbr","isnan","cdbl","cint","r","String","isint","isp0int","strright","c","n","i","substring","strdelright","strleft","getClearPathName","str","isRoot","indexOf","getPathParent","o","name","err","getFileName","p","fsExistsCore","pah","opt","fs","statSync","fsIsFolderCore","s","lstatSync","isFile","isSymbolicLink","fsCreateFolder","success","error","mkdirSync","recursive","fsCreateFolderCore","async","url","fp","funProg","bFunProg","isfun","Promise","reject","info","getRealData","pm","resolve","genPm","parseString","JSON","parse","text","fetch","headers","authority","accept","cookie","then","res","ok","Error","status","statusText","sdMatch","hdMatch","titleMatch","thumbMatch","duration","duration_ms","sd","hd","title","thumbnail","catch","target","message","total","reader","body","getReader","chunks","received","progPre","done","read","prog","progInt","floor","buf","Buffer","concat","brand","includes","isMp4","dir","writeFileSync","na"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,80,81,82]}
@@ -0,0 +1,317 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+
5
+ <meta charset="utf-8">
6
+ <title>WDwloadReel.mjs - Documentation</title>
7
+
8
+
9
+ <script src="scripts/prettify/prettify.js"></script>
10
+ <script src="scripts/prettify/lang-css.js"></script>
11
+ <!--[if lt IE 9]>
12
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13
+ <![endif]-->
14
+ <link type="text/css" rel="stylesheet" href="styles/prettify.css">
15
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
16
+ <script src="scripts/nav.js" defer></script>
17
+
18
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
19
+ </head>
20
+ <body>
21
+
22
+ <input type="checkbox" id="nav-trigger" class="nav-trigger" />
23
+ <label for="nav-trigger" class="navicon-button x">
24
+ <div class="navicon"></div>
25
+ </label>
26
+
27
+ <label for="nav-trigger" class="overlay"></label>
28
+
29
+ <nav >
30
+
31
+
32
+ <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#WDwloadReel">WDwloadReel</a></li></ul>
33
+
34
+ </nav>
35
+
36
+ <div id="main">
37
+
38
+ <h1 class="page-title">WDwloadReel.mjs</h1>
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+ <section>
47
+ <article>
48
+ <pre class="prettyprint source linenums"><code>import fs from 'fs'
49
+ import get from 'lodash-es/get.js'
50
+ import genPm from 'wsemi/src/genPm.mjs'
51
+ import isestr from 'wsemi/src/isestr.mjs'
52
+ import isfun from 'wsemi/src/isfun.mjs'
53
+ import cint from 'wsemi/src/cint.mjs'
54
+ import getPathParent from 'wsemi/src/getPathParent.mjs'
55
+ import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
56
+ import fsCreateFolder from 'wsemi/src/fsCreateFolder.mjs'
57
+
58
+
59
+ /**
60
+ * 下載Facebook Reel為mp4檔案至本機指定位置
61
+ *
62
+ * @param {String} url 輸入Facebook Reel網址字串(facebook.com / fb.watch)
63
+ * @param {String} fp 輸入儲存video(*.mp4)檔案路徑字串
64
+ * @param {Object} [opt={}] 輸入設定物件,預設{}
65
+ * @param {Function} [opt.funProg=null] 輸入回傳進度函數,傳入參數為prog代表進度百分比(0~100)、nn代表當前已下載bytes、na代表全部須下載bytes,預設null
66
+ * @returns {Promise} 回傳Promise,resolve回傳'ok',reject回傳錯誤訊息
67
+ * @example
68
+ * import fs from 'fs'
69
+ * import WDwloadReel from './src/WDwloadReel.mjs'
70
+ *
71
+ * async function test() {
72
+ *
73
+ * //url
74
+ * let url = 'https://www.facebook.com/reel/XXXXXXXXXX'
75
+ *
76
+ * //fp
77
+ * let fp = './abc.mp4'
78
+ *
79
+ * //funProg
80
+ * let funProg = (prog, nn, na) => {
81
+ * console.log('prog', `${prog.toFixed(2)}%`, nn, na)
82
+ * }
83
+ *
84
+ * //WDwloadReel
85
+ * await WDwloadReel(url, fp, {
86
+ * funProg,
87
+ * })
88
+ *
89
+ * //len
90
+ * let len = fs.statSync(fp).size
91
+ * console.log('len', len)
92
+ *
93
+ * console.log('done:', fp)
94
+ * }
95
+ * test()
96
+ * .catch((err) => {
97
+ * console.log('catch', err)
98
+ * })
99
+ * // prog 1.00% 23456 2345678
100
+ * // prog 2.00% 46912 2345678
101
+ * // ...
102
+ * // prog 99.00% 2322221 2345678
103
+ * // prog 100.00% 2345678 2345678
104
+ * // len 2345678
105
+ * // done: ./abc.mp4
106
+ *
107
+ */
108
+ async function WDwloadReel(url, fp, opt = {}) {
109
+
110
+ //funProg
111
+ let funProg = get(opt, 'funProg')
112
+ let bFunProg = isfun(funProg)
113
+
114
+ //check
115
+ if (!isestr(url)) {
116
+ return Promise.reject('invalid url')
117
+ }
118
+ if (!isestr(fp)) {
119
+ return Promise.reject('fp is not a string')
120
+ }
121
+
122
+ let isMp4 = (buf) => {
123
+ //mp4 magic: bytes 4..7 = 'ftyp' (ISO base media file type box), 再驗 bytes 8..11 為常見 mp4 brand, 排除 JPEG2000 等其他 ftyp 容器格式
124
+ if (buf.length &lt; 12) {
125
+ return false
126
+ }
127
+ if (buf.slice(4, 8).toString('ascii') !== 'ftyp') {
128
+ return false
129
+ }
130
+ let brand = buf.slice(8, 12).toString('ascii')
131
+ return ['isom', 'mp41', 'mp42', 'avc1', 'iso2', 'iso5', 'iso6', 'mp4v'].includes(brand)
132
+ }
133
+
134
+ let getRealData = async (url) => {
135
+
136
+ //pm
137
+ let pm = genPm()
138
+
139
+ //check
140
+ if (!isestr(url)) {
141
+ pm.reject('invalid url')
142
+ return pm
143
+ }
144
+
145
+ //parseString
146
+ let parseString = (string) => {
147
+ return JSON.parse(`{"text": "${string}"}`).text
148
+ }
149
+
150
+ //fetch, 參數與解析機制來源: https://github.com/victorsouzaleal/fb-downloader-scrapper/blob/main/src/facebook.ts
151
+ let headers = {
152
+ 'sec-fetch-user': '?1',
153
+ 'sec-ch-ua-mobile': '?0',
154
+ 'sec-fetch-site': 'none',
155
+ 'sec-fetch-dest': 'document',
156
+ 'sec-fetch-mode': 'navigate',
157
+ 'cache-control': 'max-age=0',
158
+ 'authority': 'www.facebook.com',
159
+ 'upgrade-insecure-requests': '1',
160
+ 'accept-language': 'en-GB,en;q=0.9,tr-TR;q=0.8,tr;q=0.7,en-US;q=0.6',
161
+ 'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
162
+ 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36',
163
+ 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
164
+ 'cookie': 'sb=Rn8BYQvCEb2fpMQZjsd6L382; datr=Rn8BYbyhXgw9RlOvmsosmVNT; c_user=100003164630629; _fbp=fb.1.1629876126997.444699739; wd=1920x939; spin=r.1004812505_b.trunk_t.1638730393_s.1_v.2_; xs=28%3A8ROnP0aeVF8XcQ%3A2%3A1627488145%3A-1%3A4916%3A%3AAcWIuSjPy2mlTPuZAeA2wWzHzEDuumXI89jH8a_QIV8; fr=0jQw7hcrFdas2ZeyT.AWVpRNl_4noCEs_hb8kaZahs-jA.BhrQqa.3E.AAA.0.0.BhrQqa.AWUu879ZtCw',
165
+ }
166
+ fetch(url, { headers })
167
+ .then((res) => {
168
+
169
+ //check
170
+ if (!res.ok) throw new Error(`HTTP ${res.status} ${res.statusText}`)
171
+
172
+ return res.text()
173
+ })
174
+ .then((data) => {
175
+
176
+ data = data.replace(/&amp;quot;/g, '"').replace(/&amp;amp;/g, '&amp;')
177
+ let sdMatch = data.match(/"browser_native_sd_url":"(.*?)"/) || data.match(/"playable_url":"(.*?)"/) || data.match(/sd_src\s*:\s*"([^"]*)"/) || data.match(/(?&lt;="src":")[^"]*(https:\/\/[^"]*)/)
178
+ let hdMatch = data.match(/"browser_native_hd_url":"(.*?)"/) || data.match(/"playable_url_quality_hd":"(.*?)"/) || data.match(/hd_src\s*:\s*"([^"]*)"/)
179
+ let titleMatch = data.match(/&lt;meta\sname="description"\scontent="(.*?)"/)
180
+ let thumbMatch = data.match(/"preferred_thumbnail":{"image":{"uri":"(.*?)"/)
181
+ let duration = data.match(/"playable_duration_in_ms":[0-9]+/gm)
182
+
183
+ //check
184
+ if (sdMatch &amp;&amp; sdMatch[1]) {
185
+ let result = {
186
+ url,
187
+ duration_ms: cint(duration[0].split(':')[1]),
188
+ sd: parseString(sdMatch[1]),
189
+ hd: hdMatch &amp;&amp; hdMatch[1] ? parseString(hdMatch[1]) : '',
190
+ title: titleMatch &amp;&amp; titleMatch[1] ? parseString(titleMatch[1]) : data.match(/&lt;title>(.*?)&lt;\/title>/)?.[1] ?? '',
191
+ thumbnail: thumbMatch &amp;&amp; thumbMatch[1] ? parseString(thumbMatch[1]) : '',
192
+ }
193
+ pm.resolve(result)
194
+ }
195
+ else {
196
+ pm.reject('no video url found in page')
197
+ }
198
+
199
+ })
200
+ .catch((err) => {
201
+ pm.reject(err)
202
+ })
203
+
204
+ return pm
205
+ }
206
+
207
+ //getRealData, 解析FB頁面取得mp4直連
208
+ let info
209
+ try {
210
+ info = await getRealData(url)
211
+ }
212
+ catch (err) {
213
+ return Promise.reject(err)
214
+ }
215
+
216
+ //check, 須有hd或sd其中之一
217
+ if (!info.hd &amp;&amp; !info.sd) {
218
+ return Promise.reject('can not get hd/sd mp4 url (reel may be private/deleted/FB changed)')
219
+ }
220
+
221
+ //target, 優先hd
222
+ let target = info.hd || info.sd
223
+
224
+ //fetch
225
+ let res
226
+ try {
227
+ res = await fetch(target)
228
+ }
229
+ catch (err) {
230
+ return Promise.reject(`fetch mp4 fail: ${err.message}`)
231
+ }
232
+
233
+ //check
234
+ if (!res.ok) {
235
+ return Promise.reject(`HTTP ${res.status} ${res.statusText}`)
236
+ }
237
+
238
+ //total, Content-Length未必提供, 取不到視為0(中段不觸發funProg, 最後仍補100%)
239
+ let total = cint(res.headers.get('content-length'))
240
+
241
+ //讀取串流並計算進度
242
+ let reader = res.body.getReader()
243
+ let chunks = []
244
+ let received = 0
245
+ let progPre = -1
246
+ while (true) {
247
+ let { done, value } = await reader.read()
248
+ if (done) {
249
+ break
250
+ }
251
+ chunks.push(value)
252
+ received += value.length
253
+
254
+ //funProg, 整數百分比變動才觸發避免高頻
255
+ if (bFunProg &amp;&amp; total > 0) {
256
+ let prog = (received / total) * 100
257
+ let progInt = Math.floor(prog)
258
+ if (progInt > progPre) {
259
+ progPre = progInt
260
+ funProg(prog, received, total)
261
+ }
262
+ }
263
+ }
264
+
265
+ //buf
266
+ let buf = Buffer.concat(chunks)
267
+
268
+ //check mp4 magic, 避免HTML錯誤頁面或非mp4回應被當mp4寫入
269
+ if (!isMp4(buf)) {
270
+ return Promise.reject(`downloaded but not valid mp4 (first 16 bytes: ${buf.slice(0, 16).toString('hex')})`)
271
+ }
272
+
273
+ //mkdir, 上層目錄不存在時自動建立
274
+ let dir = getPathParent(fp)
275
+ if (isestr(dir) &amp;&amp; !fsIsFolder(dir)) {
276
+ fsCreateFolder(dir)
277
+ }
278
+
279
+ //write
280
+ fs.writeFileSync(fp, buf)
281
+
282
+ //funProg, 最終補100%(涵蓋無Content-Length時中段未觸發的情況)
283
+ if (bFunProg) {
284
+ let na = total || buf.length
285
+ funProg(100, na, na)
286
+ }
287
+
288
+ return 'ok'
289
+ }
290
+
291
+
292
+ export default WDwloadReel
293
+ </code></pre>
294
+ </article>
295
+ </section>
296
+
297
+
298
+
299
+
300
+
301
+
302
+ </div>
303
+
304
+ <br class="clear">
305
+
306
+ <footer>
307
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue May 26 2026 20:57:38 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
308
+ </footer>
309
+
310
+ <script>prettyPrint();</script>
311
+ <script src="scripts/polyfill.js"></script>
312
+ <script src="scripts/linenumber.js"></script>
313
+
314
+
315
+
316
+ </body>
317
+ </html>