Repository: incubator-weex-site
Updated Branches:
  refs/heads/master fb1e00223 -> ff1c81fc3


add url validator to test whether a url is available


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex-site/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-weex-site/commit/3cefc511
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex-site/tree/3cefc511
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex-site/diff/3cefc511

Branch: refs/heads/master
Commit: 3cefc511fc25990b1fb210ad1bd2aa0aeb94880f
Parents: fb1e002
Author: Zhenfei You <[email protected]>
Authored: Wed Mar 21 11:26:34 2018 +0800
Committer: Zhenfei You <[email protected]>
Committed: Wed Mar 21 11:53:24 2018 +0800

----------------------------------------------------------------------
 package-lock.json     | 551 ++++++++++++++++++++++++++++++++++++++++++---
 package.json          |   9 +-
 test/url-validator.js |  44 ++++
 3 files changed, 577 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex-site/blob/3cefc511/package-lock.json
----------------------------------------------------------------------
diff --git a/package-lock.json b/package-lock.json
index d6c6afa..7ff0f25 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,6 +18,12 @@
         "through": "2.3.8"
       }
     },
+    "abab": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/abab/-/abab-1.0.4.tgz";,
+      "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=",
+      "optional": true
+    },
     "abbrev": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz";,
@@ -32,6 +38,20 @@
         "negotiator": "0.6.1"
       }
     },
+    "acorn": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz";,
+      "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc="
+    },
+    "acorn-globals": {
+      "version": "1.0.9",
+      "resolved": 
"https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz";,
+      "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
+      "optional": true,
+      "requires": {
+        "acorn": "2.7.0"
+      }
+    },
     "after": {
       "version": "0.8.2",
       "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz";,
@@ -67,9 +87,13 @@
       "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
     },
     "ansi-styles": {
-      "version": "2.2.1",
-      "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
-      "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+      "version": "3.2.1",
+      "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz";,
+      "integrity": 
"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
+      "requires": {
+        "color-convert": "1.9.1"
+      }
     },
     "ansi-wrap": {
       "version": "0.1.0",
@@ -235,6 +259,30 @@
         "chalk": "1.1.3",
         "esutils": "2.0.2",
         "js-tokens": "3.0.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";,
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";,
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
       }
     },
     "babel-eslint": {
@@ -567,15 +615,14 @@
       "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
     },
     "chalk": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";,
-      "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz";,
+      "integrity": 
"sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==",
+      "dev": true,
       "requires": {
-        "ansi-styles": "2.2.1",
+        "ansi-styles": "3.2.1",
         "escape-string-regexp": "1.0.5",
-        "has-ansi": "2.0.0",
-        "strip-ansi": "3.0.1",
-        "supports-color": "2.0.0"
+        "supports-color": "5.3.0"
       }
     },
     "change-case": {
@@ -647,17 +694,26 @@
         "define-property": {
           "version": "0.2.5",
           "resolved": 
"https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz";,
-          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY="
+          "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+          "requires": {
+            "is-descriptor": "0.1.6"
+          }
         },
         "is-accessor-descriptor": {
           "version": "0.1.6",
           "resolved": 
"https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz";,
           "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+          "requires": {
+            "kind-of": "3.2.2"
+          },
           "dependencies": {
             "kind-of": {
               "version": "3.2.2",
               "resolved": 
"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz";,
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ="
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "1.1.6"
+              }
             }
           }
         },
@@ -665,18 +721,29 @@
           "version": "0.1.4",
           "resolved": 
"https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz";,
           "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+          "requires": {
+            "kind-of": "3.2.2"
+          },
           "dependencies": {
             "kind-of": {
               "version": "3.2.2",
               "resolved": 
"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz";,
-              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ="
+              "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+              "requires": {
+                "is-buffer": "1.1.6"
+              }
             }
           }
         },
         "is-descriptor": {
           "version": "0.1.6",
           "resolved": 
"https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz";,
-          "integrity": 
"sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg=="
+          "integrity": 
"sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+          "requires": {
+            "is-accessor-descriptor": "0.1.6",
+            "is-data-descriptor": "0.1.4",
+            "kind-of": "5.1.0"
+          }
         },
         "isobject": {
           "version": "3.0.1",
@@ -745,6 +812,11 @@
         "delayed-stream": "1.0.0"
       }
     },
+    "command-exists": {
+      "version": "1.2.2",
+      "resolved": 
"https://registry.npmjs.org/command-exists/-/command-exists-1.2.2.tgz";,
+      "integrity": "sha1-EoGcZPr5VEbsCuB/5sr7brNwiyI="
+    },
     "commander": {
       "version": "2.12.2",
       "resolved": 
"https://registry.npmjs.org/commander/-/commander-2.12.2.tgz";,
@@ -1044,6 +1116,20 @@
       "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz";,
       "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0="
     },
+    "cssom": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.2.tgz";,
+      "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs="
+    },
+    "cssstyle": {
+      "version": "0.2.37",
+      "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.2.37.tgz";,
+      "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
+      "optional": true,
+      "requires": {
+        "cssom": "0.3.2"
+      }
+    },
     "cuid": {
       "version": "1.3.8",
       "resolved": "https://registry.npmjs.org/cuid/-/cuid-1.3.8.tgz";,
@@ -1096,6 +1182,12 @@
         "is-obj": "1.0.1"
       }
     },
+    "deep-is": {
+      "version": "0.1.3",
+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz";,
+      "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+      "optional": true
+    },
     "define-property": {
       "version": "1.0.0",
       "resolved": 
"https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz";,
@@ -1292,6 +1384,39 @@
       "resolved": 
"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz";,
       "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
     },
+    "escodegen": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz";,
+      "integrity": 
"sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==",
+      "optional": true,
+      "requires": {
+        "esprima": "3.1.3",
+        "estraverse": "4.2.0",
+        "esutils": "2.0.2",
+        "optionator": "0.8.2",
+        "source-map": "0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": 
"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz";,
+          "integrity": 
"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "optional": true
+        }
+      }
+    },
+    "esprima": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz";,
+      "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
+      "optional": true
+    },
+    "estraverse": {
+      "version": "4.2.0",
+      "resolved": 
"https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz";,
+      "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+      "optional": true
+    },
     "esutils": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz";,
@@ -1393,6 +1518,12 @@
       "resolved": 
"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz";,
       "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
     },
+    "fast-levenshtein": {
+      "version": "2.0.6",
+      "resolved": 
"https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz";,
+      "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+      "optional": true
+    },
     "filename-regex": {
       "version": "2.0.1",
       "resolved": 
"https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz";,
@@ -2559,10 +2690,12 @@
       }
     },
     "glob": {
-      "version": "6.0.4",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz";,
-      "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+      "version": "7.1.2",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz";,
+      "integrity": 
"sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+      "dev": true,
       "requires": {
+        "fs.realpath": "1.0.0",
         "inflight": "1.0.6",
         "inherits": "2.0.3",
         "minimatch": "3.0.4",
@@ -2808,25 +2941,72 @@
         "warehouse": "2.2.0"
       },
       "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";,
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
         "cheerio": {
           "version": "0.20.0",
           "resolved": 
"https://registry.npmjs.org/cheerio/-/cheerio-0.20.0.tgz";,
-          "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU="
+          "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=",
+          "requires": {
+            "css-select": "1.2.0",
+            "dom-serializer": "0.1.0",
+            "entities": "1.1.1",
+            "htmlparser2": "3.8.3",
+            "jsdom": "7.2.2",
+            "lodash": "4.17.4"
+          }
         },
         "domhandler": {
           "version": "2.3.0",
           "resolved": 
"https://registry.npmjs.org/domhandler/-/domhandler-2.3.0.tgz";,
-          "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg="
+          "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+          "requires": {
+            "domelementtype": "1.3.0"
+          }
         },
         "hexo-cli": {
           "version": "1.0.4",
           "resolved": 
"https://registry.npmjs.org/hexo-cli/-/hexo-cli-1.0.4.tgz";,
-          "integrity": 
"sha512-X4YxBfuwRjCFF2fCAdmuLo/5IKruZCYc/kRaiVfPsTYFvvaBvsBTZBDhB8t4MOQv3QqoYMld9bGRLnd9NiEsFg=="
+          "integrity": 
"sha512-X4YxBfuwRjCFF2fCAdmuLo/5IKruZCYc/kRaiVfPsTYFvvaBvsBTZBDhB8t4MOQv3QqoYMld9bGRLnd9NiEsFg==",
+          "requires": {
+            "abbrev": "1.1.1",
+            "bluebird": "3.5.1",
+            "chalk": "1.1.3",
+            "command-exists": "1.2.2",
+            "hexo-fs": "0.2.2",
+            "hexo-log": "0.2.0",
+            "hexo-util": "0.6.3",
+            "minimist": "1.2.0",
+            "object-assign": "4.1.1",
+            "tildify": "1.2.0"
+          }
         },
         "htmlparser2": {
           "version": "3.8.3",
           "resolved": 
"https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.3.tgz";,
           "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
+          "requires": {
+            "domelementtype": "1.3.0",
+            "domhandler": "2.3.0",
+            "domutils": "1.5.1",
+            "entities": "1.0.0",
+            "readable-stream": "1.1.14"
+          },
           "dependencies": {
             "entities": {
               "version": "1.0.0",
@@ -2843,12 +3023,23 @@
         "readable-stream": {
           "version": "1.1.14",
           "resolved": 
"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz";,
-          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk="
+          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+          "requires": {
+            "core-util-is": "1.0.2",
+            "inherits": "2.0.3",
+            "isarray": "0.0.1",
+            "string_decoder": "0.10.31"
+          }
         },
         "string_decoder": {
           "version": "0.10.31",
           "resolved": 
"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz";,
           "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";,
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
         }
       }
     },
@@ -2909,6 +3100,30 @@
         "hexo-util": "0.6.3",
         "moment": "2.20.1",
         "swig": "1.4.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";,
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";,
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
       }
     },
     "hexo-front-matter": {
@@ -2930,6 +3145,11 @@
         "graceful-fs": "4.1.11"
       }
     },
+    "hexo-generator-alias": {
+      "version": "0.1.3",
+      "resolved": 
"https://registry.npmjs.org/hexo-generator-alias/-/hexo-generator-alias-0.1.3.tgz";,
+      "integrity": "sha1-7hNb05/i7aPsZh84LVxEpqjj5kc="
+    },
     "hexo-generator-archive": {
       "version": "0.1.5",
       "resolved": 
"https://registry.npmjs.org/hexo-generator-archive/-/hexo-generator-archive-0.1.5.tgz";,
@@ -3025,6 +3245,30 @@
       "requires": {
         "chalk": "1.1.3",
         "hexo-bunyan": "1.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";,
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";,
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
       }
     },
     "hexo-pagination": {
@@ -3094,6 +3338,30 @@
         "object-assign": "4.1.1",
         "opn": "4.0.2",
         "serve-static": "1.13.1"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";,
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";,
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
       }
     },
     "hexo-toc": {
@@ -3638,6 +3906,37 @@
       "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
       "optional": true
     },
+    "jsdom": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-7.2.2.tgz";,
+      "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=",
+      "optional": true,
+      "requires": {
+        "abab": "1.0.4",
+        "acorn": "2.7.0",
+        "acorn-globals": "1.0.9",
+        "cssom": "0.3.2",
+        "cssstyle": "0.2.37",
+        "escodegen": "1.9.1",
+        "nwmatcher": "1.4.4",
+        "parse5": "1.5.1",
+        "request": "2.83.0",
+        "sax": "1.2.4",
+        "symbol-tree": "3.2.2",
+        "tough-cookie": "2.3.3",
+        "webidl-conversions": "2.0.1",
+        "whatwg-url-compat": "0.6.5",
+        "xml-name-validator": "2.0.1"
+      },
+      "dependencies": {
+        "parse5": {
+          "version": "1.5.1",
+          "resolved": "https://registry.npmjs.org/parse5/-/parse5-1.5.1.tgz";,
+          "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+          "optional": true
+        }
+      }
+    },
     "json-schema": {
       "version": "0.2.3",
       "resolved": 
"https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz";,
@@ -3715,6 +4014,16 @@
         "invert-kv": "1.0.0"
       }
     },
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz";,
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+      "optional": true,
+      "requires": {
+        "prelude-ls": "1.1.2",
+        "type-check": "0.3.2"
+      }
+    },
     "limiter": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.2.tgz";,
@@ -3981,7 +4290,10 @@
         "is-extendable": {
           "version": "1.0.1",
           "resolved": 
"https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz";,
-          "integrity": 
"sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA=="
+          "integrity": 
"sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+          "requires": {
+            "is-plain-object": "2.0.4"
+          }
         }
       }
     },
@@ -4108,6 +4420,12 @@
         "lower-case": "1.1.4"
       }
     },
+    "node-fetch": {
+      "version": "2.1.1",
+      "resolved": 
"https://registry.npmjs.org/node-fetch/-/node-fetch-2.1.1.tgz";,
+      "integrity": "sha1-NpynC4L1DIZJYQSmx3bSdPTkotQ=",
+      "dev": true
+    },
     "node-fingerprint": {
       "version": "0.0.2",
       "resolved": 
"https://registry.npmjs.org/node-fingerprint/-/node-fingerprint-0.0.2.tgz";,
@@ -4179,6 +4497,11 @@
         "true-case-path": "1.0.2"
       },
       "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
         "assert-plus": {
           "version": "0.2.0",
           "resolved": 
"https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz";,
@@ -4202,6 +4525,18 @@
           "resolved": 
"https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz";,
           "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c="
         },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";,
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
         "cross-spawn": {
           "version": "3.0.1",
           "resolved": 
"https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz";,
@@ -4319,6 +4654,11 @@
             "hoek": "2.16.3"
           }
         },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";,
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        },
         "tunnel-agent": {
           "version": "0.4.3",
           "resolved": 
"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz";,
@@ -4343,7 +4683,15 @@
         "glob": {
           "version": "7.1.2",
           "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz";,
-          "integrity": 
"sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ=="
+          "integrity": 
"sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+          "requires": {
+            "fs.realpath": "1.0.0",
+            "inflight": "1.0.6",
+            "inherits": "2.0.3",
+            "minimatch": "3.0.4",
+            "once": "1.4.0",
+            "path-is-absolute": "1.0.1"
+          }
         }
       }
     },
@@ -4421,6 +4769,12 @@
         "yargs": "3.32.0"
       }
     },
+    "nwmatcher": {
+      "version": "1.4.4",
+      "resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.4.4.tgz";,
+      "integrity": 
"sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==",
+      "optional": true
+    },
     "oauth-sign": {
       "version": "0.8.2",
       "resolved": 
"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz";,
@@ -4594,6 +4948,20 @@
         }
       }
     },
+    "optionator": {
+      "version": "0.8.2",
+      "resolved": 
"https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz";,
+      "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+      "optional": true,
+      "requires": {
+        "deep-is": "0.1.3",
+        "fast-levenshtein": "2.0.6",
+        "levn": "0.3.0",
+        "prelude-ls": "1.1.2",
+        "type-check": "0.3.2",
+        "wordwrap": "1.0.0"
+      }
+    },
     "os-homedir": {
       "version": "1.0.2",
       "resolved": 
"https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz";,
@@ -4891,6 +5259,11 @@
       "resolved": 
"https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz";,
       "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU="
     },
+    "prelude-ls": {
+      "version": "1.1.2",
+      "resolved": 
"https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz";,
+      "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+    },
     "preserve": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz";,
@@ -5171,6 +5544,20 @@
       "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=",
       "requires": {
         "glob": "6.0.4"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "6.0.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz";,
+          "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+          "requires": {
+            "inflight": "1.0.6",
+            "inherits": "2.0.3",
+            "minimatch": "3.0.4",
+            "once": "1.4.0",
+            "path-is-absolute": "1.0.1"
+          }
+        }
       }
     },
     "rx": {
@@ -5240,6 +5627,12 @@
         }
       }
     },
+    "sax": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz";,
+      "integrity": 
"sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
+      "optional": true
+    },
     "scss-tokenizer": {
       "version": "0.2.3",
       "resolved": 
"https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz";,
@@ -5835,9 +6228,21 @@
       }
     },
     "supports-color": {
-      "version": "2.0.0",
-      "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";,
-      "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+      "version": "5.3.0",
+      "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-5.3.0.tgz";,
+      "integrity": 
"sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==",
+      "dev": true,
+      "requires": {
+        "has-flag": "3.0.0"
+      },
+      "dependencies": {
+        "has-flag": {
+          "version": "3.0.0",
+          "resolved": 
"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz";,
+          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+          "dev": true
+        }
+      }
     },
     "swap-case": {
       "version": "1.1.2",
@@ -5865,6 +6270,12 @@
         "markdown": "0.5.0"
       }
     },
+    "symbol-tree": {
+      "version": "3.2.2",
+      "resolved": 
"https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.2.tgz";,
+      "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+      "optional": true
+    },
     "tar": {
       "version": "2.2.1",
       "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz";,
@@ -5887,6 +6298,30 @@
       "requires": {
         "chalk": "1.1.3",
         "object-path": "0.9.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": 
"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz";,
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz";,
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "2.2.1",
+            "escape-string-regexp": "1.0.5",
+            "has-ansi": "2.0.0",
+            "strip-ansi": "3.0.1",
+            "supports-color": "2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": 
"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz";,
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
       }
     },
     "through": {
@@ -6037,6 +6472,12 @@
         "punycode": "1.4.1"
       }
     },
+    "tr46": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz";,
+      "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+      "optional": true
+    },
     "transliteration": {
       "version": "1.6.2",
       "resolved": 
"https://registry.npmjs.org/transliteration/-/transliteration-1.6.2.tgz";,
@@ -6184,6 +6625,20 @@
       "integrity": "sha1-fskRMJJHZsf1c74wIMNPj9/QDWI=",
       "requires": {
         "glob": "6.0.4"
+      },
+      "dependencies": {
+        "glob": {
+          "version": "6.0.4",
+          "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz";,
+          "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
+          "requires": {
+            "inflight": "1.0.6",
+            "inherits": "2.0.3",
+            "minimatch": "3.0.4",
+            "once": "1.4.0",
+            "path-is-absolute": "1.0.1"
+          }
+        }
       }
     },
     "tunnel-agent": {
@@ -6200,6 +6655,14 @@
       "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
       "optional": true
     },
+    "type-check": {
+      "version": "0.3.2",
+      "resolved": 
"https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz";,
+      "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+      "requires": {
+        "prelude-ls": "1.1.2"
+      }
+    },
     "typedarray": {
       "version": "0.0.6",
       "resolved": 
"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz";,
@@ -6349,6 +6812,15 @@
       "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz";,
       "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="
     },
+    "url-extractor": {
+      "version": "2.0.2",
+      "resolved": 
"https://registry.npmjs.org/url-extractor/-/url-extractor-2.0.2.tgz";,
+      "integrity": "sha1-A32m4TlyR5m2FNieKdLCJYscxro=",
+      "dev": true,
+      "requires": {
+        "marked": "0.3.9"
+      }
+    },
     "use": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz";,
@@ -6491,6 +6963,21 @@
         "lodash": "4.17.4"
       }
     },
+    "webidl-conversions": {
+      "version": "2.0.1",
+      "resolved": 
"https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-2.0.1.tgz";,
+      "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=",
+      "optional": true
+    },
+    "whatwg-url-compat": {
+      "version": "0.6.5",
+      "resolved": 
"https://registry.npmjs.org/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz";,
+      "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=",
+      "optional": true,
+      "requires": {
+        "tr46": "0.0.3"
+      }
+    },
     "which": {
       "version": "1.3.0",
       "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz";,
@@ -6517,6 +7004,12 @@
       "resolved": 
"https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz";,
       "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
     },
+    "wordwrap": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz";,
+      "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+      "optional": true
+    },
     "wrap-ansi": {
       "version": "2.1.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz";,
@@ -6541,6 +7034,12 @@
         "ultron": "1.1.1"
       }
     },
+    "xml-name-validator": {
+      "version": "2.0.1",
+      "resolved": 
"https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-2.0.1.tgz";,
+      "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
+      "optional": true
+    },
     "xmlhttprequest-ssl": {
       "version": "1.5.5",
       "resolved": 
"https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz";,

http://git-wip-us.apache.org/repos/asf/incubator-weex-site/blob/3cefc511/package.json
----------------------------------------------------------------------
diff --git a/package.json b/package.json
index b6e5832..fc83e0a 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,8 @@
     "server": "hexo server",
     "clean": "rm -rf .deploy_git && hexo clean",
     "deploy": "npm run clean && hexo deploy",
-    "build": "hexo g -d -w"
+    "build": "hexo g -d -w",
+    "test": "node test/url-validator.js"
   },
   "dependencies": {
     "cheerio": "^1.0.0-rc.2",
@@ -30,5 +31,11 @@
     "hexo-server": "^0.3.1",
     "hexo-toc": "^1.1.0",
     "uglify-js": "^3.3.7"
+  },
+  "devDependencies": {
+    "chalk": "^2.3.2",
+    "glob": "^7.1.2",
+    "node-fetch": "^2.1.1",
+    "url-extractor": "^2.0.2"
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex-site/blob/3cefc511/test/url-validator.js
----------------------------------------------------------------------
diff --git a/test/url-validator.js b/test/url-validator.js
new file mode 100644
index 0000000..1fb2fee
--- /dev/null
+++ b/test/url-validator.js
@@ -0,0 +1,44 @@
+const glob = require('glob')
+const fs = require('fs')
+const fetch = require('node-fetch')
+const urlExtractor = require('url-extractor')
+const chalk = require('chalk')
+
+const extractUrls = urlExtractor.extractUrls
+const SOURCE_TYPE_MARKDOWN = urlExtractor.SOURCE_TYPE_MARKDOWN
+
+const whiteList = [
+  'localhost'
+]
+
+glob('source/**/*.md', (err, files) => {
+  files.forEach((file, fileIndex) => {
+    fs.readFile(file, { encoding: 'utf-8' },  (err, text) => {
+      const urls = extractUrls(text, SOURCE_TYPE_MARKDOWN)
+      urls.forEach(url => {
+        // '//xxx.com' -> 'http://xxx.com'
+        if (url.match(/^\/\//)) url = 'http:' + url
+
+        // ignore non-http(s)
+        if (!url.match(/^https?:\/\//)) return
+        // ignore whitelist
+        for (let i = 0; i < whiteList.length; i++) {
+          if (url.match(whiteList[i])) return
+        }
+
+        // using fetch to test whether available
+        fetch(url)
+          .then(res => {
+            if (res.status >= 400) {
+              console.log(chalk.bgRed(res.status), chalk.yellow(url), file)
+            }
+          })
+          .catch(err => {
+            if (err.code !== 'ECONNREFUSED' && err.code !== 'ECONNRESET') {
+              console.log(chalk.bgRed(err.code), chalk.yellow(url), file)
+            }
+          })
+      })
+    })
+  })
+})

Reply via email to