diff --git a/.gitignore b/.gitignore index fba70f4..8210ad7 100644 --- a/.gitignore +++ b/.gitignore @@ -6,19 +6,24 @@ # Python compiled files *.pyc +__pycache__/ -# Development user data (settings, database, media, search index) -settings.py -database.sqlite -media/ -whoosh_index/ +# Local user data (settings, database, media, search index, static files) +personal_data/* + +# Javascript tools and libraries +node_modules/* +bower_components/* # Package building *.egg-info -build/ -dist/ +build/* +dist/* # Temporary files *.swp *~ .DS_Store + +# Staticfiles +openslides_protocol/static/* diff --git a/.travis.yml b/.travis.yml index 37f6ca8..0550125 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,24 @@ language: python +sudo: false +cache: + pip: true + yarn: true python: - - "2.6" - - "2.7" + - "3.5" + - "3.6" +env: + - TRAVIS_NODE_VERSION="4" +before_install: + - nvm install $TRAVIS_NODE_VERSION + - curl -o- -L https://yarnpkg.com/install.sh | bash + - export PATH="$HOME/.yarn/bin:$PATH" install: - - "pip install -r requirements.txt" - - "pip install flake8==2.1.0" + - pip install --upgrade setuptools pip + - pip install -r requirements.txt + - pip freeze + - yarn script: - - "PYTHONPATH=$PYTHONPATH DJANGO_SETTINGS_MODULE=tests.settings openslides django test" - - "flake8 --max-line-length=150 openslides_protocol tests" + - node_modules/.bin/gulp jshint + - isort --check-only --recursive openslides_protocol tests + - flake8 openslides_protocol tests + - PYTHONPATH=./ DJANGO_SETTINGS_MODULE='tests.settings' openslides test diff --git a/AUTHORS b/AUTHORS index 7acf38b..4535c93 100644 --- a/AUTHORS +++ b/AUTHORS @@ -3,3 +3,4 @@ contribution: * Norman Jäckel * Emanuel Schütze +* Finn Stutzenstein diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..a201dc8 --- /dev/null +++ b/bower.json @@ -0,0 +1,7 @@ +{ + "name": "openslides-protocol", + "private": true, + "dependencies": { + "angular-gettext": "~2.3.6" + } +} diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..e06500b --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,66 @@ +// Run tasks with $ ./node_modules/.bin/gulp +require('es6-promise').polyfill(); + +var gulp = require('gulp'), + gettext = require('gulp-angular-gettext'), + jshint = require('gulp-jshint'), + path = require('path'), + templateCache = require('gulp-angular-templatecache'); + +/** + * Default tasks to be run before start. + */ + +// Catches all template files concats them to one file js/templates.js. +gulp.task('templates', function () { + return gulp.src(path.join('**', 'static', 'templates', '**', '*.html')) + .pipe(templateCache('templates.js', { + module: 'OpenSlidesApp.openslides_protocol.templates', + standalone: true, + moduleSystem: 'IIFE', + transformUrl: function (url) { + var pathList = url.split(path.sep); + pathList.shift(); + return pathList.join(path.sep); + }, + })) + .pipe(gulp.dest(path.join('static', 'js', 'openslides_protocol'))); +}); +// Compiles translation files (*.po) to *.json and saves them in the directory 'i18n'. +gulp.task('translations', function () { + return gulp.src(path.join('openslides_protocol', 'locale', 'angular-gettext', '*.po')) + .pipe(gettext.compile({ + format: 'json' + })) + .pipe(gulp.dest(path.join('static', 'i18n', 'openslides_protocol'))); +}); + +// Gulp default task. Runs all other tasks before. +gulp.task('default', ['translations', 'templates'], function () {}); + + +/** + * Extra tasks that have to be called manually. Useful for development. + */ + +// Extracts translatable strings using angular-gettext and saves them in file +// locale/angular-gettext/template-en.pot. +gulp.task('pot', function () { + return gulp.src([ + 'openslides_protocol/static/templates/*/*.html', + 'openslides_protocol/static/js/*/*.js', + ]) + .pipe(gettext.extract('template-en.pot', {})) + .pipe(gulp.dest(path.join('openslides_protocol', 'locale', 'angular-gettext'))); +}); + +// Checks JavaScript using JSHint +gulp.task('jshint', function () { + return gulp.src([ + 'gulpfile.js', + path.join('openslides_protocol', 'static', 'js', 'openslides_protocol', '*.js'), + ]) + .pipe(jshint()) + .pipe(jshint.reporter('default')) + .pipe(jshint.reporter('fail')); +}); diff --git a/openslides_protocol/__init__.py b/openslides_protocol/__init__.py index 8942fd4..a60990a 100644 --- a/openslides_protocol/__init__.py +++ b/openslides_protocol/__init__.py @@ -1,15 +1,5 @@ -# -*- coding: utf-8 -*- - -from inspect import stack - -for frame in stack(): - lines = frame[4] - if lines and 'Peikee0iuv7uhikuashotohch6eec6ohseuNg7su' in lines[0]: - break -else: - from . import main_menu, signals # noqa - from .urls import urlpatterns # noqa - __verbose_name__ = 'OpenSlides Protocol Plugin' __description__ = 'This plugin for OpenSlides provides a protocol of events managed in OpenSlides.' -__version__ = '1.0-dev' +__version__ = '2.0-dev' + +default_app_config = 'openslides_protocol.apps.ProtocolAppConfig' diff --git a/openslides_protocol/access_permissions.py b/openslides_protocol/access_permissions.py new file mode 100644 index 0000000..d2c9d7a --- /dev/null +++ b/openslides_protocol/access_permissions.py @@ -0,0 +1,15 @@ +from openslides.utils.access_permissions import BaseAccessPermissions +from openslides.utils.auth import has_perm + + +class ItemProtocolAccessPermissions(BaseAccessPermissions): + """ + Access permissions for ItemProtocol and the ViewSet. + """ + def check_permissions(self, user): + return has_perm(user, 'openslides_protocol.can_write_protocol') + + def get_serializer_class(self, user=None): + from .serializers import ItemProtocolSerializer + + return ItemProtocolSerializer diff --git a/openslides_protocol/apps.py b/openslides_protocol/apps.py new file mode 100644 index 0000000..6275e08 --- /dev/null +++ b/openslides_protocol/apps.py @@ -0,0 +1,57 @@ +import os + +from django.apps import AppConfig +from openslides.utils.collection import Collection + +from . import __description__, __verbose_name__, __version__ + + +class ProtocolAppConfig(AppConfig): + name = 'openslides_protocol' + verbose_name = __verbose_name__ + description = __description__ + version = __version__ + angular_site_module = True + js_files = [ + 'static/js/openslides_protocol/base.js', + 'static/js/openslides_protocol/site.js', + 'static/js/openslides_protocol/templates.js', # This file has a different basefolder! + ] + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + try: + import settings + except ImportError: + # When testing, we cannot import settings here.. + pass + else: + # Add the staticfiles dir to OpenSlides + base_path = os.path.realpath(os.path.dirname(os.path.abspath(__file__))) + # remove the app folder 'openslides_protcol' + base_path = os.path.dirname(base_path) + settings.STATICFILES_DIRS.append(os.path.join(base_path, 'static')) + + def ready(self): + # Load projector elements. + # Do this by just importing all from these files. + from . import projector # noqa + + # Import all required stuff. + from openslides.core.signals import post_permission_creation + from openslides.utils.rest_api import router + from .signals import add_permissions_to_builtin_groups + from .views import ItemProtocolViewSet + + # Connect signals. + post_permission_creation.connect( + add_permissions_to_builtin_groups, + dispatch_uid='protocol_add_permissions_to_builtin_groups' + ) + + # Register viewsets. + router.register(self.get_model('ItemProtocol').get_collection_string(), ItemProtocolViewSet) + + def get_startup_elements(self): + yield Collection(self.get_model('ItemProtocol').get_collection_string()) diff --git a/openslides_protocol/forms.py b/openslides_protocol/forms.py deleted file mode 100644 index a904fb4..0000000 --- a/openslides_protocol/forms.py +++ /dev/null @@ -1,14 +0,0 @@ -# -*- coding: utf-8 -*- - -from django import forms - -from .models import ItemProtocol - - -class ItemProtocolForm(forms.ModelForm): - """ - Form for a protocol entry for an agenda item. - """ - class Meta: - model = ItemProtocol - fields = ['protocol'] diff --git a/openslides_protocol/locale/angular-gettext/template-en.pot b/openslides_protocol/locale/angular-gettext/template-en.pot new file mode 100644 index 0000000..88add95 --- /dev/null +++ b/openslides_protocol/locale/angular-gettext/template-en.pot @@ -0,0 +1,53 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Project-Id-Version: \n" + +#: openslides_protocol/item-protocol-form.html:16 +#: openslides_protocol/protocol-list.html:45 +msgid "Are you sure to delete this protocol?" +msgstr "" + +#: openslides_protocol/item-protocol-form.html:13 +msgid "Cancel" +msgstr "" + +#: openslides_protocol/agenda-hook.html:5 +#: openslides_protocol/item-protocol-form.html:2 +msgid "Create protocol" +msgstr "" + +#: openslides_protocol/item-protocol-form.html:18 +#: openslides_protocol/protocol-list.html:45 +msgid "Delete" +msgstr "" + +#: openslides_protocol/protocol-list.html:42 +msgid "Edit" +msgstr "" + +#: openslides_protocol/agenda-hook.html:4 +#: openslides_protocol/item-protocol-form.html:1 +msgid "Edit protocol" +msgstr "" + +#: openslides_protocol/protocol-list.html:25 +msgid "Item" +msgstr "" + +#: openslides_protocol/protocol-list.html:17 +#: openslides_protocol/protocol-list.html:26 +#: openslides_protocol/site.js:14 +#: openslides_protocol/site.js:26 +#: openslides_protocol/site.js:82 +msgid "Protocol" +msgstr "" + +#: openslides_protocol/item-protocol-form.html:10 +msgid "Save" +msgstr "" + +#: openslides_protocol/protocol-list.html:14 +msgid "Select all" +msgstr "" diff --git a/openslides_protocol/locale/de/LC_MESSAGES/django.mo b/openslides_protocol/locale/de/LC_MESSAGES/django.mo deleted file mode 100644 index c4e76d4..0000000 Binary files a/openslides_protocol/locale/de/LC_MESSAGES/django.mo and /dev/null differ diff --git a/openslides_protocol/locale/de/LC_MESSAGES/django.po b/openslides_protocol/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index 1ce5560..0000000 --- a/openslides_protocol/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,55 +0,0 @@ -# This is the translation file of OpenSlides Protocol Plugin. -# Copyright (c) 2013-2014 Authors of OpenSlides Protocol Plugin, see AUTHORS. -# This file is distributed under the same license as the package. -# -msgid "" -msgstr "" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-06 00:35+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Emanuel Schuetze\n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#: main_menu.py:9 models.py:15 -#: templates/openslides_protocol/itemprotocol_form.html:7 -#: templates/openslides_protocol/protocol_page.html:8 -#: templates/openslides_protocol/protocol_page.html:12 -msgid "Protocol" -msgstr "Protokoll" - -#: models.py:18 -msgid "Can write protocol" -msgstr "Darf Protokoll schreiben" - -#: models.py:21 templates/openslides_protocol/itemprotocol_form.html:12 -#, python-format -msgid "Protocol for %(item)s" -msgstr "Protokoll für %(item)s" - -#: templates/openslides_protocol/itemprotocol_form.html:14 -msgid "Back to overview" -msgstr "Zurück zur Übersicht" - -#: templates/openslides_protocol/itemprotocol_form.html:18 -msgid "Previous" -msgstr "Zurück" - -#: templates/openslides_protocol/itemprotocol_form.html:20 -msgid "Next" -msgstr "Weiter" - -#: templates/openslides_protocol/itemprotocol_form.html:27 -msgid "Cancel" -msgstr "Abbrechen" - -#: templates/openslides_protocol/itemprotocol_form.html:30 -msgid "required" -msgstr "erforderlich" - -#: templates/openslides_protocol/protocol_page.html:13 -msgid "Export protocol as LaTeX" -msgstr "Protokoll als LaTeX exportieren" diff --git a/openslides_protocol/locale/en/LC_MESSAGES/django.po b/openslides_protocol/locale/en/LC_MESSAGES/django.po deleted file mode 100644 index 8dcb878..0000000 --- a/openslides_protocol/locale/en/LC_MESSAGES/django.po +++ /dev/null @@ -1,53 +0,0 @@ -# This is the translation file of OpenSlides Protocol Plugin. -# Copyright (c) 2013-2014 Authors of OpenSlides Protocol Plugin, see AUTHORS. -# This file is distributed under the same license as the package. -# -msgid "" -msgstr "" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-06 00:31+0200\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Language: en\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: main_menu.py:9 models.py:15 -#: templates/openslides_protocol/itemprotocol_form.html:7 -#: templates/openslides_protocol/protocol_page.html:8 -#: templates/openslides_protocol/protocol_page.html:12 -msgid "Protocol" -msgstr "" - -#: models.py:18 -msgid "Can write protocol" -msgstr "" - -#: models.py:21 templates/openslides_protocol/itemprotocol_form.html:12 -#, python-format -msgid "Protocol for %(item)s" -msgstr "" - -#: templates/openslides_protocol/itemprotocol_form.html:14 -msgid "Back to overview" -msgstr "" - -#: templates/openslides_protocol/itemprotocol_form.html:18 -msgid "Previous" -msgstr "" - -#: templates/openslides_protocol/itemprotocol_form.html:20 -msgid "Next" -msgstr "" - -#: templates/openslides_protocol/itemprotocol_form.html:27 -msgid "Cancel" -msgstr "" - -#: templates/openslides_protocol/itemprotocol_form.html:30 -msgid "required" -msgstr "" - -#: templates/openslides_protocol/protocol_page.html:13 -msgid "Export protocol as LaTeX" -msgstr "" diff --git a/openslides_protocol/main_menu.py b/openslides_protocol/main_menu.py deleted file mode 100644 index 8cfbef8..0000000 --- a/openslides_protocol/main_menu.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- - -from django.utils.translation import ugettext_lazy - -from openslides.utils.main_menu import MainMenuEntry - - -class ProtocolMainMenuEntry(MainMenuEntry): - verbose_name = ugettext_lazy('Protocol') - required_permission = 'openslides_protocol.can_write_protocol' - default_weight = 200 - pattern_name = 'protocol_overview' - icon_css_class = 'icon-star' diff --git a/openslides_protocol/migrations/0001_initial.py b/openslides_protocol/migrations/0001_initial.py new file mode 100644 index 0000000..9c82c47 --- /dev/null +++ b/openslides_protocol/migrations/0001_initial.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-05-10 11:31 +from __future__ import unicode_literals + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('agenda', '0002_item_duration'), + ] + + operations = [ + migrations.CreateModel( + name='ItemProtocol', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('protocol', models.TextField(blank=True)), + ('item', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='agenda.Item')), + ], + options={ + 'permissions': (('can_write_protocol', 'Can write protocol'),), + }, + ), + ] diff --git a/openslides_protocol/migrations/0002_auto_20170510_1426.py b/openslides_protocol/migrations/0002_auto_20170510_1426.py new file mode 100644 index 0000000..ea5e1b7 --- /dev/null +++ b/openslides_protocol/migrations/0002_auto_20170510_1426.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.7 on 2017-05-10 12:26 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('openslides_protocol', '0001_initial'), + ] + + operations = [ + migrations.AlterModelOptions( + name='itemprotocol', + options={'default_permissions': (), 'permissions': (('can_write_protocol', 'Can write protocol'),)}, + ), + ] diff --git a/openslides_protocol/migrations/__init__.py b/openslides_protocol/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/openslides_protocol/models.py b/openslides_protocol/models.py index fe8b3f3..2a19a2e 100644 --- a/openslides_protocol/models.py +++ b/openslides_protocol/models.py @@ -1,28 +1,20 @@ -# -*- coding: utf-8 -*- - from django.db import models -from django.utils.translation import ugettext as _ -from django.utils.translation import ugettext_lazy, ugettext_noop - from openslides.agenda.models import Item +from openslides.utils.models import RESTModelMixin +from .access_permissions import ItemProtocolAccessPermissions -class ItemProtocol(models.Model): + +class ItemProtocol(RESTModelMixin, models.Model): """ Model for a protocol entry for an agenda item. """ - item = models.OneToOneField(Item) - protocol = models.TextField(verbose_name=ugettext_lazy('Protocol')) + access_permissions = ItemProtocolAccessPermissions() - class Meta: - permissions = (('can_write_protocol', ugettext_noop('Can write protocol')),) + item = models.OneToOneField(Item) - def __unicode__(self): - return _('Protocol for %(item)s') % {'item': self.item} + protocol = models.TextField(blank=True) - @models.permalink - def get_absolute_url(self, link=None): - """ - Returns always the url to the item protocol form view. - """ - return ('protocol_itemprotocol_form', [str(self.pk)]) + class Meta: + default_permissions = () + permissions = (('can_write_protocol', 'Can write protocol'),) diff --git a/openslides_protocol/projector.py b/openslides_protocol/projector.py new file mode 100644 index 0000000..9108f7c --- /dev/null +++ b/openslides_protocol/projector.py @@ -0,0 +1 @@ +hi = "ho" diff --git a/openslides_protocol/serializers.py b/openslides_protocol/serializers.py new file mode 100644 index 0000000..fcb340b --- /dev/null +++ b/openslides_protocol/serializers.py @@ -0,0 +1,22 @@ +from openslides.utils.rest_api import ModelSerializer +from openslides.utils.validate import validate_html + +from .models import ItemProtocol + + +class ItemProtocolSerializer(ModelSerializer): + """ + Serializer for openslides_protocol.models.ItemProtocol object. + """ + class Meta: + model = ItemProtocol + fields = ( + 'id', + 'item', + 'protocol', + ) + + def validate(self, data): + if 'protocol' in data: + data['protocol'] = validate_html(data['protocol']) + return data diff --git a/openslides_protocol/signals.py b/openslides_protocol/signals.py index 68e971a..64d9fe2 100644 --- a/openslides_protocol/signals.py +++ b/openslides_protocol/signals.py @@ -1,20 +1,14 @@ -# -*- coding: utf-8 -*- - from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType -from django.dispatch import receiver - -from openslides.core.signals import post_database_setup -from openslides.participant.models import Group +from openslides.users.models import Group -@receiver(post_database_setup, dispatch_uid='openslides_protocol_add_permission') -def openslides_protocol_add_permission(sender, **kwargs): +def add_permissions_to_builtin_groups(sender, **kwargs): """ Adds the protocol permission the the builtin staff group. """ try: - group_staff = Group.objects.get(name='Staff', pk=4) + group_staff = Group.objects.get(name='Staff') except Group.DoesNotExist: # Do not add the protocol permission pass diff --git a/openslides_protocol/static/js/openslides_protocol/base.js b/openslides_protocol/static/js/openslides_protocol/base.js new file mode 100644 index 0000000..e02aab4 --- /dev/null +++ b/openslides_protocol/static/js/openslides_protocol/base.js @@ -0,0 +1,43 @@ +(function () { + +'use strict'; + +angular.module('OpenSlidesApp.openslides_protocol', [ + 'OpenSlidesApp.core.site', + 'OpenSlidesApp.openslides_protocol.templates', +]) + +.config([ + 'OpenSlidesPluginsProvider', + function(OpenSlidesPluginsProvider) { + OpenSlidesPluginsProvider.registerPlugin({ + name: 'openslides_protocol', + display_name: 'Protocol', + languages: ['de'] + }); + } +]) + +.factory('ItemProtocol', [ + 'DS', + 'gettext', + 'operator', + function (DS, gettext, operator) { + var name = 'openslides_protocol/item-protocol'; + return DS.defineResource({ + name: name, + relations: { + belongsTo: { + 'agenda/item': { + localField: 'item', + localKey: 'item_id', + } + } + }, + }); + } +]) + +.run(['ItemProtocol', function (ItemProtocol) {}]); + +}()); diff --git a/openslides_protocol/static/js/openslides_protocol/site.js b/openslides_protocol/static/js/openslides_protocol/site.js new file mode 100644 index 0000000..7a36780 --- /dev/null +++ b/openslides_protocol/static/js/openslides_protocol/site.js @@ -0,0 +1,234 @@ +(function () { + +'use strict'; + +angular.module('OpenSlidesApp.openslides_protocol.site', ['OpenSlidesApp.openslides_protocol']) + +.config([ + 'mainMenuProvider', + 'gettext', + function (mainMenuProvider, gettext) { + mainMenuProvider.register({ + 'ui_sref': 'openslides_protocol.protocol.list', + 'img_class': 'pencil', + 'title': gettext('Protocol'), + 'weight': 700, + 'perm': 'openslides_protocol.can_write_protocol', + }); + } +]) + +.config([ + 'SearchProvider', + 'gettext', + function (SearchProvider, gettext) { + SearchProvider.register({ + 'verboseName': gettext('Protocol'), + 'collectionName': 'openslides_protocol/item-protocol', + 'urlDetailState': 'motions.motion.detail', + 'weight': 300, + }); + } +]) + +.config([ + '$stateProvider', + function ($stateProvider) { + $stateProvider + .state('openslides_protocol', { + url: '/protocol', + abstract: true, + template: "", + }) + .state('openslides_protocol.protocol', { + abstract: true, + template: "", + }) + .state('openslides_protocol.protocol.list', { + }); + } +]) + +.factory('ItemProtocolDialog', [ + 'gettextCatalog', + 'Mediafile', + 'Editor', + 'ItemProtocol', + function (gettextCatalog, Mediafile, Editor, ItemProtocol) { + return { + getDialog: function (item) { + var protocol = _.find(ItemProtocol.getAll(), function (protocol) { + return protocol.item.id === item.id; + }); + return { + template: 'static/templates/openslides_protocol/item-protocol-form.html', + controller: protocol ? 'ProtocolEditCtrl' : 'ProtocolCreateCtrl', + className: 'ngdialog-theme-default wide-form', + closeByEscape: false, + closeByDocument: false, + resolve: { + item: function () {return item; }, + protocol: function () {return protocol; }, + }, + }; + }, + getFormFields: function () { + var images = Mediafile.getAllImages(); + return [ + { + key: 'protocol', + type: 'editor', + templateOptions: { + label: gettextCatalog.getString('Protocol'), + }, + data: { + ckeditorOptions: Editor.getOptions(images) + } + }, + ]; + }, + }; + } +]) + +.controller('ProtocolListCtrl', [ + '$scope', + 'ItemProtocol', + 'Agenda', + 'AgendaTree', + 'Motion', + 'Assignment', + 'AssignmentPhases', + 'User', + function ($scope, ItemProtocol, Agenda, AgendaTree, Motion, Assignment, AssignmentPhases, User) { + $scope.$watch(function () { + return Agenda.lastModified(); + }, function () { + // Filter out items that doesn't have the list_item_title. This happens, if the + // item is a hidden item but provides the list of speakers, but should not be + // visible in the list view. + var allowedItems = _.filter(Agenda.getAll(), function (item) { + return item.list_view_title; + }); + $scope.items = AgendaTree.getFlatTree(allowedItems); + }); + ItemProtocol.bindAll({}, $scope, 'itemProtocols'); + Motion.bindAll({}, $scope, 'motions'); + Assignment.bindAll({}, $scope, 'assignments'); + User.bindAll({}, $scope, 'users'); + $scope.phases = AssignmentPhases; + + $scope.selectText = function () { + var elementId = $scope.activeTab + 'SelectContainer'; + var element = document.getElementById(elementId); + var range; + if (document.body.createTextRange) { + range = document.body.createTextRange(); + range.moveToElementText(element); + range.select(); + } else if (window.getSelection) { + var selection = window.getSelection(); + range = document.createRange(); + range.selectNodeContents(element); + selection.removeAllRanges(); + selection.addRange(range); + } + }; + $scope.hasProtocol = function (item) { + return _.some(ItemProtocol.getAll(), function (protocol) { + return protocol.item.id === item.id; + }); + }; + $scope.getProtocol = function (item) { + return _.find(ItemProtocol.getAll(), function (protocol) { + return protocol.item.id === item.id; + }); + }; + $scope.itemProtocolSorter = function (itemProtocol) { + return itemProtocol.item.weight; + }; + } +]) + +.controller('ProtocolCreateCtrl', [ + '$scope', + 'ItemProtocol', + 'ItemProtocolDialog', + 'item', + 'ErrorMessage', + function ($scope, ItemProtocol, ItemProtocolDialog, item, ErrorMessage) { + $scope.model = {item_id: item.id}; + $scope.formFields = ItemProtocolDialog.getFormFields(); + + $scope.save = function (model) { + ItemProtocol.create(model).then(function (success) { + $scope.closeThisDialog(); + }, function (error) { + $scope.alert = ErrorMessage.forAlert(error); + }); + }; + } +]) + +.controller('ProtocolEditCtrl', [ + '$scope', + 'ItemProtocol', + 'ItemProtocolDialog', + 'item', + 'protocol', + 'ErrorMessage', + function ($scope, ItemProtocol, ItemProtocolDialog, item, protocol, ErrorMessage) { + $scope.model = angular.copy(protocol); + $scope.formFields = ItemProtocolDialog.getFormFields(); + $scope.deleteEnabled = true; + + $scope.save = function (model) { + ItemProtocol.inject(model); + ItemProtocol.save(model).then(function (success) { + $scope.closeThisDialog(); + }, function (error) { + ItemProtocol.refresh(model); + $scope.alert = ErrorMessage.forAlert(error); + }); + }; + $scope.delete = function (model) { + ItemProtocol.destroy(model).then(function (success) { + $scope.closeThisDialog(); + }, function (error) { + $scope.alert = ErrorMessage.forAlert(error); + }); + }; + } +]) + +.run([ + 'templateHooks', + 'ngDialog', + 'ItemProtocolDialog', + 'ItemProtocol', + function (templateHooks, ngDialog, ItemProtocolDialog, ItemProtocol) { + templateHooks.registerHook({ + Id: 'agendaListAdditionalContentColumn', + templateUrl: 'static/templates/openslides_protocol/agenda-hook.html', + scope: { + openProtocolDialog: function (item) { + console.log("test"); + ngDialog.open(ItemProtocolDialog.getDialog(item)); + }, + hasProtocol: function (item) { + return _.some(ItemProtocol.getAll(), function (protocol) { + return protocol.item.id === item.id; + }); + }, + getPlainProtocolText: function (item) { + var protocol = _.find(ItemProtocol.getAll(), function (protocol) { + return protocol.item.id === item.id; + }); + return protocol ? $(protocol.protocol).text() : ''; + }, + }, + }); + } +]); + +}()); diff --git a/openslides_protocol/static/templates/openslides_protocol/agenda-hook.html b/openslides_protocol/static/templates/openslides_protocol/agenda-hook.html new file mode 100644 index 0000000..df16583 --- /dev/null +++ b/openslides_protocol/static/templates/openslides_protocol/agenda-hook.html @@ -0,0 +1,6 @@ +
+ + {{ getPlainProtocolText(item) | limitTo: 30 }}{{ (getPlainProtocolText(item).length > 30) ? '...' : '' }} + Create protocol... +
diff --git a/openslides_protocol/static/templates/openslides_protocol/item-protocol-form.html b/openslides_protocol/static/templates/openslides_protocol/item-protocol-form.html new file mode 100644 index 0000000..1ae47c2 --- /dev/null +++ b/openslides_protocol/static/templates/openslides_protocol/item-protocol-form.html @@ -0,0 +1,21 @@ +

Edit protocol

+

Create protocol

+ +
+ {{ alert.msg }} +
+ +
+ + + + + +
diff --git a/openslides_protocol/static/templates/openslides_protocol/protocol-list.html b/openslides_protocol/static/templates/openslides_protocol/protocol-list.html new file mode 100644 index 0000000..1b60dc1 --- /dev/null +++ b/openslides_protocol/static/templates/openslides_protocol/protocol-list.html @@ -0,0 +1,135 @@ + + +
+
+ +

Protocol

+
+
+ +
+ + +
+

All protocols

+ +
+
+

+ {{ item.getListViewTitle() }} +

+
+
+
+
+ +
+

Final versions of all motions

+ +
+
+

{{ motion.identifier }} – {{ motion.getTitle() }}

+
State: + + {{ motion.getStateName() }} + +
+
Submitters: + + {{ submitter.get_full_name() }}, + +
+

{{ config('motions_preamble') | translate }}

+
+

Reason

+
+
+
+
+ +
+

Results of all elections

+ +
+
+

+ {{ assignment.agenda_item.getTitle() || assingment.title }} +

+
+ Phase: + + {{ phases[assignment.phase].display_name | translate }} + +
+
+ Description: + {{ assignment.description }} +
+
+ Ballots: +
    +
  1. +
      +
    • + {{ option.candidate.get_full_name() }} + (elected) + + + {{ vote.label }}: + {{ vote.value }} {{ vote.percentStr }} + + +
    • +
    +
  2. +
+
+
+
+
+ +
+

All participants

+
    +
  • + {{ user.get_full_name() }} + (Present) +
  • +
+
+
+
+
diff --git a/openslides_protocol/templates/openslides_protocol/itemprotocol_form.html b/openslides_protocol/templates/openslides_protocol/itemprotocol_form.html deleted file mode 100644 index 7377916..0000000 --- a/openslides_protocol/templates/openslides_protocol/itemprotocol_form.html +++ /dev/null @@ -1,32 +0,0 @@ -{% extends 'base.html' %} - -{% load i18n %} -{% load tags %} - -{% block title %} - {% trans 'Protocol' %} – {{ block.super }} -{% endblock %} - -{% block content %} -

- {% blocktrans with item=itemprotocol.item %}Protocol for {{ item }}{% endblocktrans %} - - {% trans 'Back to overview' %} - -

-

- {% trans 'Previous' %} - {{ itemprotocol.item }} - {% trans 'Next' %} -

-
{% csrf_token %} - {% include 'form.html' %} -

- {% include 'formbuttons_save.html' %} - - {% trans 'Cancel' %} - -

- * {% trans 'required' %} -
-{% endblock %} diff --git a/openslides_protocol/templates/openslides_protocol/protocol.tex.tpl b/openslides_protocol/templates/openslides_protocol/protocol.tex.tpl deleted file mode 100644 index e1c5cd6..0000000 --- a/openslides_protocol/templates/openslides_protocol/protocol.tex.tpl +++ /dev/null @@ -1,38 +0,0 @@ -{% load i18n %} -{% load tags %} - -\documentclass[% - ngerman, % Language setting for babel -]{scrartcl} - -\usepackage{babel} % Language setting see above -\usepackage[utf8]{inputenc} % Encoding of source file -\usepackage[T1]{fontenc} % Encoding of output file -\usepackage{textcomp} % Special characters like euro character -\usepackage{libertine} % font - -\title{% -{% trans 'Protocol' %} {{ 'event_name'|get_config }}% -} - -\date{% -{% if 'event_date'|get_config %}{{ 'event_date'|get_config }}{% else %}\today{% endif %}% -} - -\begin{document} - -\maketitle - -\newpage - -{% for item in items %} - -\section*{% -{{ item }}% -} - -{{ item.itemprotocol.protocol }} - -{% endfor %} - -\end{document} diff --git a/openslides_protocol/templates/openslides_protocol/protocol_page.html b/openslides_protocol/templates/openslides_protocol/protocol_page.html deleted file mode 100644 index 5e47053..0000000 --- a/openslides_protocol/templates/openslides_protocol/protocol_page.html +++ /dev/null @@ -1,26 +0,0 @@ -{% extends 'base.html' %} - -{% load i18n %} -{% load mptt_tags %} -{% load tags %} - -{% block title%} - {% trans 'Protocol' %} – {{ block.super }} -{% endblock %} - -{% block content %} -

{% trans 'Protocol' %}

-

{% trans 'Export protocol as LaTeX' %}

-
    - {% recursetree items %} -
  • - {{ node }} - {% if not node.is_leaf_node %} -
      - {{ children }} -
    - {% endif %} -
  • - {% endrecursetree %} -
-{% endblock %} diff --git a/openslides_protocol/urls.py b/openslides_protocol/urls.py deleted file mode 100644 index 62ed26c..0000000 --- a/openslides_protocol/urls.py +++ /dev/null @@ -1,17 +0,0 @@ -# -*- coding: utf-8 -*- - -from django.conf.urls import patterns, url - -from . import views - -urlpatterns = patterns( - '', - url(r'^protocol/$', - views.ProtocolPage.as_view(), - name='protocol_overview'), - url(r'^protocol/(?P\d+)/$', - views.ItemProtocolFormView.as_view(), - name='protocol_itemprotocol_form'), - url(r'^protocol/export/$', - views.Protocol.as_view(), - name='protocol_export')) diff --git a/openslides_protocol/views.py b/openslides_protocol/views.py index b62a049..3801179 100644 --- a/openslides_protocol/views.py +++ b/openslides_protocol/views.py @@ -1,79 +1,16 @@ -# -*- coding: utf-8 -*- +from openslides.utils.auth import has_perm +from openslides.utils.rest_api import ModelViewSet -from django.conf import settings -from django.http import HttpResponse -from django.shortcuts import get_object_or_404 -from django.template import RequestContext, Template -from django.template.loader import get_template - -from openslides.agenda.models import Item -from openslides.utils.views import PermissionMixin, TemplateView, UpdateView, View - -from .forms import ItemProtocolForm +from .access_permissions import ItemProtocolAccessPermissions from .models import ItemProtocol -class ProtocolPage(TemplateView): - """ - View with the link to all items and to the download the final protocol. - """ - template_name = 'openslides_protocol/protocol_page.html' - required_permission = 'openslides_protocol.can_write_protocol' - - def get_context_data(self, *args, **kwargs): - """ - Inserts all agenda items into the context. - """ - context = super(ProtocolPage, self).get_context_data(*args, **kwargs) - context['items'] = Item.objects.all() - return context - - -class ItemProtocolFormView(UpdateView): - """ - View for a protocol entry for an agenda item. - """ - form_class = ItemProtocolForm - required_permission = 'openslides_protocol.can_write_protocol' - - def dispatch(self, *args, **kwargs): - """ - Override: Retrieves the agenda item from the pk number given in the url and - inserts it as self.item before continueing the view. - """ - self.item = get_object_or_404(Item, pk=kwargs['item_pk']) - return super(ItemProtocolFormView, self).dispatch(*args, **kwargs) - - def get_object(self, *args, **kwargs): - """ - Returns the item protocol model instance witch belongs to the agenda - item. Creates a new instance if necessary. - """ - obj, __ = ItemProtocol.objects.get_or_create(item=self.item) - return obj - - -class Protocol(PermissionMixin, View): +class ItemProtocolViewSet(ModelViewSet): """ - View to get the rendered protocol, e. g. a LaTeX file. + API endpoint for ItemProtocols. """ - required_permission = 'openslides_protocol.can_write_protocol' + access_permissions = ItemProtocolAccessPermissions() + queryset = ItemProtocol.objects.all() - def get(self, *args, **kwargs): - """ - Renders the protocol with the template given in the settings - (OPENSLIDES_PROTOCOL_TEMPLATE_PATH) or the default template. - """ - try: - template_path = settings.OPENSLIDES_PROTOCOL_TEMPLATE_PATH - except AttributeError: - template = get_template('openslides_protocol/protocol.tex.tpl') - else: - with open(template_path) as template_file: - template = Template(template_file.read()) - context = RequestContext( - self.request, - {'items': Item.objects.all()}) - response = HttpResponse(template.render(context), content_type="text/plain") - response['Content-Disposition'] = 'attachment; filename="protocol.tex"' - return response + def check_view_permissions(self): + return has_perm(self.request.user, 'openslides_protocol.can_write_protocol') diff --git a/package.json b/package.json new file mode 100644 index 0000000..c102878 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "openslides-protocol", + "private": true, + "scripts": { + "prepublish": "bower install && gulp" + }, + "devDependencies": { + "bower": "~1.8.0", + "es6-promise": "~4.1.0", + "gulp": "~3.9.1", + "gulp-angular-gettext": "~2.2.0", + "gulp-angular-templatecache": "~2.0.0", + "gulp-jshint": "~2.0.4", + "jshint": "~2.9.4", + "po2json": "~0.4.5" + } +} diff --git a/requirements.txt b/requirements.txt index 36798b8..fd91120 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,6 @@ -openslides>=1.6,<1.7 +# Require OpenSlides +-r requirements_production.txt + +# For testing +flake8 +isort==4.2.5 diff --git a/requirements_production.txt b/requirements_production.txt new file mode 100644 index 0000000..ce79b59 --- /dev/null +++ b/requirements_production.txt @@ -0,0 +1 @@ +openslides>=2.1 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..4f31799 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,6 @@ +[flake8] +max_line_length = 150 + +[isort] +include_trailing_comma = true +multi_line_output = 3 diff --git a/setup.py b/setup.py index 7c2aa6d..3f00df8 100644 --- a/setup.py +++ b/setup.py @@ -30,7 +30,10 @@ 'Framework :: Django', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', - 'Programming Language :: Python :: 2'], + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6'], license='MIT', packages=find_packages(exclude=['tests']), include_package_data=True, diff --git a/static/js/openslides_protocol/templates.js b/static/js/openslides_protocol/templates.js new file mode 100644 index 0000000..d7e0162 --- /dev/null +++ b/static/js/openslides_protocol/templates.js @@ -0,0 +1,3 @@ +(function(){angular.module('OpenSlidesApp.openslides_protocol.templates', []).run(['$templateCache', function($templateCache) {$templateCache.put('static/templates/openslides_protocol/agenda-hook.html','
\n \n {{ getPlainProtocolText(item) | limitTo: 30 }}{{ (getPlainProtocolText(item).length > 30) ? \'...\' : \'\' }}\n Create protocol...\n
\n'); +$templateCache.put('static/templates/openslides_protocol/item-protocol-form.html','

Edit protocol

\n

Create protocol

\n\n
\n {{ alert.msg }}\n
\n\n
\n \n \n \n \n \n
\n'); +$templateCache.put('static/templates/openslides_protocol/protocol-list.html','\n\n
\n
\n \n

Protocol

\n
\n
\n\n
\n \n \n
\n

All protocols

\n \n
\n
\n

\n {{ item.getListViewTitle() }}\n

\n
\n
\n
\n
\n \n
\n

Final versions of all motions

\n \n
\n
\n

{{ motion.identifier }} – {{ motion.getTitle() }}

\n
State:\n \n {{ motion.getStateName() }}\n \n
\n
Submitters:\n \n {{ submitter.get_full_name() }}, \n \n
\n

{{ config(\'motions_preamble\') | translate }}

\n
\n

Reason

\n
\n
\n
\n
\n \n
\n

Results of all elections

\n \n
\n
\n

\n {{ assignment.agenda_item.getTitle() || assingment.title }}\n

\n
\n Phase:\n \n {{ phases[assignment.phase].display_name | translate }}\n \n
\n
\n Description:\n {{ assignment.description }}\n
\n
\n Ballots:\n
    \n
  1. \n
      \n
    • \n {{ option.candidate.get_full_name() }}\n (elected)\n \n \n {{ vote.label }}:\n {{ vote.value }} {{ vote.percentStr }}\n \n \n
    • \n
    \n
  2. \n
\n
\n
\n
\n
\n \n
\n

All participants

\n
    \n
  • \n {{ user.get_full_name() }}\n (Present)\n
  • \n
\n
\n
\n
\n
\n');}]);})(); diff --git a/tests/settings.py b/tests/settings.py index ddaea11..1a27c0a 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -1,43 +1,37 @@ -# -*- coding: utf-8 -*- # # Settings file for tests only # -import os from openslides.global_settings import * # noqa -DEBUG = True -TEMPLATE_DEBUG = DEBUG +DEBUG = False SECRET_KEY = 'secret' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': '', - 'USER': '', - 'PASSWORD': '', - 'HOST': '', - 'PORT': ''}} + } +} -INSTALLED_PLUGINS += ( +INSTALLED_PLUGINS += ( # noqa 'openslides_protocol',) -INSTALLED_APPS += INSTALLED_PLUGINS +INSTALLED_APPS += INSTALLED_PLUGINS # noqa TIME_ZONE = 'Europe/Berlin' -MEDIA_ROOT = '' - -# Use RAM storage -HAYSTACK_CONNECTIONS['default']['STORAGE'] = 'ram' - -TEMPLATE_DIRS = ( - filesystem2unicode(os.path.join(SITE_ROOT, 'templates')),) - -STATICFILES_DIRS = ( - filesystem2unicode(os.path.join(SITE_ROOT, 'static')),) - # Use a faster passwort hasher -PASSWORD_HASHERS = ( - 'django.contrib.auth.hashers.MD5PasswordHasher',) +PASSWORD_HASHERS = [ + 'django.contrib.auth.hashers.MD5PasswordHasher', +] + +# Use the dummy cache that does not cache anything +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.dummy.DummyCache' + }, + 'locmem': { + 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache' + } +} diff --git a/tests/test_views.py b/tests/test_views.py index fe3a45c..36fe13c 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -1,94 +1,6 @@ -# -*- coding: utf-8 -*- +from unittest import TestCase -from django.test.client import Client -from openslides.agenda.models import Item -from openslides.utils.test import TestCase - -from openslides_protocol.models import ItemProtocol - - -class TestMainMenu(TestCase): - def setUp(self): - self.client = Client() - self.client.login(username='admin', password='admin') - - def test_main_menu_entry(self): - response = self.client.get('/dashboard/') - self.assertContains(response, 'href="/protocol/"') - - -class ProtocolPage(TestCase): - url = '/protocol/' - - def setUp(self): - self.client = Client() - self.client.login(username='admin', password='admin') - - def test_get(self): - response = self.client.get(self.url) - self.assertTemplateUsed(response, 'openslides_protocol/protocol_page.html') - - -class ItemProtocolView(TestCase): - url = '/protocol/' - - def setUp(self): - self.client = Client() - self.client.login(username='admin', password='admin') - - def test_protocol_for_inexisting_item(self): - response = self.client.get(self.url + '1/') - self.assertEqual(response.status_code, 404) - response = self.client.post(self.url + '1/', {}) - self.assertEqual(response.status_code, 404) - - def test_get_new_protocol_for_item(self): - item = Item.objects.create(title='test_title_cu0aix6Ahngach7oYeeb') - self.assertEqual(item.pk, 1) - self.assertFalse(ItemProtocol.objects.exists()) - response = self.client.get(self.url + '1/') - self.assertContains(response, 'Protocol') - self.assertTemplateUsed(response, 'openslides_protocol/itemprotocol_form.html') - self.assertTrue(ItemProtocol.objects.exists()) - - def test_get_existing_protocol_for_item(self): - item = Item.objects.create(title='test_title_Mio3mahDiokieNgohtai') - self.assertEqual(item.pk, 1) - item_protocol = ItemProtocol.objects.create(item=item, protocol='test_text_naegh1Ai5Pi7yeezuroo') - self.assertEqual(item_protocol.pk, 1) - response = self.client.get(self.url + '1/') - self.assertContains(response, 'test_text_naegh1Ai5Pi7yeezuroo') - self.assertTemplateUsed(response, 'openslides_protocol/itemprotocol_form.html') - - def test_post_inexisting_protocol(self): - item = Item.objects.create(title='test_title_boib2eef5oi9Ieg5caic') - self.assertEqual(item.pk, 1) - self.assertFalse(ItemProtocol.objects.exists()) - response = self.client.post(self.url + '1/', {'protocol': 'Nohhieraquai0tiephah'}) - self.assertTrue(ItemProtocol.objects.exists()) - self.assertRedirects(response, self.url + '1/') - self.assertEqual(ItemProtocol.objects.get(item=item).protocol, 'Nohhieraquai0tiephah') - message = 'Protocol for test_title_boib2eef5oi9Ieg5caic was successfully modified.' - self.assertTrue(message in response.cookies['messages'].value) - - def test_post_existing_protocol(self): - item = Item.objects.create(title='test_title_boib2eef5oi9Ieg5caic') - self.assertEqual(item.pk, 1) - item_protocol = ItemProtocol.objects.create(item=item, protocol='test_text_Va3paighoopeilohqu8i') - self.assertEqual(item_protocol.pk, 1) - self.assertEqual(ItemProtocol.objects.get(item=item).protocol, 'test_text_Va3paighoopeilohqu8i') - response = self.client.post(self.url + '1/', {'protocol': 'Ree1eidaPahLeeShu2qu'}) - self.assertTrue(ItemProtocol.objects.exists()) - self.assertRedirects(response, self.url + '1/') - self.assertEqual(ItemProtocol.objects.get(item=item).protocol, 'Ree1eidaPahLeeShu2qu') - message = 'Protocol for test_title_boib2eef5oi9Ieg5caic was successfully modified.' - self.assertTrue(message in response.cookies['messages'].value) - - -class TestFinalProtocol(TestCase): - def test_get(self): - client = Client() - client.login(username='admin', password='admin') - response = client.get('/protocol/export/') - self.assertEqual(response.status_code, 200) +class TestDummy(TestCase): + def test_dummy(self): + self.assertTrue(True) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..bfe1088 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1745 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +angular-gettext-tools@^2.2.0: + version "2.3.6" + resolved "https://registry.yarnpkg.com/angular-gettext-tools/-/angular-gettext-tools-2.3.6.tgz#beceb160315baf72d96bf723f21cf1c2841a5225" + dependencies: + babylon "^6.11.4" + binary-search "^1.2.0" + cheerio "~0.19.0" + lodash "^4.0.0" + pofile "~1.0.0" + typescript "~2.3.2" + typescript-eslint-parser "^3.0.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + +array-each@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-slice@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f" + +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +babylon@^6.11.4: + version "6.17.4" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +beeper@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" + +binary-search@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/binary-search/-/binary-search-1.3.2.tgz#88c9b7bd2b7221d352da78ec887f5af2549e4de2" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +bower@~1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/bower/-/bower-1.8.0.tgz#55dbebef0ad9155382d9e9d3e497c1372345b44a" + +brace-expansion@^1.0.0, brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +chalk@^1.0.0, chalk@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + +cheerio@~0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.19.0.tgz#772e7015f2ee29965096d71ea4175b75ab354925" + dependencies: + css-select "~1.0.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "~3.8.1" + lodash "^3.2.0" + +cli@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cli/-/cli-1.0.1.tgz#22817534f24bfa4950c34d532d48ecbc621b8c14" + dependencies: + exit "0.1.2" + glob "^7.1.1" + +clone-stats@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" + +clone@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" + +clone@^1.0.0, clone@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-with-sourcemaps@*, concat-with-sourcemaps@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz#f55b3be2aeb47601b10a2d5259ccfb70fd2f1dd6" + dependencies: + source-map "^0.5.1" + +console-browserify@1.1.x: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +css-select@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.0.0.tgz#b1121ca51848dd264e2244d058cee254deeb44b0" + dependencies: + boolbase "~1.0.0" + css-what "1.0" + domutils "1.4" + nth-check "~1.0.0" + +css-what@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-1.0.0.tgz#d7cc2df45180666f99d2b14462639469e00f736c" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +dateformat@^1.0.11: + version "1.0.12" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + dependencies: + get-stdin "^4.0.1" + meow "^3.3.0" + +dateformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + +decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +defaults@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + dependencies: + clone "^1.0.2" + +deprecated@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" + +detect-file@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" + dependencies: + fs-exists-sync "^0.1.0" + +dom-serializer@0, dom-serializer@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.3.0.tgz#2de59a0822d5027fabff6f032c2b25a2a8abe738" + dependencies: + domelementtype "1" + +domutils@1.4: + version "1.4.3" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.4.3.tgz#0865513796c6b306031850e175516baf80b72a6f" + dependencies: + domelementtype "1" + +domutils@1.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +duplexer2@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" + dependencies: + readable-stream "~1.1.9" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" + dependencies: + once "~1.3.0" + +entities@1.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.0.0.tgz#b2987aa3821347fcde642b24fdfc9e4fb712bf26" + +entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es6-promise@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" + +escape-string-regexp@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +event-stream@*: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +event-stream@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.2.tgz#3cc310feb1f28d2f62b2a085d736a9ef566378b8" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +exit@0.1.2, exit@0.1.x: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +expand-tilde@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" + dependencies: + os-homedir "^1.0.1" + +expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + +extend@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +fancy-log@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" + dependencies: + chalk "^1.1.1" + time-stamp "^1.0.0" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-index@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +findup-sync@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" + dependencies: + detect-file "^0.1.0" + is-glob "^2.0.1" + micromatch "^2.3.7" + resolve-dir "^0.1.0" + +fined@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" + dependencies: + expand-tilde "^2.0.2" + is-plain-object "^2.0.3" + object.defaults "^1.1.0" + object.pick "^1.2.0" + parse-filepath "^1.0.1" + +first-chunk-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" + +flagged-respawn@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + dependencies: + for-in "^1.0.1" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs-exists-sync@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +gaze@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" + dependencies: + globule "~0.1.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +gettext-parser@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/gettext-parser/-/gettext-parser-1.1.0.tgz#2c5a6638d893934b9b55037d0ad82cb7004b2679" + dependencies: + encoding "^0.1.11" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-stream@^3.1.5: + version "3.1.18" + resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" + dependencies: + glob "^4.3.1" + glob2base "^0.0.12" + minimatch "^2.0.1" + ordered-read-streams "^0.1.0" + through2 "^0.6.1" + unique-stream "^1.0.0" + +glob-watcher@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" + dependencies: + gaze "^0.5.1" + +glob2base@^0.0.12: + version "0.0.12" + resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" + dependencies: + find-index "^0.1.1" + +glob@^4.3.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.0" + +glob@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@~3.1.21: + version "3.1.21" + resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" + dependencies: + graceful-fs "~1.2.0" + inherits "1" + minimatch "~0.2.11" + +global-modules@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" + dependencies: + global-prefix "^0.1.4" + is-windows "^0.2.0" + +global-prefix@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" + dependencies: + homedir-polyfill "^1.0.0" + ini "^1.3.4" + is-windows "^0.2.0" + which "^1.2.12" + +globule@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" + dependencies: + glob "~3.1.21" + lodash "~1.0.1" + minimatch "~0.2.11" + +glogg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + dependencies: + sparkles "^1.0.0" + +graceful-fs@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + +graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +graceful-fs@~1.2.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" + +gulp-angular-gettext@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/gulp-angular-gettext/-/gulp-angular-gettext-2.2.0.tgz#90b5f38e89b4be491e8bb5cabaf69b0a71ddf95f" + dependencies: + angular-gettext-tools "^2.2.0" + gulp-util "^3.0.7" + lodash.isstring "^4.0.1" + through2 "^2.0.1" + +gulp-angular-templatecache@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/gulp-angular-templatecache/-/gulp-angular-templatecache-2.0.0.tgz#29b4071ee5574481c069a162bce8967534f17155" + dependencies: + event-stream "3.3.2" + gulp-concat "2.6.0" + gulp-footer "1.0.5" + gulp-header "1.8.2" + gulp-util "3.0.7" + jsesc "2.2.0" + +gulp-concat@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/gulp-concat/-/gulp-concat-2.6.0.tgz#585cfb115411f348773131140566b6a81c69cb91" + dependencies: + concat-with-sourcemaps "^1.0.0" + gulp-util "^3.0.1" + through2 "^0.6.3" + +gulp-footer@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/gulp-footer/-/gulp-footer-1.0.5.tgz#e84ca777e266be7bbc2d45d2df0e7eba8dfa3e54" + dependencies: + event-stream "*" + gulp-util "*" + lodash.assign "*" + +gulp-header@1.8.2: + version "1.8.2" + resolved "https://registry.yarnpkg.com/gulp-header/-/gulp-header-1.8.2.tgz#3ab222f53719d2d03d81d9134252fe7d52425aa4" + dependencies: + concat-with-sourcemaps "*" + gulp-util "*" + object-assign "*" + through2 "^2.0.0" + +gulp-jshint@~2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/gulp-jshint/-/gulp-jshint-2.0.4.tgz#f382b18564b1072def0c9aaf753c146dadb4f0e8" + dependencies: + gulp-util "^3.0.0" + lodash "^4.12.0" + minimatch "^3.0.3" + rcloader "^0.2.2" + through2 "^2.0.0" + +gulp-util@*, gulp-util@^3.0.0, gulp-util@^3.0.1, gulp-util@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^2.0.0" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulp-util@3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb" + dependencies: + array-differ "^1.0.0" + array-uniq "^1.0.2" + beeper "^1.0.0" + chalk "^1.0.0" + dateformat "^1.0.11" + fancy-log "^1.1.0" + gulplog "^1.0.0" + has-gulplog "^0.1.0" + lodash._reescape "^3.0.0" + lodash._reevaluate "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.template "^3.0.0" + minimist "^1.1.0" + multipipe "^0.1.2" + object-assign "^3.0.0" + replace-ext "0.0.1" + through2 "^2.0.0" + vinyl "^0.5.0" + +gulp@~3.9.1: + version "3.9.1" + resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" + dependencies: + archy "^1.0.0" + chalk "^1.0.0" + deprecated "^0.0.1" + gulp-util "^3.0.0" + interpret "^1.0.0" + liftoff "^2.1.0" + minimist "^1.1.0" + orchestrator "^0.3.0" + pretty-hrtime "^1.0.0" + semver "^4.1.0" + tildify "^1.0.0" + v8flags "^2.0.2" + vinyl-fs "^0.3.0" + +gulplog@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" + dependencies: + glogg "^1.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + +has-gulplog@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" + dependencies: + sparkles "^1.0.0" + +homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + dependencies: + parse-passwd "^1.0.0" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +htmlparser2@3.8.x, htmlparser2@~3.8.1: + version "3.8.3" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.8.3.tgz#996c28b191516a8be86501a7d79757e5c70c1068" + dependencies: + domelementtype "1" + domhandler "2.3" + domutils "1.5" + entities "1.0" + readable-stream "1.1" + +iconv-lite@~0.4.13: + version "0.4.18" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" + +indent-string@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" + +inherits@2, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +interpret@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + +is-absolute@^0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" + dependencies: + is-relative "^0.2.1" + is-windows "^0.2.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-plain-object@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-relative@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" + dependencies: + is-unc-path "^0.1.1" + +is-unc-path@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" + dependencies: + unc-path-regex "^0.1.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +is-windows@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0, isobject@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +jsesc@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.2.0.tgz#c35a8613a3806c8ec3bafc0b0e196f020f7aab01" + +jshint@~2.9.4: + version "2.9.5" + resolved "https://registry.yarnpkg.com/jshint/-/jshint-2.9.5.tgz#1e7252915ce681b40827ee14248c46d34e9aa62c" + dependencies: + cli "~1.0.0" + console-browserify "1.1.x" + exit "0.1.x" + htmlparser2 "3.8.x" + lodash "3.7.x" + minimatch "~3.0.2" + shelljs "0.3.x" + strip-json-comments "1.0.x" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +liftoff@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" + dependencies: + extend "^3.0.0" + findup-sync "^0.4.2" + fined "^1.0.1" + flagged-respawn "^0.3.2" + lodash.isplainobject "^4.0.4" + lodash.isstring "^4.0.1" + lodash.mapvalues "^4.4.0" + rechoir "^0.6.2" + resolve "^1.1.7" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basetostring@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + +lodash._basevalues@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._reescape@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" + +lodash._reevaluate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash._root@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + +lodash.assign@*, lodash.assign@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + +lodash.clonedeep@^4.3.2: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.escape@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + dependencies: + lodash._root "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isobject@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" + +lodash.isplainobject@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.mapvalues@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" + +lodash.merge@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.template@^3.0.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + dependencies: + lodash._basecopy "^3.0.0" + lodash._basetostring "^3.0.0" + lodash._basevalues "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + lodash.keys "^3.0.0" + lodash.restparam "^3.0.0" + lodash.templatesettings "^3.0.0" + +lodash.templatesettings@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.escape "^3.0.0" + +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + +lodash@3.7.x: + version "3.7.0" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.7.0.tgz#3678bd8ab995057c07ade836ed2ef087da811d45" + +lodash@^3.2.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.0.0, lodash@^4.12.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +lodash@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@2: + version "2.7.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +map-cache@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +meow@^3.3.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + camelcase-keys "^2.0.0" + decamelize "^1.1.2" + loud-rejection "^1.0.0" + map-obj "^1.0.1" + minimist "^1.1.3" + normalize-package-data "^2.3.4" + object-assign "^4.0.1" + read-pkg-up "^1.0.1" + redent "^1.0.0" + trim-newlines "^1.0.0" + +micromatch@^2.3.7: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +minimatch@^2.0.1: + version "2.0.10" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + dependencies: + brace-expansion "^1.0.0" + +minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimatch@~0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +mkdirp@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +multipipe@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" + dependencies: + duplexer2 "0.0.2" + +natives@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + +nomnom@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + dependencies: + chalk "~0.4.0" + underscore "~1.6.0" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +nth-check@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +object-assign@*, object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-assign@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" + +object.defaults@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" + dependencies: + array-each "^1.0.1" + array-slice "^1.0.0" + for-own "^1.0.0" + isobject "^3.0.0" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.2.0.tgz#b5392bee9782da6d9fb7d6afaf539779f1234c2b" + dependencies: + isobject "^2.1.0" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + dependencies: + wrappy "1" + +orchestrator@^0.3.0: + version "0.3.8" + resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" + dependencies: + end-of-stream "~0.1.5" + sequencify "~0.0.7" + stream-consume "~0.1.0" + +ordered-read-streams@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" + +os-homedir@^1.0.0, os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +parse-filepath@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" + dependencies: + is-absolute "^0.2.3" + map-cache "^0.2.0" + path-root "^0.1.1" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-parse@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-root-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + +path-root@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + dependencies: + path-root-regex "^0.1.0" + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +po2json@~0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/po2json/-/po2json-0.4.5.tgz#47bb2952da32d58a1be2f256a598eebc0b745118" + dependencies: + gettext-parser "1.1.0" + nomnom "1.8.1" + +pofile@~1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/pofile/-/pofile-1.0.8.tgz#09246a1788035404fc4d1ee087fa5e9ea686567d" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +pretty-hrtime@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +rcfinder@^0.1.6: + version "0.1.9" + resolved "https://registry.yarnpkg.com/rcfinder/-/rcfinder-0.1.9.tgz#f3e80f387ddf9ae80ae30a4100329642eae81115" + dependencies: + lodash.clonedeep "^4.3.2" + +rcloader@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/rcloader/-/rcloader-0.2.2.tgz#58d2298b462d0b9bfd2133d2a1ec74fbd705c717" + dependencies: + lodash.assign "^4.2.0" + lodash.isobject "^3.0.2" + lodash.merge "^4.6.0" + rcfinder "^0.1.6" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@1.1: + version "1.1.13" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.13.tgz#f6eef764f514c89e2b9e23146a75ba106756d23e" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@>=1.0.33-1 <1.1.0-0": + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@^2.1.5: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readable-stream@~1.1.9: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +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: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regex-cache@^0.4.2: + version "0.4.3" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" + dependencies: + is-equal-shallow "^0.1.3" + is-primitive "^2.0.0" + +remove-trailing-separator@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz#69b062d978727ad14dc6b56ba4ab772fd8d70511" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +replace-ext@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" + +resolve-dir@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" + dependencies: + expand-tilde "^1.2.2" + global-modules "^0.2.3" + +resolve@^1.1.6, resolve@^1.1.7: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" + dependencies: + path-parse "^1.0.5" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +"semver@2 || 3 || 4 || 5": + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +semver@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + +semver@^4.1.0: + version "4.3.6" + resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + +sequencify@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" + +shelljs@0.3.x: + version "0.3.0" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.3.0.tgz#3596e6307a781544f591f37da618360f31db57b1" + +sigmund@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +source-map@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +sparkles@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +stream-consume@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + +strip-bom@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" + dependencies: + first-chunk-stream "^1.0.0" + is-utf8 "^0.2.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@1.0.x: + version "1.0.4" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +through2@^0.6.1, through2@^0.6.3: + version "0.6.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + dependencies: + readable-stream ">=1.0.33-1 <1.1.0-0" + xtend ">=4.0.0 <4.1.0-0" + +through2@^2.0.0, through2@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +tildify@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" + dependencies: + os-homedir "^1.0.0" + +time-stamp@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +typescript-eslint-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/typescript-eslint-parser/-/typescript-eslint-parser-3.0.0.tgz#dd0435b303abc841464c02d00184d7b39bd488b5" + dependencies: + lodash.unescape "4.0.1" + semver "5.3.0" + +typescript@~2.3.2: + version "2.3.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.3.4.tgz#3d38321828231e434f287514959c37a82b629f42" + +unc-path-regex@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + +underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + +unique-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" + +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +v8flags@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +vinyl-fs@^0.3.0: + version "0.3.14" + resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" + dependencies: + defaults "^1.0.0" + glob-stream "^3.1.5" + glob-watcher "^0.0.6" + graceful-fs "^3.0.0" + mkdirp "^0.5.0" + strip-bom "^1.0.0" + through2 "^0.6.1" + vinyl "^0.4.0" + +vinyl@^0.4.0: + version "0.4.6" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" + dependencies: + clone "^0.2.0" + clone-stats "^0.0.1" + +vinyl@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" + dependencies: + clone "^1.0.0" + clone-stats "^0.0.1" + replace-ext "0.0.1" + +which@^1.2.12: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +"xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"