honghaitzz11 6 năm trước cách đây
commit
aadd079e6d

BIN
.DS_Store


+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+*.mobi
+*.epub
+book/

+ 44 - 0
01-app.js

@@ -0,0 +1,44 @@
+const puppeteer = require('puppeteer');
+const fs = require("fs");
+(async () => {
+  const browser = await puppeteer.launch({
+    headless: true, //默认为true(无头),不显示浏览器界面
+    slowMo: 200, //减速显示,有时会作为模拟人操作特意减速
+    devtools: true //显示开发者工具。页面宽高默认800*600,把开发者工具显示再隐藏页面会占满屏幕,有没有大佬解释下?
+  });
+  //生成Page对象
+  //const page = await browser.newPage();//官网写法:一打开浏览器会打开两个tab,第二个才是你正在操作的tab
+  const page = (await browser.pages())[0]; //这是我的写法,只有一个tab
+  await page.goto('http://www.bidutuijian.com/books/weiweiyixiao/000.html'); //跳转到掘金
+
+  //请开始你的表演...
+  const result = await page.evaluate(() => {
+
+    return new Promise(resolve => {
+      // let $titles = document.querySelector('.cell-items').getElementsByTagName('li');
+      let $titles = document.getElementsByTagName('td');
+      let titles = [];
+      let index = 0;
+      const len = $titles.length;
+      const interval = setInterval(() => {
+        if (index === len) {
+          resolve(titles);
+          clearInterval(interval);
+          return;
+        }
+        console.log($titles[index]);
+        titles.push({
+          href: `http://www.bidutuijian.com/books/weiweiyixiao/${$titles[index].getElementsByTagName('a')[0].getAttribute('href')}`,
+          title: $titles[index].getElementsByTagName('a')[0].innerText,
+          index: index + 1
+        });
+        index += 1;
+      }, 30);
+    });
+
+
+  });
+  await browser.close(); //关闭浏览器
+  console.log('over');
+  fs.writeFileSync('./xindaming.js', 'module.exports =' + JSON.stringify(result));
+})();

+ 371 - 0
02-other.js

@@ -0,0 +1,371 @@
+const fs = require('fs');
+const moment = require('moment');
+const shell = require('shelljs');
+const utils = require('./utils/base');
+
+var $xindaming = require('./xindaming');
+utils.uid = moment().format();
+utils.time = moment().format('YYYY-MM-DD');
+
+function mkdir(path) {
+	if (!fs.existsSync(path)) {
+		fs.mkdirSync(path)
+	}
+}
+
+shell.exec('rm -rf book && mkdir book');
+
+mkdir('./book/META-INF');
+
+fs.writeFileSync('./book/META-INF/container.xml', `<?xml version="1.0" encoding="UTF-8"?>
+<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
+    <rootfiles>
+        <rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
+   </rootfiles>
+</container>
+`)
+fs.writeFileSync('./book/mimetype', 'application/epub+zip')
+
+mkdir('./book/OEBPS')
+mkdir('./book/OEBPS/Images')
+mkdir('./book/OEBPS/Styles')
+fs.writeFileSync('./book/OEBPS/Styles/mc-style.css', `@charset "UTF-8";
+
+/*=========================font-face=========================*/
+@font-face {
+	font-family:"zw";
+	src:
+	local("宋体"),local("明体"),local("明朝"),
+	local("微软雅黑"),local("黑体"),
+	local("Songti"),local("Songti SC"),local("Songti TC"),
+	local("Song S"),local("Song T"),local("STBShusong"),local("TBMincho"),local("HYMyeongJo"),
+	local("DK-SONGTI")
+	local("Heiti"),local("Heiti SC"),local("Heiti TC"),
+	local("MYing Hei S"),local("MYing Hei T"),local("TBGothic"),
+	local("DK-HEITI"),
+	url(../Fonts/fzzy.ttf);
+}
+
+/* This defines styles and classes used in sioebook */
+
+/*Global Setting*/
+
+* {
+	margin: 0;
+	padding: 0;
+}
+
+body {
+	padding: 3% 2%;
+	margin-top: 3%;
+	margin-bottom: 3%;
+	margin-left: 1%;
+	margin-right: 1%;
+	line-height: 1.3em;
+	text-align: justify;
+	font-family: "Times New Roman","方正书宋","宋体","明体","zw",sans-serif;
+}
+
+/* P 正常段落 */
+p {
+	margin: 0.5em 0em;
+	line-height: 1.3em;
+	text-indent: 2em;
+}
+
+/* 居中、右、左 */
+.center {
+	text-indent: 0em;
+	text-align: center;
+}
+.right {
+	text-indent: 0em;
+	text-align: right;
+}
+.left {
+	text-indent: 0em;
+	text-align: left;
+}
+
+/*图片*/
+img {
+	border: none;
+	text-align: center;
+	/*max-width: 100%;*/
+	max-height: 100%;
+}
+
+/* 表格 */
+table {
+	border-collapse: collapse;
+	border-spacing: 0;
+	margin: 0 auto 0;
+	width: 100%;
+	font-size: small;
+	vertical-align:center;
+}
+tr,th,td {
+	margin: 0;
+	padding: 0.25em;
+	border: none;
+	font-size: 95%;
+	font-family: "Times New Roman","方正书宋","宋体","明体","zw",sans-serif;
+	text-indent: 0!important;
+	text-align: left;
+	vertical-align: middle;
+	color: #666666;
+	line-height: 1.05em;
+}
+
+/* 列表格式 */
+ul, ol	{
+	list-style:none;
+}
+/* 链接 颜色 不加下划线 */
+a {
+	text-decoration:none;
+	color: #663366;
+}
+a:hover {
+	text-decoration:none;
+	color: #CC99CC;
+}
+/* 文案 */
+.oval {
+	padding: 5% 5%;
+	margin: 12% 5% 2%;
+	border: 0px dotted #993333;
+	text-indent: 0em;
+	font-size: 0.9em;
+	color: #666666;
+}
+
+/* 水平线 */
+hr {
+	border:0;
+	background-color:#BEBEBE;
+	height:1.5px;
+	margin-top: 2%;
+	margin-bottom: 2%;
+}
+
+/* 上下标注 */
+sup {
+	font-size:small;
+}
+sub {
+	font-size:small;
+}
+
+/* 标题1 书名 卷 */
+h1 {
+	font-family: "微软雅黑","黑体","ht","zw",sans-serif;
+	text-indent: 0em;
+	text-align:center;
+	line-height: 2em;
+	margin-top: 30%;
+	color: #996699;
+	text-shadow: 1px 1px 1px gray;
+}
+
+h2 {
+	color: #FFFFFF;
+	margin-left:25%;
+	line-height:200%;
+	border-style: none double solid solid;
+	border-width: 0px 3px 2px 30px;
+	font-weight:bold;
+	font-size:large;
+	border-color: #FFFFFF;
+	font-family: "微软雅黑","黑体","ht","zw",sans-serif;
+	text-shadow: 1px 1px 1px gray;
+	padding: 2px 10px 2px 10px;
+}
+h2.epub {
+	font-family: "微软雅黑","黑体","ht","zw",sans-serif;
+	text-indent: 0em;
+	font-size: 1.2em;
+	text-align: center;
+	width: 1em;
+	margin: 0em 5% 1.5em;
+	line-height: 110%;
+	color: #EEEEEE;
+	border-style: none double none none;
+	border-width: 0px 3px 0px 0px;
+	border-color: #EEEEEE;
+	padding: 0.5em 10px 0.5em 2px;
+	text-shadow: 0px 0px 0px #AAAAAA;
+}
+
+h3 {
+	margin: 1em 0 5em;
+	color: #663366;
+	line-height: 120%;
+	text-align: left;
+	font-family: "微软雅黑","黑体","ht","zw",sans-serif;
+	text-shadow: 1px 1px 1px gray;
+	padding: 15px 12px 1em 5px;
+	border-style: none none dotted none;
+	border-color: #CC6699;
+	border-width: 0px 0px 1px 0px;
+	text-shadow: 1px 1px 1px #AAAAAA;
+}
+h3.ebook {
+	font-family: "微软雅黑","黑体","ht","zw",sans-serif;
+	text-indent: 0em;
+	margin: 1em 0 1em;
+	padding: 2px 12px 2px 2px;
+	text-align: left;
+	line-height: 120%;
+	border-style: none none none none;
+	text-shadow: 1px 1px 1px #AAAAAA;
+}
+
+/* 章节序号 */
+.num {
+	font-family: "微软雅黑","黑体","ht","zw",sans-serif;
+	background-color: #CC6699;
+	border-radius: 2px;
+	padding: 4px 0.5em;
+	color: #FFF;
+	font-size: small;
+	text-shadow: 1px 1px 1px #AAAAAA;
+}
+
+h4 {
+	line-height: 2em;
+	text-indent: 0em;
+	color: #FFFFFF;
+	margin-left:25%;
+	font-family: "微软雅黑","黑体","ht","zw",sans-serif;
+	text-shadow: 1px 1px 1px gray;
+}
+
+h5 {
+	line-height: 1.5em;
+	text-indent: 0em;
+	color: #FF9900;
+	font-size: 14px;
+}
+
+.vol {
+	padding: 30% 5% 20%;
+	margin: 15% -2em 2%;
+	background-color: #996699;
+	text-indent: 0em;
+}
+.volbg {
+	background-color: #996699;
+}
+
+/* 作者译者编者等 */
+.author {
+	margin: 20% 0;
+	text-indent: 0em;
+	text-align: center;
+	font-size: 1em;
+	line-height: 120%;
+	font-weight: 600;
+	color: #;
+}
+.wt {
+	text-indent: 0em;
+	font-style:italic;
+	font-size: 0.9rem;
+	line-height: 1.2em;
+	color: #336699;
+}
+
+/* 出版社 */
+.copyright {
+	margin: 35% 0 0;
+	text-indent: 0em;
+	text-align: center;
+	font-size: 1em;
+	line-height: 120%;
+	font-weight: 300;
+	color: #;
+}
+
+/* 书票 */
+.exL {
+	margin: 45% 0;
+	text-align: center;
+	page-break-before: always;
+}
+.kh {
+	text-indent: 0em;
+	text-align: center;
+	font-size: 0.80em;
+	color: #EEEEEE;
+}
+
+/* 电子书信息 */
+.info {
+	font-size: 1em;
+	font-weight: bold;
+	line-height: 150%;
+	color: #666666;
+	margin: 0 0 1em 20%;
+}
+.info_items {
+	font-size: 0.8em;
+	line-height: 120%;
+	color: #666666;
+	margin: 0 0 0 20%;
+}
+/* 多看 图框 */
+.duokan-image-single {
+	margin: 0.5em 0;
+	bottom: 2%;
+	text-align: center;
+}
+
+/*++*/
+.rht {
+	font-family: "微软雅黑","黑体","ht","zw",sans-serif;
+	font-size: 115%;
+	line-height: 120%;
+	text-indent: 0em;
+	text-align: right;
+	color: #CCCCCC;
+}
+.lt {
+	font-size: 80%;
+	text-indent: 0em;
+	text-align: right;
+	color: #003366;
+}
+div.float {
+	width: 42%;
+	float: right;
+	margin: 1em 0 0em 1em;
+}`)
+mkdir('./book/OEBPS/Text')
+fs.writeFileSync('./book/OEBPS/Text/cover.xhtml', `<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>Cover</title>
+</head>
+<body>
+  <div style="text-align: center; padding: 0pt; margin: 0pt;">
+    <svg xmlns="http://www.w3.org/2000/svg" height="100%" preserveAspectRatio="xMidYMid meet" version="1.1" viewBox="0 0 240 300" width="100%" xmlns:xlink="http://www.w3.org/1999/xlink">
+      <image width="240" height="300" xlink:href="../Images/cover.jpg"/>
+    </svg>
+  </div>
+</body>
+</html>`)
+
+// opf toc.ncx ...
+utils.opf(utils, $xindaming).then(res => {
+	fs.writeFileSync('./book/OEBPS/content.opf', res);
+	return utils.tocNcx(utils, $xindaming)
+}).then(res => {
+	fs.writeFileSync('./book/OEBPS/toc.ncx', res);
+	return utils.book(utils)
+}).then(res => {
+	fs.writeFileSync('./book/OEBPS/Text/book.xhtml', res)
+});

+ 37 - 0
03-jietu.js

@@ -0,0 +1,37 @@
+const puppeteer = require('puppeteer');
+const utils = require('./utils/base');
+const start = async (utils) => {
+  const browser = await puppeteer.launch();
+  const page = await browser.newPage();
+  await page.goto('http://127.0.0.1:3000');
+
+  //调用evaluate 方法返回id 为form元素的位置信息
+  let clip = await page.evaluate((utils) => {
+    // 设置标题
+    const title = document.getElementById('title');
+    const author = document.getElementById('author');
+    title.innerText = utils.name;
+    author.innerText = utils.author;
+    let {
+      x,
+      y,
+      width,
+      height
+    } = document.getElementById('page').getBoundingClientRect();
+    return {
+      x,
+      y,
+      width,
+      height
+    };
+  }, utils);
+
+  await page.screenshot({
+    path: './book/OEBPS/Images/cover.jpg',
+    clip: clip //设置clip 属性
+  });
+  await page.close();
+  await browser.close();
+}
+
+start(utils);

+ 43 - 0
04-page.js

@@ -0,0 +1,43 @@
+const fs = require("fs");
+const puppeteer = require('puppeteer');
+const utils = require('./utils/base');
+var $xindaming = require('./xindaming');
+const len = $xindaming.length;
+let index = 0;
+
+const createPage = async (url) => {
+  const browser = await puppeteer.launch({
+    headless: true, //默认为true(无头),不显示浏览器界面
+    // slowMo: 200,
+  });
+  const page = (await browser.pages())[0]; //这是我的写法,只有一个tab
+  await page.goto(url); //跳转到掘金
+  const result = await page.evaluate(() => {
+    return new Promise(resolve => {
+      let content = {
+        title: document.getElementsByTagName('h1')[0].innerText,
+        page: document.getElementsByClassName('main1')[1].getElementsByTagName('p')[0].innerText
+      };
+      resolve(content);
+    });
+  });
+  await browser.close(); //关闭浏览器
+  return result;
+};
+forEachUrl();
+
+function forEachUrl() {
+  if ($xindaming[index] !== undefined) {
+    console.clear();
+    console.log(`还剩${len - index};  当前进度:${$xindaming[index].index}  ${$xindaming[index].title}`);
+    createPage($xindaming[index].href).then(res => {
+      return utils.page($xindaming[index], res);
+    }).then(res => {
+      fs.writeFileSync('./book/OEBPS/Text/text' + $xindaming[index].index + '.xhtml', res);
+      setTimeout(() => {
+        index += 1;
+        forEachUrl();
+      }, 200);
+    });
+  }
+}

+ 5 - 0
05-makeMobi.js

@@ -0,0 +1,5 @@
+const shell = require('shelljs');
+const utils = require('./utils/base');
+shell.exec(`zip -p -r ${utils.name}.epub book`);
+shell.exec(`/Users/honghaitao/Applications/KindleGen_Mac_i386_v2_9/kindlegen -c1 ${utils.name}.epub -locale zh`);
+shell.exec(`rm ${utils.name}.epub`);

+ 1 - 0
README.m

@@ -0,0 +1 @@
+# makeKindle

BIN
cover/fonts/汉仪全唐诗简.ttf


BIN
cover/image/.DS_Store


BIN
cover/image/0.jpg


BIN
cover/image/1.jpg


BIN
cover/image/10.jpg


BIN
cover/image/2.jpg


BIN
cover/image/3.jpg


BIN
cover/image/4.jpg


BIN
cover/image/5.jpg


BIN
cover/image/6.jpg


BIN
cover/image/7.jpg


BIN
cover/image/8.jpg


BIN
cover/image/9.jpg


BIN
cover/image/ProxifierMac.dmg


+ 58 - 0
cover/index.html

@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
+    <title>Document</title>
+    <style>
+      * {
+        padding: 0;
+        margin: 0;
+      }
+      @font-face {
+        font-family: 'pglh';
+        src: url(./fonts/汉仪全唐诗简.ttf);
+      }
+      #page {
+        width: 800px;
+        height: 1280px;
+        font-size: 30px;
+        text-align: center;
+        position: relative;
+      }
+      #page > div {
+        position: absolute;
+        left: 0;
+        right: 0;
+        font-family: 'pglh';
+        text-shadow: 2px 2px 3px #4f4f4f;
+        color: white;
+      }
+      #title {
+        top: 20%;
+        font-size: 80px;
+      }
+      #author {
+        bottom: 20%;
+        text-align: right;
+        padding-right: 30px;
+        font-size: 55px;
+      }
+    </style>
+  </head>
+  <body>
+    <!-- 免费大图 http://tu.763g.com/bizhi/ -->
+    <div id="page">
+      <div id="title">这是一张封面</div>
+      <div id="author">作者</div>
+    </div>
+    <script>
+      const $page = document.getElementById('page');
+      $page.style.backgroundImage = `url('image/${Math.round(Math.random() * 10)}.jpg')`;
+      $page.style.backgroundPosition = 'center';
+      $page.style.backgroundSize = 'cover';
+      $page.style.backgroundRepeat = 'no-repeat';
+    </script>
+  </body>
+</html>

+ 16 - 0
package.json

@@ -0,0 +1,16 @@
+{
+  "name": "1-xiaoqiangwx",
+  "version": "1.0.0",
+  "description": "",
+  "main": "index.js",
+  "scripts": {
+    "test": "echo \"Error: no test specified\" && exit 1"
+  },
+  "author": "",
+  "license": "ISC",
+  "dependencies": {
+    "moment": "^2.24.0",
+    "puppeteer": "^1.15.0",
+    "shelljs": "^0.8.3"
+  }
+}

+ 167 - 0
utils/base.js

@@ -0,0 +1,167 @@
+const start = 1;
+module.exports = {
+  opf: function (info, list) {
+    return new Promise(resolve => {
+      function item(list) {
+        let html = '';
+        list.forEach(key => {
+          if (startAndEnd(key)) {
+            html += `
+            <item id="text${key.index}.xhtml" href="Text/text${key.index}.xhtml" media-type="application/xhtml+xml"/>
+            `;
+          }
+        });
+        return html;
+      }
+
+      function itemref(list) {
+        let html = '';
+        list.forEach(key => {
+          if (startAndEnd(key)) {
+            html += `
+            <itemref idref="text${key.index}.xhtml"/>`;
+          }
+        });
+        return html;
+      }
+
+      let html = `<?xml version="1.0" encoding="utf-8"?>
+      <package version="2.0" unique-identifier="BookId" xmlns="http://www.idpf.org/2007/opf">
+        <metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/">
+          <dc:creator>${info.author}</dc:creator>
+          <dc:language>zh</dc:language>
+          <dc:title>${info.name}</dc:title>
+          <meta content="0.9.10" name="Sigil version" />
+          <dc:date xmlns:opf="http://www.idpf.org/2007/opf" opf:event="modification">${info.time}</dc:date>
+          <dc:identifier id="BookId" opf:scheme="UUID">urn:uuid:${info.uid}</dc:identifier>
+          <meta name="cover" content="cover.jpg" />
+        </metadata>
+        <manifest>
+          <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
+          ${item(list)}
+          <item id="book.xhtml" href="Text/book.xhtml" media-type="application/xhtml+xml"/>
+          <item id="mc-style.css" href="Styles/mc-style.css" media-type="text/css"/>
+          <item id="cover.jpg" href="Images/cover.jpg" media-type="image/jpeg"/>
+          <item id="cover.xhtml" href="Text/cover.xhtml" media-type="application/xhtml+xml"/>
+        </manifest>
+        <spine toc="ncx">
+          <itemref idref="cover.xhtml"/>
+          <itemref idref="book.xhtml"/>
+          ${itemref(list)}
+        </spine>
+        <guide>
+          <reference type="cover" title="封面" href="Text/cover.xhtml"/>
+        </guide>
+      </package>
+      `;
+      resolve(html);
+    });
+  },
+  tocNcx: function (info, list) {
+    return new Promise(resolve => {
+      function navPoint(list) {
+        let page = '';
+        list.forEach(key => {
+          if (startAndEnd(key)) {
+            page += `<navPoint id="navPoint-${key.index + 1}" playOrder="${key.index + 1}">
+            <navLabel>
+              <text>${key.title}</text>
+            </navLabel>
+            <content src="Text/text${key.index}.xhtml"/>
+          </navPoint>`
+          }
+        })
+        return page
+      }
+      const html = `<?xml version="1.0" encoding="UTF-8"?>
+      <!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN"
+         "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
+      
+      <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
+        <head>
+          <meta name="dtb:uid" content="urn:uuid:${info.uid}"/>
+          <meta name="dtb:depth" content="1"/>
+          <meta name="dtb:totalPageCount" content="0"/>
+          <meta name="dtb:maxPageNumber" content="0"/>
+        </head>
+        <docTitle>
+          <text>${info.name}</text>
+        </docTitle>
+        <navMap>
+          <navPoint id="navPoint-1" playOrder="1">
+            <navLabel>
+              <text>制作信息</text>
+            </navLabel>
+            <content src="Text/book.xhtml"/>
+          </navPoint>
+          ${navPoint(list)}    
+        </navMap>
+      </ncx>
+      `;
+      resolve(html)
+
+    })
+  },
+  book: function (info) {
+    return new Promise(resolve => {
+      const html = `<?xml version="1.0" encoding="utf-8"?>
+  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+  
+  <html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title></title>
+    
+  <link href="../Styles/mc-style.css" type="text/css" rel="stylesheet"/>
+  </head>
+  
+  <body>
+    <h1 class="sigil_not_in_toc">${info.name}</h1>
+  
+    <div class="author">
+      <b>${info.author}</b> <span style="font-size: smaller;">/ 著</span>
+    </div>
+  
+    <div class="copyright">
+      排版/制作:飞鼠
+    </div>
+  
+    <p style="text-align: center; font-size: smaller; text-indent: 0;"><a href="http://mebook.cc" target="_blank">www.mebook.cc</a></p>
+  </body>
+  </html>`
+      resolve(html)
+    })
+  },
+
+  page: function (item, content) {
+    return new Promise(resolve => {
+      function page(content) {
+        let contents = content.split('\n');
+        let html = ''
+        contents.forEach(key => {
+          html += `
+          <p>${key}</p>`
+        })
+        return html
+      }
+      const html = `
+<html  xmlns="http://www.w3.org/1999/xhtml" lang="zh" xml:lang="zh">
+<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<body>
+<h3 id="id${item.index}">${content.title}</h3>
+${page(content.page)}
+</body>
+</html>
+`;
+      resolve(html);
+    });
+  },
+  name: '微微一笑很倾城',
+  author: '顾漫',
+  uid: '',
+  time: ''
+};
+
+function startAndEnd(item) {
+  return item.index > 0 && item.index < 605;
+}

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
xindaming.js


+ 325 - 0
yarn.lock

@@ -0,0 +1,325 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+agent-base@^4.1.0:
+  version "4.2.1"
+  resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9"
+  integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==
+  dependencies:
+    es6-promisify "^5.0.0"
+
+async-limiter@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
+  integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
+
+balanced-match@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+  integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
+
+brace-expansion@^1.1.7:
+  version "1.1.11"
+  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+  integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+  dependencies:
+    balanced-match "^1.0.0"
+    concat-map "0.0.1"
+
+buffer-from@^1.0.0:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+  integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+concat-map@0.0.1:
+  version "0.0.1"
+  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+  integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
+
+concat-stream@1.6.2:
+  version "1.6.2"
+  resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+  integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+  dependencies:
+    buffer-from "^1.0.0"
+    inherits "^2.0.3"
+    readable-stream "^2.2.2"
+    typedarray "^0.0.6"
+
+core-util-is@~1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+  integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+debug@2.6.9:
+  version "2.6.9"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+  integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+  dependencies:
+    ms "2.0.0"
+
+debug@^3.1.0:
+  version "3.2.6"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+  integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+  dependencies:
+    ms "^2.1.1"
+
+debug@^4.1.0:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+  integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+  dependencies:
+    ms "^2.1.1"
+
+es6-promise@^4.0.3:
+  version "4.2.6"
+  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f"
+  integrity sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==
+
+es6-promisify@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
+  integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
+  dependencies:
+    es6-promise "^4.0.3"
+
+extract-zip@^1.6.6:
+  version "1.6.7"
+  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9"
+  integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=
+  dependencies:
+    concat-stream "1.6.2"
+    debug "2.6.9"
+    mkdirp "0.5.1"
+    yauzl "2.4.1"
+
+fd-slicer@~1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65"
+  integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=
+  dependencies:
+    pend "~1.2.0"
+
+fs.realpath@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+  integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
+
+glob@^7.0.0, glob@^7.1.3:
+  version "7.1.3"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+  integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
+  dependencies:
+    fs.realpath "^1.0.0"
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "^3.0.4"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
+https-proxy-agent@^2.2.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0"
+  integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==
+  dependencies:
+    agent-base "^4.1.0"
+    debug "^3.1.0"
+
+inflight@^1.0.4:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+  integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
+  dependencies:
+    once "^1.3.0"
+    wrappy "1"
+
+inherits@2, inherits@^2.0.3, inherits@~2.0.3:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+  integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+interpret@^1.0.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
+  integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
+
+isarray@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+  integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+mime@^2.0.3:
+  version "2.4.2"
+  resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.2.tgz#ce5229a5e99ffc313abac806b482c10e7ba6ac78"
+  integrity sha512-zJBfZDkwRu+j3Pdd2aHsR5GfH2jIWhmL1ZzBoc+X+3JEti2hbArWcyJ+1laC1D2/U/W1a/+Cegj0/OnEU2ybjg==
+
+minimatch@^3.0.4:
+  version "3.0.4"
+  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
+  dependencies:
+    brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+  version "0.0.8"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+  integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
+
+mkdirp@0.5.1:
+  version "0.5.1"
+  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+  integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
+  dependencies:
+    minimist "0.0.8"
+
+moment@^2.24.0:
+  version "2.24.0"
+  resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b"
+  integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==
+
+ms@2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+  integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+  integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+once@^1.3.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
+  dependencies:
+    wrappy "1"
+
+path-is-absolute@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+  integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
+
+path-parse@^1.0.6:
+  version "1.0.6"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+  integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
+
+pend@~1.2.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
+  integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
+
+process-nextick-args@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+  integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+
+progress@^2.0.1:
+  version "2.0.3"
+  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
+proxy-from-env@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee"
+  integrity sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=
+
+puppeteer@^1.15.0:
+  version "1.15.0"
+  resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.15.0.tgz#1680fac13e51f609143149a5b7fa99eec392b34f"
+  integrity sha512-D2y5kwA9SsYkNUmcBzu9WZ4V1SGHiQTmgvDZSx6sRYFsgV25IebL4V6FaHjF6MbwLK9C6f3G3pmck9qmwM8H3w==
+  dependencies:
+    debug "^4.1.0"
+    extract-zip "^1.6.6"
+    https-proxy-agent "^2.2.1"
+    mime "^2.0.3"
+    progress "^2.0.1"
+    proxy-from-env "^1.0.0"
+    rimraf "^2.6.1"
+    ws "^6.1.0"
+
+readable-stream@^2.2.2:
+  version "2.3.6"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+  integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+  dependencies:
+    core-util-is "~1.0.0"
+    inherits "~2.0.3"
+    isarray "~1.0.0"
+    process-nextick-args "~2.0.0"
+    safe-buffer "~5.1.1"
+    string_decoder "~1.1.1"
+    util-deprecate "~1.0.1"
+
+rechoir@^0.6.2:
+  version "0.6.2"
+  resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+  integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=
+  dependencies:
+    resolve "^1.1.6"
+
+resolve@^1.1.6:
+  version "1.10.1"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18"
+  integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==
+  dependencies:
+    path-parse "^1.0.6"
+
+rimraf@^2.6.1:
+  version "2.6.3"
+  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+  integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+  dependencies:
+    glob "^7.1.3"
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+  version "5.1.2"
+  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+  integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+shelljs@^0.8.3:
+  version "0.8.3"
+  resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
+  integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
+  dependencies:
+    glob "^7.0.0"
+    interpret "^1.0.0"
+    rechoir "^0.6.2"
+
+string_decoder@~1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+  integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+  dependencies:
+    safe-buffer "~5.1.0"
+
+typedarray@^0.0.6:
+  version "0.0.6"
+  resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+  integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
+
+util-deprecate@~1.0.1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+  integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+wrappy@1:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+  integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+
+ws@^6.1.0:
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb"
+  integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==
+  dependencies:
+    async-limiter "~1.0.0"
+
+yauzl@2.4.1:
+  version "2.4.1"
+  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005"
+  integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=
+  dependencies:
+    fd-slicer "~1.0.1"

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác