Authored by htoooth

Merge branch 'master' into feature/risk

phantomjs_cdnurl=http://npm.taobao.org/mirrors/phantomjs
sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
registry=http://npm.yohops.com
... ...
<div class="friend-invite-page yoho-page">
{{# friendInviteData}}
<div class="banner">
<span class="title">您的好友{{{nickname}}}<br><b>{{#if payText}}发现了好物并推荐给您{{else}}邀请您来有货玩潮流{{/if}}</b></span>
<span class="title">您的好友{{{htmlEncode nickname}}}<br><b>{{#if payText}}发现了好物并推荐给您{{else}}邀请您来有货玩潮流{{/if}}</b></span>
<span class="ico-left"></span>
<span class="ico-right"></span>
{{#if friendsGoods}}
... ...
... ... @@ -22,7 +22,7 @@
<div class="reward-related">
<div class="releated-item">
<span>我邀请的好友</span>
<span>{{{nickName}}}</span>
<span>{{{htmlEncode nickName}}}</span>
</div>
<div class="releated-item">
<span>注册时间</span>
... ...
... ... @@ -9,7 +9,7 @@
<div class="head-pic">
<img src="{{image headIco 200 200}}">
</div>
<div class="nick-name">{{{nickName}}}</div>
<div class="nick-name">{{{htmlEncode nickName}}}</div>
</div>
<div class="calculate">
<div class="calculate-item">
... ...
... ... @@ -42,7 +42,7 @@
{{# shareLog}}
<div class="student-item">
<div>{{createTime}}</div>
<div>{{{nickName}}}</div>
<div>{{{htmlEncode nickName}}}</div>
<div>
<span>+{{reward}}</span>
有货币
... ...
... ... @@ -27,7 +27,7 @@
<li>
<p class="earnings-info">
<span class="num">{{#if cancel}}-{{/if}}{{#if already}}+{{/if}}{{coinNum}}</span>
<span class="user">{{{nickName}}} <i {{#if cancel}}class="cancel"{{/if}}>{{statusStr}}</i></span>
<span class="user">{{{htmlEncode nickName}}} <i {{#if cancel}}class="cancel"{{/if}}>{{statusStr}}</i></span>
</p>
<p class="order-info">
... ...
{{# rewardList}}
<a href="{{detailUrl}}" class="list-item">
<span>{{{nickName}}}</span>
<span>{{{htmlEncode nickName}}}</span>
<span>{{orderAmountDis}}</span>
<span>{{couponName}}</span>
<span>{{couponStatusDesc}}<i class="iconfont">&#xe614;</i></span>
... ...
... ... @@ -9,9 +9,9 @@
{{#if addressInfo}}
<div class="address block address-wrap {{#if @root.pageChannel.boys}} boys{{/if}}{{#if @root.pageChannel.girls}} girls{{/if}}{{#if @root.pageChannel.kids}} kids{{/if}}{{#if @root.pageChannel.lifeStyle}} life-style{{/if}}" data-id ="{{addressId}}">
<div class="info">
<span class="info-name">{{{name}}}</span>
<span class="info-name">{{{htmlEncode name}}}</span>
<span class="info-phone">{{phoneNum}}</span>
<a href="{{selectAddressUrl}}"><span class="info-address">{{{addressInfo}}}</span></a>
<a href="{{selectAddressUrl}}"><span class="info-address">{{{htmlEncode addressInfo}}}</span></a>
<i class="iconfont">&#xe637;</i>
</div>
<a class="rest" href="{{selectAddressUrl}}">其他地址<span class="iconfont">&#xe614;</span></a>
... ... @@ -177,7 +177,7 @@
{{#if addressInfo}}
<div class="address-bottom">
<div class="back"></div>
<span>送至:{{{addressInfo}}}</span>
<span>送至:{{{htmlEncode addressInfo}}}</span>
</div>
{{/if}}
<div class="bill">
... ...
... ... @@ -3,9 +3,9 @@
{{# address}}
<input type="hidden" name="_csrf" value="{{@root.csrfToken}}"/>
<div class="address-item" data-address-id="{{address_id}}" data-is-support="{{is_support}}" data-href="{{../moreUrl}}">
<span class="name">{{{consignee}}}</span>
<span class="name">{{{htmlEncode consignee}}}</span>
<span class="tel">{{mobile}}</span>
<p class="address-info" data-address="{{area}} {{address}}">{{area}} {{{address}}}</p>
<p class="address-info" data-address="{{area}} {{address}}">{{area}} {{{htmlEncode address}}}</p>
<div class="action iconfont">
<span class="edit" data-href="/home/addressAct?id={{address_id}}&refer=buynow&product_sku={{../product_sku}}&buy_number={{../buy_number}}">&#xe61e;</span>
<span class="del" data-id="{{address_id}}">&#xe621;</span>
... ...
... ... @@ -9,9 +9,9 @@
{{#if addressInfo}}
<div class="address block address-wrap {{#if @root.pageChannel.boys}} boys{{/if}}{{#if @root.pageChannel.girls}} girls{{/if}}{{#if @root.pageChannel.kids}} kids{{/if}}{{#if @root.pageChannel.lifeStyle}} life-style{{/if}}" data-id ="{{addressId}}">
<div class="info">
<span class="info-name">{{{name}}}</span>
<span class="info-name">{{{htmlEncode name}}}</span>
<span class="info-phone">{{phoneNum}}</span>
<a href="/cart/index/new/selectAddress"><span class="info-address">{{{addressInfo}}}</span></a>
<a href="/cart/index/new/selectAddress"><span class="info-address">{{{htmlEncode addressInfo}}}</span></a>
<i class="iconfont">&#xe637;</i>
</div>
<a class="rest" href="/cart/index/new/selectAddress">其他地址<span class="iconfont">&#xe614;</span></a>
... ... @@ -182,7 +182,7 @@
{{#if addressInfo}}
<div class="address-bottom">
<div class="back"></div>
<span>送至:{{{addressInfo}}}</span>
<span>送至:{{{htmlEncode addressInfo}}}</span>
</div>
{{/if}}
<div class="bill">
... ...
... ... @@ -3,9 +3,9 @@
{{# address}}
<input type="hidden" name="_csrf" value="{{@root.csrfToken}}"/>
<div class="address-item" data-address-id="{{address_id}}" data-is-support="{{is_support}}" data-href="{{../moreUrl}}">
<span class="name">{{{consignee}}}</span>
<span class="name">{{{htmlEncode consignee}}}</span>
<span class="tel">{{mobile}}</span>
<p class="address-info" data-address="{{area}} {{address}}">{{area}} {{{address}}}</p>
<p class="address-info" data-address="{{area}} {{address}}">{{area}} {{{htmlEncode address}}}</p>
<div class="action iconfont">
<span class="edit" data-href="/home/addressAct?id={{address_id}}&refer=shopping">&#xe61e;</span>
<span class="del" data-id="{{address_id}}">&#xe621;</span>
... ...
... ... @@ -6,14 +6,14 @@
<div class="info-box">
<div class="info-top">
<div>
<span class="username">{{username}}</span>
<span class="username">{{{htmlEncode username}}}</span>
<span class="info-right">
<span>{{praiseNum}} 个赞</span>
</span>
</div>
<div class="time"><span>{{create_time}}</span></div>
</div>
<div class="info-bottom">{{#relayTo}}回复{{username}}{{/relayTo}}{{content}}</div>
<div class="info-bottom">{{#relayTo}}回复{{{htmlEncode username}}}{{/relayTo}}{{content}}</div>
</div>
</div>
{{/comments}}
\ No newline at end of file
... ...
... ... @@ -2,9 +2,9 @@
<div class="page-wrap clearfix modifyAdd" data-rel="{{relation}}" data-order-code="{{orderCode}}">
{{# address}}
<div class="address-item" data-address-id="{{addressId}}" >
<span class="name">{{{consignee}}}</span>
<span class="name">{{{htmlEncode consignee}}}</span>
<span class="tel">{{mobile}}</span>
<p class="address-info">{{area}} {{{address}}}</p>
<p class="address-info">{{area}} {{{htmlEncode address}}}</p>
</div>
{{/ address}}
... ...
... ... @@ -3,9 +3,9 @@
{{# address}}
<input type="hidden" name="_csrf" value="{{@root.csrfToken}}"/>
<div class="address-item">
<span class="name">{{{consignee}}}</span>
<span class="name">{{{htmlEncode consignee}}}</span>
<span class="tel">{{mobile}}</span>
<p class="address-info">{{area}} {{{address}}}</p>
<p class="address-info">{{area}} {{{htmlEncode address}}}</p>
<div class="action iconfont">
<a class="edit" href="/home/addressAct?id={{addressId}}">&#xe61e;</a>
<span class="del" data-id="{{addressId}}">&#xe621;</span>
... ...
... ... @@ -8,7 +8,7 @@
<div class="person-detail">
<a href='{{userInfoLink}}' class="user-avatar" data-avatar="{{image head_ico 80 80}}"></a>
<div class="basic-info">
<span class="user-name">{{{nickname}}}</span>
<span class="user-name">{{{htmlEncode nickname}}}</span>
<span class="gender {{#isEqualOr gender 1}}boy{{/isEqualOr}}{{#isEqualOr gender 2}}girl{{/isEqualOr}}"></span>
</div>
<div class="info">
... ...
... ... @@ -8,7 +8,7 @@
<div class="level level-{{vip_info/cur_level}}"></div>
</div>
<div class="right">
<div class="name eps">{{{nickname}}}</div>
<div class="name eps">{{{htmlEncode nickname}}}</div>
<div class="trend-code-c">
<div class="dot">#&nbsp;</div>
<div class="scroll-c go-scroll">
... ...
... ... @@ -6,7 +6,7 @@
<div class="level level-{{vip_info/cur_level}}"></div>
</div>
<div class="user-info">
<div class="name eps">{{{nickname}}}</div>
<div class="name eps">{{{htmlEncode nickname}}}</div>
<div class="passcode">
{{#if trendWord}}
<div class="dot">#&nbsp;</div>
... ...
... ... @@ -34,11 +34,11 @@
<span class="iconfont">&#xe637;</span>
<div class="beside-icon">
<p class="name-phone">
{{{deliveryInfo.userName}}}
{{{htmlEncode deliveryInfo.userName}}}
<span>{{deliveryInfo.mobile}}</span>
</p>
<p class="address">
{{{addressAll}}}
{{{htmlEncode addressAll}}}
</p>
</div>
</section>
... ... @@ -123,7 +123,7 @@
<div class="info-table">
{{#orderBasicInfo}}
<div class="table-item">
{{key}}{{value}}
{{key}}{{{htmlEncode value}}}
{{# ext}}
{{#if needShowInvoice}}
... ...
<div class="personal-details yoho-page">
<ul>
<li><span>头像</span><span><i class="head-portrait user-avatar" data-avatar="{{image head_ico 128 128}}"></i></span></li>
<li><span>昵称</span><span>{{{ nickname }}}</span></li>
<li><span>昵称</span><span>{{{htmlEncode nickname }}}</span></li>
<li><span>性别</span><span>{{ gender }}</span></li>
<li><span>生日</span><span>{{ birthday }}</span></li>
</ul>
... ...
{{#if vip3}}
<p>
<span class="user-name">{{{name}}}</span>
<span class="user-name">{{{htmlEncode name}}}</span>
<span class="vip-icon vip-3"></span>
</p>
<p class="grade-desc">
... ... @@ -20,7 +20,7 @@
{{#if vip2}}
<p>
<span class="user-name">{{{name}}}</span>
<span class="user-name">{{{htmlEncode name}}}</span>
<span class="vip-icon vip-2"></span>
</p>
<p class="grade-desc">
... ... @@ -43,7 +43,7 @@
{{#if vip1}}
<p>
<span class="user-name">{{{name}}}</span>
<span class="user-name">{{{htmlEncode name}}}</span>
<span class="vip-icon vip-1"></span>
</p>
<p class="grade-desc">
... ... @@ -66,7 +66,7 @@
{{#if vip0}}
<p>
<span class="user-name">{{{name}}}</span>
<span class="user-name">{{{htmlEncode name}}}</span>
<span>普通会员</span>
</p>
<p class="grade-desc">
... ...
... ... @@ -245,7 +245,7 @@ const indexData = (req, res, next) => {
res.json(result);
});
});
}).catch(next);
};
... ... @@ -277,11 +277,12 @@ const getProductList = (req, res, next) => {
res.json({products: resultProducts});
}).catch(error => {
logger.error(error);
return next(error);
});
};
// only app
const remind = (req, res) => {
const remind = (req, res, next) => {
if (!(req.yoho.isApp && req.xhr)) {
return res.status(404).json({
msg: '请求不合法'
... ... @@ -297,7 +298,7 @@ const remind = (req, res) => {
app_type: 0
}).then(result => {
return res.json(result);
});
}).catch(next);
};
// Middleware:检测 app_version 是否正确
... ...
... ... @@ -136,7 +136,7 @@ router.get('/recommend-for-you/cart', recommendForYou.cart);
router.get('/seckill', seckill.index); // 秒杀列表页
router.get('/seckill/list', seckill.indexData);
router.post('/seckill/remind', seckill.remind); // only app; 秒杀提醒
router.post('/seckill/remind', auth, seckill.remind); // only app; 秒杀提醒
router.get('/seckill/get-product-list', seckill.getProductList); // 秒杀列表根据活动id获取商品列表
router.get('/search', search.index); // 搜索主页
... ...
... ... @@ -3,7 +3,7 @@
{{# comments}}
<div class="comment-item clearfix">
<div class="user-info clearfix">
<span class="user-name">{{{userName}}}</span>
<span class="user-name">{{{htmlEncode userName}}}</span>
<span class="goods-spec">
购买了<b>{{color}}</b>
</span>
... ...
... ... @@ -12,7 +12,7 @@
<div class="comment-content-main content-main clearfix">
{{# comments}}
<span class="user-name">
{{{userName}}}
{{{htmlEncode userName}}}
</span>
<p class="goods-spec">
购买了{{desc}}
... ...
... ... @@ -13,11 +13,11 @@ const NAME_CACHE_PREFIX = 'yoho-cache';
const precaches = [
{
url: '/offline.html',
rivision: 'offline-rivision-0.0.1'
revision: 'offline-revision-0.0.2'
},
{
url: '//cdn.yoho.cn/pwa/404.png',
rivision: '404-rivision-0.0.1'
revision: '404-revision-0.0.1'
}].concat(self.__precacheManifest || []);
self.workbox.precaching.precacheAndRoute(precaches);
... ... @@ -25,19 +25,21 @@ self.workbox.precaching.precacheAndRoute(precaches);
/**
* 需要缓存的路径
*/
const CACHED_PATH = [
'boys',
'girls',
'kids',
'lifestyle',
'cate',
'list',
'search',
'product',
'shop',
'guang',
'offline.html'
];
// const CACHED_PATH = [
// 'boys',
// 'girls',
// 'kids',
// 'lifestyle',
// 'cate',
// 'list',
// 'search',
// 'product',
// 'shop',
// 'guang',
// 'offline.html'
// ];
// let routeRegExp = new RegExp(`^\/(${CACHED_PATH.join('|')})`);
// 自定义缓存
self.workbox.routing.registerRoute(args => {
... ... @@ -63,14 +65,7 @@ self.workbox.routing.registerRoute(args => {
// 所有网络走 worker,异常时增加离线页面
self.workbox.routing.registerRoute(args => {
let cached = false;
let routeRegExp = new RegExp(`^\/(${CACHED_PATH.join('|')})`);
if (webDomian.test(args.url.href) &&
(routeRegExp.test(args.url.pathname) ||
args.url.pathname === '/')) {
cached = true;
}
let cached = webDomian.test(args.url.href);
if (args.event.request.headers.get('x-requested-with') === 'XMLHttpRequest' &&
args.event.request.method !== 'GET') {
... ...
... ... @@ -8,7 +8,8 @@ module.exports = yo()
.entry('./public/app.js')
.output({
path: `dist/statics/${config.appName}/`,
publicPath: config.assetUrl
publicPath: config.assetUrl,
crossOriginLoading: 'anonymous'
})
.style({
extract: true
... ... @@ -21,25 +22,25 @@ module.exports = yo()
commons: {
chunks: 'all',
name: 'vendors',
test: /node_modules\/(yoho-jquery[$\/]|core-js|yoho-cookie|yoho-qs|babel-runtime|yoho-jquery-lazyload)/, //eslint-disable-line
test: /node_modules[\\/](yoho-jquery[$\/]|core-js|yoho-cookie|yoho-qs|babel-runtime|yoho-jquery-lazyload)/, //eslint-disable-line
},
vue: {
priority: 1,
chunks: 'all',
name: 'vue',
test: /node_modules\/vue/,
test: /node_modules[\\/]vue/,
},
eachart: {
priority: 1,
chunks: 'all',
name: 'eachart',
test: /node_modules\/(echart|zrender)/,
test: /node_modules[\\/](echart|zrender)/,
},
swiper: {
priority: 1,
chunks: 'all',
name: 'swiper',
test: /node_modules\/(yoho-swiper)/,
test: /node_modules[\\/](yoho-swiper)/,
}
}
}
... ...
... ... @@ -31,7 +31,7 @@ module.exports = function(source) {
}
return `
case '${moduleName}.${pageName}':
return import(/* webpackChunkName: "page.${moduleName}.${pageName}" */ './${path.relative(this.context, file)}');`; //eslint-disable-line
return import(/* webpackChunkName: "page.${moduleName}.${pageName}" */ './${path.relative(this.context, file).split(path.sep).join("/")}');`; //eslint-disable-line
}), '');
}), '');
... ...
... ... @@ -78,7 +78,6 @@ module.exports = {
maxFiles: 1,
tailable: true,
maxsize: Math.pow(1024, 3),
zippedArchive: true,
timestamp() {
return new Date().toString();
}
... ... @@ -91,7 +90,6 @@ module.exports = {
maxFiles: 1,
tailable: true,
maxsize: Math.pow(1024, 3),
zippedArchive: true,
handleExceptions: true,
timestamp() {
return new Date().toString();
... ... @@ -256,6 +254,7 @@ if (isProduction) {
maxFiles: 1,
tailable: true,
maxsize: Math.pow(1024, 3),
zippedArchive: true,
timestamp() {
return new Date().toString();
}
... ... @@ -267,6 +266,7 @@ if (isProduction) {
maxFiles: 1,
tailable: true,
maxsize: Math.pow(1024, 3),
zippedArchive: true,
handleExceptions: true,
timestamp() {
return new Date().toString();
... ... @@ -325,7 +325,7 @@ if (isProduction) {
loggers: {
infoFile: {
name: 'info',
level: 'info',
level: 'debug',
filename: '/Data/logs/yoho-yohobuy-wap/info/info.log',
maxFiles: 1,
tailable: true,
... ...
... ... @@ -7,7 +7,6 @@ const config = global.yoho.config;
module.exports = () => {
return (req, res, next) => {
if (!req.yoho.isApp) {
// 从 SESSION 中获取到当前登录用户的 UID
if (req.session && _.isNumber(req.session.LOGIN_UID_)) {
... ... @@ -39,9 +38,11 @@ module.exports = () => {
};
}
} else {
let params = req.method === 'POST' ? req.body : req.query;
if (!req.user.uid &&
(
(req.query.uid && req.query.uid !== '0') ||
(params.uid && params.uid !== '0') ||
(
req.cookies.app_uid &&
req.cookies.app_uid !== '0' &&
... ... @@ -50,12 +51,12 @@ module.exports = () => {
)
)
) {
let appUid = req.query.uid || req.cookies.app_uid;
let appVersion = req.query.app_version || req.cookies.app_version || config.appVersion;
let appSessionType = req.query.client_type || req.cookies.app_client_type;
let sessionKey = req.query.session_key || req.cookies.app_session_key;
let appUid = params.uid || req.cookies.app_uid;
let appVersion = params.app_version || req.cookies.app_version || config.appVersion;
let appSessionType = params.client_type || req.cookies.app_client_type;
let sessionKey = params.session_key || req.cookies.app_session_key;
req.user.uid = req.query.uid = {
req.user.uid = params.uid = {
toString: () => {
return _.parseInt(appUid);
},
... ... @@ -82,13 +83,16 @@ module.exports = () => {
return _.parseInt(req.cookies.app_uid);
},
sessionKey: req.cookies.app_session_key,
appVersion: req.cookies.app_version || req.query.app_version || config.appVersion,
appVersion: req.cookies.app_version || params.app_version || config.appVersion,
appSessionType: req.cookies.app_client_type
};
}
}
res.locals.isLogin = Boolean(req.user.uid); // 用户是否登录
if (_.get(req, 'user.uid.appSessionType') === 'miniapp') { // miniapp环境下调用接口使用web的version
req.user.uid.appVersion = config.appVersion;
}
next();
};
};
... ...
{
"name": "yohobuywap-node",
"version": "6.7.2",
"version": "6.7.10",
"private": true,
"description": "A New Yohobuy Project With Express",
"repository": {
... ... @@ -9,7 +9,7 @@
},
"scripts": {
"start": "NODE_ENV=\"production\" node app.js",
"dev": "nodemon -e js,hbs -i public/ app.js",
"dev": "nodemon -e js,hbs -i public/ -i dist/ app.js",
"static": "yo-cli dev --config ./build/yo.dev.conf.js",
"build:node": "node ./build/yo.node.conf.js",
"build:sw": "webpack --config ./build/webpack.sw.config.js",
... ... @@ -132,7 +132,7 @@
"whatwg-fetch": "^2.0.4",
"workbox-sw": "^2.1.2",
"workbox-webpack-plugin": "^3.4.1",
"yo-cli": "^2.1.6",
"yo-cli": "=2.1.9",
"yoho-cookie": "^1.2.0",
"yoho-fastclick": "^1.0.6",
"yoho-hammer": "^2.0.8",
... ...
... ... @@ -10,6 +10,8 @@ let $footer = $('#yoho-footer'),
$yohoPage = $('.yoho-page'),
$header = $('.yoho-header');
let cleanHtml = require('../../utils/cleanHtml');
// 为您优选-40位随机数指纹请求id
let RECID = (new Date().getTime() + '_H5_YOHOBUY_' + Math.floor(Math.random() * 1000000 + 1000000) +
'_' + Math.floor(Math.random() * 1000000 + 1000000));
... ... @@ -216,7 +218,7 @@ $.extend({
// 已登录
$op.prepend(
'<span>Hi,</span>' +
'<a class="user-name" href="/home?tmp=' + Math.random() + '">' + user[0] + '</a>' +
'<a class="user-name" href="/home?tmp=' + Math.random() + '">' + cleanHtml.htmlEncode(user[0]) + '</a>' +
'<span class="sep-line">|</span>' +
'<a href="/passport/signout/index">退出</a>'
);
... ...
... ... @@ -5,6 +5,7 @@ require('scss/common/invite-share.scss');
require('js/common');
let $ = require('yoho-jquery');
let inviteCode = window.queryString.inviteCode;
let cleanHtml = require('../../../utils/cleanHtml');
function inviteSharePoint(type) {
if (window._yas && window._yas.sendCustomInfo) {
... ... @@ -28,8 +29,11 @@ function inviteSharePoint(type) {
inviteCode: inviteCode
},
success: function(result) {
if (result.code === 200 && parseInt(result.data.isDisplay, 10) === 1) {
if (result.data && result.data.nickname) {
result.data.nickname = cleanHtml.htmlEncode(result.data.nickname);
}
let shareData = inviteShare({
inviteShare: result.data
});
... ...
... ... @@ -390,7 +390,6 @@ seckillObj = {
onsuccess = $.noop;
if (actionName === 'cancel') {
on_off = false;
action = 'go.delSecKill';
... ... @@ -398,31 +397,48 @@ seckillObj = {
failTip = '取消提醒失败';
}
onsuccess = function() {
$.post('/product/seckill/remind', {
onsuccess = function(info) {
$.post('/product/seckill/remind', $.extend({
on_off: on_off,
activity_id: $product.data('activity'),
product_skn: $product.data('skn'),
uid: yoho.isLogin(),
sec_kill_id: 1,
app_type: 0
})
.done(function(res) {
if (res.code === 200 && res.data === 'success') {
$remindBtn.hide().siblings().show();
tip.show(okTip);
} else {
tip.show(failTip);
}
})
.fail(function() {
}, info)).done(function(res) {
if (res.code === 200 && res.data === 'success') {
$remindBtn.hide().siblings().show();
tip.show(okTip);
} else {
tip.show(failTip);
});
}
}).fail(function() {
tip.show(failTip);
});
};
yoho.invokeMethod(action, params, onsuccess, function() {
yoho.invokeMethod(action, params, function() {
let uid = yoho.isLogin();
if (uid && uid !== '0') {
onsuccess({uid});
} else {
setTimeout(function() {
yoho.getClientUserInfo().then(res => {
if (res.uid && res.uid !== '0') {
return onsuccess(res);
}
yoho.invokeMethod('go.login');
}).catch(() => {
tip.show(failTip);
});
}, 0);
}
}, function() {
tip.show(failTip);
});
},
pageLoad: function(callback) {
... ...
... ... @@ -41,6 +41,7 @@ yoho = {
isNowApp: /yohonow/i.test(navigator.userAgent || ''),
isMarsApp: /YohoMars/i.test(navigator.userAgent || ''),
isYohoApp: /YohoBuy/i.test(navigator.userAgent || ''),
isMiniApp: /miniProgram/i.test(navigator.userAgent || '') || qs && qs.client_type === 'miniapp',
isApp: /YohoMars/i.test(navigator.userAgent || '') ||
/YohoBuy/i.test(navigator.userAgent || '') ||
/yohonow/i.test(navigator.userAgent || '') ||
... ... @@ -125,6 +126,31 @@ yoho = {
};
},
getClientUserInfo: function() {
return new Promise((resolve, reject) => {
let userInfo = {};
let successFn = function(info) {
$.extend(userInfo, info);
if (userInfo.hasOwnProperty('uid') && userInfo.hasOwnProperty('session_key')) {
return resolve(userInfo);
}
};
this.invokeMethod('get.uid', {}, uid => {
successFn({uid: uid});
}, () => {
return reject();
});
this.invokeMethod('get.sessionId', {}, sessionId => {
successFn({session_key: sessionId});
}, () => {
return reject();
});
});
},
getUid: function() {
if (yoho.isApp) {
return qs.uid || cookie.get('_YOHOUID') || cookie.get('app_uid');
... ... @@ -141,6 +167,9 @@ yoho = {
},
goLogin: function(refer, data) {
if (this.isMiniApp) {
return false;
}
let url;
if (refer.indexOf('//') === 0) {
... ...
... ... @@ -23,7 +23,7 @@
background-repeat: no-repeat;
p {
z-index: 10;
z-index: 4;
position: absolute;
top: 0;
padding: 38px 0 0 34px;
... ...
... ... @@ -51,11 +51,11 @@
> div {
$init: 0.12s;
@for $i from 1 to 3 {
&:nth-child($i) {
@for $i from 1 through 3 {
&:nth-child(#{$i}) {
animation: loadingScale 0.75s $init infinite cubic-bezier(0.2, 0.68, 0.18, 1.08);
}
$init: calc(($i + 1) * 0.12);
$init: calc((#{$i} + 1) * 0.12);
}
display: inline-block;
... ...
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var s=t[n]={i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,r),s.l=!0,s.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)r.d(n,s,function(t){return e[t]}.bind(null,s));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r(1);var n=o(r(2)),s=o(r(3));function o(e){return e&&e.__esModule?e:{default:e}}var a=["boys","girls","kids","lifestyle","cate","list","search","product","shop","guang"],i={customCacheUrl:[/^https:\/\/(.*)cdn\.yoho\.cn/i],precachePage:["/offline.html"],precacheStaticFile:["/index.css","/common.css","/libs.js","/font/iconfont.woff","/common.offline.js","/common.offline.css"],precacheCdnStaticFile:["https://cdn.yoho.cn/pwa/404.png"]},c=(0,s.default)(self.location.search.substr(1)),h=new n.default({clientsClaim:!0,skipWaiting:!0}),u=h.strategies.cacheFirst({cacheableResponse:{statuses:[0,200]},cacheExpiration:{maxEntries:1e3,maxAgeSeconds:604800}}),l=[{url:"/sw.js?t="+c.t+"&staticServer="+c.staticServer}].concat(i.precacheStaticFile.map(function(e){return{url:self.location.protocol+c.staticServer+e+"?t="+c.t}})).concat(i.precachePage.map(function(e){return{url:e+"?t="+c.t}})).concat(i.precacheCdnStaticFile.map(function(e){return{url:e}}));h.precache(l),i.customCacheUrl.forEach(function(e){h.router.registerRoute(e,u)}),h.router.registerRoute(function(e){var t=!1,r=new RegExp("^/("+a.join("|")+")");return/^https:\/\/m.yohobuy.com/.test(e.url.href)&&(r.test(e.url.pathname)||"/"===e.url.pathname)&&(t=!0),"XMLHttpRequest"===e.event.request.headers.get("x-requested-with")&&(t=!1),t},function(e){return h.strategies.networkFirst({cacheExpiration:{maxEntries:300,maxAgeSeconds:43200}}).handle(e).then(function(t){return t||"navigate"!==e.event.request.mode?t:caches.match("offline.html?t="+c.t)})}),h.router.registerRoute(function(e){var t=!1;return/image\/webp/i.test(e.event.request.headers.get("Accept"))?(/^https:\/\/(.*)static\.yhbimg\.com(.*)(png|jpg|jpeg)\?(imageView|imageMogr)(.*)/.test(e.url.href)&&/^(?!.*format\/).*/.test(e.url.href)&&(t=!0),t):t},function(e){return e.event=new FetchEvent(e.event.type,{request:new Request(e.event.request.url+"/format/webp"),clientId:e.event.clientId,isReload:e.event.isReload}),h.strategies.networkOnly().handle(e)})},function(e,t){!function(e){"use strict";if(!e.fetch){var t={searchParams:"URLSearchParams"in e,iterable:"Symbol"in e&&"iterator"in Symbol,blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e};if(t.arrayBuffer)var r=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],n=function(e){return e&&DataView.prototype.isPrototypeOf(e)},s=ArrayBuffer.isView||function(e){return e&&r.indexOf(Object.prototype.toString.call(e))>-1};u.prototype.append=function(e,t){e=i(e),t=c(t);var r=this.map[e];this.map[e]=r?r+","+t:t},u.prototype.delete=function(e){delete this.map[i(e)]},u.prototype.get=function(e){return e=i(e),this.has(e)?this.map[e]:null},u.prototype.has=function(e){return this.map.hasOwnProperty(i(e))},u.prototype.set=function(e,t){this.map[i(e)]=c(t)},u.prototype.forEach=function(e,t){for(var r in this.map)this.map.hasOwnProperty(r)&&e.call(t,this.map[r],r,this)},u.prototype.keys=function(){var e=[];return this.forEach(function(t,r){e.push(r)}),h(e)},u.prototype.values=function(){var e=[];return this.forEach(function(t){e.push(t)}),h(e)},u.prototype.entries=function(){var e=[];return this.forEach(function(t,r){e.push([r,t])}),h(e)},t.iterable&&(u.prototype[Symbol.iterator]=u.prototype.entries);var o=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];m.prototype.clone=function(){return new m(this,{body:this._bodyInit})},g.call(m.prototype),g.call(b.prototype),b.prototype.clone=function(){return new b(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new u(this.headers),url:this.url})},b.error=function(){var e=new b(null,{status:0,statusText:""});return e.type="error",e};var a=[301,302,303,307,308];b.redirect=function(e,t){if(-1===a.indexOf(t))throw new RangeError("Invalid status code");return new b(null,{status:t,headers:{location:e}})},e.Headers=u,e.Request=m,e.Response=b,e.fetch=function(e,r){return new Promise(function(n,s){var o=new m(e,r),a=new XMLHttpRequest;a.onload=function(){var e={status:a.status,statusText:a.statusText,headers:function(e){var t=new u;return e.replace(/\r?\n[\t ]+/g," ").split(/\r?\n/).forEach(function(e){var r=e.split(":"),n=r.shift().trim();if(n){var s=r.join(":").trim();t.append(n,s)}}),t}(a.getAllResponseHeaders()||"")};e.url="responseURL"in a?a.responseURL:e.headers.get("X-Request-URL");var t="response"in a?a.response:a.responseText;n(new b(t,e))},a.onerror=function(){s(new TypeError("Network request failed"))},a.ontimeout=function(){s(new TypeError("Network request failed"))},a.open(o.method,o.url,!0),"include"===o.credentials?a.withCredentials=!0:"omit"===o.credentials&&(a.withCredentials=!1),"responseType"in a&&t.blob&&(a.responseType="blob"),o.headers.forEach(function(e,t){a.setRequestHeader(t,e)}),a.send(void 0===o._bodyInit?null:o._bodyInit)})},e.fetch.polyfill=!0}function i(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function c(e){return"string"!=typeof e&&(e=String(e)),e}function h(e){var r={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return t.iterable&&(r[Symbol.iterator]=function(){return r}),r}function u(e){this.map={},e instanceof u?e.forEach(function(e,t){this.append(t,e)},this):Array.isArray(e)?e.forEach(function(e){this.append(e[0],e[1])},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function l(e){if(e.bodyUsed)return Promise.reject(new TypeError("Already read"));e.bodyUsed=!0}function d(e){return new Promise(function(t,r){e.onload=function(){t(e.result)},e.onerror=function(){r(e.error)}})}function p(e){var t=new FileReader,r=d(t);return t.readAsArrayBuffer(e),r}function f(e){if(e.slice)return e.slice(0);var t=new Uint8Array(e.byteLength);return t.set(new Uint8Array(e)),t.buffer}function g(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,e)if("string"==typeof e)this._bodyText=e;else if(t.blob&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(t.formData&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(t.searchParams&&URLSearchParams.prototype.isPrototypeOf(e))this._bodyText=e.toString();else if(t.arrayBuffer&&t.blob&&n(e))this._bodyArrayBuffer=f(e.buffer),this._bodyInit=new Blob([this._bodyArrayBuffer]);else{if(!t.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(e)&&!s(e))throw new Error("unsupported BodyInit type");this._bodyArrayBuffer=f(e)}else this._bodyText="";this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type?this.headers.set("content-type",this._bodyBlob.type):t.searchParams&&URLSearchParams.prototype.isPrototypeOf(e)&&this.headers.set("content-type","application/x-www-form-urlencoded;charset=UTF-8"))},t.blob&&(this.blob=function(){var e=l(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob([this._bodyArrayBuffer]));if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this._bodyArrayBuffer?l(this)||Promise.resolve(this._bodyArrayBuffer):this.blob().then(p)}),this.text=function(){var e=l(this);if(e)return e;if(this._bodyBlob)return function(e){var t=new FileReader,r=d(t);return t.readAsText(e),r}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function(e){for(var t=new Uint8Array(e),r=new Array(t.length),n=0;n<t.length;n++)r[n]=String.fromCharCode(t[n]);return r.join("")}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)},t.formData&&(this.formData=function(){return this.text().then(y)}),this.json=function(){return this.text().then(JSON.parse)},this}function m(e,t){var r=(t=t||{}).body;if(e instanceof m){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new u(e.headers)),this.method=e.method,this.mode=e.mode,r||null==e._bodyInit||(r=e._bodyInit,e.bodyUsed=!0)}else this.url=String(e);if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new u(t.headers)),this.method=function(e){var t=e.toUpperCase();return o.indexOf(t)>-1?t:e}(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&r)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(r)}function y(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var r=e.split("="),n=r.shift().replace(/\+/g," "),s=r.join("=").replace(/\+/g," ");t.append(decodeURIComponent(n),decodeURIComponent(s))}}),t}function b(e,t){t||(t={}),this.type="default",this.status=void 0===t.status?200:t.status,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new u(t.headers),this.url=t.url||"",this._initBody(e)}}("undefined"!=typeof self?self:this)},function(e,t,r){"use strict";r.r(t);class n{constructor(e){this._errors=e}createError(e,t){if(!(e in this._errors))throw new Error(`Unable to generate error '${e}'.`);let r=this._errors[e].replace(/\s+/g," "),n=null;t&&(r+=` [${t.message}]`,n=t.stack);const s=new Error;return s.name=e,s.message=r,s.stack=n,s}}var s=new n({"not-in-sw":"workbox-sw must be loaded in your service worker file.","unsupported-route-type":"The first parameter to registerRoute() should be either an Express-style path string, a RegExp, or a function.","empty-express-string":"The Express style route string must have some characters, an empty string is invalid.","bad-revisioned-cache-list":"The 'precache()' method expectsan array of revisioned urls like so: ['/example/hello.1234.txt', {path: 'hello.txt', revision: '1234'}]","navigation-route-url-string":"The registerNavigationRoute() method expects a URL string as its first parameter.","bad-cache-id":"The 'cacheId' parameter must be a string with at least one character","bad-skip-waiting":"The 'skipWaiting' parameter must be a boolean.","bad-clients-claim":"The 'clientsClaim' parameter must be a boolean.","bad-directory-index":"The 'directoryIndex' parameter must be a boolean."});class o{constructor(){this._logs=[],this._childGroups=[],this._isFallbackMode=!1;const e=/Firefox\/(\d*)\.\d*/.exec(navigator.userAgent);if(e)try{55>parseInt(e[1],10)&&(this._isFallbackMode=!0)}catch(e){this._isFallbackMode=!0}/Edge\/\d*\.\d*/.exec(navigator.userAgent)&&(this._isFallbackMode=!0)}addPrimaryLog(e){this._primaryLog=e}addLog(e){this._logs.push(e)}addChildGroup(e){0===e._logs.length||this._childGroups.push(e)}print(){return 0===this._logs.length&&0===this._childGroups.length?void this._printLogDetails(this._primaryLog):(this._primaryLog&&(this._isFallbackMode?this._printLogDetails(this._primaryLog):console.groupCollapsed(...this._getLogContent(this._primaryLog))),this._logs.forEach(e=>{this._printLogDetails(e)}),this._childGroups.forEach(e=>{e.print()}),void(this._primaryLog&&!this._isFallbackMode&&console.groupEnd()))}_printLogDetails(e){(e.logFunc?e.logFunc:console.log)(...this._getLogContent(e))}_getLogContent(e){let t=e.message;this._isFallbackMode&&"string"==typeof t&&(t=t.replace(/%c/g,""));let r=[t];return!this._isFallbackMode&&e.colors&&(r=r.concat(e.colors)),e.args&&(r=r.concat(e.args)),r}}function a(){return"ServiceWorkerGlobalScope"in self&&self instanceof ServiceWorkerGlobalScope}self.workbox=self.workbox||{},self.workbox.LOG_LEVEL=self.workbox.LOG_LEVEL||{none:-1,verbose:0,debug:1,warn:2,error:3};const i="#bdc3c7",c="#7f8c8d",h="#2ecc71",u="#f1c40f",l="#e74c3c",d="#3498db";var p=new class{constructor(){this._defaultLogLevel=self.workbox.LOG_LEVEL.warn}log(e){this._printMessage(self.workbox.LOG_LEVEL.verbose,e)}debug(e){this._printMessage(self.workbox.LOG_LEVEL.debug,e)}warn(e){this._printMessage(self.workbox.LOG_LEVEL.warn,e)}error(e){this._printMessage(self.workbox.LOG_LEVEL.error,e)}_printMessage(e,t){this._shouldLogMessage(e,t)&&this._getAllLogGroups(e,t).print()}_getAllLogGroups(e,t){const r=new o,n=this._getPrimaryMessageDetails(e,t);if(r.addPrimaryLog(n),t.error){const e={message:t.error,logFunc:console.error};r.addLog(e)}const s=new o;if(t.that&&t.that.constructor&&t.that.constructor.name){const e=t.that.constructor.name;s.addLog(this._getKeyValueDetails("class",e))}return t.data&&("object"!=typeof t.data||t.data instanceof Array?s.addLog(this._getKeyValueDetails("additionalData",t.data)):Object.keys(t.data).forEach(e=>{s.addLog(this._getKeyValueDetails(e,t.data[e]))})),r.addChildGroup(s),r}_getKeyValueDetails(e,t){return{message:`%c${e}: `,colors:[`color: ${d}`],args:t}}_getPrimaryMessageDetails(e,t){let r,n;e===self.workbox.LOG_LEVEL.verbose?(r="Info",n=i):e===self.workbox.LOG_LEVEL.debug?(r="Debug",n=h):e===self.workbox.LOG_LEVEL.warn?(r="Warn",n=u):e===self.workbox.LOG_LEVEL.error&&(r="Error",n=l);let s=`%c🔧 %c[${r}]`;const o=[`color: ${i}`,`color: ${n}`];let a;return"string"==typeof t?a=t:t.message&&(a=t.message),a&&(s+=`%c ${a=a.replace(/\s+/g," ")}`,o.push(`color: ${c}; font-weight: normal`)),{message:s,colors:o}}_shouldLogMessage(e,t){if(!t)return!1;let r=this._defaultLogLevel;return self&&self.workbox&&"number"==typeof self.workbox.logLevel&&(r=self.workbox.logLevel),!(r===self.workbox.LOG_LEVEL.none||e<r)}};var f=new n({"express-route-invalid-path":"When using ExpressRoute, you must\n provide a path that starts with a '/' character (to match same-origin\n requests) or that starts with 'http' (to match cross-origin requests)"}),g={parse:()=>[]};function m(e){const t=Object.keys(e);t.some(t=>void 0!==e[t])||_("Please set at least one of the following parameters: "+t.map(e=>`'${e}'`).join(", "))}function y(e,t){const r=Object.keys(e).pop();e[r]instanceof t||_(`The '${r}' parameter must be an instance of\n '${t.name}'`)}function b(e,t){const r=Object.keys(e).pop(),n=typeof e[r];n!==t&&_(`The '${r}' parameter has the wrong type. (Expected:\n ${t}, actual: ${n})`)}function w(e,t){const r=Object.keys(e).pop(),n=`The '${r}' parameter should be an array containing\n one or more '${t}' elements.`;Array.isArray(e[r])||_(n);for(let s of e[r])typeof s!==t&&_(n)}function v(e,t){const r=Object.keys(e).pop(),n=`The '${r}' parameter should be an array containing\n one or more '${t.name}' instances.`;Array.isArray(e[r])||_(n);for(let s of e[r])s instanceof t||_(n)}function _(e){e=e.replace(/\s+/g," ");const t=new Error(e);t.name="assertion-failed";const r=g.parse(t);throw 3<=r.length&&(t.message=`Invalid call to ${r[2].functionName}() `+e),t}function x(e){return"object"==typeof e?(function(e,t){const r=Object.keys(e).pop();"function"!=typeof e[r][t]&&_(`The '${r}' parameter must be an object that exposes a\n '${t}' method.`)}({handler:e},"handle"),e):(b({handler:e},"function"),{handle:e})}const E="GET",R=["DELETE","GET","HEAD","POST","PUT"];class C{constructor({match:e,handler:t,method:r}={}){this.handler=x(t),b({match:e},"function"),this.match=e,r?(function(e,t){const r=Object.keys(e).pop();t.includes(e[r])||_(`The '${r}' parameter must be set to one of the\n following: ${t}`)}({method:r},R),this.method=r):this.method=E}}var q=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)},N=W,L=P,T=function(e,t){return S(P(e,t))},D=S,k=M,U=new RegExp("(\\\\.)|([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))","g");function P(e,t){for(var r,n=[],s=0,o=0,a="",i=t&&t.delimiter||"/";null!=(r=U.exec(e));){var c=r[0],h=r[1],u=r.index;if(a+=e.slice(o,u),o=u+c.length,h)a+=h[1];else{var l=e[o],d=r[2],p=r[3],f=r[4],g=r[5],m=r[6],y=r[7];a&&(n.push(a),a="");var b=r[2]||i,w=f||g;n.push({name:p||s++,prefix:d||"",delimiter:b,optional:"?"===m||"*"===m,repeat:"+"===m||"*"===m,partial:null!=d&&null!=l&&l!==d,asterisk:!!y,pattern:w?j(w):y?".*":"[^"+I(b)+"]+?"})}}return o<e.length&&(a+=e.substr(o)),a&&n.push(a),n}function O(e){return encodeURI(e).replace(/[\/?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function A(e){return encodeURI(e).replace(/[?#]/g,function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})}function S(e){for(var t=Array(e.length),r=0;r<e.length;r++)"object"==typeof e[r]&&(t[r]=new RegExp("^(?:"+e[r].pattern+")$"));return function(r,n){for(var s,o="",a=r||{},i=(n||{}).pretty?O:encodeURIComponent,c=0;c<e.length;c++)if("string"!=typeof(s=e[c])){var h,u=a[s.name];if(null==u){if(s.optional){s.partial&&(o+=s.prefix);continue}throw new TypeError('Expected "'+s.name+'" to be defined')}if(q(u)){if(!s.repeat)throw new TypeError('Expected "'+s.name+'" to not repeat, but received `'+JSON.stringify(u)+"`");if(0===u.length){if(s.optional)continue;throw new TypeError('Expected "'+s.name+'" to not be empty')}for(var l=0;l<u.length;l++){if(h=i(u[l]),!t[c].test(h))throw new TypeError('Expected all "'+s.name+'" to match "'+s.pattern+'", but received `'+JSON.stringify(h)+"`");o+=(0===l?s.prefix:s.delimiter)+h}}else{if(h=s.asterisk?A(u):i(u),!t[c].test(h))throw new TypeError('Expected "'+s.name+'" to match "'+s.pattern+'", but received "'+h+'"');o+=s.prefix+h}}else o+=s;return o}}function I(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function j(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function F(e,t){return e.keys=t,e}function B(e){return e.sensitive?"":"i"}function M(e,t,r){q(t)||(r=t||r,t=[]);for(var n,s=(r=r||{}).strict,o=!1!==r.end,a="",i=0;i<e.length;i++)if("string"==typeof(n=e[i]))a+=I(n);else{var c=I(n.prefix),h="(?:"+n.pattern+")";t.push(n),n.repeat&&(h+="(?:"+c+h+")*"),a+=h=n.optional?n.partial?c+"("+h+")?":"(?:"+c+"("+h+"))?":c+"("+h+")"}var u=I(r.delimiter||"/"),l=a.slice(-u.length)===u;return s||(a=(l?a.slice(0,-u.length):a)+"(?:"+u+"(?=$))?"),a+=o?"$":s&&l?"":"(?="+u+"|$)",F(new RegExp("^"+a,B(r)),t)}function W(e,t,r){return q(t)||(r=t||r,t=[]),r=r||{},e instanceof RegExp?function(e,t){var r=e.source.match(/\((?!\?)/g);if(r)for(var n=0;n<r.length;n++)t.push({name:n,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return F(e,t)}(e,t):q(e)?function(e,t,r){for(var n=[],s=0;s<e.length;s++)n.push(W(e[s],t,r).source);return F(new RegExp("(?:"+n.join("|")+")",B(r)),t)}(e,t,r):function(e,t,r){return M(P(e,r),t,r)}(e,t,r)}N.parse=L,N.compile=T,N.tokensToFunction=D,N.tokensToRegExp=k;class $ extends C{constructor({path:e,handler:t,method:r}){if(!e.startsWith("/")&&!e.startsWith("http"))throw f.createError("express-route-invalid-path");let n=[];const s=N(e,n);super({match:({url:t})=>{if(e.startsWith("/")&&t.origin!==location.origin)return null;const r=(e.startsWith("/")?t.pathname:t.href).match(s);if(!r)return null;const o={};return n.forEach((e,t)=>{o[e.name]=r[t+1]}),o},handler:t,method:r})}}class G extends C{constructor({whitelist:e,blacklist:t,handler:r}={}){v({whitelist:e},RegExp),t?v({blacklist:t},RegExp):t=[],super({match:({event:n,url:s})=>{let o,a=!1;if("navigate"===n.request.mode){const n=s.pathname+s.search;e.some(e=>e.test(n))?t.some(e=>e.test(n))?o="The navigation route is not being used, since the request URL matches both the whitelist and blacklist.":(o="The navigation route is being used.",a=!0):o="The navigation route is not being used, since the URL being navigated to doesn't match the whitelist.",p.debug({that:this,message:o,data:{"request-url":s.href,whitelist:e,blacklist:t,handler:r}})}return a},handler:r,method:"GET"})}}class H extends C{constructor({regExp:e,handler:t,method:r}){y({regExp:e},RegExp),super({match:({url:t})=>{const r=e.exec(t.href);return r?t.origin!==location.origin&&0!==r.index?(p.debug({that:this,message:"Skipping route, because the RegExp match didn't occur at the start of the URL.",data:{url:t.href,regExp:e}}),null):r.slice(1):null},handler:t,method:r})}}class V{constructor(){this._routes=new Map,this._isListenerRegistered=!1}addFetchListener(){return this._isListenerRegistered?(p.warn({that:this,message:"addFetchListener() has already been called for this Router."}),!1):(this._isListenerRegistered=!0,self.addEventListener("fetch",e=>{const t=this.handleRequest({event:e});t&&e.respondWith(t)}),!0)}handleRequest({event:e}){y({event:e},FetchEvent);const t=new URL(e.request.url);if(!t.protocol.startsWith("http"))return void p.log({that:this,message:"The URL does not start with HTTP, so it can't be handled.",data:{request:e.request}});let{handler:r,params:n}=this._findHandlerAndParams({event:e,url:t});if(!r&&this.defaultHandler&&(r=this.defaultHandler),r){let s=r.handle({url:t,event:e,params:n});return this.catchHandler&&(s=s.catch(r=>this.catchHandler.handle({url:t,event:e,error:r}))),s}}_findHandlerAndParams({event:e,url:t}){const r=this._routes.get(e.request.method)||[];for(const n of r){let r=n.match({url:t,event:e});if(r)return p.log({that:this,message:"The router found a matching route.",data:{route:n,request:e.request}}),Array.isArray(r)&&0===r.length?r=void 0:r.constructor===Object&&0===Object.keys(r).length&&(r=void 0),{params:r,handler:n.handler}}return{handler:void 0,params:void 0}}setDefaultHandler({handler:e}={}){this.defaultHandler=x(e)}setCatchHandler({handler:e}={}){this.catchHandler=x(e)}registerRoutes({routes:e}={}){v({routes:e},C);for(let t of e)this._routes.has(t.method)||this._routes.set(t.method,[]),this._routes.get(t.method).unshift(t)}registerRoute({route:e}={}){y({route:e},C),this.registerRoutes({routes:[e]})}unregisterRoutes({routes:e}={}){v({routes:e},C);for(let t of e){this._routes.has(t.method)||p.error({that:this,message:`Can't unregister route; there are no ${t.method}\n routes registered.`,data:{route:t}});const e=this._routes.get(t.method).indexOf(t);-1<e?this._routes.get(t.method).splice(e,1):p.error({that:this,message:"Can't unregister route; the route wasn't previously\n registered.",data:{route:t}})}}unregisterRoute({route:e}={}){y({route:e},C),this.unregisterRoutes({routes:[e]})}}class K extends V{constructor(e,t){super({handleFetch:t}),this._revisionedCacheName=e}registerRoute(e,t,r="GET"){let n;if("function"==typeof t&&(t={handle:t}),"string"==typeof e){if(0===e.length)throw s.createError("empty-express-string");const o=(e.startsWith("http")?new URL(e,location).pathname:e).match(/[*:?+]/);o&&p.warn({message:"registerRoute() was called with a string containing an Express-style wildcard character. In the next version of Workbox, Express-style wildcards won't be supported, and strings will be treated a exact matches. Please switch to regular expressions for equivalent behavior.",data:{"Path String":e,"Wildcard Character":o[0],"Learn More":"https://goo.gl/xZMKEV"}}),n=new $({path:e,handler:t,method:r})}else if(e instanceof RegExp)n=new H({regExp:e,handler:t,method:r});else{if("function"!=typeof e)throw s.createError("unsupported-route-type");n=new C({match:e,handler:t,method:r})}return super.registerRoute({route:n}),n}registerNavigationRoute(e,t={}){if("string"!=typeof e)throw s.createError("navigation-route-url-string");const r="cacheName"in t?t.cacheName:this._revisionedCacheName;super.registerRoute({route:new G({handler:()=>caches.match(e,{cacheName:r}),whitelist:t.whitelist||[/./],blacklist:t.blacklist||[]})})}}var J=new n({"multiple-cache-will-update-plugins":"You cannot register more than one plugin that implements cacheWillUpdate.","multiple-cached-response-will-be-used-plugins":"You cannot register more than one plugin that implements cachedResponseWillBeUsed.","invalid-response-for-caching":"The fetched response could not be cached due to an invalid response code.","no-response-received":"No response received; falling back to cache.","bad-cache-id":"The 'cacheId' parameter must be a string with at least one character."});class X{constructor({statuses:e,headers:t}={}){m({statuses:e,headers:t}),void 0!==e&&w({statuses:e},"number"),void 0!==t&&b({headers:t},"object"),this.statuses=e,this.headers=t}isResponseCacheable({request:e,response:t}={}){y({response:t},Response);let r=!0;if(this.statuses&&(r=this.statuses.includes(t.status)),this.headers&&r&&(r=Object.keys(this.headers).some(e=>t.headers.get(e)===this.headers[e])),!r){const r={response:t};this.statuses&&(r["valid-status-codes"]=JSON.stringify(this.statuses)),this.headers&&(r["valid-headers"]=JSON.stringify(this.headers)),e&&(r.request=e),p.debug({message:"The response does not meet the criteria for being added to the\n cache.",data:r})}return r}}class z extends X{cacheWillUpdate({request:e,response:t}={}){return this.isResponseCacheable({request:e,response:t})}}const Y=({cacheId:e}={})=>{let t="workbox-runtime-caching";return e&&(t=`${e}-${t}`),self&&self.registration&&(t+=`-${self.registration.scope}`),t},Z=["cacheDidUpdate","cachedResponseWillBeUsed","cacheWillUpdate","fetchDidFail","requestWillFetch"];var Q=({response:e})=>{y({response:e},Response);const t=e.clone();return("body"in t?Promise.resolve(t.body):t.blob()).then(e=>new Response(e,{headers:t.headers,status:t.status,statusText:t.statusText}))},ee=function(e){return function(){var t=e.apply(this,arguments);return new Promise(function(e,r){return function n(s,o){try{var a=t[s](o),i=a.value}catch(e){return void r(e)}if(!a.done)return Promise.resolve(i).then(function(e){n("next",e)},function(e){n("throw",e)});e(i)}("next")})}};class te{constructor({cacheName:e,cacheId:t,plugins:r,fetchOptions:n,matchOptions:s}={}){if(t&&("string"!=typeof t||0===t.length))throw J.createError("bad-cache-id");e?(b({cacheName:e},"string"),this.cacheName=e,t&&(this.cacheName=`${t}-${this.cacheName}`)):this.cacheName=Y({cacheId:t}),n&&(b({fetchOptions:n},"object"),this.fetchOptions=n),s&&(b({matchOptions:s},"object"),this.matchOptions=s),this.plugins=new Map,r&&(w({plugins:r},"object"),r.forEach(e=>{for(let t of Z)if("function"==typeof e[t]){if(this.plugins.has(t)){if("cacheWillUpdate"===t)throw J.createError("multiple-cache-will-update-plugins");if("cachedResponseWillBeUsed"===t)throw J.createError("multiple-cached-response-will-be-used-plugins")}else this.plugins.set(t,[]);this.plugins.get(t).push(e)}})),this.plugins.has("cacheWillUpdate")&&(this._userSpecifiedCachableResponsePlugin=this.plugins.get("cacheWillUpdate")[0])}getDefaultCacheableResponsePlugin(){return this._defaultCacheableResponsePlugin||(this._defaultCacheableResponsePlugin=new z({statuses:[200]})),this._defaultCacheableResponsePlugin}getCache(){var e=this;return ee(function*(){return e._cache||(e._cache=yield caches.open(e.cacheName)),e._cache})()}match({request:e}){var t=this;return ee(function*(){m({request:e});const r=yield t.getCache();let n=yield r.match(e,t.matchOptions);if(t.plugins.has("cachedResponseWillBeUsed")){n=yield t.plugins.get("cachedResponseWillBeUsed")[0].cachedResponseWillBeUsed({request:e,cache:r,cachedResponse:n,matchOptions:t.matchOptions,cacheName:t.cacheName})}return n})()}fetch({request:e}){var t=this;return ee(function*(){"string"==typeof e?e=new Request(e):y({request:e},Request);const r=t.plugins.has("fetchDidFail")?e.clone():null;if(t.plugins.has("requestWillFetch"))for(let r of t.plugins.get("requestWillFetch")){const t=yield r.requestWillFetch({request:e});y({returnedRequest:t},Request),e=t}try{return yield fetch(e,t.fetchOptions)}catch(e){if(t.plugins.has("fetchDidFail"))for(let e of t.plugins.get("fetchDidFail"))yield e.fetchDidFail({request:r.clone()});throw e}})()}fetchAndCache({request:e,waitOnCache:t,cacheKey:r,cacheResponsePlugin:n,cleanRedirects:s}){var o=this;return ee(function*(){let a;m({request:e});const i=yield o.fetch({request:e}),c=yield(o._userSpecifiedCachableResponsePlugin||n||o.getDefaultCacheableResponsePlugin()).cacheWillUpdate({request:e,response:i});if(c){const t=s&&i.redirected?yield Q({response:i}):i.clone();a=o.getCache().then((()=>{var n=ee(function*(n){let s;const a=r||e;if("opaque"!==i.type&&o.plugins.has("cacheDidUpdate")&&(s=yield o.match({request:a})),yield n.put(a,t),o.plugins.has("cacheDidUpdate"))for(let e of o.plugins.get("cacheDidUpdate"))yield e.cacheDidUpdate({cacheName:o.cacheName,oldResponse:s,newResponse:t,url:"url"in a?a.url:a})});return function(){return n.apply(this,arguments)}})())}else if(!c&&t)throw J.createError("invalid-response-for-caching");return t&&a&&(yield a),i})()}}class re{constructor({requestWrapper:e,waitOnCache:t}={}){this.requestWrapper=e||new te,this.waitOnCache=!!t}handle({event:e,params:t}={}){throw Error("This abstract method must be implemented in a subclass.")}}class ne extends re{handle({event:e}={}){var t=this;return ee(function*(){return y({event:e},FetchEvent),(yield t.requestWrapper.match({request:e.request}))||(yield t.requestWrapper.fetchAndCache({request:e.request,waitOnCache:t.waitOnCache}))})()}}class se extends re{handle({event:e}={}){var t=this;return ee(function*(){return y({event:e},FetchEvent),yield t.requestWrapper.match({request:e.request})})()}}class oe extends re{constructor(e={}){super(e),this._cacheablePlugin=new z({statuses:[0,200]});const{networkTimeoutSeconds:t}=e;t&&(b({networkTimeoutSeconds:t},"number"),this.networkTimeoutSeconds=t)}handle({event:e}={}){var t=this;return ee(function*(){y({event:e},FetchEvent);const r=[];let n;t.networkTimeoutSeconds&&r.push(new Promise(function(r){n=setTimeout(function(){r(t.requestWrapper.match({request:e.request}))},1e3*t.networkTimeoutSeconds)}));const s=t.requestWrapper.fetchAndCache({request:e.request,waitOnCache:t.waitOnCache,cacheResponsePlugin:t._cacheablePlugin}).then(function(e){return n&&clearTimeout(n),e||Promise.reject(J.createError("no-response-received"))}).catch(function(){return t.requestWrapper.match({request:e.request})});return r.push(s),Promise.race(r)})()}}class ae extends re{handle({event:e}={}){var t=this;return ee(function*(){return y({event:e},FetchEvent),yield t.requestWrapper.fetch({request:e.request})})()}}class ie extends re{constructor(e={}){super(e),this._cacheablePlugin=new z({statuses:[0,200]})}handle({event:e}={}){var t=this;return ee(function*(){y({event:e},FetchEvent);const r=t.requestWrapper.fetchAndCache({request:e.request,waitOnCache:t.waitOnCache,cacheResponsePlugin:t._cacheablePlugin}).catch(function(){return Response.error()});return(yield t.requestWrapper.match({request:e.request}))||(yield r)})()}}let ce="workbox-cache-expiration";self&&self.registration&&(ce+=`-${self.registration.scope}`);const he=ce,ue=1,le="url",de="timestamp";var pe=function(e,t){return e(t={exports:{}},t.exports),t.exports}(function(e){!function(){function t(e){return new Promise(function(t,r){e.onsuccess=function(){t(e.result)},e.onerror=function(){r(e.error)}})}function r(e,r,n){var s,o=new Promise(function(o,a){t(s=e[r].apply(e,n)).then(o,a)});return o.request=s,o}function n(e,t,n){var s=r(e,t,n);return s.then(function(e){return e?new h(e,s.request):void 0})}function s(e,t,r){r.forEach(function(r){Object.defineProperty(e.prototype,r,{get:function(){return this[t][r]},set:function(e){this[t][r]=e}})})}function o(e,t,n,s){s.forEach(function(s){s in n.prototype&&(e.prototype[s]=function(){return r(this[t],s,arguments)})})}function a(e,t,r,n){n.forEach(function(n){n in r.prototype&&(e.prototype[n]=function(){return this[t][n].apply(this[t],arguments)})})}function i(e,t,r,s){s.forEach(function(s){s in r.prototype&&(e.prototype[s]=function(){return n(this[t],s,arguments)})})}function c(e){this._index=e}function h(e,t){this._cursor=e,this._request=t}function u(e){this._store=e}function l(e){this._tx=e,this.complete=new Promise(function(t,r){e.oncomplete=function(){t()},e.onerror=function(){r(e.error)},e.onabort=function(){r(e.error)}})}function d(e,t,r){this._db=e,this.oldVersion=t,this.transaction=new l(r)}function p(e){this._db=e}s(c,"_index",["name","keyPath","multiEntry","unique"]),o(c,"_index",IDBIndex,["get","getKey","getAll","getAllKeys","count"]),i(c,"_index",IDBIndex,["openCursor","openKeyCursor"]),s(h,"_cursor",["direction","key","primaryKey","value"]),o(h,"_cursor",IDBCursor,["update","delete"]),["advance","continue","continuePrimaryKey"].forEach(function(e){e in IDBCursor.prototype&&(h.prototype[e]=function(){var r=this,n=arguments;return Promise.resolve().then(function(){return r._cursor[e].apply(r._cursor,n),t(r._request).then(function(e){return e?new h(e,r._request):void 0})})})}),u.prototype.createIndex=function(){return new c(this._store.createIndex.apply(this._store,arguments))},u.prototype.index=function(){return new c(this._store.index.apply(this._store,arguments))},s(u,"_store",["name","keyPath","indexNames","autoIncrement"]),o(u,"_store",IDBObjectStore,["put","add","delete","clear","get","getAll","getKey","getAllKeys","count"]),i(u,"_store",IDBObjectStore,["openCursor","openKeyCursor"]),a(u,"_store",IDBObjectStore,["deleteIndex"]),l.prototype.objectStore=function(){return new u(this._tx.objectStore.apply(this._tx,arguments))},s(l,"_tx",["objectStoreNames","mode"]),a(l,"_tx",IDBTransaction,["abort"]),d.prototype.createObjectStore=function(){return new u(this._db.createObjectStore.apply(this._db,arguments))},s(d,"_db",["name","version","objectStoreNames"]),a(d,"_db",IDBDatabase,["deleteObjectStore","close"]),p.prototype.transaction=function(){return new l(this._db.transaction.apply(this._db,arguments))},s(p,"_db",["name","version","objectStoreNames"]),a(p,"_db",IDBDatabase,["close"]),["openCursor","openKeyCursor"].forEach(function(e){[u,c].forEach(function(t){t.prototype[e.replace("open","iterate")]=function(){var t=function(e){return Array.prototype.slice.call(e)}(arguments),r=t[t.length-1],n=this._store||this._index,s=n[e].apply(n,t.slice(0,-1));s.onsuccess=function(){r(s.result)}}})}),[c,u].forEach(function(e){e.prototype.getAll||(e.prototype.getAll=function(e,t){var r=this,n=[];return new Promise(function(s){r.iterateCursor(e,function(e){return e?(n.push(e.value),void 0!==t&&n.length==t?void s(n):void e.continue()):void s(n)})})})});var f={open:function(e,t,n){var s=r(indexedDB,"open",[e,t]),o=s.request;return o.onupgradeneeded=function(e){n&&n(new d(o.result,e.oldVersion,o.transaction))},s.then(function(e){return new p(e)})},delete:function(e){return r(indexedDB,"deleteDatabase",[e])}};e.exports=f,e.exports.default=e.exports}()});var fe=new n({"max-entries-or-age-required":"Either the maxEntries or maxAgeSeconds\n parameters (or both) are required when constructing Plugin.","max-entries-must-be-number":"The maxEntries parameter to the Plugin\n constructor must either be a number or undefined.","max-age-seconds-must-be-number":"The maxAgeSeconds parameter to the Plugin\n constructor must either be a number or undefined."});class ge{constructor({maxEntries:e,maxAgeSeconds:t}={}){if(!e&&!t)throw fe.createError("max-entries-or-age-required");if(e&&"number"!=typeof e)throw fe.createError("max-entries-must-be-number");if(t&&"number"!=typeof t)throw fe.createError("max-age-seconds-must-be-number");this.maxEntries=e,this.maxAgeSeconds=t,this._dbs=new Map,this._caches=new Map,this._expirationMutex=!1,this._timestampForNextRun=null}getDB({cacheName:e}={}){var t=this;return ee(function*(){b({cacheName:e},"string");const r=`${he}-${e}`;if(!t._dbs.has(r)){const n=yield pe.open(r,ue,function(t){t.createObjectStore(e,{keyPath:le}).createIndex(de,de,{unique:!1})});t._dbs.set(r,n)}return t._dbs.get(r)})()}getCache({cacheName:e}={}){var t=this;return ee(function*(){if(b({cacheName:e},"string"),!t._caches.has(e)){const r=yield caches.open(e);t._caches.set(e,r)}return t._caches.get(e)})()}isResponseFresh({cacheName:e,cachedResponse:t,now:r}={}){if(t&&this.maxAgeSeconds){y({cachedResponse:t},Response);const n=t.headers.get("date");if(n){void 0===r&&(r=Date.now());const e=new Date(n).getTime();return!!isNaN(e)||e+1e3*this.maxAgeSeconds>r}return this.expireEntries({cacheName:e,now:r}),!0}return!0}updateTimestamp({cacheName:e,url:t,now:r}={}){var n=this;return ee(function*(){b({url:t},"string"),b({cacheName:e},"string");const s=new URL(t,location);s.hash="",void 0===r&&(r=Date.now());const o=(yield n.getDB({cacheName:e})).transaction(e,"readwrite");o.objectStore(e).put({[de]:r,[le]:s.href}),yield o.complete})()}expireEntries({cacheName:e,now:t}={}){var r=this;return ee(function*(){if(r._expirationMutex)return void(r._timestampForNextRun=t);r._expirationMutex=!0,b({cacheName:e},"string"),void 0===t&&(t=Date.now());const n=r.maxAgeSeconds?yield r.findOldEntries({cacheName:e,now:t}):[],s=r.maxEntries?yield r.findExtraEntries({cacheName:e}):[],o=[...new Set(n.concat(s))];if(yield r.deleteFromCacheAndIDB({cacheName:e,urls:o}),0<o.length&&p.debug({that:r,message:"Expired entries have been removed from the cache.",data:{cacheName:e,urls:o}}),r._expirationMutex=!1,r._timestampForNextRun){const t=r._timestampForNextRun;return r._timestampForNextRun=null,r.expireEntries({cacheName:e,now:t})}})()}findOldEntries({cacheName:e,now:t}={}){var r=this;return ee(function*(){b({cacheName:e},"string"),b({now:t},"number");const n=t-1e3*r.maxAgeSeconds,s=[],o=(yield r.getDB({cacheName:e})).transaction(e,"readonly");return o.objectStore(e).index(de).iterateCursor(function(e){e&&(e.value[de]<n&&s.push(e.value[le]),e.continue())}),yield o.complete,s})()}findExtraEntries({cacheName:e}={}){var t=this;return ee(function*(){b({cacheName:e},"string");const r=[],n=yield t.getDB({cacheName:e});let s=n.transaction(e,"readonly"),o=s.objectStore(e),a=o.index(de);const i=yield a.count();return i>t.maxEntries&&(a=(o=(s=n.transaction(e,"readonly")).objectStore(e)).index(de)).iterateCursor(function(e){e&&(r.push(e.value[le]),i-r.length>t.maxEntries&&e.continue())}),yield s.complete,r})()}deleteFromCacheAndIDB({cacheName:e,urls:t}={}){var r=this;return ee(function*(){if(b({cacheName:e},"string"),w({urls:t},"string"),0<t.length){const n=yield r.getCache({cacheName:e}),s=yield r.getDB({cacheName:e});for(let r of t){yield n.delete(r);const t=s.transaction(e,"readwrite");t.objectStore(e).delete(r),yield t.complete}}})()}}class me extends ge{cachedResponseWillBeUsed({cacheName:e,cachedResponse:t,now:r}={}){return this.isResponseFresh({cacheName:e,cachedResponse:t,now:r})?t:null}cacheDidUpdate({cacheName:e,newResponse:t,url:r,now:n}={}){var s=this;return ee(function*(){b({cacheName:e},"string"),y({newResponse:t},Response),void 0===n&&(n=Date.now()),yield s.updateTimestamp({cacheName:e,url:r,now:n}),yield s.expireEntries({cacheName:e,now:n})})()}}var ye=new n({"channel-name-required":"The channelName parameter is required when\n constructing a new BroadcastCacheUpdate instance.","responses-are-same-parameters-required":"The first, second, and\n headersToCheck parameters must be valid when calling responsesAreSame()"});const be="CACHE_UPDATED",we=["content-length","etag","last-modified"],ve="workbox-broadcast-cache-update";class _e{constructor({channelName:e,headersToCheck:t,source:r}={}){if("string"!=typeof e||0===e.length)throw ye.createError("channel-name-required");this.channelName=e,this.headersToCheck=t||we,this.source=r||ve}get channel(){return this._channel||("BroadcastChannel"in self?this._channel=new BroadcastChannel(this.channelName):this._channel={postMessage:()=>{}}),this._channel}notifyIfUpdated({first:e,second:t,cacheName:r,url:n}){b({cacheName:r},"string"),function({first:e,second:t,headersToCheck:r}={}){if(!(e instanceof Response&&t instanceof Response&&r instanceof Array))throw ye.createError("responses-are-same-parameters-required");return r.some(r=>e.headers.has(r)&&t.headers.has(r))?r.every(r=>e.headers.has(r)===t.headers.has(r)&&e.headers.get(r)===t.headers.get(r)):(p.log({message:"Unable to determine whether the response has been updated\n because none of the headers that would be checked are present.",data:{"First Response":e,"Second Response":t,"Headers To Check":JSON.stringify(r)}}),!0)}({first:e,second:t,headersToCheck:this.headersToCheck})||function({channel:e,cacheName:t,url:r,source:n}={}){"BroadcastChannel"in self&&(y({channel:e},BroadcastChannel),b({cacheName:t},"string"),b({source:n},"string"),b({url:r},"string"),e.postMessage({type:be,meta:n,payload:{cacheName:t,updatedUrl:r}}))}({cacheName:r,url:n,channel:this.channel,source:this.source})}}class xe extends _e{cacheDidUpdate({cacheName:e,oldResponse:t,newResponse:r,url:n}){b({cacheName:e},"string"),y({newResponse:r},Response),t&&this.notifyIfUpdated({cacheName:e,first:t,second:r,url:n})}}class Ee{constructor({cacheId:e}={}){this._cacheId=e}cacheFirst(e){return this._getCachingMechanism(ne,e)}cacheOnly(e){return this._getCachingMechanism(se,e)}networkFirst(e){return this._getCachingMechanism(oe,e)}networkOnly(e){return this._getCachingMechanism(ae,e)}staleWhileRevalidate(e){return this._getCachingMechanism(ie,e)}_getCachingMechanism(e,t={}){const r={cacheExpiration:me,broadcastCacheUpdate:xe,cacheableResponse:z},n={plugins:[]};return t.excludeCacheId||(n.cacheId=this._cacheId),t.cacheName&&(n.cacheName=t.cacheName),Object.keys(r).forEach(e=>{if(t[e]){const s=r[e],o=t[e];n.plugins.push(new s(o))}}),t.plugins&&t.plugins.forEach(e=>{n.plugins.push(e)}),t.requestWrapper=new te(n),new e(t)}}const Re=(e,t)=>{let r="An error was thrown by workbox with error code: "+`;'${e}'`;return t&&(r+=` with extras: '${JSON.stringify(t)}'`),r};class Ce extends Error{constructor(e,t){super(),this.name=e,this.message=Re(e,t),t&&(this.extras=t)}}class qe{constructor({cacheName:e,cacheId:t,plugins:r}={}){if(t&&("string"!=typeof t||0===t.length))throw new Ce("bad-cache-id",{cacheId:t});this._entriesToCache=new Map,this._requestWrapper=new te({cacheName:e,cacheId:t,plugins:r,fetchOptions:{credentials:"same-origin"}})}_addEntries(e){this._parsedCacheUrls=null,e.forEach(e=>{this._addEntryToInstallList(this._parseEntry(e))})}getCacheName(){return this._requestWrapper.cacheName}getCachedUrls(){return this._parsedCacheUrls||(this._parsedCacheUrls=Array.from(this._entriesToCache.keys()).map(e=>new URL(e,location).href)),this._parsedCacheUrls}_addEntryToInstallList(e){const t=e.entryID,r=this._entriesToCache.get(e.entryID);return r?void this._onDuplicateInstallEntryFound(e,r):void this._entriesToCache.set(t,e)}install(){var e=this;return ee(function*(){if(0===e._entriesToCache.size)return[];const t=[];return e._entriesToCache.forEach(function(r){t.push(e._cacheEntry(r))}),Promise.all(t)})()}_cacheEntry(e){var t=this;return ee(function*(){const r=yield t._isAlreadyCached(e),n={url:e.request.url,revision:e.revision,wasUpdated:!r};if(r)return n;try{return yield t._requestWrapper.fetchAndCache({request:e.getNetworkRequest(),waitOnCache:!0,cacheKey:e.request,cleanRedirects:!0}),yield t._onEntryCached(e),n}catch(t){throw new Ce("request-not-cached",{url:e.request.url,error:t})}})()}cleanup(){var e=this;return ee(function*(){if(!(yield caches.has(e.getCacheName())))return;const t=[];e._entriesToCache.forEach(function(e){t.push(e.request.url)});const r=yield e._getCache(),n=(yield r.keys()).filter(function(e){return!t.includes(e.url)});return Promise.all(n.map((()=>{var t=ee(function*(t){yield r.delete(t),yield e._onEntryDeleted(t.url)});return function(){return t.apply(this,arguments)}})()))})()}_getCache(){var e=this;return ee(function*(){return e._cache||(e._cache=yield caches.open(e.getCacheName())),e._cache})()}_parseEntry(){throw new Ce("requires-overriding")}_onDuplicateEntryFound(){throw new Ce("requires-overriding")}_isAlreadyCached(){throw new Ce("requires-overriding")}_onEntryCached(){throw new Ce("requires-overriding")}_onEntryDeleted(){throw new Ce("requires-overriding")}}class Ne{constructor(e,t,r){if(null==e||null==t||null==r)throw Error("name, version, storeName must be passed to the constructor.");this._name=e,this._version=t,this._storeName=r}_getDb(){return this._dbPromise?this._dbPromise:(this._dbPromise=pe.open(this._name,this._version,e=>{e.createObjectStore(this._storeName)}).then(e=>e),this._dbPromise)}close(){return this._dbPromise?this._dbPromise.then(e=>{e.close(),this._dbPromise=null}):void 0}put(e,t){return this._getDb().then(r=>{const n=r.transaction(this._storeName,"readwrite");return n.objectStore(this._storeName).put(t,e),n.complete})}delete(e){return this._getDb().then(t=>{const r=t.transaction(this._storeName,"readwrite");return r.objectStore(this._storeName).delete(e),r.complete})}get(e){return this._getDb().then(t=>t.transaction(this._storeName).objectStore(this._storeName).get(e))}getAllValues(){return this._getDb().then(e=>e.transaction(this._storeName).objectStore(this._storeName).getAll())}getAllKeys(){return this._getDb().then(e=>e.transaction(this._storeName).objectStore(this._storeName).getAllKeys())}}const Le="_workbox-precaching",Te="workbox-precaching",De="1",ke="asset-revisions";let Ue="workbox-precaching-revisioned-v1";self&&self.registration&&(Ue+=`-${self.registration.scope}`);const Pe=Ue;class Oe{constructor(){this._idbHelper=new Ne(Te,De,ke)}get(e){return this._idbHelper.get(e)}put(e,t){return this._idbHelper.put(e,t)}delete(e){return this._idbHelper.delete(e)}_close(){this._idbHelper.close()}}class Ae{constructor({entryID:e,revision:t,request:r,cacheBust:n}){this.entryID=e,this.revision=t,this.request=r,this.cacheBust=n}getNetworkRequest(){if(!0!==this.cacheBust)return this.request;let e=this.request.url;const t={};if(!0===this.cacheBust)if("cache"in Request.prototype)t.cache="reload";else{const t=new URL(e,location);t.search+=(t.search?"&":"")+encodeURIComponent(Le)+"="+encodeURIComponent(this.revision),e=t.toString()}return new Request(e,t)}}class Se extends Ae{constructor(e){if(b({url:e},"string"),0===e.length)throw new Ce("invalid-string-entry",{url:e});super({entryID:e,revision:e,request:new Request(e),cacheBust:!1})}}class Ie extends Ae{constructor({entryID:e,revision:t,url:r,cacheBust:n}){if(void 0!==t&&(b({revision:t},"string"),0===t.length))throw new Ce("invalid-object-entry",{problemParam:"revision",problemValue:t});if(void 0===n&&(n=!!t),b({cacheBust:n},"boolean"),b({url:r},"string"),0===r.length)throw new Ce("invalid-object-entry",{problemParam:"url",problemValue:r});if(void 0===e)e=new URL(r,location).toString();else if(0===e.length)throw new Ce("invalid-object-entry",{problemParam:"entryID",problemValue:e});super({entryID:e,revision:t||r,request:new Request(r),cacheBust:n})}}class je extends qe{constructor(e={}){e.cacheName=e.cacheName||Pe,super(e),this._revisionDetailsModel=new Oe}addToCacheList({revisionedFiles:e}={}){y({revisionedFiles:e},Array),super._addEntries(e);const t=e.filter(e=>"string"==typeof e||!e.revision);0<t.length&&p.debug({that:this,message:"Some precache entries are URLs without separate revision\n fields. If the URLs themselves do not contain revisioning info,\n like a hash or a version number, your users won't receive updates.",data:{"URLs without revision fields":JSON.stringify(t),"Examples of safe, versioned URLs":"'/path/file.abcd1234.css' or '/v1.0.0/file.js'","Examples of dangerous, unversioned URLs":"'index.html' or '/path/file.css' or '/latest/file.js'"}})}_parseEntry(e){if(null===e)throw new Ce("unexpected-precache-entry",{input:e});let t;switch(typeof e){case"string":t=new Se(e);break;case"object":t=new Ie(e);break;default:throw new Ce("unexpected-precache-entry",{input:e})}return t}_onDuplicateInstallEntryFound(e,t){if(t.revision!==e.revision)throw new Ce("duplicate-entry-diff-revisions",{firstEntry:{url:t.request.url,revision:t.revision},secondEntry:{url:e.request.url,revision:e.revision}})}_isAlreadyCached(e){var t=this;return ee(function*(){return(yield t._revisionDetailsModel.get(e.entryID))===e.revision&&!!(yield(yield t._getCache()).match(e.request))})()}_onEntryCached(e){var t=this;return ee(function*(){yield t._revisionDetailsModel.put(e.entryID,e.revision)})()}_onEntryDeleted(e){var t=this;return ee(function*(){yield t._revisionDetailsModel.delete(e)})()}_close(){this._revisionDetailsModel._close()}cleanup(){return super.cleanup().then(()=>this._close())}_createLogFriendlyString(e){let t="\n";return e.forEach(e=>{t+=` URL: '${e.url}' Revision: `+`'${e.revision}'\n`}),t}install(){return super.install().then(e=>{const t=[],r=[];e.forEach(e=>{e.wasUpdated?t.push({url:e.url,revision:e.revision}):r.push({url:e.url,revision:e.revision})});const n={};return 0<t.length&&(n["New / Updated Precache URL's"]=this._createLogFriendlyString(t)),0<r.length&&(n["Up-to-date Precache URL's"]=this._createLogFriendlyString(r)),p.log({message:`Precache Details: ${t.length} requests `+"were added or updated and "+`${r.length} request are already `+"cached and up-to-date.",data:n}),e})}}if(!a())throw new Ce("not-in-sw");t.default=class{constructor({cacheId:e,skipWaiting:t,clientsClaim:r,handleFetch:n=!0,directoryIndex:o="index.html",precacheChannelName:i="precache-updates",ignoreUrlParametersMatching:c=[/^utm_/]}={}){if(!a())throw s.createError("not-in-sw");if(e&&("string"!=typeof e||0===e.length))throw s.createError("bad-cache-id");if(t&&"boolean"!=typeof t)throw s.createError("bad-skip-waiting");if(r&&"boolean"!=typeof r)throw s.createError("bad-clients-claim");if(void 0!==o)if(!1===o||null===o)o=!1;else if("string"!=typeof o||0===o.length)throw s.createError("bad-directory-index");const h=[];i&&h.push(new xe({channelName:i,source:registration&&registration.scope?registration.scope:location})),this._runtimeCacheName=Y({cacheId:e}),this._revisionedCacheManager=new je({cacheId:e,plugins:h}),this._strategies=new Ee({cacheId:e}),this._precacheRouter=new K(this._revisionedCacheManager.getCacheName()),this._router=new K(this._revisionedCacheManager.getCacheName()),n&&(this._precacheRouter.addFetchListener(),this._router.addFetchListener()),this._registerInstallActivateEvents(t,r),this._registerDefaultRoutes(c,o)}precache(e){if(!Array.isArray(e))throw s.createError("bad-revisioned-cache-list");this._revisionedCacheManager.addToCacheList({revisionedFiles:e})}get router(){return this._router}get strategies(){return this._strategies}get runtimeCacheName(){return this._runtimeCacheName}_registerInstallActivateEvents(e,t){self.addEventListener("install",t=>{const r=this._revisionedCacheManager.getCachedUrls();0<r.length&&p.debug({that:this,message:"The precached URLs will automatically be served using a\n cache-first strategy.",data:{"Precached URLs":JSON.stringify(r)}}),t.waitUntil(this._revisionedCacheManager.install().then(()=>{if(e)return self.skipWaiting()}))}),self.addEventListener("activate",e=>{e.waitUntil(this._revisionedCacheManager.cleanup().then(()=>{if(t)return self.clients.claim()}))})}_registerDefaultRoutes(e,t){const r=[];(e||t)&&r.push(this._getCacheMatchPlugin(e,t));const n=this.strategies.cacheFirst({cacheName:this._revisionedCacheManager.getCacheName(),plugins:r,excludeCacheId:!0});this._precacheRouter.registerRoute(({url:r})=>{r.hash="";const n=this._revisionedCacheManager.getCachedUrls();if(-1!==n.indexOf(r.href))return!0;let s=this._removeIgnoreUrlParams(r.href,e);return-1!==n.indexOf(s.href)||t&&s.pathname.endsWith("/")&&(s.pathname+=t,-1!==n.indexOf(s.href))},n)}_getCacheMatchPlugin(e,t){var r=this;return{cachedResponseWillBeUsed:(()=>{var n=ee(function*({request:n,cache:s,cachedResponse:o,matchOptions:a}){if(o)return o;let i=r._removeIgnoreUrlParams(n.url,e);return s.match(i.toString(),a).then(function(e){return!e&&i.pathname.endsWith("/")?(i.pathname+=t,s.match(i.toString(),a)):e})});return function(){return n.apply(this,arguments)}})()}}_removeIgnoreUrlParams(e,t){const r=new URL(e),n=r.search.slice(1).split("&").map(e=>e.split("=")).filter(e=>t.every(t=>!t.test(e[0]))).map(e=>e.join("="));return r.search=n.join("&"),r}}},function(e,t){e.exports=function(e){var t,r,n,s={};if(e=e||"")for(t=e.split("&"),n=0;n<t.length;n++)s[(r=t[n].split("="))[0]]=r[1];return s}}]);
\ No newline at end of file
importScripts("https://cdn.yoho.cn/workbox/workbox-sw.js", "https://cdn.yoho.cn/workbox/workbox-core.prod.js", "https://cdn.yoho.cn/workbox/workbox-precaching.prod.js", "https://cdn.yoho.cn/workbox/workbox-routing.prod.js", "https://cdn.yoho.cn/workbox/workbox-cache-expiration.prod.js", "//cdn.yoho.cn/yohobuywap-node/precache-manifest.5892d915861d21c8df45a91e2d832243.js");
/* eslint-env worker */
/* global FetchEvent */
self.workbox.skipWaiting();
self.workbox.clientsClaim();
const isDev = self.location.search.indexOf('dev') >= 0;
const staticDomian = isDev ? /^http:\/\/localhost:5001/i : /^https:\/\/(.*)cdn\.yoho\.cn/i;
const webDomian = isDev ? /^http:\/\/localhost:6001/i : /^https:\/\/m.yohobuy.com/;
// 定义缓存前缀
const NAME_CACHE_PREFIX = 'yoho-cache';
const precaches = [
{
url: '/offline.html',
revision: 'offline-revision-0.0.2'
},
{
url: '//cdn.yoho.cn/pwa/404.png',
revision: '404-revision-0.0.1'
}].concat(self.__precacheManifest || []);
self.workbox.precaching.precacheAndRoute(precaches);
/**
* 需要缓存的路径
*/
// const CACHED_PATH = [
// 'boys',
// 'girls',
// 'kids',
// 'lifestyle',
// 'cate',
// 'list',
// 'search',
// 'product',
// 'shop',
// 'guang',
// 'offline.html'
// ];
// let routeRegExp = new RegExp(`^\/(${CACHED_PATH.join('|')})`);
// 自定义缓存
self.workbox.routing.registerRoute(args => {
if (/sockjs-node\/info/.test(args.url.href)) {
return false;
}
if (self.__precacheManifest.find(precahce => args.url.href.indexOf(precahce.url) >= 0)) {
return false;
}
if (staticDomian.test(args.url.href)) {
return true;
}
return false;
}, self.workbox.strategies.staleWhileRevalidate({
cacheName: `${NAME_CACHE_PREFIX}-statics`,
plugins: [
new self.workbox.expiration.Plugin({
maxEntries: 1000,
maxAgeSeconds: 7 * 24 * 60 * 60 // 7 day
})
]
}));
// 所有网络走 worker,异常时增加离线页面
self.workbox.routing.registerRoute(args => {
let cached = webDomian.test(args.url.href);
if (args.event.request.headers.get('x-requested-with') === 'XMLHttpRequest' &&
args.event.request.method !== 'GET') {
cached = false;
}
return cached;
}, args => {
return self.workbox.strategies.networkFirst({
cacheName: `${NAME_CACHE_PREFIX}-runtime`,
plugins: [
new self.workbox.expiration.Plugin({
maxEntries: 300,
maxAgeSeconds: 12 * 60 * 60 // 12 小时
})
]
}).handle(args).then(res => {
if (res || args.event.request.mode !== 'navigate') {
// TODO report
return res;
}
// navigate 请求失败后,返回网络异常页面
return caches.match('offline.html');
});
});
/**
* webp 处理
* 匹配非 webp 的 cdn 图片资源,缓存其 webp 格式
*/
self.workbox.routing.registerRoute(args => {
let useWebp = false;
let supportWebp = /image\/webp/i.test(args.event.request.headers.get('Accept'));
if (!supportWebp) {
return useWebp;
}
if (/^https:\/\/(.*)static\.yhbimg\.com(.*)(png|jpg|jpeg)\?(imageView|imageMogr)(.*)/.test(args.url.href) &&
/^(?!.*format\/).*/.test(args.url.href)) {
useWebp = true;
}
return useWebp;
}, args => {
// 重新构造 fetch 请求
args.event = new FetchEvent(args.event.type, {
request: new Request(args.event.request.url + '/format/webp'),
clientId: args.event.clientId,
isReload: args.event.isReload
});
return self.workbox.strategies.staleWhileRevalidate({
cacheName: `${NAME_CACHE_PREFIX}-images`,
plugins: [
new self.workbox.expiration.Plugin({
maxEntries: 100,
maxAgeSeconds: 24 * 60 * 60 // 24 小时
})
]}).handle(args);
});
... ...
... ... @@ -10,7 +10,7 @@ const htmlEntity = {
};
exports.htmlDecode = function(txt) {
txt = txt || '';
txt = txt + '' || '';
return txt.replace(/((&(([a-z][a-z0-9]*)|(#[0-9]+)|(#x[0-9a-f]+));)|["'<>&])/gi, function(s) {
s = s || '';
const s1 = htmlEntity[s.toLowerCase()];
... ... @@ -24,7 +24,7 @@ exports.htmlDecode = function(txt) {
};
exports.htmlEncode = function(str) {
str = str || '';
str = str + '' || '';
return str.replace(re, function(s) {
switch (s) {
case '"':
... ...
... ... @@ -6,6 +6,7 @@
const _ = require('lodash');
const helpers = global.yoho.helpers;
const productProcess = require('./product-process');
const cleanHtml = require('./cleanHtml');
class DetailProcess {
static prodessDetailData(origin) {
... ... @@ -220,6 +221,13 @@ class DetailProcess {
product_id: productId
});
}
if (!_.get(comment, 'consultsNum', 0)) {
_.each(_.get(comment, 'comments', []), item => {
item.userName = cleanHtml.htmlEncode(item.userName);
});
}
return feedbacks;
}
... ...
... ... @@ -288,5 +288,28 @@ module.exports = {
});
}
return contentData;
},
/**
* 特殊符号转译
*/
htmlEncode: function(str) {
const re = /(\r\n)|["\'<>]/g;
str = str + '' || '';
return str.replace(re, function(s) {
switch (s) {
case '"':
return '&quot;';
case '\'':
return '&apos;';
case '<':
return '&lt;';
case '>':
return '&gt;';
default:
return s;
}
});
}
};
... ...
... ... @@ -400,6 +400,10 @@ acorn@^5.0.0, acorn@^5.0.3, acorn@^5.3.0, acorn@^5.6.0, acorn@^5.6.2:
version "5.7.1"
resolved "http://npm.yohops.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8"
acorn@^5.2.1:
version "5.7.3"
resolved "http://npm.yohops.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
address@>=0.0.1:
version "1.0.3"
resolved "http://npm.yohops.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
... ... @@ -470,7 +474,7 @@ alloyfinger@^0.1.3:
version "0.1.15"
resolved "http://npm.yohops.com/alloyfinger/-/alloyfinger-0.1.15.tgz#1116ced7266ba920cafc79726120337d8041d2ca"
alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
alphanum-sort@^1.0.0, alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
version "1.0.2"
resolved "http://npm.yohops.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
... ... @@ -637,6 +641,10 @@ assign-symbols@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
ast-types@0.9.6:
version "0.9.6"
resolved "http://npm.yohops.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
ast-types@0.x.x:
version "0.11.5"
resolved "http://npm.yohops.com/ast-types/-/ast-types-0.11.5.tgz#9890825d660c03c28339f315e9fa0a360e31ec28"
... ... @@ -780,6 +788,14 @@ babel-generator@^6.18.0, babel-generator@^6.26.0:
source-map "^0.5.7"
trim-right "^1.0.1"
babel-helper-bindify-decorators@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330"
dependencies:
babel-runtime "^6.22.0"
babel-traverse "^6.24.1"
babel-types "^6.24.1"
babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
... ... @@ -788,6 +804,14 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
babel-helper-builder-react-jsx@^6.24.1:
version "6.26.0"
resolved "http://npm.yohops.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
dependencies:
babel-runtime "^6.26.0"
babel-types "^6.26.0"
esutils "^2.0.2"
babel-helper-call-delegate@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
... ... @@ -814,6 +838,15 @@ babel-helper-explode-assignable-expression@^6.24.1:
babel-traverse "^6.24.1"
babel-types "^6.24.1"
babel-helper-explode-class@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb"
dependencies:
babel-helper-bindify-decorators "^6.24.1"
babel-runtime "^6.22.0"
babel-traverse "^6.24.1"
babel-types "^6.24.1"
babel-helper-function-name@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
... ... @@ -918,6 +951,26 @@ babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
babel-plugin-syntax-async-generators@^6.5.0:
version "6.13.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a"
babel-plugin-syntax-class-constructor-call@^6.18.0:
version "6.18.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416"
babel-plugin-syntax-class-properties@^6.8.0:
version "6.13.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
babel-plugin-syntax-decorators@^6.13.0:
version "6.13.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b"
babel-plugin-syntax-do-expressions@^6.8.0:
version "6.13.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d"
babel-plugin-syntax-dynamic-import@^6.18.0:
version "6.18.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
... ... @@ -926,7 +979,19 @@ babel-plugin-syntax-exponentiation-operator@^6.8.0:
version "6.13.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
babel-plugin-syntax-jsx@^6.18.0:
babel-plugin-syntax-export-extensions@^6.8.0:
version "6.13.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721"
babel-plugin-syntax-flow@^6.18.0:
version "6.18.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
babel-plugin-syntax-function-bind@^6.8.0:
version "6.13.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46"
babel-plugin-syntax-jsx@^6.18.0, babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
version "6.18.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
... ... @@ -938,6 +1003,14 @@ babel-plugin-syntax-trailing-function-commas@^6.22.0:
version "6.22.0"
resolved "http://npm.yohops.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
babel-plugin-transform-async-generator-functions@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db"
dependencies:
babel-helper-remap-async-to-generator "^6.24.1"
babel-plugin-syntax-async-generators "^6.5.0"
babel-runtime "^6.22.0"
babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
... ... @@ -946,6 +1019,40 @@ babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-
babel-plugin-syntax-async-functions "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-class-constructor-call@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9"
dependencies:
babel-plugin-syntax-class-constructor-call "^6.18.0"
babel-runtime "^6.22.0"
babel-template "^6.24.1"
babel-plugin-transform-class-properties@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
dependencies:
babel-helper-function-name "^6.24.1"
babel-plugin-syntax-class-properties "^6.8.0"
babel-runtime "^6.22.0"
babel-template "^6.24.1"
babel-plugin-transform-decorators@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d"
dependencies:
babel-helper-explode-class "^6.24.1"
babel-plugin-syntax-decorators "^6.13.0"
babel-runtime "^6.22.0"
babel-template "^6.24.1"
babel-types "^6.24.1"
babel-plugin-transform-do-expressions@^6.22.0:
version "6.22.0"
resolved "http://npm.yohops.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb"
dependencies:
babel-plugin-syntax-do-expressions "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-arrow-functions@^6.22.0:
version "6.22.0"
resolved "http://npm.yohops.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
... ... @@ -1114,7 +1221,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es20
babel-runtime "^6.22.0"
regexpu-core "^2.0.0"
babel-plugin-transform-exponentiation-operator@^6.22.0:
babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
dependencies:
... ... @@ -1122,13 +1229,62 @@ babel-plugin-transform-exponentiation-operator@^6.22.0:
babel-plugin-syntax-exponentiation-operator "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-object-rest-spread@^6.23.0:
babel-plugin-transform-export-extensions@^6.22.0:
version "6.22.0"
resolved "http://npm.yohops.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653"
dependencies:
babel-plugin-syntax-export-extensions "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-flow-strip-types@^6.22.0:
version "6.22.0"
resolved "http://npm.yohops.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
dependencies:
babel-plugin-syntax-flow "^6.18.0"
babel-runtime "^6.22.0"
babel-plugin-transform-function-bind@^6.22.0:
version "6.22.0"
resolved "http://npm.yohops.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97"
dependencies:
babel-plugin-syntax-function-bind "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.23.0:
version "6.26.0"
resolved "http://npm.yohops.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
dependencies:
babel-plugin-syntax-object-rest-spread "^6.8.0"
babel-runtime "^6.26.0"
babel-plugin-transform-react-display-name@^6.23.0:
version "6.25.0"
resolved "http://npm.yohops.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-react-jsx-self@^6.22.0:
version "6.22.0"
resolved "http://npm.yohops.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
dependencies:
babel-plugin-syntax-jsx "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-react-jsx-source@^6.22.0:
version "6.22.0"
resolved "http://npm.yohops.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
dependencies:
babel-plugin-syntax-jsx "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-react-jsx@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
dependencies:
babel-helper-builder-react-jsx "^6.24.1"
babel-plugin-syntax-jsx "^6.8.0"
babel-runtime "^6.22.0"
babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1:
version "6.26.0"
resolved "http://npm.yohops.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
... ... @@ -1218,6 +1374,58 @@ babel-preset-es2015@^6.24.1:
babel-plugin-transform-es2015-unicode-regex "^6.24.1"
babel-plugin-transform-regenerator "^6.24.1"
babel-preset-flow@^6.23.0:
version "6.23.0"
resolved "http://npm.yohops.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
dependencies:
babel-plugin-transform-flow-strip-types "^6.22.0"
babel-preset-react@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
dependencies:
babel-plugin-syntax-jsx "^6.3.13"
babel-plugin-transform-react-display-name "^6.23.0"
babel-plugin-transform-react-jsx "^6.24.1"
babel-plugin-transform-react-jsx-self "^6.22.0"
babel-plugin-transform-react-jsx-source "^6.22.0"
babel-preset-flow "^6.23.0"
babel-preset-stage-0@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a"
dependencies:
babel-plugin-transform-do-expressions "^6.22.0"
babel-plugin-transform-function-bind "^6.22.0"
babel-preset-stage-1 "^6.24.1"
babel-preset-stage-1@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0"
dependencies:
babel-plugin-transform-class-constructor-call "^6.24.1"
babel-plugin-transform-export-extensions "^6.22.0"
babel-preset-stage-2 "^6.24.1"
babel-preset-stage-2@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1"
dependencies:
babel-plugin-syntax-dynamic-import "^6.18.0"
babel-plugin-transform-class-properties "^6.24.1"
babel-plugin-transform-decorators "^6.24.1"
babel-preset-stage-3 "^6.24.1"
babel-preset-stage-3@^6.24.1:
version "6.24.1"
resolved "http://npm.yohops.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395"
dependencies:
babel-plugin-syntax-trailing-function-commas "^6.22.0"
babel-plugin-transform-async-generator-functions "^6.24.1"
babel-plugin-transform-async-to-generator "^6.24.1"
babel-plugin-transform-exponentiation-operator "^6.24.1"
babel-plugin-transform-object-rest-spread "^6.22.0"
babel-register@^6.26.0:
version "6.26.0"
resolved "http://npm.yohops.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
... ... @@ -1290,6 +1498,10 @@ balanced-match@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
base62@^1.1.0:
version "1.2.8"
resolved "http://npm.yohops.com/base62/-/base62-1.2.8.tgz#1264cb0fb848d875792877479dbe8bae6bae3428"
base64-js@^1.0.2:
version "1.3.0"
resolved "http://npm.yohops.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
... ... @@ -1508,6 +1720,14 @@ browserslist@^3.2.6, browserslist@^3.2.8:
caniuse-lite "^1.0.30000844"
electron-to-chromium "^1.3.47"
browserslist@^4.0.0:
version "4.1.1"
resolved "http://npm.yohops.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6"
dependencies:
caniuse-lite "^1.0.30000884"
electron-to-chromium "^1.3.62"
node-releases "^1.0.0-alpha.11"
browserslist@^4.0.2:
version "4.0.2"
resolved "http://npm.yohops.com/browserslist/-/browserslist-4.0.2.tgz#294388f5844bb3ab15ef7394ca17f49bf7a4e6f1"
... ... @@ -1645,10 +1865,23 @@ caniuse-api@^1.5.2:
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-api@^3.0.0:
version "3.0.0"
resolved "http://npm.yohops.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0"
dependencies:
browserslist "^4.0.0"
caniuse-lite "^1.0.0"
lodash.memoize "^4.1.2"
lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
version "1.0.30000877"
resolved "http://npm.yohops.com/caniuse-db/-/caniuse-db-1.0.30000877.tgz#29ea435fdbe8a671cc5b027a75e28a816c17c340"
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000884:
version "1.0.30000885"
resolved "http://npm.yohops.com/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz#e889e9f8e7e50e769f2a49634c932b8aee622984"
caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864, caniuse-lite@^1.0.30000876, caniuse-lite@^1.0.30000877:
version "1.0.30000877"
resolved "http://npm.yohops.com/caniuse-lite/-/caniuse-lite-1.0.30000877.tgz#f189673b86ecc06436520e3e391de6a13ca923b4"
... ... @@ -1954,11 +2187,17 @@ color-convert@^1.3.0, color-convert@^1.9.0:
dependencies:
color-name "1.1.1"
color-convert@^1.9.1:
version "1.9.3"
resolved "http://npm.yohops.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
dependencies:
color-name "1.1.3"
color-name@1.1.1:
version "1.1.1"
resolved "http://npm.yohops.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
color-name@^1.0.0:
color-name@1.1.3, color-name@^1.0.0:
version "1.1.3"
resolved "http://npm.yohops.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
... ... @@ -1968,6 +2207,13 @@ color-string@^0.3.0:
dependencies:
color-name "^1.0.0"
color-string@^1.5.2:
version "1.5.3"
resolved "http://npm.yohops.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc"
dependencies:
color-name "^1.0.0"
simple-swizzle "^0.2.2"
color@^0.11.0:
version "0.11.4"
resolved "http://npm.yohops.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
... ... @@ -1976,6 +2222,13 @@ color@^0.11.0:
color-convert "^1.3.0"
color-string "^0.3.0"
color@^3.0.0:
version "3.0.0"
resolved "http://npm.yohops.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
dependencies:
color-convert "^1.9.1"
color-string "^1.5.2"
colormin@^1.0.5:
version "1.1.2"
resolved "http://npm.yohops.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
... ... @@ -2002,6 +2255,10 @@ commander@2.17.x, commander@^2.13.0, commander@^2.14.1, commander@^2.9.0:
version "2.17.1"
resolved "http://npm.yohops.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
commander@^2.5.0:
version "2.18.0"
resolved "http://npm.yohops.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970"
commander@~2.14.1:
version "2.14.1"
resolved "http://npm.yohops.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
... ... @@ -2018,6 +2275,20 @@ commondir@^1.0.1:
version "1.0.1"
resolved "http://npm.yohops.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
commoner@^0.10.1:
version "0.10.8"
resolved "http://npm.yohops.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5"
dependencies:
commander "^2.5.0"
detective "^4.3.1"
glob "^5.0.15"
graceful-fs "^4.1.2"
iconv-lite "^0.4.5"
mkdirp "^0.5.0"
private "^0.1.6"
q "^1.1.2"
recast "^0.11.17"
component-emitter@^1.2.0, component-emitter@^1.2.1:
version "1.2.1"
resolved "http://npm.yohops.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
... ... @@ -2307,10 +2578,17 @@ csrf@~3.0.3:
tsscmp "1.0.5"
uid-safe "2.1.4"
css-color-names@0.0.4:
css-color-names@0.0.4, css-color-names@^0.0.4:
version "0.0.4"
resolved "http://npm.yohops.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
css-declaration-sorter@^3.0.0:
version "3.0.1"
resolved "http://npm.yohops.com/css-declaration-sorter/-/css-declaration-sorter-3.0.1.tgz#d0e3056b0fd88dc1ea9dceff435adbe9c702a7f8"
dependencies:
postcss "^6.0.0"
timsort "^0.3.0"
css-font-weight-names@^0.2.1:
version "0.2.1"
resolved "http://npm.yohops.com/css-font-weight-names/-/css-font-weight-names-0.2.1.tgz#5710d485ad295f6b3f1ceec41f882e324a46b516"
... ... @@ -2382,6 +2660,10 @@ css-tree@1.0.0-alpha25:
mdn-data "^1.0.0"
source-map "^0.5.3"
css-unit-converter@^1.1.1:
version "1.1.1"
resolved "http://npm.yohops.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996"
css-url-regex@^1.1.0:
version "1.1.0"
resolved "http://npm.yohops.com/css-url-regex/-/css-url-regex-1.1.0.tgz#83834230cc9f74c457de59eebd1543feeb83b7ec"
... ... @@ -2415,6 +2697,59 @@ cssmin@^0.4.3:
version "0.4.3"
resolved "http://npm.yohops.com/cssmin/-/cssmin-0.4.3.tgz#c9194077e0ebdacd691d5f59015b9d819f38d015"
cssnano-preset-default@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/cssnano-preset-default/-/cssnano-preset-default-4.0.0.tgz#c334287b4f7d49fb2d170a92f9214655788e3b6b"
dependencies:
css-declaration-sorter "^3.0.0"
cssnano-util-raw-cache "^4.0.0"
postcss "^6.0.0"
postcss-calc "^6.0.0"
postcss-colormin "^4.0.0"
postcss-convert-values "^4.0.0"
postcss-discard-comments "^4.0.0"
postcss-discard-duplicates "^4.0.0"
postcss-discard-empty "^4.0.0"
postcss-discard-overridden "^4.0.0"
postcss-merge-longhand "^4.0.0"
postcss-merge-rules "^4.0.0"
postcss-minify-font-values "^4.0.0"
postcss-minify-gradients "^4.0.0"
postcss-minify-params "^4.0.0"
postcss-minify-selectors "^4.0.0"
postcss-normalize-charset "^4.0.0"
postcss-normalize-display-values "^4.0.0"
postcss-normalize-positions "^4.0.0"
postcss-normalize-repeat-style "^4.0.0"
postcss-normalize-string "^4.0.0"
postcss-normalize-timing-functions "^4.0.0"
postcss-normalize-unicode "^4.0.0"
postcss-normalize-url "^4.0.0"
postcss-normalize-whitespace "^4.0.0"
postcss-ordered-values "^4.0.0"
postcss-reduce-initial "^4.0.0"
postcss-reduce-transforms "^4.0.0"
postcss-svgo "^4.0.0"
postcss-unique-selectors "^4.0.0"
cssnano-util-get-arguments@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f"
cssnano-util-get-match@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d"
cssnano-util-raw-cache@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.0.tgz#be0a2856e25f185f5f7a2bcc0624e28b7f179a9f"
dependencies:
postcss "^6.0.0"
cssnano-util-same-parent@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.0.tgz#d2a3de1039aa98bc4ec25001fa050330c2a16dac"
cssnano@^3.10.0:
version "3.10.0"
resolved "http://npm.yohops.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
... ... @@ -2452,6 +2787,15 @@ cssnano@^3.10.0:
postcss-value-parser "^3.2.3"
postcss-zindex "^2.0.1"
cssnano@^4.1.0:
version "4.1.0"
resolved "http://npm.yohops.com/cssnano/-/cssnano-4.1.0.tgz#682c37b84b9b7df616450a5a8dc9269b9bd10734"
dependencies:
cosmiconfig "^5.0.0"
cssnano-preset-default "^4.0.0"
is-resolvable "^1.0.0"
postcss "^6.0.0"
csso@^3.5.0:
version "3.5.1"
resolved "http://npm.yohops.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b"
... ... @@ -2712,6 +3056,13 @@ detect-node@^2.0.3:
version "2.0.3"
resolved "http://npm.yohops.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
detective@^4.3.1:
version "4.7.1"
resolved "http://npm.yohops.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e"
dependencies:
acorn "^5.2.1"
defined "^1.0.0"
diffie-hellman@^5.0.0:
version "5.0.3"
resolved "http://npm.yohops.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
... ... @@ -2878,6 +3229,10 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47, electron-to-chromium@
version "1.3.59"
resolved "http://npm.yohops.com/electron-to-chromium/-/electron-to-chromium-1.3.59.tgz#6377db04d8d3991d6286c72ed5c3fde6f4aaf112"
electron-to-chromium@^1.3.62:
version "1.3.65"
resolved "http://npm.yohops.com/electron-to-chromium/-/electron-to-chromium-1.3.65.tgz#0655c238e45fea7e0e0e81fd0cac62b8186129c2"
elegant-spinner@^1.0.1:
version "1.0.1"
resolved "http://npm.yohops.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
... ... @@ -3109,7 +3464,11 @@ espree@^4.0.0:
acorn "^5.6.0"
acorn-jsx "^4.1.1"
esprima@3.x.x, esprima@^3.1.3:
esprima-fb@^15001.1.0-dev-harmony-fb:
version "15001.1.0-dev-harmony-fb"
resolved "http://npm.yohops.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901"
esprima@3.x.x, esprima@^3.1.3, esprima@~3.1.0:
version "3.1.3"
resolved "http://npm.yohops.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
... ... @@ -3846,6 +4205,16 @@ glob-to-regexp@^0.3.0:
version "0.3.0"
resolved "http://npm.yohops.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
glob@^5.0.15:
version "5.0.15"
resolved "http://npm.yohops.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1"
dependencies:
inflight "^1.0.4"
inherits "2"
minimatch "2 || 3"
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^6.0.4:
version "6.0.4"
resolved "http://npm.yohops.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
... ... @@ -4088,6 +4457,10 @@ he@1.1.x, he@^1.1.0:
version "1.1.1"
resolved "http://npm.yohops.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
hex-color-regex@^1.1.0:
version "1.1.0"
resolved "http://npm.yohops.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e"
hmac-drbg@^1.0.0:
version "1.0.1"
resolved "http://npm.yohops.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
... ... @@ -4120,6 +4493,14 @@ hpack.js@^2.1.6:
readable-stream "^2.0.1"
wbuf "^1.1.0"
hsl-regex@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e"
hsla-regex@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38"
html-comment-regex@^1.1.0:
version "1.1.1"
resolved "http://npm.yohops.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
... ... @@ -4277,6 +4658,12 @@ iconv-lite@0.4.23, iconv-lite@^0.4.15, iconv-lite@^0.4.17, iconv-lite@^0.4.22, i
dependencies:
safer-buffer ">= 2.1.2 < 3"
iconv-lite@^0.4.5:
version "0.4.24"
resolved "http://npm.yohops.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
dependencies:
safer-buffer ">= 2.1.2 < 3"
icss-replace-symbols@^1.1.0:
version "1.1.0"
resolved "http://npm.yohops.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
... ... @@ -4500,6 +4887,10 @@ is-arrayish@^0.2.1:
version "0.2.1"
resolved "http://npm.yohops.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
is-arrayish@^0.3.1:
version "0.3.2"
resolved "http://npm.yohops.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
is-binary-path@^1.0.0:
version "1.0.1"
resolved "http://npm.yohops.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
... ... @@ -4526,6 +4917,17 @@ is-ci@^1.0.10:
dependencies:
ci-info "^1.3.0"
is-color-stop@^1.0.0:
version "1.1.0"
resolved "http://npm.yohops.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345"
dependencies:
css-color-names "^0.0.4"
hex-color-regex "^1.1.0"
hsl-regex "^1.0.0"
hsla-regex "^1.0.0"
rgb-regex "^1.0.1"
rgba-regex "^1.0.0"
is-data-descriptor@^0.1.4:
version "0.1.4"
resolved "http://npm.yohops.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
... ... @@ -4721,7 +5123,7 @@ is-regexp@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069"
is-resolvable@^1.1.0:
is-resolvable@^1.0.0, is-resolvable@^1.1.0:
version "1.1.0"
resolved "http://npm.yohops.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
... ... @@ -4743,6 +5145,12 @@ is-svg@^2.0.0:
dependencies:
html-comment-regex "^1.1.0"
is-svg@^3.0.0:
version "3.0.0"
resolved "http://npm.yohops.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75"
dependencies:
html-comment-regex "^1.1.0"
is-symbol@^1.0.1:
version "1.0.1"
resolved "http://npm.yohops.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
... ... @@ -4964,6 +5372,23 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.0"
jstransform@11:
version "11.0.3"
resolved "http://npm.yohops.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223"
dependencies:
base62 "^1.1.0"
commoner "^0.10.1"
esprima-fb "^15001.1.0-dev-harmony-fb"
object-assign "^2.0.0"
source-map "^0.4.2"
jsx-loader@^0.13.2:
version "0.13.2"
resolved "http://npm.yohops.com/jsx-loader/-/jsx-loader-0.13.2.tgz#9767f643975c78f5e5abeba9bc57885297e732d4"
dependencies:
jstransform "11"
loader-utils "^0.2.2"
kew@^0.7.0:
version "0.7.0"
resolved "http://npm.yohops.com/kew/-/kew-0.7.0.tgz#79d93d2d33363d6fdd2970b335d9141ad591d79b"
... ... @@ -5151,7 +5576,7 @@ loader-utils@1.0.x:
emojis-list "^2.0.0"
json5 "^0.5.0"
loader-utils@^0.2.16:
loader-utils@^0.2.16, loader-utils@^0.2.2:
version "0.2.17"
resolved "http://npm.yohops.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
dependencies:
... ... @@ -6134,6 +6559,10 @@ normalize-url@^1.4.0:
query-string "^4.1.0"
sort-keys "^1.0.0"
normalize-url@^3.0.0:
version "3.3.0"
resolved "http://npm.yohops.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559"
npm-bundled@^1.0.1:
version "1.0.5"
resolved "http://npm.yohops.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
... ... @@ -6204,6 +6633,10 @@ obj-extend@~0.1.0:
version "0.1.0"
resolved "http://npm.yohops.com/obj-extend/-/obj-extend-0.1.0.tgz#bb448a4775fb95eb34a781f908bbac2df23dbb5b"
object-assign@^2.0.0:
version "2.1.1"
resolved "http://npm.yohops.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa"
object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "http://npm.yohops.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
... ... @@ -6338,11 +6771,11 @@ optimist@^0.6.1:
minimist "~0.0.1"
wordwrap "~0.0.2"
optimize-css-assets-webpack-plugin@^4.0.2:
version "4.0.3"
resolved "http://npm.yohops.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-4.0.3.tgz#4f714e276b279700892c4a6202b7e22812d6f683"
optimize-css-assets-webpack-plugin@^5.0.1:
version "5.0.1"
resolved "http://npm.yohops.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz#9eb500711d35165b45e7fd60ba2df40cb3eb9159"
dependencies:
cssnano "^3.10.0"
cssnano "^4.1.0"
last-call-webpack-plugin "^3.0.0"
optionator@^0.8.1, optionator@^0.8.2:
... ... @@ -6815,6 +7248,15 @@ postcss-calc@^5.2.0:
postcss-message-helpers "^2.0.0"
reduce-css-calc "^1.2.6"
postcss-calc@^6.0.0:
version "6.0.1"
resolved "http://npm.yohops.com/postcss-calc/-/postcss-calc-6.0.1.tgz#3d24171bbf6e7629d422a436ebfe6dd9511f4330"
dependencies:
css-unit-converter "^1.1.1"
postcss "^6.0.0"
postcss-selector-parser "^2.2.2"
reduce-css-calc "^2.0.0"
postcss-center@^1.0.0:
version "1.1.0"
resolved "http://npm.yohops.com/postcss-center/-/postcss-center-1.1.0.tgz#56e05071eb7e2509ce45988740ce3b4289fc8710"
... ... @@ -6835,6 +7277,16 @@ postcss-colormin@^2.1.8:
postcss "^5.0.13"
postcss-value-parser "^3.2.3"
postcss-colormin@^4.0.0:
version "4.0.1"
resolved "http://npm.yohops.com/postcss-colormin/-/postcss-colormin-4.0.1.tgz#6f1c18a0155bc69613f2ff13843e2e4ae8ff0bbe"
dependencies:
browserslist "^4.0.0"
color "^3.0.0"
has "^1.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-convert-values@^2.3.4:
version "2.6.1"
resolved "http://npm.yohops.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
... ... @@ -6842,6 +7294,13 @@ postcss-convert-values@^2.3.4:
postcss "^5.0.11"
postcss-value-parser "^3.1.2"
postcss-convert-values@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-convert-values/-/postcss-convert-values-4.0.0.tgz#77d77d9aed1dc4e6956e651cc349d53305876f62"
dependencies:
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-crip@^2.0.1:
version "2.0.1"
resolved "http://npm.yohops.com/postcss-crip/-/postcss-crip-2.0.1.tgz#48a5b3f13a185e47fc31a2f4ed3ceb5bf3d311d5"
... ... @@ -6856,24 +7315,48 @@ postcss-discard-comments@^2.0.4:
dependencies:
postcss "^5.0.14"
postcss-discard-comments@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-discard-comments/-/postcss-discard-comments-4.0.0.tgz#9684a299e76b3e93263ef8fd2adbf1a1c08fd88d"
dependencies:
postcss "^6.0.0"
postcss-discard-duplicates@^2.0.1:
version "2.1.0"
resolved "http://npm.yohops.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
dependencies:
postcss "^5.0.4"
postcss-discard-duplicates@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.0.tgz#42f3c267f85fa909e042c35767ecfd65cb2bd72c"
dependencies:
postcss "^6.0.0"
postcss-discard-empty@^2.0.1:
version "2.1.0"
resolved "http://npm.yohops.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
dependencies:
postcss "^5.0.14"
postcss-discard-empty@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-discard-empty/-/postcss-discard-empty-4.0.0.tgz#55e18a59c74128e38c7d2804bcfa4056611fb97f"
dependencies:
postcss "^6.0.0"
postcss-discard-overridden@^0.1.1:
version "0.1.1"
resolved "http://npm.yohops.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
dependencies:
postcss "^5.0.16"
postcss-discard-overridden@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.0.tgz#4a0bf85978784cf1f81ed2c1c1fd9d964a1da1fa"
dependencies:
postcss "^6.0.0"
postcss-discard-unused@^2.2.1:
version "2.2.3"
resolved "http://npm.yohops.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
... ... @@ -6965,6 +7448,15 @@ postcss-merge-longhand@^2.0.1:
dependencies:
postcss "^5.0.4"
postcss-merge-longhand@^4.0.0:
version "4.0.5"
resolved "http://npm.yohops.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.5.tgz#00898d72347fc7e40bb564b11bdc08119c599b59"
dependencies:
css-color-names "0.0.4"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
stylehacks "^4.0.0"
postcss-merge-rules@^2.0.3:
version "2.1.2"
resolved "http://npm.yohops.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
... ... @@ -6975,6 +7467,17 @@ postcss-merge-rules@^2.0.3:
postcss-selector-parser "^2.2.2"
vendors "^1.0.0"
postcss-merge-rules@^4.0.0:
version "4.0.1"
resolved "http://npm.yohops.com/postcss-merge-rules/-/postcss-merge-rules-4.0.1.tgz#430fd59b3f2ed2e8afcd0b31278eda39854abb10"
dependencies:
browserslist "^4.0.0"
caniuse-api "^3.0.0"
cssnano-util-same-parent "^4.0.0"
postcss "^6.0.0"
postcss-selector-parser "^3.0.0"
vendors "^1.0.0"
postcss-message-helpers@^2.0.0:
version "2.0.0"
resolved "http://npm.yohops.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
... ... @@ -6987,6 +7490,13 @@ postcss-minify-font-values@^1.0.2:
postcss "^5.0.4"
postcss-value-parser "^3.0.2"
postcss-minify-font-values@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.0.tgz#4cc33d283d6a81759036e757ef981d92cbd85bed"
dependencies:
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-minify-gradients@^1.0.1:
version "1.0.5"
resolved "http://npm.yohops.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
... ... @@ -6994,6 +7504,15 @@ postcss-minify-gradients@^1.0.1:
postcss "^5.0.12"
postcss-value-parser "^3.3.0"
postcss-minify-gradients@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.0.tgz#3fc3916439d27a9bb8066db7cdad801650eb090e"
dependencies:
cssnano-util-get-arguments "^4.0.0"
is-color-stop "^1.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-minify-params@^1.0.4:
version "1.2.2"
resolved "http://npm.yohops.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
... ... @@ -7003,6 +7522,16 @@ postcss-minify-params@^1.0.4:
postcss-value-parser "^3.0.2"
uniqs "^2.0.0"
postcss-minify-params@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-minify-params/-/postcss-minify-params-4.0.0.tgz#05e9166ee48c05af651989ce84d39c1b4d790674"
dependencies:
alphanum-sort "^1.0.0"
cssnano-util-get-arguments "^4.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
uniqs "^2.0.0"
postcss-minify-selectors@^2.0.4:
version "2.1.1"
resolved "http://npm.yohops.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
... ... @@ -7012,6 +7541,15 @@ postcss-minify-selectors@^2.0.4:
postcss "^5.0.14"
postcss-selector-parser "^2.0.0"
postcss-minify-selectors@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.0.tgz#b1e9f6c463416d3fcdcb26e7b785d95f61578aad"
dependencies:
alphanum-sort "^1.0.0"
has "^1.0.0"
postcss "^6.0.0"
postcss-selector-parser "^3.0.0"
postcss-modules-extract-imports@^1.2.0:
version "1.2.0"
resolved "http://npm.yohops.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
... ... @@ -7045,6 +7583,61 @@ postcss-normalize-charset@^1.1.0:
dependencies:
postcss "^5.0.5"
postcss-normalize-charset@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.0.tgz#24527292702d5e8129eafa3d1de49ed51a6ab730"
dependencies:
postcss "^6.0.0"
postcss-normalize-display-values@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz#950e0c7be3445770a160fffd6b6644c3c0cd8f89"
dependencies:
cssnano-util-get-match "^4.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-normalize-positions@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.0.tgz#ee9343ab981b822c63ab72615ecccd08564445a3"
dependencies:
cssnano-util-get-arguments "^4.0.0"
has "^1.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-normalize-repeat-style@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.0.tgz#b711c592cf16faf9ff575e42fa100b6799083eff"
dependencies:
cssnano-util-get-arguments "^4.0.0"
cssnano-util-get-match "^4.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-normalize-string@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-string/-/postcss-normalize-string-4.0.0.tgz#718cb6d30a6fac6ac6a830e32c06c07dbc66fe5d"
dependencies:
has "^1.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-normalize-timing-functions@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.0.tgz#0351f29886aa981d43d91b2c2bd1aea6d0af6d23"
dependencies:
cssnano-util-get-match "^4.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-normalize-unicode@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.0.tgz#5acd5d47baea5d17674b2ccc4ae5166fa88cdf97"
dependencies:
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-normalize-url@^3.0.7:
version "3.0.8"
resolved "http://npm.yohops.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
... ... @@ -7054,6 +7647,22 @@ postcss-normalize-url@^3.0.7:
postcss "^5.0.14"
postcss-value-parser "^3.2.3"
postcss-normalize-url@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-url/-/postcss-normalize-url-4.0.0.tgz#b7a9c8ad26cf26694c146eb2d68bd0cf49956f0d"
dependencies:
is-absolute-url "^2.0.0"
normalize-url "^3.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-normalize-whitespace@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.0.tgz#1da7e76b10ae63c11827fa04fc3bb4a1efe99cc0"
dependencies:
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-ordered-values@^2.1.0:
version "2.2.3"
resolved "http://npm.yohops.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
... ... @@ -7061,6 +7670,14 @@ postcss-ordered-values@^2.1.0:
postcss "^5.0.4"
postcss-value-parser "^3.0.1"
postcss-ordered-values@^4.0.0:
version "4.1.0"
resolved "http://npm.yohops.com/postcss-ordered-values/-/postcss-ordered-values-4.1.0.tgz#2c769d5d44aa3c7c907b8be2e997ed19dfd8d50a"
dependencies:
cssnano-util-get-arguments "^4.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-overflow@^1.1.5:
version "1.1.5"
resolved "http://npm.yohops.com/postcss-overflow/-/postcss-overflow-1.1.5.tgz#0a4052bb4e574e57f0b99319ec6687bfc6d52abe"
... ... @@ -7093,6 +7710,15 @@ postcss-reduce-initial@^1.0.0:
dependencies:
postcss "^5.0.4"
postcss-reduce-initial@^4.0.0:
version "4.0.1"
resolved "http://npm.yohops.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.1.tgz#f2d58f50cea2b0c5dc1278d6ea5ed0ff5829c293"
dependencies:
browserslist "^4.0.0"
caniuse-api "^3.0.0"
has "^1.0.0"
postcss "^6.0.0"
postcss-reduce-transforms@^1.0.3:
version "1.0.4"
resolved "http://npm.yohops.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
... ... @@ -7101,6 +7727,15 @@ postcss-reduce-transforms@^1.0.3:
postcss "^5.0.8"
postcss-value-parser "^3.0.1"
postcss-reduce-transforms@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.0.tgz#f645fc7440c35274f40de8104e14ad7163edf188"
dependencies:
cssnano-util-get-match "^4.0.0"
has "^1.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
postcss-reporter@^5.0.0:
version "5.0.0"
resolved "http://npm.yohops.com/postcss-reporter/-/postcss-reporter-5.0.0.tgz#a14177fd1342829d291653f2786efd67110332c3"
... ... @@ -7114,7 +7749,7 @@ postcss-resolve-nested-selector@^0.1.1:
version "0.1.1"
resolved "http://npm.yohops.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e"
postcss-safe-parser@^4.0.0:
postcss-safe-parser@^4.0.0, postcss-safe-parser@^4.0.1:
version "4.0.1"
resolved "http://npm.yohops.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea"
dependencies:
... ... @@ -7141,7 +7776,7 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
indexes-of "^1.0.1"
uniq "^1.0.1"
postcss-selector-parser@^3.1.0, postcss-selector-parser@^3.1.1:
postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0, postcss-selector-parser@^3.1.1:
version "3.1.1"
resolved "http://npm.yohops.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865"
dependencies:
... ... @@ -7239,6 +7874,15 @@ postcss-svgo@^2.1.1:
postcss-value-parser "^3.2.3"
svgo "^0.7.0"
postcss-svgo@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-svgo/-/postcss-svgo-4.0.0.tgz#c0bbad02520fc636c9d78b0e8403e2e515c32285"
dependencies:
is-svg "^3.0.0"
postcss "^6.0.0"
postcss-value-parser "^3.0.0"
svgo "^1.0.0"
postcss-syntax@^0.33.0:
version "0.33.0"
resolved "http://npm.yohops.com/postcss-syntax/-/postcss-syntax-0.33.0.tgz#59c0c678d2f9ecefa84c6ce9ef46fc805c54ab3a"
... ... @@ -7251,6 +7895,14 @@ postcss-unique-selectors@^2.0.2:
postcss "^5.0.4"
uniqs "^2.0.0"
postcss-unique-selectors@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.0.tgz#04c1e9764c75874261303402c41f0e9769fc5501"
dependencies:
alphanum-sort "^1.0.0"
postcss "^6.0.0"
uniqs "^2.0.0"
postcss-use@^3.0.0:
version "3.0.0"
resolved "http://npm.yohops.com/postcss-use/-/postcss-use-3.0.0.tgz#dea046dcdeae2e471c3876623aa174be0139e99e"
... ... @@ -7258,7 +7910,7 @@ postcss-use@^3.0.0:
postcss "^6.0.17"
resolve-from "^4.0.0"
postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
postcss-value-parser@^3.0.0, postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
version "3.3.0"
resolved "http://npm.yohops.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
... ... @@ -7341,7 +7993,7 @@ prettysize@^1.1.0:
version "1.1.0"
resolved "http://npm.yohops.com/prettysize/-/prettysize-1.1.0.tgz#c6c52f87161ff172ea435f375f99831dd9a97bb0"
private@^0.1.6, private@^0.1.8:
private@^0.1.6, private@^0.1.8, private@~0.1.5:
version "0.1.8"
resolved "http://npm.yohops.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
... ... @@ -7674,6 +8326,15 @@ readdirp@^2.0.0:
readable-stream "^2.0.2"
set-immediate-shim "^1.0.1"
recast@^0.11.17:
version "0.11.23"
resolved "http://npm.yohops.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3"
dependencies:
ast-types "0.9.6"
esprima "~3.1.0"
private "~0.1.5"
source-map "~0.5.0"
rechoir@^0.6.2:
version "0.6.2"
resolved "http://npm.yohops.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
... ... @@ -7718,6 +8379,13 @@ reduce-css-calc@^1.2.6:
math-expression-evaluator "^1.2.14"
reduce-function-call "^1.0.1"
reduce-css-calc@^2.0.0:
version "2.1.4"
resolved "http://npm.yohops.com/reduce-css-calc/-/reduce-css-calc-2.1.4.tgz#c20e9cda8445ad73d4ff4bea960c6f8353791708"
dependencies:
css-unit-converter "^1.1.1"
postcss-value-parser "^3.3.0"
reduce-function-call@^1.0.1:
version "1.0.2"
resolved "http://npm.yohops.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
... ... @@ -8052,6 +8720,14 @@ rework@^1.0.1:
convert-source-map "^0.3.3"
css "^2.0.0"
rgb-regex@^1.0.1:
version "1.0.1"
resolved "http://npm.yohops.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1"
rgba-regex@^1.0.0:
version "1.0.0"
resolved "http://npm.yohops.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
right-align@^0.1.1:
version "0.1.3"
resolved "http://npm.yohops.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
... ... @@ -8341,6 +9017,12 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2"
resolved "http://npm.yohops.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
simple-swizzle@^0.2.2:
version "0.2.2"
resolved "http://npm.yohops.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
dependencies:
is-arrayish "^0.3.1"
sitemap@^1.13.0:
version "1.13.0"
resolved "http://npm.yohops.com/sitemap/-/sitemap-1.13.0.tgz#569cbe2180202926a62a266cd3de09c9ceb43f83"
... ... @@ -8471,7 +9153,7 @@ source-map@^0.4.2, source-map@^0.4.4:
dependencies:
amdefine ">=0.0.4"
source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0, source-map@~0.5.1:
version "0.5.7"
resolved "http://npm.yohops.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
... ... @@ -8792,6 +9474,14 @@ style-search@^0.1.0:
version "0.1.0"
resolved "http://npm.yohops.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902"
stylehacks@^4.0.0:
version "4.0.0"
resolved "http://npm.yohops.com/stylehacks/-/stylehacks-4.0.0.tgz#64b323951c4a24e5fc7b2ec06c137bf32d155e8a"
dependencies:
browserslist "^4.0.0"
postcss "^6.0.0"
postcss-selector-parser "^3.0.0"
stylelint-config-recommended@^2.1.0:
version "2.1.0"
resolved "http://npm.yohops.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858"
... ... @@ -8954,7 +9644,7 @@ svgo@^0.7.0:
sax "~1.2.1"
whet.extend "~0.9.9"
svgo@^1.0.5:
svgo@^1.0.0, svgo@^1.0.5:
version "1.0.5"
resolved "http://npm.yohops.com/svgo/-/svgo-1.0.5.tgz#7040364c062a0538abacff4401cea6a26a7a389a"
dependencies:
... ... @@ -9088,6 +9778,10 @@ timers-browserify@^2.0.4:
dependencies:
setimmediate "^1.0.4"
timsort@^0.3.0:
version "0.3.0"
resolved "http://npm.yohops.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4"
tmp@^0.0.33:
version "0.0.33"
resolved "http://npm.yohops.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
... ... @@ -10284,9 +10978,9 @@ yauzl@2.4.1:
dependencies:
fd-slicer "~1.0.1"
yo-cli@^2.1.6:
version "2.1.6"
resolved "http://npm.yohops.com/yo-cli/-/yo-cli-2.1.6.tgz#de34f1fb5e3aac915e0b5bec64c6513a78aa31c5"
yo-cli@=2.1.9:
version "2.1.9"
resolved "http://npm.yohops.com/yo-cli/-/yo-cli-2.1.9.tgz#50e79203655099c2c178ace241263c2e298e663e"
dependencies:
babel-core "^6.26.0"
babel-eslint "^8.0.3"
... ... @@ -10299,6 +10993,8 @@ yo-cli@^2.1.6:
babel-plugin-transform-runtime "^6.22.0"
babel-plugin-transform-vue-jsx "^3.7.0"
babel-preset-es2015 "^6.24.1"
babel-preset-react "^6.24.1"
babel-preset-stage-0 "^6.24.1"
babel-register "^6.26.0"
babel-runtime "^6.23.0"
chalk "^2.3.0"
... ... @@ -10307,13 +11003,15 @@ yo-cli@^2.1.6:
friendly-errors-webpack-plugin "^1.6.1"
handlebars-loader "^1.7.0"
html-webpack-plugin "^3.2.0"
jsx-loader "^0.13.2"
lodash "^4.17.4"
mini-css-extract-plugin "^0.4.0"
node-sass "^4.9.0"
optimize-css-assets-webpack-plugin "^4.0.2"
optimize-css-assets-webpack-plugin "^5.0.1"
postcss "^7.0.2"
postcss-import "^11.1.0"
postcss-loader "^2.1.5"
postcss-safe-parser "^4.0.1"
qiniu "^7.1.3"
qn "^1.3.0"
rd "^1.1.2"
... ... @@ -10378,9 +11076,9 @@ yoho-md5@^2.0.0:
version "2.1.0"
resolved "http://npm.yohops.com/yoho-md5/-/yoho-md5-2.1.0.tgz#f0c00d343f775e77952ebce0826863ac52e0ad50"
yoho-node-lib@=0.6.26:
version "0.6.26"
resolved "http://npm.yohops.com/yoho-node-lib/-/yoho-node-lib-0.6.26.tgz#4bacb7e56b3dd937483ae4d65a7543b6b6dd4a20"
yoho-node-lib@=0.6.28:
version "0.6.28"
resolved "http://npm.yohops.com/yoho-node-lib/-/yoho-node-lib-0.6.28.tgz#09eb686cb8cf01cfbbbdc0c0180a78079f17292c"
dependencies:
dnscache "^1.0.1"
handlebars "^4.0.5"
... ...