Merge remote-tracking branch 'tootsuite/master' into glitchsoc/master

th-downstream
Jenkins 7 years ago
commit 8c41fb4acc

@ -27,6 +27,7 @@ plugins:
enabled: true enabled: true
eslint: eslint:
enabled: true enabled: true
channel: eslint-4
rubocop: rubocop:
enabled: true enabled: true
scss-lint: scss-lint:

@ -17,11 +17,9 @@ plugins:
parserOptions: parserOptions:
sourceType: module sourceType: module
ecmaFeatures: ecmaFeatures:
arrowFunctions: true experimentalObjectRestSpread: true
jsx: true jsx: true
destructuring: true ecmaVersion: 2018
modules: true
spread: true
settings: settings:
import/extensions: import/extensions:
@ -114,6 +112,7 @@ rules:
react/self-closing-comp: error react/self-closing-comp: error
jsx-a11y/accessible-emoji: warn jsx-a11y/accessible-emoji: warn
jsx-a11y/alt-text: warn
jsx-a11y/anchor-has-content: warn jsx-a11y/anchor-has-content: warn
jsx-a11y/aria-activedescendant-has-tabindex: warn jsx-a11y/aria-activedescendant-has-tabindex: warn
jsx-a11y/aria-props: warn jsx-a11y/aria-props: warn
@ -124,16 +123,22 @@ rules:
jsx-a11y/href-no-hash: warn jsx-a11y/href-no-hash: warn
jsx-a11y/html-has-lang: warn jsx-a11y/html-has-lang: warn
jsx-a11y/iframe-has-title: warn jsx-a11y/iframe-has-title: warn
jsx-a11y/img-has-alt: warn
jsx-a11y/img-redundant-alt: warn jsx-a11y/img-redundant-alt: warn
jsx-a11y/interactive-supports-focus: warn
jsx-a11y/label-has-for: off jsx-a11y/label-has-for: off
jsx-a11y/mouse-events-have-key-events: warn jsx-a11y/mouse-events-have-key-events: warn
jsx-a11y/no-access-key: warn jsx-a11y/no-access-key: warn
jsx-a11y/no-distracting-elements: warn jsx-a11y/no-distracting-elements: warn
jsx-a11y/no-noninteractive-element-interactions:
- warn
- handlers:
- onClick
jsx-a11y/no-onchange: warn jsx-a11y/no-onchange: warn
jsx-a11y/no-redundant-roles: warn jsx-a11y/no-redundant-roles: warn
jsx-a11y/onclick-has-focus: warn jsx-a11y/no-static-element-interactions:
jsx-a11y/onclick-has-role: warn - warn
- handlers:
- onClick
jsx-a11y/role-has-required-aria-props: warn jsx-a11y/role-has-required-aria-props: warn
jsx-a11y/role-supports-aria-props: off jsx-a11y/role-supports-aria-props: off
jsx-a11y/scope: warn jsx-a11y/scope: warn

@ -9,6 +9,9 @@ cache:
- tmp/cache/babel-loader - tmp/cache/babel-loader
dist: trusty dist: trusty
sudo: required sudo: required
branches:
only:
- master
notifications: notifications:
email: false email: false

@ -15,13 +15,14 @@ class SharesController < ApplicationController
private private
def initial_state_params def initial_state_params
text = [params[:title], params[:text], params[:url]].compact.join(' ')
{ {
settings: Web::Setting.find_by(user: current_user)&.data || {}, settings: Web::Setting.find_by(user: current_user)&.data || {},
push_subscription: current_account.user.web_push_subscription(current_session), push_subscription: current_account.user.web_push_subscription(current_session),
current_account: current_account, current_account: current_account,
token: current_session.token, token: current_session.token,
admin: Account.find_local(Setting.site_contact_username), admin: Account.find_local(Setting.site_contact_username),
text: params[:text], text: text,
} }
end end

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<svg width="2048" height="1792" viewBox="0 0 2048 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1344 1504q0 13-9.5 22.5t-22.5 9.5h-960q-8 0-13.5-2t-9-7-5.5-8-3-11.5-1-11.5v-600h-192q-26 0-45-19t-19-45q0-24 15-41l320-384q19-22 49-22t49 22l320 384q15 17 15 41 0 26-19 45t-45 19h-192v384h576q16 0 25 11l160 192q7 10 7 21zm640-416q0 24-15 41l-320 384q-20 23-49 23t-49-23l-320-384q-15-17-15-41 0-26 19-45t45-19h192v-384h-576q-16 0-25-12l-160-192q-7-9-7-20 0-13 9.5-22.5t22.5-9.5h960q8 0 13.5 2t9 7 5.5 8 3 11.5 1 11.5v600h192q26 0 45 19t19 45z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 604 B

@ -0,0 +1,4 @@
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M12 17.27L18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z"/>
<path d="M0 0h24v24H0z" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 252 B

@ -0,0 +1,4 @@
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M15 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm-9-2V7H4v3H1v2h3v3h2v-3h3v-2H6zm9 4c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/>
</svg>

After

Width:  |  Height:  |  Size: 305 B

@ -0,0 +1,4 @@
<svg fill="#FFFFFF" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M10 9V5l-7 7 7 7v-4.1c5 0 8.5 1.6 11 5.1-1-5-4-10-11-11z"/>
<path d="M0 0h24v24H0z" fill="none"/>
</svg>

After

Width:  |  Height:  |  Size: 220 B

@ -20,11 +20,11 @@ export default class AttachmentList extends ImmutablePureComponent {
</div> </div>
<ul className='attachment-list__list'> <ul className='attachment-list__list'>
{media.map(attachment => {media.map(attachment => (
<li key={attachment.get('id')}> <li key={attachment.get('id')}>
<a href={attachment.get('remote_url')} target='_blank' rel='noopener'>{filename(attachment.get('remote_url'))}</a> <a href={attachment.get('remote_url')} target='_blank' rel='noopener'>{filename(attachment.get('remote_url'))}</a>
</li> </li>
)} ))}
</ul> </ul>
</div> </div>
); );

@ -5,11 +5,11 @@ import PropTypes from 'prop-types';
const Collapsable = ({ fullHeight, isVisible, children }) => ( const Collapsable = ({ fullHeight, isVisible, children }) => (
<Motion defaultStyle={{ opacity: !isVisible ? 0 : 100, height: isVisible ? fullHeight : 0 }} style={{ opacity: spring(!isVisible ? 0 : 100), height: spring(!isVisible ? 0 : fullHeight) }}> <Motion defaultStyle={{ opacity: !isVisible ? 0 : 100, height: isVisible ? fullHeight : 0 }} style={{ opacity: spring(!isVisible ? 0 : 100), height: spring(!isVisible ? 0 : fullHeight) }}>
{({ opacity, height }) => {({ opacity, height }) => (
<div style={{ height: `${height}px`, overflow: 'hidden', opacity: opacity / 100, display: Math.floor(opacity) === 0 ? 'none' : 'block' }}> <div style={{ height: `${height}px`, overflow: 'hidden', opacity: opacity / 100, display: Math.floor(opacity) === 0 ? 'none' : 'block' }}>
{children} {children}
</div> </div>
} )}
</Motion> </Motion>
); );

@ -93,7 +93,7 @@ export default class IconButton extends React.PureComponent {
return ( return (
<Motion defaultStyle={{ rotate: active ? -360 : 0 }} style={{ rotate: animate ? spring(active ? -360 : 0, { stiffness: 120, damping: 7 }) : 0 }}> <Motion defaultStyle={{ rotate: active ? -360 : 0 }} style={{ rotate: animate ? spring(active ? -360 : 0, { stiffness: 120, damping: 7 }) : 0 }}>
{({ rotate }) => {({ rotate }) => (
<button <button
aria-label={title} aria-label={title}
aria-pressed={pressed} aria-pressed={pressed}
@ -106,7 +106,7 @@ export default class IconButton extends React.PureComponent {
> >
<i style={{ transform: `rotate(${rotate}deg)` }} className={`fa fa-fw fa-${icon}`} aria-hidden='true' /> <i style={{ transform: `rotate(${rotate}deg)` }} className={`fa fa-fw fa-${icon}`} aria-hidden='true' />
</button> </button>
} )}
</Motion> </Motion>
); );
} }

@ -178,14 +178,16 @@ export default class Status extends ImmutablePureComponent {
media = ( media = (
<Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} > <Bundle fetchComponent={Video} loading={this.renderLoadingVideoPlayer} >
{Component => <Component {Component => (
<Component
preview={video.get('preview_url')} preview={video.get('preview_url')}
src={video.get('url')} src={video.get('url')}
width={239} width={239}
height={110} height={110}
sensitive={status.get('sensitive')} sensitive={status.get('sensitive')}
onOpenVideo={this.handleOpenVideo} onOpenVideo={this.handleOpenVideo}
/>} />
)}
</Bundle> </Bundle>
); );
} else { } else {

@ -41,7 +41,7 @@ class Avatar extends ImmutablePureComponent {
return ( return (
<Motion defaultStyle={{ radius: 90 }} style={{ radius: spring(isHovered ? 30 : 90, { stiffness: 180, damping: 12 }) }}> <Motion defaultStyle={{ radius: 90 }} style={{ radius: spring(isHovered ? 30 : 90, { stiffness: 180, damping: 12 }) }}>
{({ radius }) => {({ radius }) => (
<a <a
href={account.get('url')} href={account.get('url')}
className='account__header__avatar' className='account__header__avatar'
@ -56,7 +56,7 @@ class Avatar extends ImmutablePureComponent {
> >
<span style={{ display: 'none' }}>{account.get('acct')}</span> <span style={{ display: 'none' }}>{account.get('acct')}</span>
</a> </a>
} )}
</Motion> </Motion>
); );
} }

@ -94,12 +94,12 @@ export default class AccountGallery extends ImmutablePureComponent {
</div> </div>
<div className='account-gallery__container'> <div className='account-gallery__container'>
{medias.map(media => {medias.map(media => (
<MediaItem <MediaItem
key={media.get('id')} key={media.get('id')}
media={media} media={media}
/> />
)} ))}
{loadMore} {loadMore}
</div> </div>
</div> </div>

@ -72,7 +72,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
<Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}> <Motion defaultStyle={{ opacity: 0, scaleX: 0.85, scaleY: 0.75 }} style={{ opacity: spring(1, { damping: 35, stiffness: 400 }), scaleX: spring(1, { damping: 35, stiffness: 400 }), scaleY: spring(1, { damping: 35, stiffness: 400 }) }}>
{({ opacity, scaleX, scaleY }) => ( {({ opacity, scaleX, scaleY }) => (
<div className='privacy-dropdown__dropdown' style={{ ...style, opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }} ref={this.setRef}> <div className='privacy-dropdown__dropdown' style={{ ...style, opacity: opacity, transform: `scale(${scaleX}, ${scaleY})` }} ref={this.setRef}>
{items.map(item => {items.map(item => (
<div role='button' tabIndex='0' key={item.value} data-index={item.value} onKeyDown={this.handleClick} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })}> <div role='button' tabIndex='0' key={item.value} data-index={item.value} onKeyDown={this.handleClick} onClick={this.handleClick} className={classNames('privacy-dropdown__option', { active: item.value === value })}>
<div className='privacy-dropdown__option__icon'> <div className='privacy-dropdown__option__icon'>
<i className={`fa fa-fw fa-${item.icon}`} /> <i className={`fa fa-fw fa-${item.icon}`} />
@ -83,7 +83,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
{item.meta} {item.meta}
</div> </div>
</div> </div>
)} ))}
</div> </div>
)} )}
</Motion> </Motion>

@ -40,11 +40,11 @@ export default class SearchResults extends ImmutablePureComponent {
count += results.get('hashtags').size; count += results.get('hashtags').size;
hashtags = ( hashtags = (
<div className='search-results__section'> <div className='search-results__section'>
{results.get('hashtags').map(hashtag => {results.get('hashtags').map(hashtag => (
<Link key={hashtag} className='search-results__hashtag' to={`/timelines/tag/${hashtag}`}> <Link key={hashtag} className='search-results__hashtag' to={`/timelines/tag/${hashtag}`}>
#{hashtag} #{hashtag}
</Link> </Link>
)} ))}
</div> </div>
); );
} }

@ -98,11 +98,11 @@ export default class Compose extends React.PureComponent {
</div> </div>
<Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}> <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>
{({ x }) => {({ x }) => (
<div className='drawer__inner darker' style={{ transform: `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}> <div className='drawer__inner darker' style={{ transform: `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>
<SearchResultsContainer /> <SearchResultsContainer />
</div> </div>
} )}
</Motion> </Motion>
</div> </div>
</div> </div>

@ -168,8 +168,8 @@ export const urlRegex = (function() {
'#{validGeneralUrlPathChars}*' + '#{validGeneralUrlPathChars}*' +
')' + ')' +
')' + ')' +
'\\)' '\\)',
, 'i'); 'i');
// Valid end-of-path chracters (so /foo. does not gobble the period). // Valid end-of-path chracters (so /foo. does not gobble the period).
// 1. Allow =&# for empty URL parameters and other URL-join artifacts // 1. Allow =&# for empty URL parameters and other URL-join artifacts
regexen.validUrlPathEndingChars = regexSupplant(/[^#{spaces_group}\(\)\?!\*';:=\,\.\$%\[\]#{pd}~&\|@]|(?:#{validUrlBalancedParens})/i); regexen.validUrlPathEndingChars = regexSupplant(/[^#{spaces_group}\(\)\?!\*';:=\,\.\$%\[\]#{pd}~&\|@]|(?:#{validUrlBalancedParens})/i);
@ -190,7 +190,7 @@ export const urlRegex = (function() {
'(?::(#{validPortNumber}))?' + // $4 Port number (optional) '(?::(#{validPortNumber}))?' + // $4 Port number (optional)
'(\\/#{validUrlPath}*)?' + // $5 URL Path '(\\/#{validUrlPath}*)?' + // $5 URL Path
'(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?' + // $6 Query String '(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?' + // $6 Query String
')' ')',
, 'gi'); 'gi');
return regexen.validUrl; return regexen.validUrl;
}()); }());

@ -66,11 +66,11 @@ export default class ListEditor extends ImmutablePureComponent {
{showSearch && <div role='button' tabIndex='-1' className='drawer__backdrop' onClick={onClear} />} {showSearch && <div role='button' tabIndex='-1' className='drawer__backdrop' onClick={onClear} />}
<Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}> <Motion defaultStyle={{ x: -100 }} style={{ x: spring(showSearch ? 0 : -100, { stiffness: 210, damping: 20 }) }}>
{({ x }) => {({ x }) => (
<div className='drawer__inner backdrop' style={{ transform: x === 0 ? null : `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}> <div className='drawer__inner backdrop' style={{ transform: x === 0 ? null : `translateX(${x}%)`, visibility: x === -100 ? 'hidden' : 'visible' }}>
{searchAccountIds.map(accountId => <Account key={accountId} accountId={accountId} />)} {searchAccountIds.map(accountId => <Account key={accountId} accountId={accountId} />)}
</div> </div>
} )}
</Motion> </Motion>
</div> </div>
</div> </div>

@ -25,7 +25,7 @@ export default class ColumnHeader extends React.PureComponent {
} }
return ( return (
<div role='heading' tabIndex='0' className={`column-header ${active ? 'active' : ''}`} onClick={this.handleClick} id={columnHeaderId || null}> <div role='button heading' tabIndex='0' className={`column-header ${active ? 'active' : ''}`} onClick={this.handleClick} id={columnHeaderId || null}>
{icon} {icon}
{type} {type}
</div> </div>

@ -113,13 +113,11 @@ export default class ModalRoot extends React.PureComponent {
<div style={{ pointerEvents: visible ? 'auto' : 'none' }}> <div style={{ pointerEvents: visible ? 'auto' : 'none' }}>
<div role='presentation' className='modal-root__overlay' onClick={onClose} /> <div role='presentation' className='modal-root__overlay' onClick={onClose} />
<div role='dialog' className='modal-root__container'> <div role='dialog' className='modal-root__container'>
{ {visible && (
visible ? <BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
(<BundleContainer fetchComponent={MODAL_COMPONENTS[type]} loading={this.renderLoading(type)} error={this.renderError} renderDelay={200}>
{(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />} {(SpecificComponent) => <SpecificComponent {...props} onClose={onClose} />}
</BundleContainer>) : </BundleContainer>
null )}
}
</div> </div>
</div> </div>
</div> </div>

@ -37,14 +37,14 @@ export default class UploadArea extends React.PureComponent {
return ( return (
<Motion defaultStyle={{ backgroundOpacity: 0, backgroundScale: 0.95 }} style={{ backgroundOpacity: spring(active ? 1 : 0, { stiffness: 150, damping: 15 }), backgroundScale: spring(active ? 1 : 0.95, { stiffness: 200, damping: 3 }) }}> <Motion defaultStyle={{ backgroundOpacity: 0, backgroundScale: 0.95 }} style={{ backgroundOpacity: spring(active ? 1 : 0, { stiffness: 150, damping: 15 }), backgroundScale: spring(active ? 1 : 0.95, { stiffness: 200, damping: 3 }) }}>
{({ backgroundOpacity, backgroundScale }) => {({ backgroundOpacity, backgroundScale }) => (
<div className='upload-area' style={{ visibility: active ? 'visible' : 'hidden', opacity: backgroundOpacity }}> <div className='upload-area' style={{ visibility: active ? 'visible' : 'hidden', opacity: backgroundOpacity }}>
<div className='upload-area__drop'> <div className='upload-area__drop'>
<div className='upload-area__background' style={{ transform: `scale(${backgroundScale})` }} /> <div className='upload-area__background' style={{ transform: `scale(${backgroundScale})` }} />
<div className='upload-area__content'><FormattedMessage id='upload_area.title' defaultMessage='Drag & drop to upload' /></div> <div className='upload-area__content'><FormattedMessage id='upload_area.title' defaultMessage='Drag & drop to upload' /></div>
</div> </div>
</div> </div>
} )}
</Motion> </Motion>
); );
} }

@ -170,10 +170,10 @@
"notifications.column_settings.sound": "播放音效", "notifications.column_settings.sound": "播放音效",
"onboarding.done": "出发!", "onboarding.done": "出发!",
"onboarding.next": "下一步", "onboarding.next": "下一步",
"onboarding.page_five.public_timelines": "本站时间轴显示的是由本站({domain})用户发布的所有公开嘟文。跨站公共时间轴显示的的是由本站用户关注对象所发布的所有公开嘟文。这些就是寻人好去处的公共时间轴啦。", "onboarding.page_five.public_timelines": "本站时间轴显示的是由本站({domain})用户发布的所有公开嘟文。跨站公共时间轴显示的的是由本站用户关注对象所发布的所有公开嘟文。这些就是寻人好去处的公共时间轴啦。",
"onboarding.page_four.home": "你的主页时间轴上显示的是你的关注对象所发布的嘟文。", "onboarding.page_four.home": "你的主页时间轴上显示的是你的关注对象所发布的嘟文。",
"onboarding.page_four.notifications": "如果有人与你互动了,他们就会出现在通知栏中哦~", "onboarding.page_four.notifications": "如果有人与你互动了,他们就会出现在通知栏中哦~",
"onboarding.page_one.federation": "Mastodon 是由一系列独立的服务器共同打造的强大的社交网络,我们将这些各自独立而又相互连接的服务器叫做实例。", "onboarding.page_one.federation": "Mastodon 是由一系列独立的服务器共同打造的强大的社交网络,我们将这些各自独立而又相互连接的服务器叫做实例。",
"onboarding.page_one.handle": "你是在 {domain} 上注册的,所以你的完整用户地址是 {handle}。", "onboarding.page_one.handle": "你是在 {domain} 上注册的,所以你的完整用户地址是 {handle}。",
"onboarding.page_one.welcome": "欢迎来到 Mastodon", "onboarding.page_one.welcome": "欢迎来到 Mastodon",
"onboarding.page_six.admin": "{admin} 是你所在服务器实例的管理员。", "onboarding.page_six.admin": "{admin} 是你所在服务器实例的管理员。",
@ -184,8 +184,8 @@
"onboarding.page_six.guidelines": "社区指南", "onboarding.page_six.guidelines": "社区指南",
"onboarding.page_six.read_guidelines": "别忘了看看 {domain} 的{guidelines}", "onboarding.page_six.read_guidelines": "别忘了看看 {domain} 的{guidelines}",
"onboarding.page_six.various_app": "移动设备应用", "onboarding.page_six.various_app": "移动设备应用",
"onboarding.page_three.profile": "你可以修改你的个人资料,比如头像、简介和昵称等偏好设置。", "onboarding.page_three.profile": "你可以修改你的个人资料,比如头像、简介和昵称等偏好设置。",
"onboarding.page_three.search": "你可以通过搜索功能寻找用户和话题标签,比如{illustration}或者{introductions}。如果你想搜索其他实例上的用户,就需要输入完整用户地址(@用户名@域名)哦。", "onboarding.page_three.search": "你可以通过搜索功能寻找用户和话题标签,比如“{illustration}”,或是“{introductions}”。如果你想搜索其他实例上的用户,就需要输入完整用户地址(@用户名@域名)哦。",
"onboarding.page_two.compose": "在撰写栏中开始嘟嘟吧!下方的按钮分别可以用来上传图片、修改嘟文可见范围,以及添加警告信息。", "onboarding.page_two.compose": "在撰写栏中开始嘟嘟吧!下方的按钮分别可以用来上传图片、修改嘟文可见范围,以及添加警告信息。",
"onboarding.skip": "跳过", "onboarding.skip": "跳过",
"privacy.change": "设置嘟文可见范围", "privacy.change": "设置嘟文可见范围",

@ -254,6 +254,10 @@ h3 {
.content-cell { .content-cell {
background-color: darken($ui-base-color, 4%); background-color: darken($ui-base-color, 4%);
&.darker {
background-color: darken($ui-base-color, 8%);
}
} }
.hero { .hero {
@ -261,6 +265,18 @@ h3 {
padding-top: 20px; padding-top: 20px;
} }
.hero-with-button {
h1 {
margin-bottom: 4px;
}
p.lead {
margin-bottom: 32px;
}
padding-bottom: 16px;
}
.header { .header {
border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0;
background-color: darken($ui-base-color, 8%); background-color: darken($ui-base-color, 8%);
@ -284,7 +300,7 @@ h3 {
.footer { .footer {
.column-cell, .column-cell,
p { p {
color: lighten($ui-base-color, 26%); color: lighten($ui-base-color, 34%);
} }
p { p {
@ -297,7 +313,7 @@ h3 {
} }
a { a {
color: lighten($ui-base-color, 26%); color: lighten($ui-base-color, 34%);
text-decoration: underline; text-decoration: underline;
} }
@ -347,7 +363,7 @@ h3 {
} }
.button-primary { .button-primary {
background-color: $ui-highlight-color; background-color: darken($ui-highlight-color, 3%);
} }
.text-center { .text-center {
@ -385,6 +401,68 @@ h3 {
} }
} }
.hr {
width: 100%;
td {
font-size: 0;
line-height: 1px;
mso-line-height-rule: exactly;
min-height: 1px;
overflow: hidden;
height: 2px;
background-color: transparent !important;
border-top: 1px solid lighten($ui-base-color, 8%);
}
}
.status {
padding-bottom: 32px;
.status-header {
td {
font-size: 14px;
padding-bottom: 15px;
}
bdi {
color: $white;
font-size: 16px;
display: block;
font-weight: 500;
}
td:first-child {
padding-right: 10px;
}
img {
width: 48px;
height: 48px;
border-radius: 4px;
}
}
p {
font-size: 19px;
margin-bottom: 20px;
&.status-footer {
color: lighten($ui-base-color, 26%);
font-size: 14px;
margin-bottom: 0;
a {
color: lighten($ui-base-color, 26%);
}
}
}
}
.border-top {
border-top: 1px solid lighten($ui-base-color, 8%);
}
@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape) { @media only screen and (min-device-width: 768px) and (max-device-width: 1024px) and (orientation: landscape) {
body { body {
min-height: 1024px !important; min-height: 1024px !important;

@ -1,10 +1,10 @@
# frozen_string_literal: true # frozen_string_literal: true
class NotificationMailer < ApplicationMailer class NotificationMailer < ApplicationMailer
layout 'plain_mailer'
helper :stream_entries helper :stream_entries
add_template_helper RoutingHelper
def mention(recipient, notification) def mention(recipient, notification)
@me = recipient @me = recipient
@status = notification.target_status @status = notification.target_status

@ -5,6 +5,8 @@ class UserMailer < Devise::Mailer
helper :instance helper :instance
add_template_helper RoutingHelper
def confirmation_instructions(user, token, **) def confirmation_instructions(user, token, **)
@resource = user @resource = user
@token = token @token = token

@ -6,7 +6,8 @@ class ManifestSerializer < ActiveModel::Serializer
attributes :name, :short_name, :description, attributes :name, :short_name, :description,
:icons, :theme_color, :background_color, :icons, :theme_color, :background_color,
:display, :start_url, :scope :display, :start_url, :scope,
:share_target
def name def name
object.site_title object.site_title
@ -49,4 +50,8 @@ class ManifestSerializer < ActiveModel::Serializer
def scope def scope
root_url root_url
end end
def share_target
{ url_template: 'share?title={title}&text={text}&url={url}' }
end
end end

@ -24,7 +24,7 @@
%tr %tr
%td.column-cell %td.column-cell
= link_to root_url do = link_to root_url do
= image_tag asset_pack_path('logo_full.svg'), height: 34, class: 'logo' = image_tag full_pack_url('logo_full.svg'), alt: 'Mastodon', height: 34, class: 'logo'
= yield = yield
@ -52,4 +52,4 @@
%tbody %tbody
%td.column-cell.text-right %td.column-cell.text-right
= link_to root_url do = link_to root_url do
= image_tag asset_pack_path('logo_transparent.svg'), height: 24 = image_tag full_pack_url('logo_transparent.svg'), alt: 'Mastodon', height: 24

@ -0,0 +1,30 @@
- i ||= 0
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell{ class: i.zero? ? 'content-start' : nil }
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.padded.status
%table.status-header{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td{ align: 'left', width: 48 }
= image_tag status.account.avatar
%td{ align: 'left' }
%bdi= display_name(status.account)
= "@#{status.account.acct}"
= Formatter.instance.format(status)
%p.status-footer
= link_to l(status.created_at), web_url("statuses/#{status.id}")

@ -0,0 +1,44 @@
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.darker.hero-with-button
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.text-center.padded
%h1= t 'notification_mailer.digest.title'
%p.lead= t('notification_mailer.digest.body', since: l(@since.to_date, format: :short), instance: site_hostname)
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.button-primary
= link_to web_url do
%span= t 'notification_mailer.digest.action'
- @notifications.each_with_index do |n, i|
= render 'status', status: n.target_status, i: i
- unless @follows_since.zero?
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.content-start.border-top
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.text-center
%p= t('notification_mailer.digest.new_followers_summary', count: @follows_since)

@ -0,0 +1,45 @@
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.hero
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.text-center.padded
%table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td
= image_tag full_pack_url('icon_grade.svg'), alt:''
%h1= t 'notification_mailer.favourite.title'
%p.lead= t('notification_mailer.favourite.body', name: @account.acct)
= render 'status', status: @status
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.content-start.border-top
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.button-cell
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.button-primary
= link_to web_url("statuses/#{@status.id}") do
%span= t 'application_mailer.view_status'

@ -0,0 +1,43 @@
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.hero
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.text-center.padded
%table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td
= image_tag full_pack_url('icon_person_add.svg'), alt: ''
%h1= t 'notification_mailer.follow.title'
%p.lead= t('notification_mailer.follow.body', name: @account.acct)
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.content-start
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.button-cell
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.button-primary
= link_to web_url("accounts/#{@account.id}") do
%span= t 'application_mailer.view_profile'

@ -0,0 +1,43 @@
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.hero
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.text-center.padded
%table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td
= image_tag full_pack_url('icon_person_add.svg'), alt: ''
%h1= t 'notification_mailer.follow_request.title'
%p.lead= t('notification_mailer.follow_request.body', name: @account.acct)
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.content-start
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.button-cell
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.button-primary
= link_to web_url("follow_requests") do
%span= t 'notification_mailer.follow_request.action'

@ -0,0 +1,45 @@
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.hero
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.text-center.padded
%table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td
= image_tag full_pack_url('icon_reply.svg'), alt: ''
%h1= t 'notification_mailer.mention.title'
%p.lead= t('notification_mailer.mention.body', name: @status.account.acct)
= render 'status', status: @status
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.content-start.border-top
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.button-cell
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.button-primary
= link_to web_url("statuses/#{@status.id}") do
%span= t 'notification_mailer.mention.action'

@ -0,0 +1,45 @@
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.hero
.email-row
.col-6
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.text-center.padded
%table.hero-icon{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td
= image_tag full_pack_url('icon_cached.svg'), alt: ''
%h1= t 'notification_mailer.reblog.title'
%p.lead= t('notification_mailer.reblog.body', name: @account.acct)
= render 'status', status: @status
%table.email-table{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.email-body
.email-container
%table.content-section{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.content-cell.content-start.border-top
%table.column{ cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.column-cell.button-cell
%table.button{ align: 'center', cellspacing: 0, cellpadding: 0 }
%tbody
%tr
%td.button-primary
= link_to web_url("statuses/#{@status.id}") do
%span= t 'application_mailer.view_status'

@ -17,7 +17,7 @@
%tbody %tbody
%tr %tr
%td %td
= image_tag asset_pack_path('icon_email.svg') = image_tag full_pack_url('icon_email.svg'), alt: ''
%h1= t 'devise.mailer.confirmation_instructions.title' %h1= t 'devise.mailer.confirmation_instructions.title'

@ -17,7 +17,7 @@
%tbody %tbody
%tr %tr
%td %td
= image_tag asset_pack_path('icon_email.svg') = image_tag full_pack_url('icon_email.svg'), alt: ''
%h1= t 'devise.mailer.email_changed.title' %h1= t 'devise.mailer.email_changed.title'
%p.lead= t 'devise.mailer.email_changed.explanation' %p.lead= t 'devise.mailer.email_changed.explanation'

@ -17,7 +17,7 @@
%tbody %tbody
%tr %tr
%td %td
= image_tag asset_pack_path('icon_lock_open.svg') = image_tag full_pack_url('icon_lock_open.svg'), alt: ''
%h1= t 'devise.mailer.password_change.title' %h1= t 'devise.mailer.password_change.title'
%p.lead= t 'devise.mailer.password_change.explanation' %p.lead= t 'devise.mailer.password_change.explanation'

@ -17,7 +17,7 @@
%tbody %tbody
%tr %tr
%td %td
= image_tag asset_pack_path('icon_email.svg') = image_tag full_pack_url('icon_email.svg'), alt: ''
%h1= t 'devise.mailer.reconfirmation_instructions.title' %h1= t 'devise.mailer.reconfirmation_instructions.title'
%p.lead= t 'devise.mailer.reconfirmation_instructions.explanation' %p.lead= t 'devise.mailer.reconfirmation_instructions.explanation'

@ -17,7 +17,7 @@
%tbody %tbody
%tr %tr
%td %td
= image_tag asset_pack_path('icon_lock_open.svg') = image_tag full_pack_url('icon_lock_open.svg'), alt: ''
%h1= t 'devise.mailer.reset_password_instructions.title' %h1= t 'devise.mailer.reset_password_instructions.title'
%p.lead= t 'devise.mailer.reset_password_instructions.explanation' %p.lead= t 'devise.mailer.reset_password_instructions.explanation'

@ -18,10 +18,10 @@ en:
mailer: mailer:
confirmation_instructions: confirmation_instructions:
action: Verify email address action: Verify email address
explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this e-mail. explanation: You have created an account on %{host} with this email address. You are one click away from activating it. If this wasn't you, please ignore this email.
extra_html: Please also check out our <a href="%{terms_path}">terms of service</a> and <a href="%{policy_path}">privacy policy</a>. extra_html: Please also check out <a href="%{terms_path}">the rules of the instance</a> and <a href="%{policy_path}">our terms of service</a>.
subject: 'Mastodon: Confirmation instructions for %{instance}' subject: 'Mastodon: Confirmation instructions for %{instance}'
title: Verify e-mail address title: Verify email address
email_changed: email_changed:
explanation: 'The email address for your account is being changed to:' explanation: 'The email address for your account is being changed to:'
extra: If you did not change your email, it is likely that someone has gained access to your account. Please change your password immediately or contact the instance admin if you're locked out of your account. extra: If you did not change your email, it is likely that someone has gained access to your account. Please change your password immediately or contact the instance admin if you're locked out of your account.

@ -17,15 +17,32 @@ zh-CN:
unconfirmed: 继续操作前请先确认你的帐户。 unconfirmed: 继续操作前请先确认你的帐户。
mailer: mailer:
confirmation_instructions: confirmation_instructions:
action: 验证电子邮件地址
explanation: 你在 %{host} 上使用这个电子邮件地址创建了一个帐户。只需点击下面的按钮,即可完成激活。如果你并没有创建过帐户,请忽略此邮件。
extra_html: 请记得阅读<a href="%{terms_path}">本实例的相关规定</a>和<a href="%{policy_path}">我们的使用条款</a>。
subject: Mastodon确认 %{instance} 帐户信息 subject: Mastodon确认 %{instance} 帐户信息
title: 验证电子邮件地址
email_changed: email_changed:
subject: Mastodon电子邮件地址已被修改 explanation: 你的帐户的电子邮件地址即将变更为:
extra: 如果你并没有请求更改你的电子邮件地址,则他人很有可能已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系实例的管理员请求协助。
subject: Mastodon电子邮件地址已被更改
title: 新电子邮件地址
password_change: password_change:
subject: Mastodon密码已被重置 explanation: 你的帐户的密码已被更改。
extra: 如果你并没有请求更改你的密码,则他人很有可能已经入侵你的帐户。请立即更改你的密码;如果你已经无法访问你的帐户,请联系实例的管理员请求协助。
subject: Mastodon密码已被更改
title: 密码已被重置
reconfirmation_instructions: reconfirmation_instructions:
explanation: 请确认你的新电子邮件地址以完成更改。
extra: 如果你并没有请求本次变更请忽略此邮件。Mastodon 帐户的电子邮件地址只有在你点击上面的链接后才会更改。
subject: Mastodon确认 %{instance} 电子邮件地址 subject: Mastodon确认 %{instance} 电子邮件地址
title: 验证电子邮件地址
reset_password_instructions: reset_password_instructions:
action: 更改密码
explanation: 你正在请求更改帐户的密码。
extra: 如果你并没有请求本次变更,请忽略此邮件。你的密码只有在你点击上面的链接并输入新密码后才会更改。
subject: Mastodon重置密码信息 subject: Mastodon重置密码信息
title: 重置密码
unlock_instructions: unlock_instructions:
subject: Mastodon帐户解锁信息 subject: Mastodon帐户解锁信息
omniauth_callbacks: omniauth_callbacks:

@ -343,6 +343,8 @@ en:
settings: 'Change e-mail preferences: %{link}' settings: 'Change e-mail preferences: %{link}'
signature: Mastodon notifications from %{instance} signature: Mastodon notifications from %{instance}
view: 'View:' view: 'View:'
view_profile: View Profile
view_status: View status
applications: applications:
created: Application successfully created created: Application successfully created
destroyed: Application successfully deleted destroyed: Application successfully deleted
@ -492,29 +494,38 @@ en:
title: Moderation title: Moderation
notification_mailer: notification_mailer:
digest: digest:
body: 'Here is a brief summary of what you missed on %{instance} since your last visit on %{since}:' action: View all notifications
body: Here is a brief summary of the messages you missed since your last visit on %{since}
mention: "%{name} mentioned you in:" mention: "%{name} mentioned you in:"
new_followers_summary: new_followers_summary:
one: You have acquired one new follower! Yay! one: Also, you have acquired one new follower while being away! Yay!
other: You have gotten %{count} new followers! Amazing! other: Also, you have acquired %{count} new followers while being away! Amazing!
subject: subject:
one: "1 new notification since your last visit \U0001F418" one: "1 new notification since your last visit \U0001F418"
other: "%{count} new notifications since your last visit \U0001F418" other: "%{count} new notifications since your last visit \U0001F418"
title: In your absence…
favourite: favourite:
body: 'Your status was favourited by %{name}:' body: 'Your status was favourited by %{name}:'
subject: "%{name} favourited your status" subject: "%{name} favourited your status"
title: New favourite
follow: follow:
body: "%{name} is now following you!" body: "%{name} is now following you!"
subject: "%{name} is now following you" subject: "%{name} is now following you"
title: New follower
follow_request: follow_request:
action: Manage follow requests
body: "%{name} has requested to follow you" body: "%{name} has requested to follow you"
subject: 'Pending follower: %{name}' subject: 'Pending follower: %{name}'
title: New follow request
mention: mention:
action: Reply
body: 'You were mentioned by %{name} in:' body: 'You were mentioned by %{name} in:'
subject: You were mentioned by %{name} subject: You were mentioned by %{name}
title: New mention
reblog: reblog:
body: 'Your status was boosted by %{name}:' body: 'Your status was boosted by %{name}:'
subject: "%{name} boosted your status" subject: "%{name} boosted your status"
title: New boost
number: number:
human: human:
decimal_units: decimal_units:

@ -48,8 +48,8 @@ ko:
remote_follow: 리모트 팔로우 remote_follow: 리모트 팔로우
reserved_username: 이 아이디는 예약되어 있습니다. reserved_username: 이 아이디는 예약되어 있습니다.
roles: roles:
admin: Admin admin: 관리자
moderator: moderator: 더레이터
unfollow: 팔로우 해제 unfollow: 팔로우 해제
admin: admin:
account_moderation_notes: account_moderation_notes:
@ -105,7 +105,7 @@ ko:
perform_full_suspension: 완전히 정지시키기 perform_full_suspension: 완전히 정지시키기
profile_url: 프로필 URL profile_url: 프로필 URL
promote: 모더레이터로 승급 promote: 모더레이터로 승급
protocol: Protocol protocol: 프로토콜
public: 전체 공개 public: 전체 공개
push_subscription_expires: PuSH 구독 기간 만료 push_subscription_expires: PuSH 구독 기간 만료
redownload: 아바타 업데이트 redownload: 아바타 업데이트
@ -133,7 +133,7 @@ ko:
undo_suspension: 정지 해제 undo_suspension: 정지 해제
unsubscribe: 구독 해제 unsubscribe: 구독 해제
username: 아이디 username: 아이디
web: Web web:
action_logs: action_logs:
actions: actions:
confirm_user: "%{name}이 %{target}의 이메일 주소를 컨펌했습니다" confirm_user: "%{name}이 %{target}의 이메일 주소를 컨펌했습니다"
@ -338,9 +338,12 @@ ko:
body: "%{reporter} 가 %{target} 를 신고했습니다" body: "%{reporter} 가 %{target} 를 신고했습니다"
subject: "%{instance} 에 새 신고 등록됨 (#%{id})" subject: "%{instance} 에 새 신고 등록됨 (#%{id})"
application_mailer: application_mailer:
notification_preferences: 메일 설정 변경
settings: '메일 설정을 변경: %{link}' settings: '메일 설정을 변경: %{link}'
signature: Mastodon %{instance} 인스턴스로에서 알림 signature: Mastodon %{instance} 인스턴스로에서 알림
view: 'View:' view: 'View:'
view_profile: 프로필 보기
view_status: 게시물 보기
applications: applications:
created: 애플리케이션이 작성되었습니다. created: 애플리케이션이 작성되었습니다.
destroyed: 애플리케이션이 삭제되었습니다. destroyed: 애플리케이션이 삭제되었습니다.
@ -481,6 +484,7 @@ ko:
title: 모더레이션 title: 모더레이션
notification_mailer: notification_mailer:
digest: digest:
action: 모든 알림 보기
body: "%{instance} 에서 마지막 로그인 뒤로 일어난 일:" body: "%{instance} 에서 마지막 로그인 뒤로 일어난 일:"
mention: "%{name} 님이 답장했습니다:" mention: "%{name} 님이 답장했습니다:"
new_followers_summary: new_followers_summary:
@ -489,21 +493,29 @@ ko:
subject: subject:
one: "1건의 새로운 알림 \U0001F418" one: "1건의 새로운 알림 \U0001F418"
other: "%{count}건의 새로운 알림 \U0001F418" other: "%{count}건의 새로운 알림 \U0001F418"
title: 당신이 없는 동안에…
favourite: favourite:
body: "%{name} 님이 내 툿을 즐겨찾기에 등록했습니다." body: "%{name} 님이 내 툿을 즐겨찾기에 등록했습니다."
subject: "%{name} 님이 내 툿을 즐겨찾기에 등록했습니다" subject: "%{name} 님이 내 툿을 즐겨찾기에 등록했습니다"
title: 새 즐겨찾기
follow: follow:
body: "%{name} 님이 나를 팔로우 했습니다" body: "%{name} 님이 나를 팔로우 했습니다"
subject: "%{name} 님이 나를 팔로우 했습니다" subject: "%{name} 님이 나를 팔로우 했습니다"
title: 새 팔로워
follow_request: follow_request:
action: 팔로우 요청 관리
body: "%{name} 님이 내게 팔로우 요청을 보냈습니다." body: "%{name} 님이 내게 팔로우 요청을 보냈습니다."
subject: "%{name} 님이 보낸 팔로우 요청" subject: "%{name} 님이 보낸 팔로우 요청"
title: 새 팔로우 요청
mention: mention:
action: 답장
body: "%{name} 님이 답장을 보냈습니다:" body: "%{name} 님이 답장을 보냈습니다:"
subject: "%{name} 님이 답장을 보냈습니다" subject: "%{name} 님이 답장을 보냈습니다"
title: 새 멘션
reblog: reblog:
body: "%{name} 님이 내 툿을 부스트 했습니다:" body: "%{name} 님이 내 툿을 부스트 했습니다:"
subject: "%{name} 님이 내 툿을 부스트 했습니다" subject: "%{name} 님이 내 툿을 부스트 했습니다"
title: 새 부스트
number: number:
human: human:
decimal_units: decimal_units:
@ -547,38 +559,38 @@ ko:
activity: 마지막 활동 activity: 마지막 활동
browser: 브라우저 browser: 브라우저
browsers: browsers:
alipay: Alipay alipay: 알리페이
blackberry: Blackberry blackberry: 블랙베리
chrome: Chrome chrome: 크롬
edge: Microsoft Edge edge: 엣지
firefox: Firefox firefox: 파이어폭스
generic: 알 수 없는 브라우저 generic: 알 수 없는 브라우저
ie: Internet Explorer ie: IE
micro_messenger: MicroMessenger micro_messenger: MicroMessenger
nokia: Nokia S40 Ovi Browser nokia: 노키아 S40 Ovi 브라우저
opera: Opera opera: 오페라
phantom_js: PhantomJS phantom_js: PhantomJS
qq: QQ Browser qq: QQ 브라우저
safari: Safari safari: 사파리
uc_browser: UCBrowser uc_browser: UCBrowser
weibo: Weibo weibo: 웨이보
current_session: 현재 세션 current_session: 현재 세션
description: "%{browser} on %{platform}" description: "%{platform}의 %{browser}"
explanation: 내 Mastodon 계정에 현재 로그인 중인 웹 브라우저 목록입니다. explanation: 내 Mastodon 계정에 현재 로그인 중인 웹 브라우저 목록입니다.
ip: IP ip: IP
platforms: platforms:
adobe_air: Adobe Air adobe_air: 어도비 에어
android: Android android: 안드로이드
blackberry: Blackberry blackberry: 블랙베리
chrome_os: ChromeOS chrome_os: 크롬OS
firefox_os: Firefox OS firefox_os: 파이어폭스OS
ios: iOS ios: iOS
linux: Linux linux: 리눅스
mac: Mac mac:
other: 알 수 없는 플랫폼 other: 알 수 없는 플랫폼
windows: Windows windows: 윈도우즈
windows_mobile: Windows Mobile windows_mobile: 윈도우즈 모바일
windows_phone: Windows Phone windows_phone: 윈도우즈 폰
revoke: 삭제 revoke: 삭제
revoke_success: 세션이 삭제되었습니다. revoke_success: 세션이 삭제되었습니다.
title: 세션 title: 세션

@ -4,7 +4,7 @@ zh-CN:
hints: hints:
defaults: defaults:
avatar: 文件大小限制 2MB只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 120×120px avatar: 文件大小限制 2MB只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 120×120px
digest: 在你长时间未登录的情况下,我们会向你发送一份含有提及你的嘟文的摘要邮件 digest: 仅在你长时间未登录,且收到了私信时发送
display_name: 还能输入 <span class="name-counter">%{count}</span> 个字符 display_name: 还能输入 <span class="name-counter">%{count}</span> 个字符
header: 文件大小限制 2MB只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 700×335px header: 文件大小限制 2MB只支持 PNG、GIF 或 JPG 格式。图片分辨率将会压缩至 700×335px
locked: 你需要手动审核所有关注请求 locked: 你需要手动审核所有关注请求

@ -336,10 +336,13 @@ zh-CN:
body: "%{reporter} 举报了用户 %{target}。" body: "%{reporter} 举报了用户 %{target}。"
subject: 来自 %{instance} 的用户举报(#%{id} subject: 来自 %{instance} 的用户举报(#%{id}
application_mailer: application_mailer:
notification_preferences: 更改电子邮件首选项
salutation: "%{name}" salutation: "%{name}"
settings: 使用此链接更改你的电子邮件首选项:%{link} settings: 使用此链接更改你的电子邮件首选项:%{link}
signature: 这是一封来自 %{instance} 的 Mastodon 电子邮件通知。 signature: 这是一封来自 %{instance} 的 Mastodon 电子邮件通知。
view: 点此链接查看详情: view: 点此链接查看详情:
view_profile: 查看个人资料页
view_status: 查看嘟文
applications: applications:
created: 应用创建成功 created: 应用创建成功
destroyed: 应用删除成功 destroyed: 应用删除成功
@ -476,27 +479,36 @@ zh-CN:
title: 运营 title: 运营
notification_mailer: notification_mailer:
digest: digest:
body: 自从你最后一次(时间是%{since})登录 %{instance} 以来,你错过了这些嘟嘟滴滴: action: 查看所有通知
body: 以下是自%{since}你最后一次登录以来错过的消息的摘要
mention: "%{name} 在嘟文中提到了你:" mention: "%{name} 在嘟文中提到了你:"
new_followers_summary: new_followers_summary:
one: 有个人关注了你!耶! one: 而且,你不在的时候,个人关注了你!耶!
other: 有 %{count} 个人关注了你!好棒! other: 而且,你不在的时候,有 %{count} 个人关注了你!好棒!
subject: "自从你最后一次登录以来,你错过了 %{count} 条新通知 \U0001F418" subject: "自从你最后一次登录以来,你错过了 %{count} 条新通知 \U0001F418"
title: 在你不在的这段时间……
favourite: favourite:
body: 你的嘟文被 %{name} 收藏了: body: 你的嘟文被 %{name} 收藏了:
subject: "%{name} 收藏了你的嘟文" subject: "%{name} 收藏了你的嘟文"
title: 新的收藏
follow: follow:
body: "%{name} 关注了你!" body: "%{name} 关注了你!"
subject: "%{name} 关注了你" subject: "%{name} 关注了你"
title: 新的关注者
follow_request: follow_request:
action: 处理关注请求
body: "%{name} 向你发送了关注请求!" body: "%{name} 向你发送了关注请求!"
subject: 来自 %{name} 的关注请求 subject: 来自 %{name} 的关注请求
title: 新的关注请求
mention: mention:
action: 回复
body: "%{name} 在嘟文中提到了你:" body: "%{name} 在嘟文中提到了你:"
subject: "%{name} 提到了你" subject: "%{name} 提到了你"
title: 新的提及
reblog: reblog:
body: 你的嘟文被 %{name} 转嘟了: body: 你的嘟文被 %{name} 转嘟了:
subject: "%{name} 转嘟了你的嘟文" subject: "%{name} 转嘟了你的嘟文"
title: 新的转嘟
number: number:
human: human:
decimal_units: decimal_units:

@ -11,7 +11,7 @@
"manage:translations": "node ./config/webpack/translationRunner.js", "manage:translations": "node ./config/webpack/translationRunner.js",
"start": "node ./streaming/index.js", "start": "node ./streaming/index.js",
"test": "npm run test:lint && npm run test:jest", "test": "npm run test:lint && npm run test:jest",
"test:lint": "eslint -c .eslintrc.yml --ext=js app/javascript/ config/webpack/ spec/javascript/ streaming/", "test:lint": "eslint -c .eslintrc.yml --ext=js app/javascript/ config/webpack/ streaming/",
"test:jest": "cross-env NODE_ENV=test jest --coverage", "test:jest": "cross-env NODE_ENV=test jest --coverage",
"postinstall": "npm rebuild node-sass" "postinstall": "npm rebuild node-sass"
}, },
@ -121,13 +121,13 @@
"websocket.js": "^0.1.12" "websocket.js": "^0.1.12"
}, },
"devDependencies": { "devDependencies": {
"babel-eslint": "^7.2.3", "babel-eslint": "^8.2.1",
"enzyme": "^3.2.0", "enzyme": "^3.2.0",
"enzyme-adapter-react-16": "^1.1.0", "enzyme-adapter-react-16": "^1.1.0",
"eslint": "^3.19.0", "eslint": "^4.15.0",
"eslint-plugin-import": "^2.8.0", "eslint-plugin-import": "^2.8.0",
"eslint-plugin-jsx-a11y": "^4.0.0", "eslint-plugin-jsx-a11y": "^5.1.1",
"eslint-plugin-react": "^6.10.3", "eslint-plugin-react": "^7.5.1",
"jest": "^21.2.1", "jest": "^21.2.1",
"raf": "^3.4.0", "raf": "^3.4.0",
"react-intl-translations-manager": "^5.0.0", "react-intl-translations-manager": "^5.0.0",

@ -13,6 +13,12 @@ class NotificationMailerPreview < ActionMailer::Preview
NotificationMailer.follow(f.target_account, Notification.find_by(activity: f)) NotificationMailer.follow(f.target_account, Notification.find_by(activity: f))
end end
# Preview this email at http://localhost:3000/rails/mailers/notification_mailer/follow_request
def follow_request
f = Follow.last
NotificationMailer.follow_request(f.target_account, Notification.find_by(activity: f))
end
# Preview this email at http://localhost:3000/rails/mailers/notification_mailer/favourite # Preview this email at http://localhost:3000/rails/mailers/notification_mailer/favourite
def favourite def favourite
f = Favourite.last f = Favourite.last

@ -16,7 +16,7 @@ RSpec.describe PrecomputeFeedService do
subject.call(account) subject.call(account)
expect(Redis.current.zscore(FeedManager.instance.key(:home, account.id), reblog.id)).to eq status.id.to_f expect(Redis.current.zscore(FeedManager.instance.key(:home, account.id), reblog.id)).to be_within(0.1).of(status.id.to_f)
end end
it 'does not raise an error even if it could not find any status' do it 'does not raise an error even if it could not find any status' do

@ -2,54 +2,53 @@
# yarn lockfile v1 # yarn lockfile v1
"@babel/code-frame@7.0.0-beta.31": "@babel/code-frame@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4"
dependencies: dependencies:
chalk "^2.0.0" chalk "^2.0.0"
esutils "^2.0.2" esutils "^2.0.2"
js-tokens "^3.0.0" js-tokens "^3.0.0"
"@babel/helper-function-name@7.0.0-beta.31": "@babel/helper-function-name@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.36.tgz#366e3bc35147721b69009f803907c4d53212e88d"
dependencies: dependencies:
"@babel/helper-get-function-arity" "7.0.0-beta.31" "@babel/helper-get-function-arity" "7.0.0-beta.36"
"@babel/template" "7.0.0-beta.31" "@babel/template" "7.0.0-beta.36"
"@babel/traverse" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.31"
"@babel/helper-get-function-arity@7.0.0-beta.31": "@babel/helper-get-function-arity@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.36.tgz#f5383bac9a96b274828b10d98900e84ee43e32b8"
dependencies: dependencies:
"@babel/types" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
"@babel/template@7.0.0-beta.31": "@babel/template@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.36.tgz#02e903de5d68bd7899bce3c5b5447e59529abb00"
dependencies: dependencies:
"@babel/code-frame" "7.0.0-beta.31" "@babel/code-frame" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
babylon "7.0.0-beta.31" babylon "7.0.0-beta.36"
lodash "^4.2.0" lodash "^4.2.0"
"@babel/traverse@7.0.0-beta.31": "@babel/traverse@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.36.tgz#1dc6f8750e89b6b979de5fe44aa993b1a2192261"
dependencies: dependencies:
"@babel/code-frame" "7.0.0-beta.31" "@babel/code-frame" "7.0.0-beta.36"
"@babel/helper-function-name" "7.0.0-beta.31" "@babel/helper-function-name" "7.0.0-beta.36"
"@babel/types" "7.0.0-beta.31" "@babel/types" "7.0.0-beta.36"
babylon "7.0.0-beta.31" babylon "7.0.0-beta.36"
debug "^3.0.1" debug "^3.0.1"
globals "^10.0.0" globals "^11.1.0"
invariant "^2.2.0" invariant "^2.2.0"
lodash "^4.2.0" lodash "^4.2.0"
"@babel/types@7.0.0-beta.31": "@babel/types@7.0.0-beta.36":
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.36.tgz#64f2004353de42adb72f9ebb4665fc35b5499d23"
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
lodash "^4.2.0" lodash "^4.2.0"
@ -100,10 +99,14 @@ acorn@^4.0.3, acorn@^4.0.4:
version "4.0.13" version "4.0.13"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
acorn@^5.0.0, acorn@^5.1.1, acorn@^5.2.1: acorn@^5.0.0, acorn@^5.1.1:
version "5.2.1" version "5.2.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7"
acorn@^5.2.1:
version "5.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
adjust-sourcemap-loader@^1.1.0: adjust-sourcemap-loader@^1.1.0:
version "1.1.0" version "1.1.0"
resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.1.0.tgz#412d92404eb61e4113635012cba53a33d008e0e2" resolved "https://registry.yarnpkg.com/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.1.0.tgz#412d92404eb61e4113635012cba53a33d008e0e2"
@ -116,15 +119,11 @@ adjust-sourcemap-loader@^1.1.0:
object-path "^0.9.2" object-path "^0.9.2"
regex-parser "^2.2.1" regex-parser "^2.2.1"
ajv-keywords@^1.0.0: ajv-keywords@^2.0.0, ajv-keywords@^2.1.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
ajv-keywords@^2.0.0:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
ajv@^4.7.0, ajv@^4.9.1: ajv@^4.9.1:
version "4.11.8" version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
dependencies: dependencies:
@ -140,6 +139,15 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5:
fast-json-stable-stringify "^2.0.0" fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0" json-schema-traverse "^0.3.0"
ajv@^5.2.3, ajv@^5.3.0:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
dependencies:
co "^4.6.0"
fast-deep-equal "^1.0.0"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0"
align-text@^0.1.1, align-text@^0.1.3: align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
@ -156,10 +164,6 @@ amdefine@>=0.0.4:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
ansi-escapes@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
ansi-escapes@^3.0.0: ansi-escapes@^3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
@ -220,9 +224,9 @@ argparse@^1.0.7:
dependencies: dependencies:
sprintf-js "~1.0.2" sprintf-js "~1.0.2"
aria-query@^0.3.0: aria-query@^0.7.0:
version "0.3.0" version "0.7.0"
resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.3.0.tgz#cb8a9984e2862711c83c80ade5b8f5ca0de2b467" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24"
dependencies: dependencies:
ast-types-flow "0.0.7" ast-types-flow "0.0.7"
@ -273,13 +277,6 @@ array-unique@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
array.prototype.find@^2.0.1:
version "2.0.4"
resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90"
dependencies:
define-properties "^1.1.2"
es-abstract "^1.7.0"
arrify@^1.0.0, arrify@^1.0.1: arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
@ -403,7 +400,13 @@ axios@~0.16.2:
follow-redirects "^1.2.3" follow-redirects "^1.2.3"
is-buffer "^1.1.5" is-buffer "^1.1.5"
babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: axobject-query@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0"
dependencies:
ast-types-flow "0.0.7"
babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0" version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
dependencies: dependencies:
@ -435,23 +438,16 @@ babel-core@^6.0.0, babel-core@^6.25.0, babel-core@^6.26.0:
slash "^1.0.0" slash "^1.0.0"
source-map "^0.5.6" source-map "^0.5.6"
babel-eslint@^7.2.3: babel-eslint@^8.0.1, babel-eslint@^8.2.1:
version "7.2.3" version "8.2.1"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.1.tgz#136888f3c109edc65376c23ebf494f36a3e03951"
dependencies: dependencies:
babel-code-frame "^6.22.0" "@babel/code-frame" "7.0.0-beta.36"
babel-traverse "^6.23.1" "@babel/traverse" "7.0.0-beta.36"
babel-types "^6.23.0" "@babel/types" "7.0.0-beta.36"
babylon "^6.17.0" babylon "7.0.0-beta.36"
eslint-scope "~3.7.1"
babel-eslint@^8.0.1: eslint-visitor-keys "^1.0.0"
version "8.0.3"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.0.3.tgz#f29ecf02336be438195325cd47c468da81ee4e98"
dependencies:
"@babel/code-frame" "7.0.0-beta.31"
"@babel/traverse" "7.0.0-beta.31"
"@babel/types" "7.0.0-beta.31"
babylon "7.0.0-beta.31"
babel-generator@^6.18.0, babel-generator@^6.26.0: babel-generator@^6.18.0, babel-generator@^6.26.0:
version "6.26.0" version "6.26.0"
@ -1050,7 +1046,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-te
babylon "^6.18.0" babylon "^6.18.0"
lodash "^4.17.4" lodash "^4.17.4"
babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
version "6.26.0" version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
dependencies: dependencies:
@ -1072,7 +1068,7 @@ babel-types@7.0.0-beta.3:
lodash "^4.2.0" lodash "^4.2.0"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0:
version "6.26.0" version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
dependencies: dependencies:
@ -1081,11 +1077,11 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24
lodash "^4.17.4" lodash "^4.17.4"
to-fast-properties "^1.0.3" to-fast-properties "^1.0.3"
babylon@7.0.0-beta.31: babylon@7.0.0-beta.36:
version "7.0.0-beta.31" version "7.0.0-beta.36"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.36.tgz#3a3683ba6a9a1e02b0aa507c8e63435e39305b9e"
babylon@^6.17.0, babylon@^6.18.0: babylon@^6.18.0:
version "6.18.0" version "6.18.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
@ -1393,7 +1389,7 @@ chain-function@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: chalk@^1.1.1, chalk@^1.1.3:
version "1.1.3" version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
dependencies: dependencies:
@ -1411,6 +1407,10 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
supports-color "^4.0.0" supports-color "^4.0.0"
chardet@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
cheerio@^1.0.0-rc.2: cheerio@^1.0.0-rc.2:
version "1.0.0-rc.2" version "1.0.0-rc.2"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db"
@ -1462,11 +1462,11 @@ classnames@^2.2.5:
version "2.2.5" version "2.2.5"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
cli-cursor@^1.0.1: cli-cursor@^2.1.0:
version "1.0.2" version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
dependencies: dependencies:
restore-cursor "^1.0.1" restore-cursor "^2.0.0"
cli-width@^2.0.0: cli-width@^2.0.0:
version "2.2.0" version "2.2.0"
@ -1602,7 +1602,7 @@ concat-map@0.0.1:
version "0.0.1" version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
concat-stream@^1.5.2: concat-stream@^1.6.0:
version "1.6.0" version "1.6.0"
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
dependencies: dependencies:
@ -1954,7 +1954,7 @@ date-now@^0.1.4:
version "0.1.4" version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.6.6, debug@^2.6.8: debug@2.6.9, debug@^2.2.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
version "2.6.9" version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies: dependencies:
@ -2106,16 +2106,16 @@ dns-txt@^2.0.2:
dependencies: dependencies:
buffer-indexof "^1.0.0" buffer-indexof "^1.0.0"
doctrine@1.5.0, doctrine@^1.2.2: doctrine@1.5.0:
version "1.5.0" version "1.5.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
isarray "^1.0.0" isarray "^1.0.0"
doctrine@^2.0.0: doctrine@^2.0.0, doctrine@^2.0.2:
version "2.0.2" version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
dependencies: dependencies:
esutils "^2.0.2" esutils "^2.0.2"
@ -2385,11 +2385,11 @@ escope@^3.6.0:
estraverse "^4.1.1" estraverse "^4.1.1"
eslint-import-resolver-node@^0.3.1: eslint-import-resolver-node@^0.3.1:
version "0.3.1" version "0.3.2"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
dependencies: dependencies:
debug "^2.6.8" debug "^2.6.9"
resolve "^1.2.0" resolve "^1.5.0"
eslint-module-utils@^2.1.1: eslint-module-utils@^2.1.1:
version "2.1.1" version "2.1.1"
@ -2413,68 +2413,81 @@ eslint-plugin-import@^2.8.0:
minimatch "^3.0.3" minimatch "^3.0.3"
read-pkg-up "^2.0.0" read-pkg-up "^2.0.0"
eslint-plugin-jsx-a11y@^4.0.0: eslint-plugin-jsx-a11y@^5.1.1:
version "4.0.0" version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-4.0.0.tgz#779bb0fe7b08da564a422624911de10061e048ee" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1"
dependencies: dependencies:
aria-query "^0.3.0" aria-query "^0.7.0"
array-includes "^3.0.3"
ast-types-flow "0.0.7" ast-types-flow "0.0.7"
axobject-query "^0.1.0"
damerau-levenshtein "^1.0.0" damerau-levenshtein "^1.0.0"
emoji-regex "^6.1.0" emoji-regex "^6.1.0"
jsx-ast-utils "^1.0.0" jsx-ast-utils "^1.4.0"
object-assign "^4.0.1"
eslint-plugin-react@^6.10.3: eslint-plugin-react@^7.5.1:
version "6.10.3" version "7.5.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b"
dependencies: dependencies:
array.prototype.find "^2.0.1" doctrine "^2.0.0"
doctrine "^1.2.2"
has "^1.0.1" has "^1.0.1"
jsx-ast-utils "^1.3.4" jsx-ast-utils "^2.0.0"
object.assign "^4.0.4" prop-types "^15.6.0"
eslint@^3.19.0: eslint-scope@^3.7.1, eslint-scope@~3.7.1:
version "3.19.0" version "3.7.1"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
dependencies: dependencies:
babel-code-frame "^6.16.0" esrecurse "^4.1.0"
chalk "^1.1.3" estraverse "^4.1.1"
concat-stream "^1.5.2"
debug "^2.1.1" eslint-visitor-keys@^1.0.0:
doctrine "^2.0.0" version "1.0.0"
escope "^3.6.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
espree "^3.4.0"
eslint@^4.15.0:
version "4.15.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.15.0.tgz#89ab38c12713eec3d13afac14e4a89e75ef08145"
dependencies:
ajv "^5.3.0"
babel-code-frame "^6.22.0"
chalk "^2.1.0"
concat-stream "^1.6.0"
cross-spawn "^5.1.0"
debug "^3.1.0"
doctrine "^2.0.2"
eslint-scope "^3.7.1"
eslint-visitor-keys "^1.0.0"
espree "^3.5.2"
esquery "^1.0.0" esquery "^1.0.0"
estraverse "^4.2.0"
esutils "^2.0.2" esutils "^2.0.2"
file-entry-cache "^2.0.0" file-entry-cache "^2.0.0"
glob "^7.0.3" functional-red-black-tree "^1.0.1"
globals "^9.14.0" glob "^7.1.2"
ignore "^3.2.0" globals "^11.0.1"
ignore "^3.3.3"
imurmurhash "^0.1.4" imurmurhash "^0.1.4"
inquirer "^0.12.0" inquirer "^3.0.6"
is-my-json-valid "^2.10.0"
is-resolvable "^1.0.0" is-resolvable "^1.0.0"
js-yaml "^3.5.1" js-yaml "^3.9.1"
json-stable-stringify "^1.0.0" json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.3.0" levn "^0.3.0"
lodash "^4.0.0" lodash "^4.17.4"
mkdirp "^0.5.0" minimatch "^3.0.2"
mkdirp "^0.5.1"
natural-compare "^1.4.0" natural-compare "^1.4.0"
optionator "^0.8.2" optionator "^0.8.2"
path-is-inside "^1.0.1" path-is-inside "^1.0.2"
pluralize "^1.2.1" pluralize "^7.0.0"
progress "^1.1.8" progress "^2.0.0"
require-uncached "^1.0.2" require-uncached "^1.0.3"
shelljs "^0.7.5" semver "^5.3.0"
strip-bom "^3.0.0" strip-ansi "^4.0.0"
strip-json-comments "~2.0.1" strip-json-comments "~2.0.1"
table "^3.7.8" table "^4.0.1"
text-table "~0.2.0" text-table "~0.2.0"
user-home "^2.0.0"
espree@^3.4.0: espree@^3.5.2:
version "3.5.2" version "3.5.2"
resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
dependencies: dependencies:
@ -2564,10 +2577,6 @@ execa@^0.7.0:
signal-exit "^3.0.0" signal-exit "^3.0.0"
strip-eof "^1.0.0" strip-eof "^1.0.0"
exit-hook@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
expand-brackets@^0.1.4: expand-brackets@^0.1.4:
version "0.1.5" version "0.1.5"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
@ -2630,6 +2639,14 @@ extend@~3.0.0, extend@~3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
external-editor@^2.0.4:
version "2.1.0"
resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
dependencies:
chardet "^0.4.0"
iconv-lite "^0.4.17"
tmp "^0.0.33"
extglob@^0.3.1: extglob@^0.3.1:
version "0.3.2" version "0.3.2"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
@ -2699,12 +2716,11 @@ fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9:
setimmediate "^1.0.5" setimmediate "^1.0.5"
ua-parser-js "^0.7.9" ua-parser-js "^0.7.9"
figures@^1.3.5: figures@^2.0.0:
version "1.7.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
dependencies: dependencies:
escape-string-regexp "^1.0.5" escape-string-regexp "^1.0.5"
object-assign "^4.1.0"
file-entry-cache@^2.0.0: file-entry-cache@^2.0.0:
version "2.0.0" version "2.0.0"
@ -2906,6 +2922,10 @@ function.prototype.name@^1.0.3:
function-bind "^1.1.0" function-bind "^1.1.0"
is-callable "^1.1.3" is-callable "^1.1.3"
functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
gauge@~2.7.3: gauge@~2.7.3:
version "2.7.4" version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@ -2991,11 +3011,11 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
once "^1.3.0" once "^1.3.0"
path-is-absolute "^1.0.0" path-is-absolute "^1.0.0"
globals@^10.0.0: globals@^11.0.1, globals@^11.1.0:
version "10.4.0" version "11.1.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4"
globals@^9.14.0, globals@^9.18.0: globals@^9.18.0:
version "9.18.0" version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
@ -3287,7 +3307,7 @@ https-browserify@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
iconv-lite@0.4.19, iconv-lite@~0.4.13: iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13:
version "0.4.19" version "0.4.19"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
@ -3305,7 +3325,7 @@ ieee754@^1.1.4:
version "1.1.8" version "1.1.8"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
ignore@^3.2.0: ignore@^3.3.3:
version "3.3.7" version "3.3.7"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
@ -3361,22 +3381,23 @@ ini@~1.3.0:
version "1.3.5" version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
inquirer@^0.12.0: inquirer@^3.0.6:
version "0.12.0" version "3.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
dependencies: dependencies:
ansi-escapes "^1.1.0" ansi-escapes "^3.0.0"
ansi-regex "^2.0.0" chalk "^2.0.0"
chalk "^1.0.0" cli-cursor "^2.1.0"
cli-cursor "^1.0.1"
cli-width "^2.0.0" cli-width "^2.0.0"
figures "^1.3.5" external-editor "^2.0.4"
figures "^2.0.0"
lodash "^4.3.0" lodash "^4.3.0"
readline2 "^1.0.1" mute-stream "0.0.7"
run-async "^0.1.0" run-async "^2.2.0"
rx-lite "^3.1.2" rx-lite "^4.0.8"
string-width "^1.0.1" rx-lite-aggregates "^4.0.8"
strip-ansi "^3.0.0" string-width "^2.1.0"
strip-ansi "^4.0.0"
through "^2.3.6" through "^2.3.6"
internal-ip@1.2.0: internal-ip@1.2.0:
@ -3527,7 +3548,7 @@ is-glob@^3.1.0:
dependencies: dependencies:
is-extglob "^2.1.0" is-extglob "^2.1.0"
is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4: is-my-json-valid@^2.12.4:
version "2.16.1" version "2.16.1"
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11"
dependencies: dependencies:
@ -3588,6 +3609,10 @@ is-primitive@^2.0.0:
version "2.0.0" version "2.0.0"
resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
is-promise@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
is-property@^1.0.0: is-property@^1.0.0:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
@ -3599,10 +3624,8 @@ is-regex@^1.0.4:
has "^1.0.1" has "^1.0.1"
is-resolvable@^1.0.0: is-resolvable@^1.0.0:
version "1.0.0" version "1.0.1"
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.1.tgz#acca1cd36dbe44b974b924321555a70ba03b1cf4"
dependencies:
tryit "^1.0.1"
is-stream@^1.0.1, is-stream@^1.1.0: is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0" version "1.1.0"
@ -3975,7 +3998,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2:
version "3.0.2" version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0, js-yaml@^3.9.0: js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.0, js-yaml@^3.9.1:
version "3.10.0" version "3.10.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
dependencies: dependencies:
@ -4037,7 +4060,11 @@ json-schema@0.2.3:
version "0.2.3" version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
json-stable-stringify@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
dependencies: dependencies:
@ -4078,10 +4105,16 @@ jsprim@^1.2.2:
json-schema "0.2.3" json-schema "0.2.3"
verror "1.10.0" verror "1.10.0"
jsx-ast-utils@^1.0.0, jsx-ast-utils@^1.3.4: jsx-ast-utils@^1.4.0:
version "1.4.1" version "1.4.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
jsx-ast-utils@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
dependencies:
array-includes "^3.0.3"
keycode@^2.1.7: keycode@^2.1.7:
version "2.1.9" version "2.1.9"
resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa"
@ -4536,9 +4569,9 @@ multicast-dns@^6.0.1:
dns-packet "^1.0.1" dns-packet "^1.0.1"
thunky "^0.1.0" thunky "^0.1.0"
mute-stream@0.0.5: mute-stream@0.0.7:
version "0.0.5" version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
nan@^2.0.0, nan@^2.3.0, nan@^2.3.2: nan@^2.0.0, nan@^2.3.0, nan@^2.3.2:
version "2.8.0" version "2.8.0"
@ -4851,9 +4884,11 @@ once@^1.3.0, once@^1.3.3, once@^1.4.0:
dependencies: dependencies:
wrappy "1" wrappy "1"
onetime@^1.0.0: onetime@^2.0.0:
version "1.1.0" version "2.0.1"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
dependencies:
mimic-fn "^1.0.0"
opener@^1.4.3: opener@^1.4.3:
version "1.4.3" version "1.4.3"
@ -4911,7 +4946,7 @@ os-locale@^2.0.0:
lcid "^1.0.0" lcid "^1.0.0"
mem "^1.1.0" mem "^1.1.0"
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@ -5033,7 +5068,7 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
path-is-inside@^1.0.1: path-is-inside@^1.0.1, path-is-inside@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
@ -5161,9 +5196,9 @@ pkg-dir@^2.0.0:
dependencies: dependencies:
find-up "^2.1.0" find-up "^2.1.0"
pluralize@^1.2.1: pluralize@^7.0.0:
version "1.2.1" version "7.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
portfinder@^1.0.9: portfinder@^1.0.9:
version "1.0.13" version "1.0.13"
@ -5691,9 +5726,9 @@ process@^0.11.10:
version "0.11.10" version "0.11.10"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
progress@^1.1.8: progress@^2.0.0:
version "1.1.8" version "2.0.0"
resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
promise-each@^2.2.0: promise-each@^2.2.0:
version "2.2.0" version "2.2.0"
@ -6116,20 +6151,6 @@ readdirp@^2.0.0:
readable-stream "^2.0.2" readable-stream "^2.0.2"
set-immediate-shim "^1.0.1" set-immediate-shim "^1.0.1"
readline2@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
dependencies:
code-point-at "^1.0.0"
is-fullwidth-code-point "^1.0.0"
mute-stream "0.0.5"
rechoir@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
dependencies:
resolve "^1.1.6"
redent@^1.0.0: redent@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
@ -6357,7 +6378,7 @@ require-package-name@^2.0.1:
version "2.0.1" version "2.0.1"
resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9"
require-uncached@^1.0.2: require-uncached@^1.0.3:
version "1.0.3" version "1.0.3"
resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
dependencies: dependencies:
@ -6412,18 +6433,18 @@ resolve@1.1.7:
version "1.1.7" version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0, resolve@^1.3.3: resolve@^1.1.7, resolve@^1.3.3, resolve@^1.5.0:
version "1.5.0" version "1.5.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
dependencies: dependencies:
path-parse "^1.0.5" path-parse "^1.0.5"
restore-cursor@^1.0.1: restore-cursor@^2.0.0:
version "1.0.1" version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
dependencies: dependencies:
exit-hook "^1.0.0" onetime "^2.0.0"
onetime "^1.0.0" signal-exit "^3.0.2"
ret@~0.1.10: ret@~0.1.10:
version "0.1.15" version "0.1.15"
@ -6470,15 +6491,21 @@ rst-selector-parser@^2.2.3:
lodash.flattendeep "^4.4.0" lodash.flattendeep "^4.4.0"
nearley "^2.7.10" nearley "^2.7.10"
run-async@^0.1.0: run-async@^2.2.0:
version "0.1.0" version "2.3.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
dependencies: dependencies:
once "^1.3.0" is-promise "^2.1.0"
rx-lite@^3.1.2: rx-lite-aggregates@^4.0.8:
version "3.1.2" version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
dependencies:
rx-lite "*"
rx-lite@*, rx-lite@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
version "5.1.1" version "5.1.1"
@ -6652,14 +6679,6 @@ shebang-regex@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
shelljs@^0.7.5:
version "0.7.8"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3"
dependencies:
glob "^7.0.0"
interpret "^1.0.0"
rechoir "^0.6.2"
shellwords@^0.1.0: shellwords@^0.1.0:
version "0.1.1" version "0.1.1"
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
@ -6672,9 +6691,11 @@ slash@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
slice-ansi@0.0.4: slice-ansi@1.0.0:
version "0.0.4" version "1.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
dependencies:
is-fullwidth-code-point "^2.0.0"
sntp@1.x.x: sntp@1.x.x:
version "1.0.9" version "1.0.9"
@ -6866,7 +6887,7 @@ string-width@^1.0.1, string-width@^1.0.2:
is-fullwidth-code-point "^1.0.0" is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
string-width@^2.0.0: string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
version "2.1.1" version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
dependencies: dependencies:
@ -6976,16 +6997,16 @@ symbol-tree@^3.2.1:
version "3.2.2" version "3.2.2"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
table@^3.7.8: table@^4.0.1:
version "3.8.3" version "4.0.2"
resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
dependencies: dependencies:
ajv "^4.7.0" ajv "^5.2.3"
ajv-keywords "^1.0.0" ajv-keywords "^2.1.0"
chalk "^1.1.1" chalk "^2.1.0"
lodash "^4.0.0" lodash "^4.17.4"
slice-ansi "0.0.4" slice-ansi "1.0.0"
string-width "^2.0.0" string-width "^2.1.1"
tapable@^0.2.7: tapable@^0.2.7:
version "0.2.8" version "0.2.8"
@ -7066,6 +7087,12 @@ tiny-queue@^0.2.1:
version "0.2.1" version "0.2.1"
resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046" resolved "https://registry.yarnpkg.com/tiny-queue/-/tiny-queue-0.2.1.tgz#25a67f2c6e253b2ca941977b5ef7442ef97a6046"
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
dependencies:
os-tmpdir "~1.0.2"
tmpl@1.0.x: tmpl@1.0.x:
version "1.0.4" version "1.0.4"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
@ -7106,10 +7133,6 @@ trim-right@^1.0.1:
dependencies: dependencies:
glob "^6.0.4" glob "^6.0.4"
tryit@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
tty-browserify@0.0.0: tty-browserify@0.0.0:
version "0.0.0" version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@ -7233,12 +7256,6 @@ url@^0.11.0:
punycode "1.3.2" punycode "1.3.2"
querystring "0.2.0" querystring "0.2.0"
user-home@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
dependencies:
os-homedir "^1.0.0"
util-deprecate@~1.0.1: util-deprecate@~1.0.1:
version "1.0.2" version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"

Loading…
Cancel
Save