diff --git a/.gitignore b/.gitignore index c15ef538ed4..11db7e6b529 100644 --- a/.gitignore +++ b/.gitignore @@ -49,6 +49,7 @@ npm-debug.log* /.project /.loadpath /app/assets/javascripts/bundles/*.* +/app/assets/javascripts/editor/* /app/assets/javascripts/locales/*.* /config/additional_environment.rb /config/configuration.yml diff --git a/.pkgr.yml b/.pkgr.yml index 32f4ca3eb0e..d739d00fb25 100644 --- a/.pkgr.yml +++ b/.pkgr.yml @@ -4,6 +4,7 @@ targets: debian-8: &debian8 build_dependencies: - libsqlite3-dev + - cmake debian-9: <<: *debian8 ubuntu-14.04: @@ -13,12 +14,15 @@ targets: centos-7: dependencies: - epel-release + - cmake sles-11: build_dependencies: - sqlite3-devel + - cmake sles-12: build_dependencies: - sqlite3-devel + - cmake before_precompile: "packaging/setup" crons: - packaging/cron/openproject-hourly-tasks diff --git a/Dockerfile b/Dockerfile index 32271eae903..884a2d3e157 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,14 @@ FROM ruby:2.4-stretch -ENV NODE_VERSION="7.7.2" -ENV BUNDLER_VERSION="1.11.2" +ENV NODE_VERSION="8.9.1" +ENV BUNDLER_VERSION="1.16.0" + +# Install cmake for gems +# (commonmarker) +USER root +RUN apt-get update -qq && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + cmake # install node + npm RUN curl https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64.tar.gz | tar xzf - -C /usr/local --strip-components=1 diff --git a/app/assets/stylesheets/content/_headings.sass b/app/assets/stylesheets/content/_headings.sass index c2419417ffe..9dcdb3f9e74 100644 --- a/app/assets/stylesheets/content/_headings.sass +++ b/app/assets/stylesheets/content/_headings.sass @@ -26,12 +26,6 @@ // See docs/COPYRIGHT.rdoc for more details. //++ -body.controller-work_packages.action-show, -body.controller-work_packages.action-update - #content - h2 - padding-right: 340px - h1 color: $h1-font-color font-weight: bold diff --git a/app/assets/stylesheets/content/_index.sass b/app/assets/stylesheets/content/_index.sass index dd4c7d4d996..8c42407a5e7 100644 --- a/app/assets/stylesheets/content/_index.sass +++ b/app/assets/stylesheets/content/_index.sass @@ -64,3 +64,4 @@ @import content/custom_actions @import content/menus/_project_autocompletion +@import content/editor/ckeditor diff --git a/app/assets/stylesheets/content/editor/_ckeditor.sass b/app/assets/stylesheets/content/editor/_ckeditor.sass new file mode 100644 index 00000000000..7c1e2cf7993 --- /dev/null +++ b/app/assets/stylesheets/content/editor/_ckeditor.sass @@ -0,0 +1,19 @@ +// Wrapper for inline text editor +.op-ckeditor-element + min-height: 50px + border: 1px solid #bfbfbf !important + + &.ck-editor__editable_inline + padding-left: 2px !important + +// Wrapper for full text element +.op-ckeditor--wrapper + + // Borders for the main editor + .ck-editor__main + border: 1px solid #bfbfbf + margin-bottom: 2rem + + // Min height for the editable section + .ck-editor__editable + min-height: 20vh diff --git a/app/assets/stylesheets/content/work_packages/inplace_editing/_edit_fields.sass b/app/assets/stylesheets/content/work_packages/inplace_editing/_edit_fields.sass index bffa4ca9413..99c751d7337 100644 --- a/app/assets/stylesheets/content/work_packages/inplace_editing/_edit_fields.sass +++ b/app/assets/stylesheets/content/work_packages/inplace_editing/_edit_fields.sass @@ -36,7 +36,7 @@ p word-wrap: break-word - margin-bottom: 0 + // margin-bottom: 0 .read-value--html * diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index f0de3d248c5..2bf8ca50c1e 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -36,6 +36,7 @@ module ApplicationHelper include OpenProject::ObjectLinking include OpenProject::SafeParams include I18n + include ERB::Util include Redmine::I18n include HookHelper include IconsHelper diff --git a/app/views/layouts/base.html.erb b/app/views/layouts/base.html.erb index 8627b21ba4b..a41e74e33b1 100644 --- a/app/views/layouts/base.html.erb +++ b/app/views/layouts/base.html.erb @@ -50,6 +50,7 @@ See docs/COPYRIGHT.rdoc for more details. <%= csrf_meta_tags %> <%= render 'common/favicons' %> <%= stylesheet_link_tag 'openproject', media: "all" %> + <%= javascript_include_tag 'editor/openproject-ckeditor' %> <%= javascript_include_tag 'application' %> <%= javascript_include_tag "locales/#{I18n.locale}" %> diff --git a/app/views/layouts/user_mailer.html.erb b/app/views/layouts/user_mailer.html.erb index 3af6ce2ef55..91589ec9ab2 100644 --- a/app/views/layouts/user_mailer.html.erb +++ b/app/views/layouts/user_mailer.html.erb @@ -63,5 +63,11 @@ See docs/COPYRIGHT.rdoc for more details. + <%= OpenProject::TextFormatting::Renderer.format_text(Setting.localized_emails_header) %> + <%= call_hook(:view_layouts_mailer_html_before_content, self.assigns) %> + <%= yield %> + <%= call_hook(:view_layouts_mailer_html_after_content, self.assigns) %> +
+ <%= OpenProject::TextFormatting::Renderer.format_text(Setting.localized_emails_footer) %> diff --git a/app/views/wiki/edit.html.erb b/app/views/wiki/edit.html.erb index 608e7ef3f2e..8f4f30718fa 100644 --- a/app/views/wiki/edit.html.erb +++ b/app/views/wiki/edit.html.erb @@ -33,13 +33,9 @@ See docs/COPYRIGHT.rdoc for more details. <%= error_messages_for 'content' %>
-
-
-

<%= WikiPage.human_attribute_name(:text) %>

-
-
- <%= f.text_area :text, :cols => 100, :rows => 25, :class => 'wiki-edit op-auto-complete', :accesskey => accesskey(:edit) %> + <%= f.text_area :text, cols: 100, rows: 25, class: 'wiki-edit op-auto-complete', hidden: true, accesskey: accesskey(:edit) %>
+
<%= f.text_field :comments, size: 120 %> @@ -52,8 +48,6 @@ See docs/COPYRIGHT.rdoc for more details. <%= link_to t(:button_cancel), { controller: '/wiki', action: 'show', project_id: @project, id: @page }, class: 'button' %> - <%= preview_link preview_project_wiki_path(@project, @page), 'wiki_form-preview' %> - <%= wikitoolbar_for 'content_text' %> <% end %>
<% content_for :header_tags do %> diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index 676eec513b6..a9f63db1f9c 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -25,5 +25,6 @@ OpenProject::Application.configure do select_list_move.js types_checkboxes.js work_packages.js + editor/openproject-ckeditor.js ) end diff --git a/frontend/app/components/angular/angular-injector-bridge.functions.ts b/frontend/app/components/angular/angular-injector-bridge.functions.ts index 15b30b71896..45fc9b8a151 100644 --- a/frontend/app/components/angular/angular-injector-bridge.functions.ts +++ b/frontend/app/components/angular/angular-injector-bridge.functions.ts @@ -1,4 +1,5 @@ + /** * Returns the currently bootstrapped injector from the application. * Not applicable until after the application bootstrapping is done. diff --git a/frontend/app/components/ckeditor/op-ckeditor-form.component.ts b/frontend/app/components/ckeditor/op-ckeditor-form.component.ts new file mode 100644 index 00000000000..57185909baf --- /dev/null +++ b/frontend/app/components/ckeditor/op-ckeditor-form.component.ts @@ -0,0 +1,117 @@ +// -- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License version 3. +// +// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +// Copyright (C) 2006-2013 Jean-Philippe Lang +// Copyright (C) 2010-2013 the ChiliProject Team +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// See doc/COPYRIGHT.rdoc for more details. +// ++ + +import IAugmentedJQuery = angular.IAugmentedJQuery; +import {IDialogService} from 'ng-dialog'; +import {IDialogScope} from 'ng-dialog'; +import {opUiComponentsModule} from '../../angular-modules'; + +export interface ICkeditorInstance { + getData():string; + setData(content:string):void; +} + +export interface ICkeditorStatic { + create(el:HTMLElement):Promise; +} + +declare global { + interface Window { + BalloonEditor:ICkeditorStatic; + ClassicEditor:ICkeditorStatic; + } +} + +const ckEditorWrapperClass = 'op-ckeditor--wrapper'; +const ckEditorReplacementClass = '__op_ckeditor_replacement_container'; + +export class OpCkeditorFormComponent { + public textareaSelector:string; + + // Which template to include + public ckeditor:any; + public formElement:JQuery; + public wrappedTextArea:JQuery; + + // Remember if the user changed + public changed:boolean = false; + public inFlight:boolean = false; + + public text:any; + + + constructor(protected $element:ng.IAugmentedJQuery, + protected $timeout:ng.ITimeoutService, + protected ConfigurationService:any, + protected I18n:op.I18n) { + + } + + public $onInit() { + this.formElement = this.$element.closest('form'); + this.wrappedTextArea = this.formElement.find(this.textareaSelector); + const wrapper = this.$element.find(`.${ckEditorReplacementClass}`); + window.ClassicEditor + .create(wrapper[0]) + .then(this.setup.bind(this)) + .catch((error:any) => { + console.error(error); + }); + } + + public $onDestroy() { + this.formElement.off('submit.ckeditor'); + } + + public setup(editor:ICkeditorInstance) { + this.ckeditor = editor; + const rawValue = this.wrappedTextArea.val(); + + if (rawValue) { + editor.setData(rawValue); + } + + // Listen for form submission to set textarea content + this.formElement.on('submit.ckeditor', () => { + const value = this.ckeditor.getData(); + this.wrappedTextArea.val(value); + + // Continue with submission + return true; + }); + } +} + +opUiComponentsModule.component('opCkeditorForm', { + template: `
`, + controller: OpCkeditorFormComponent, + controllerAs: '$ctrl', + bindings: { + textareaSelector: '@' + } +}); diff --git a/frontend/app/components/work-packages/work-package-comment/work-package-comment.directive.test.js b/frontend/app/components/work-packages/work-package-comment/work-package-comment.directive.test.js index d613bfaa81c..f82f2336e37 100644 --- a/frontend/app/components/work-packages/work-package-comment/work-package-comment.directive.test.js +++ b/frontend/app/components/work-packages/work-package-comment/work-package-comment.directive.test.js @@ -132,23 +132,6 @@ describe('workPackageCommentDirectiveTest', function() { var readvalue = commentSection.find('.inplace-edit--read-value > span'); expect(readvalue.text().trim()).to.equal('trans_title'); }); - - describe('when clicking the inplace edit', function() { - beforeEach(function() { - commentSection.find('.inplace-editing--trigger-link').click(); - }); - - it('does not allow sending comment with an empty message', function() { - var saveButton = commentSection.find('.inplace-edit--control--save'); - var commentField = commentSection.find('textarea').click(); - - expect(saveButton.attr('disabled')).to.eq('disabled'); - - commentField.val('a useful comment'); - commentField.trigger('change'); - expect(saveButton.attr('disabled')).to.be.undefined; - }); - }); }); }); }); diff --git a/frontend/app/components/work-packages/work-package-comment/work-package-comment.directive.ts b/frontend/app/components/work-packages/work-package-comment/work-package-comment.directive.ts index fc1231135e7..b30e4632990 100644 --- a/frontend/app/components/work-packages/work-package-comment/work-package-comment.directive.ts +++ b/frontend/app/components/work-packages/work-package-comment/work-package-comment.directive.ts @@ -69,7 +69,7 @@ export class CommentFieldDirectiveController { $scope.$on('workPackage.comment.quoteThis', (evt, quote) => { this.resetField(quote); - this.editing = true; + this.activate(); this.$element.find('.work-packages--activity--add-comment')[0].scrollIntoView(); }); } @@ -92,10 +92,15 @@ export class CommentFieldDirectiveController { public activate(withText?:string) { this._forceFocus = true; - this.resetField(withText); this.editing = true; - this.$timeout(() => this.$element.find('.wp-inline-edit--field').focus()); + this.$timeout(() => { + if (!this.field) { + this.resetField(withText); + } + + this.field.$onInit(this.$element); + }); } public get project() { @@ -108,6 +113,7 @@ export class CommentFieldDirectiveController { } public handleUserSubmit() { + this.field.onSubmit(); if (this.field.isBusy || this.field.isEmpty()) { return; } diff --git a/frontend/app/components/work-packages/work-package-comment/wp-comment-field.module.ts b/frontend/app/components/work-packages/work-package-comment/wp-comment-field.module.ts index 598092aa86f..2b00614be44 100644 --- a/frontend/app/components/work-packages/work-package-comment/wp-comment-field.module.ts +++ b/frontend/app/components/work-packages/work-package-comment/wp-comment-field.module.ts @@ -52,6 +52,10 @@ export class WorkPackageCommentField extends WikiTextareaEditField { return true; } + public isEmpty():boolean { + return false; + } + public initializeFieldValue(withText?:string):void { if (!withText) { this.rawValue = ''; diff --git a/frontend/app/components/work-packages/wp-editor-field/wp-editor-field.component.html b/frontend/app/components/work-packages/wp-editor-field/wp-editor-field.component.html new file mode 100644 index 00000000000..46e029235ca --- /dev/null +++ b/frontend/app/components/work-packages/wp-editor-field/wp-editor-field.component.html @@ -0,0 +1,22 @@ +
+
+
+
+
+ + + + + + +
+
+
diff --git a/frontend/app/components/work-packages/wp-editor-field/wp-editor-field.component.ts b/frontend/app/components/work-packages/wp-editor-field/wp-editor-field.component.ts new file mode 100644 index 00000000000..fc5f6ec82e3 --- /dev/null +++ b/frontend/app/components/work-packages/wp-editor-field/wp-editor-field.component.ts @@ -0,0 +1,145 @@ +// -- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License version 3. +// +// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +// Copyright (C) 2006-2013 Jean-Philippe Lang +// Copyright (C) 2010-2013 the ChiliProject Team +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// See doc/COPYRIGHT.rdoc for more details. +// ++ + +import IAugmentedJQuery = angular.IAugmentedJQuery; +import {IDialogService} from 'ng-dialog'; +import {IDialogScope} from 'ng-dialog'; +import {opUiComponentsModule} from '../../../angular-modules'; +import {HelpTextResourceInterface} from '../../api/api-v3/hal-resources/help-text-resource.service'; +import {HelpTextDmService} from '../../api/api-v3/hal-resource-dms/help-text-dm.service'; +import {opWorkPackagesModule} from './../../../angular-modules'; +import {WorkPackageChangeset} from './../../wp-edit-form/work-package-changeset'; +import {WorkPackageResourceInterface} from './../../api/api-v3/hal-resources/work-package-resource.service'; +import { WorkPackageEditFieldGroupController } from 'app/components/wp-edit/wp-edit-field/wp-edit-field-group.directive'; + +export class WorkPackageEditorFieldController { + public wpEditFieldGroup:WorkPackageEditFieldGroupController; + public workPackage:WorkPackageResourceInterface; + public attribute:string; + public wrapperClasses:string; + + // Which template to include + public format:string; + public ckeditor:any; + + // Remember if the user changed + public changed:boolean = false; + public inFlight:boolean = false; + + public text:any; + + + constructor(protected $element:ng.IAugmentedJQuery, + protected $timeout:ng.ITimeoutService, + protected ConfigurationService:any, + protected I18n:op.I18n) { + + this.text = { + saveTitle: 'Save', + cancelTitle: 'Cancel' + }; + + // if(ConfigurationService.text_formatting == 'markdown') { + this.format = 'markdown'; + // } else { + // } + + } + + public $onInit() { + const element = this.$element.find('.op-ckeditor-element'); + (window as any).BalloonEditor + .create(element[0]) + .then((editor:any) => { + this.ckeditor = editor; + if (this.rawValue) { + this.reset(); + } + }) + .catch((error:any) => { + console.error(error); + }); + } + + public submit() { + this.inFlight = true; + this.value = this.ckeditor.getData(); + this.wpEditFieldGroup.saveWorkPackage().then(() => { + this.reset(); + }) + .catch(() => { + this.reset(); + }); + } + + public reset() { + this.ckeditor.setData(this.rawValue); + this.$timeout(() => { + this.changed = false; + this.inFlight = false; + }); + } + + public get isInitialized() { + return !!this.ckeditor; + } + + public get value() { + return this.changeset.value(this.attribute); + } + + public get rawValue() { + if (this.value && this.value.raw) { + return this.value.raw; + } else { + return ''; + } + } + + public set value(value:any) { + this.changeset.setValue(this.attribute, { raw: value }); + } + + public get changeset():WorkPackageChangeset { + return this.wpEditFieldGroup.form.changeset; + } +} + +opWorkPackagesModule.component('wpEditorField', { + templateUrl: '/components/work-packages/wp-editor-field/wp-editor-field.component.html', + controller: WorkPackageEditorFieldController, + require: { + wpEditFieldGroup: '^wpEditFieldGroup' + }, + controllerAs: '$ctrl', + bindings: { + workPackage: '<', + attribute: '<', + wrapperClasses: '@' + } +}); diff --git a/frontend/app/components/work-packages/wp-single-view/wp-single-view.directive.html b/frontend/app/components/work-packages/wp-single-view/wp-single-view.directive.html index af9c195be0f..033227e0574 100644 --- a/frontend/app/components/work-packages/wp-single-view/wp-single-view.directive.html +++ b/frontend/app/components/work-packages/wp-single-view/wp-single-view.directive.html @@ -65,12 +65,11 @@
- - + +
diff --git a/frontend/app/components/wp-edit-form/single-view-edit-context.ts b/frontend/app/components/wp-edit-form/single-view-edit-context.ts index 36d4b91dfd8..259758a9de7 100644 --- a/frontend/app/components/wp-edit-form/single-view-edit-context.ts +++ b/frontend/app/components/wp-edit-form/single-view-edit-context.ts @@ -99,6 +99,7 @@ export class SingleViewEditContext implements WorkPackageEditContext { ctrl.editContainer.show(); // Assure the element is visible this.$timeout(() => { + field.$onInit(container); resolve(fieldHandler); }); }) diff --git a/frontend/app/components/wp-edit-form/work-package-edit-field-handler.ts b/frontend/app/components/wp-edit-form/work-package-edit-field-handler.ts index ddfd33a15ea..68b1b4c6055 100644 --- a/frontend/app/components/wp-edit-form/work-package-edit-field-handler.ts +++ b/frontend/app/components/wp-edit-form/work-package-edit-field-handler.ts @@ -40,6 +40,7 @@ export class WorkPackageEditFieldHandler { // Injections public FocusHelper:any; public ConfigurationService:any; + public $q:ng.IQService; public I18n:op.I18n; // Scope the field has been rendered in @@ -58,7 +59,7 @@ export class WorkPackageEditFieldHandler { public field:EditField, public element:JQuery, public withErrors:string[]) { - $injectFields(this, 'I18n', 'ConfigurationService', 'FocusHelper'); + $injectFields(this, 'I18n', '$q', 'ConfigurationService', 'FocusHelper'); this.editContext = form.editContext; this.schemaName = field.name; @@ -96,10 +97,13 @@ export class WorkPackageEditFieldHandler { /** * Handle a user submitting the field (e.g, ng-change) */ - public handleUserSubmit() { + public handleUserSubmit():ng.IPromise { if (!this.form.editMode) { - this.form.submit(); + this.field.onSubmit(); + return this.form.submit(); } + + return this.$q.resolve(); } /** diff --git a/frontend/app/components/wp-edit-form/work-package-edit-form.ts b/frontend/app/components/wp-edit-form/work-package-edit-form.ts index 08d435ab1de..2c67628e06f 100644 --- a/frontend/app/components/wp-edit-form/work-package-edit-form.ts +++ b/frontend/app/components/wp-edit-form/work-package-edit-form.ts @@ -192,7 +192,9 @@ export class WorkPackageEditForm { // Reset old error notifcations this.errorsPerAttribute = {}; + // Notify all fields of upcoming save const openFields = _.keys(this.activeFields); + _.each(this.activeFields, (handler:WorkPackageEditFieldHandler) => handler.field.onSubmit()); this.changeset.save() .then(savedWorkPackage => { diff --git a/frontend/app/components/wp-edit/field-types/wp-edit-markdown-field.directive.html b/frontend/app/components/wp-edit/field-types/wp-edit-markdown-field.directive.html new file mode 100644 index 00000000000..b831ad98da3 --- /dev/null +++ b/frontend/app/components/wp-edit/field-types/wp-edit-markdown-field.directive.html @@ -0,0 +1,12 @@ +
+
+
+ + +
+ diff --git a/frontend/app/components/wp-edit/field-types/wp-edit-wiki-textarea-field.module.ts b/frontend/app/components/wp-edit/field-types/wp-edit-wiki-textarea-field.module.ts index 7eabb7efbbe..6b745329d75 100644 --- a/frontend/app/components/wp-edit/field-types/wp-edit-wiki-textarea-field.module.ts +++ b/frontend/app/components/wp-edit/field-types/wp-edit-wiki-textarea-field.module.ts @@ -27,14 +27,14 @@ // ++ import {EditField} from '../wp-edit-field/wp-edit-field.module'; -import {WorkPackageResource} from '../../api/api-v3/hal-resources/work-package-resource.service'; -import {$injectFields, $injectNow} from '../../angular/angular-injector-bridge.functions'; +import {$injectFields} from '../../angular/angular-injector-bridge.functions'; import {TextileService} from './../../common/textile/textile-service'; +import {WorkPackageEditFieldHandler} from 'core-components/wp-edit-form/work-package-edit-field-handler'; export class WikiTextareaEditField extends EditField { // Template - public template:string = '/components/wp-edit/field-types/wp-edit-wiki-textarea-field.directive.html'; + public template:string = '/components/wp-edit/field-types/wp-edit-markdown-field.directive.html'; // Dependencies protected $sce:ng.ISCEService; @@ -49,6 +49,9 @@ export class WikiTextareaEditField extends EditField { public previewHtml:string; public text:Object; + // CKEditor instance + public ckeditor:any; + protected initialize() { $injectFields(this, '$sce', '$http', 'textileService', '$timeout', 'I18n'); @@ -59,9 +62,48 @@ export class WikiTextareaEditField extends EditField { }; } + public onSubmit() { + if (this.ckeditor) { + this.rawValue = this.ckeditor.getData(); + } + } + + public get isInitialized() { + return !!this.ckeditor; + } + + public $onInit(container:JQuery) { + const element = container.find('.op-ckeditor-element'); + (window as any).BalloonEditor + .create(element[0]) + .then((editor:any) => { + editor.config['openProject'] = { + context: this.resource, + element: element + }; + + this.ckeditor = editor; + if (this.rawValue) { + this.reset(); + } + + element.focus(); + }) + .catch((error:any) => { + console.error(error); + }); + } + + public reset() { + this.ckeditor.setData(this.rawValue); + } + public get rawValue() { - const formatted = this.value; - return _.get(formatted, 'raw', ''); + if (this.value && this.value.raw) { + return this.value.raw; + } else { + return ''; + } } public set rawValue(val:string) { @@ -73,7 +115,11 @@ export class WikiTextareaEditField extends EditField { } public isEmpty():boolean { - return !(this.value && this.value.raw); + if (this.isInitialized) { + return this.ckeditor.getData() === ''; + } else { + return !(this.value && this.value.raw); + } } public submitUnlessInPreview(form:any) { diff --git a/frontend/app/components/wp-edit/wp-edit-field/wp-edit-field.module.ts b/frontend/app/components/wp-edit/wp-edit-field/wp-edit-field.module.ts index c5c8e6f5589..862745d081e 100644 --- a/frontend/app/components/wp-edit/wp-edit-field/wp-edit-field.module.ts +++ b/frontend/app/components/wp-edit/wp-edit-field/wp-edit-field.module.ts @@ -42,6 +42,10 @@ export class EditField extends Field { this.initialize(); } + public onSubmit() { + + } + public get inFlight() { return this.changeset.inFlight; } diff --git a/frontend/app/components/wp-field/wp-field.module.ts b/frontend/app/components/wp-field/wp-field.module.ts index 39611976313..a2a59a6e662 100644 --- a/frontend/app/components/wp-field/wp-field.module.ts +++ b/frontend/app/components/wp-field/wp-field.module.ts @@ -27,11 +27,14 @@ // ++ import {HalResource} from '../api/api-v3/hal-resources/hal-resource.service'; +import {WorkPackageEditFieldHandler} from 'core-components/wp-edit-form/work-package-edit-field-handler'; export class Field { public static type:string; public static $injector:ng.auto.IInjectorService; + public $onInit(container:JQuery) {} + public get displayName():string { return this.schema.name || this.name; } diff --git a/frontend/ckeditor/ckeditor.ts b/frontend/ckeditor/ckeditor.ts new file mode 100644 index 00000000000..c57efb93a8d --- /dev/null +++ b/frontend/ckeditor/ckeditor.ts @@ -0,0 +1,80 @@ +const ClassicEditor = (require('./ckeditor5/packages/ckeditor5-editor-classic/src/classiceditor') as any).default; +const BalloonEditor = (require('./ckeditor5/packages/ckeditor5-editor-balloon/src/ballooneditor') as any).default; + +const EssentialsPlugin = (require('./ckeditor5/packages/ckeditor5-essentials/src/essentials') as any).default; +const AutoformatPlugin = (require('./ckeditor5/packages/ckeditor5-autoformat/src/autoformat') as any).default; +const BoldPlugin = (require('./ckeditor5/packages/ckeditor5-basic-styles/src/bold') as any).default; +const ItalicPlugin = (require('./ckeditor5/packages/ckeditor5-basic-styles/src/italic') as any).default; +const BlockquotePlugin = (require('./ckeditor5/packages/ckeditor5-block-quote/src/blockquote') as any).default; +const HeadingPlugin = (require('./ckeditor5/packages/ckeditor5-heading/src/heading') as any).default; +const ImagePlugin = (require('./ckeditor5/packages/ckeditor5-image/src/image') as any).default; +const ImagecaptionPlugin = (require('./ckeditor5/packages/ckeditor5-image/src/imagecaption') as any).default; +const ImagestylePlugin = (require('./ckeditor5/packages/ckeditor5-image/src/imagestyle') as any).default; +const ImagetoolbarPlugin = (require('./ckeditor5/packages/ckeditor5-image/src/imagetoolbar') as any).default; +const LinkPlugin = (require('./ckeditor5/packages/ckeditor5-link/src/link') as any).default; +const ListPlugin = (require('./ckeditor5/packages/ckeditor5-list/src/list') as any).default; +const ParagraphPlugin = (require('./ckeditor5/packages/ckeditor5-paragraph/src/paragraph') as any).default; +// const GFMDataProcessor = (require('./ckeditor5/packages/ckeditor5-markdown-gfm/src/gfmdataprocessor') as any).default; +// import OPCommonMarkProcessor from './plugins/op-commonmark/op-commonmark'; +const CommonMarkDataProcessor = (require('./plugins/ckeditor5-markdown-gfm/src/commonmarkdataprocessor') as any).default; + +// import OpTableWidget from './plugins/op-table/src/op-table'; +import OPImageUploadPlugin from './plugins/op-image-upload/op-image-upload'; + +function Markdown( editor:any ) { + editor.data.processor = new CommonMarkDataProcessor(); +} + +declare global { + var angular: any; +} + +export class OPClassicEditor extends ClassicEditor {} +export class OPBalloonEditor extends BalloonEditor {} + +(window as any).BalloonEditor = OPBalloonEditor; +(window as any).ClassicEditor = OPClassicEditor; + +const config = { + plugins: [ + // Markdown, + EssentialsPlugin, + AutoformatPlugin, + BoldPlugin, + ItalicPlugin, + BlockquotePlugin, + HeadingPlugin, + ImagePlugin, + ImagecaptionPlugin, + ImagestylePlugin, + ImagetoolbarPlugin, + LinkPlugin, + ListPlugin, + ParagraphPlugin, + // OPImageUploadPlugin + ], + config: { + toolbar: [ + 'headings', + 'bold', + 'italic', + 'link', + 'bulletedList', + 'numberedList', + 'blockQuote', + 'undo', + 'redo' + ], + image: { + toolbar: [ + 'imageStyleFull', + 'imageStyleSide', + '|', + 'imageTextAlternative' + ] + } + } +}; + +(OPClassicEditor as any).build = config; +(OPBalloonEditor as any).build = config; diff --git a/frontend/ckeditor/plugins/op-image-upload/op-image-upload.ts b/frontend/ckeditor/plugins/op-image-upload/op-image-upload.ts new file mode 100644 index 00000000000..97e588ba9e6 --- /dev/null +++ b/frontend/ckeditor/plugins/op-image-upload/op-image-upload.ts @@ -0,0 +1,40 @@ +const Plugin:any = (require('@ckeditor/ckeditor5-core/src/plugin') as any).default; +const Image:any = (require('@ckeditor/ckeditor5-image/src/image') as any).default; +const FileRepository:any = (require('@ckeditor/ckeditor5-upload/src/filerepository') as any).default; +const ImageUpload:any = (require('@ckeditor/ckeditor5-upload/src/imageupload') as any).default; +const ImageUploadEngine:any = (require('@ckeditor/ckeditor5-upload/src/imageuploadengine') as any).default; + +import { OpenProjectUploadAdapter } from './op-upload-adadpter'; + +interface CkEditorInstance { + plugins:any; +} + +interface IFileLoader { + file:File; + uploadTotal?:number; + uploaded?:number; +} + +export default class OPImageUploadPlugin extends Plugin { + public editor:CkEditorInstance; + + static get requires() { + return [ + Image, + ImageUpload, + ImageUploadEngine, + FileRepository + ]; + } + + init() { + this.editor.plugins.get( FileRepository ).createAdapter = (loader:IFileLoader) => { + return new OpenProjectUploadAdapter(loader as any, this.editor); + }; + } + + static get pluginName() { + return 'OpenProject Image Upload'; + } +} diff --git a/frontend/ckeditor/plugins/op-image-upload/op-upload-adadpter.ts b/frontend/ckeditor/plugins/op-image-upload/op-upload-adadpter.ts new file mode 100644 index 00000000000..1e3b68699b2 --- /dev/null +++ b/frontend/ckeditor/plugins/op-image-upload/op-upload-adadpter.ts @@ -0,0 +1,61 @@ + +import IFileLoader from './op-image-upload'; +import {$injectFields} from 'core-components/angular/angular-injector-bridge.functions'; + +export class OpenProjectUploadAdapter { + // Injected service + public Upload:any; + + // Upload instance + public uploader:any; + + constructor(public loader:IFileLoader, public editor:any) { + // Save Loader instance to update upload progress. + this.loader = loader; + $injectFields(this, 'Upload'); + } + + public get uploadUrl() { + const config = this.editor.config.openProject; + return config.context.addAttachment.href; + } + + public upload() { + const file = this.loader.file; + const metadata = { + description: file.description, + fileName: file.customName || file.name + }; + + // need to wrap the metadata into a JSON ourselves as ngFileUpload + // will otherwise break up the metadata into individual parts + const data = { + metadata: JSON.stringify(metadata), + file: this.loader.file + }; + + return this.uploader = this.performUpload(data, this.uploadUrl); + } + + public performUpload(data:any, url:string) { + const uploader = this.Upload.upload({data, url}); + uploader.progress((details:any) => { + var file = details.config.file || details.config.data.file; + if (details.lengthComputable) { + this.loader.uploaded = details.loaded; + this.loader.uploadTotal = details.total; + } + }); + + // Return srcset data for image + // https://ckeditor5.github.io/docs/nightly/ckeditor5/latest/api/module_upload_filerepository-Adapter.html#upload + return uploader.then((result:any) => { + return { default: result.data._links.downloadLocation.href }; + }); + } + + abort() { + return this.uploader && this.uploader.abort(); + } + +} diff --git a/frontend/ckeditor/plugins/op-table/CHANGELOG.md b/frontend/ckeditor/plugins/op-table/CHANGELOG.md deleted file mode 100644 index 16390422fc4..00000000000 --- a/frontend/ckeditor/plugins/op-table/CHANGELOG.md +++ /dev/null @@ -1,41 +0,0 @@ -Changelog -========= - -## [1.0.0-alpha.1](https://github.com/ckeditor/ckeditor5-block-quote/compare/v0.2.0...v1.0.0-alpha.1) (2017-10-03) - -### Other changes - -* Improved default blockquote styling so it does not overlap with floated images. Closes [#12](https://github.com/ckeditor/ckeditor5-block-quote/issues/12). ([fb09418](https://github.com/ckeditor/ckeditor5-block-quote/commit/fb09418)) - - -## [0.2.0](https://github.com/ckeditor/ckeditor5-block-quote/compare/v0.1.1...v0.2.0) (2017-09-03) - -### Features - -* Enter in the block quote will scroll the viewport to the selection. See ckeditor/ckeditor5-engine#660. ([09dc740](https://github.com/ckeditor/ckeditor5-block-quote/commit/09dc740)) - -### Other changes - -* Aligned the implementation to the new Command API (see https://github.com/ckeditor/ckeditor5-core/issues/88). ([627510a](https://github.com/ckeditor/ckeditor5-block-quote/commit/627510a)) - -### BREAKING CHANGES - -* The command API has been changed. - - -## [0.1.1](https://github.com/ckeditor/ckeditor5-block-quote/compare/v0.1.0...v0.1.1) (2017-05-07) - -### Bug fixes - -* Block quote should not be applied to image's caption. Closes: [#10](https://github.com/ckeditor/ckeditor5-block-quote/issues/10). ([06de874](https://github.com/ckeditor/ckeditor5-block-quote/commit/06de874)) - -### Other changes - -* Updated translations. ([5e23f86](https://github.com/ckeditor/ckeditor5-block-quote/commit/5e23f86)) - - -## 0.1.0 (2017-04-05) - -### Features - -* Introduced the block quote feature. Closes [#1](https://github.com/ckeditor/ckeditor5-block-quote/issues/1). ([239015b](https://github.com/ckeditor/ckeditor5-block-quote/commit/239015b)) diff --git a/frontend/ckeditor/plugins/op-table/CONTRIBUTING.md b/frontend/ckeditor/plugins/op-table/CONTRIBUTING.md deleted file mode 100644 index aefc066d140..00000000000 --- a/frontend/ckeditor/plugins/op-table/CONTRIBUTING.md +++ /dev/null @@ -1,4 +0,0 @@ -Contributing -======================================== - -Information about contributing can be found at the following page: . diff --git a/frontend/ckeditor/plugins/op-table/LICENSE.md b/frontend/ckeditor/plugins/op-table/LICENSE.md deleted file mode 100644 index e60faa58313..00000000000 --- a/frontend/ckeditor/plugins/op-table/LICENSE.md +++ /dev/null @@ -1,23 +0,0 @@ -Software License Agreement -========================== - -**CKEditor 5 Block Quote Feature** – https://github.com/ckeditor/ckeditor5-paragraph
-Copyright (c) 2003-2017, [CKSource](http://cksource.com) Frederico Knabben. All rights reserved. - -Licensed under the terms of any of the following licenses at your choice: - -* [GNU General Public License Version 2 or later (the "GPL")](http://www.gnu.org/licenses/gpl.html) -* [GNU Lesser General Public License Version 2.1 or later (the "LGPL")](http://www.gnu.org/licenses/lgpl.html) -* [Mozilla Public License Version 1.1 or later (the "MPL")](http://www.mozilla.org/MPL/MPL-1.1.html) - -You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice. In any case, your choice will not restrict any recipient of your version of this software to use, reproduce, modify and distribute this software under any of the above licenses. - -Sources of Intellectual Property Included in CKEditor ------------------------------------------------------ - -Where not otherwise indicated, all CKEditor content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, CKEditor will incorporate work done by developers outside of CKSource with their express permission. - -Trademarks ----------- - -**CKEditor** is a trademark of [CKSource](http://cksource.com) Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders. diff --git a/frontend/ckeditor/plugins/op-table/README.md b/frontend/ckeditor/plugins/op-table/README.md deleted file mode 100644 index b130b03b3c6..00000000000 --- a/frontend/ckeditor/plugins/op-table/README.md +++ /dev/null @@ -1,19 +0,0 @@ -CKEditor 5 block quote feature -======================================== - -[![Join the chat at https://gitter.im/ckeditor/ckeditor5](https://badges.gitter.im/ckeditor/ckeditor5.svg)](https://gitter.im/ckeditor/ckeditor5?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![npm version](https://badge.fury.io/js/%40ckeditor%2Fckeditor5-block-quote.svg)](https://www.npmjs.com/package/@ckeditor/ckeditor5-block-quote) -[![Build Status](https://travis-ci.org/ckeditor/ckeditor5-block-quote.svg?branch=master)](https://travis-ci.org/ckeditor/ckeditor5-block-quote) -[![Test Coverage](https://codeclimate.com/github/ckeditor/ckeditor5-block-quote/badges/coverage.svg)](https://codeclimate.com/github/ckeditor/ckeditor5-block-quote/coverage) -[![Dependency Status](https://david-dm.org/ckeditor/ckeditor5-block-quote/status.svg)](https://david-dm.org/ckeditor/ckeditor5-block-quote) -[![devDependency Status](https://david-dm.org/ckeditor/ckeditor5-block-quote/dev-status.svg)](https://david-dm.org/ckeditor/ckeditor5-block-quote?type=dev) - -This package implements block quote support for CKEditor 5. - -## Documentation - -See the [`@ckeditor/ckeditor5-block-quote` package](https://ckeditor5.github.io/docs/nightly/ckeditor5/latest/api/block-quote.html) page in [CKEditor 5 documentation](https://ckeditor5.github.io/docs/nightly/ckeditor5/latest/). - -## License - -Licensed under the GPL, LGPL and MPL licenses, at your choice. For full details about the license, please check the `LICENSE.md` file. diff --git a/frontend/ckeditor/plugins/op-table/package-lock.json b/frontend/ckeditor/plugins/op-table/package-lock.json deleted file mode 100644 index 851bf859843..00000000000 --- a/frontend/ckeditor/plugins/op-table/package-lock.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "husky": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-0.14.3.tgz", - "integrity": "sha512-e21wivqHpstpoiWA/Yi8eFti8E+sQDSS53cpJsPptPs295QTOQR0ZwnHo2TXy1XOpZFD9rPOd3NpmqTK6uMLJA==", - "requires": { - "is-ci": "1.0.10", - "normalize-path": "1.0.0", - "strip-indent": "2.0.0" - }, - "dependencies": { - "ci-info": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.1.tgz", - "integrity": "sha512-vHDDF/bP9RYpTWtUhpJRhCFdvvp3iDWvEbuDbWgvjUrNGV1MXJrE0MPcwGtEled04m61iwdBLUIHZtDgzWS4ZQ==" - }, - "is-ci": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.0.10.tgz", - "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", - "requires": { - "ci-info": "1.1.1" - } - }, - "normalize-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", - "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=" - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" - } - } - } - } -} diff --git a/frontend/ckeditor/plugins/op-table/package.json b/frontend/ckeditor/plugins/op-table/package.json deleted file mode 100644 index 395aeb9f445..00000000000 --- a/frontend/ckeditor/plugins/op-table/package.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "@ckeditor/ckeditor5-block-quote", - "version": "1.0.0-alpha.1", - "description": "Block quote feature for CKEditor 5.", - "keywords": [ - "ckeditor5", - "ckeditor5-feature" - ], - "dependencies": { - "@ckeditor/ckeditor5-core": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-engine": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-ui": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-utils": "^1.0.0-alpha.1" - }, - "devDependencies": { - "@ckeditor/ckeditor5-editor-classic": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-enter": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-essentials": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-image": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-list": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-paragraph": "^1.0.0-alpha.1", - "@ckeditor/ckeditor5-typing": "^1.0.0-alpha.1", - "eslint": "^4.8.0", - "eslint-config-ckeditor5": "^1.0.6", - "husky": "^0.14.3", - "lint-staged": "^4.2.3" - }, - "engines": { - "node": ">=6.0.0", - "npm": ">=3.0.0" - }, - "author": "CKSource (http://cksource.com/)", - "license": "(GPL-2.0 OR LGPL-2.1 OR MPL-1.1)", - "homepage": "https://ckeditor5.github.io", - "bugs": "https://github.com/ckeditor/ckeditor5-block-quote/issues", - "repository": { - "type": "git", - "url": "https://github.com/ckeditor/ckeditor5-block-quote.git" - }, - "files": [ - "lang", - "src", - "theme" - ], - "scripts": { - "lint": "eslint --quiet '**/*.js'", - "precommit": "lint-staged" - }, - "lint-staged": { - "**/*.js": [ - "eslint --quiet" - ] - }, - "eslintIgnore": [ - "src/lib/**", - "packages/**" - ] -} diff --git a/frontend/ckeditor/plugins/op-table/src/op-table.js b/frontend/ckeditor/plugins/op-table/src/op-table.js deleted file mode 100644 index 048e80def55..00000000000 --- a/frontend/ckeditor/plugins/op-table/src/op-table.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. - * For licensing, see LICENSE.md. - */ - -/** - * @module block-quote/blockquote - */ - -import Plugin from '@ckeditor/ckeditor5-core/src/plugin'; -import buildModelConverter from '@ckeditor/ckeditor5-engine/src/conversion/buildmodelconverter'; -import buildViewConverter from '@ckeditor/ckeditor5-engine/src/conversion/buildviewconverter'; - -export default class OpTableWidget extends Plugin { - static get pluginName() { - return 'OP-Table'; - } - - init() { - const editor = this.editor; - const data = editor.data; - const schema = editor.document.schema; - const editing = editor.editing; - - schema.registerItem( 'table' ); - schema.allow( { name: 'table', inside: '$root' } ); - // thead - schema.allow( { name: 'thead', inside: 'table' } ); - schema.allow( { name: 'tr', inside: 'thead' } ); - schema.allow( { name: 'th', inside: 'tr' } ); - - // tbody - schema.allow( { name: 'tbody', inside: 'table' } ); - schema.allow( { name: 'tr', inside: 'tbody' } ); - schema.allow( { name: 'td', inside: 'tr' } ); - // schema.allow( { name: '$block', inside: 'opTable' } ); - - - buildModelConverter().for( data.modelToView, editing.modelToView ) - .fromElement( 'opTable' ) - .toElement('div') - - // Build converter from view to model for data pipeline. - buildViewConverter().for( data.viewToModel ) - .fromElement( 'div' ) - .fromAttribute( 'class', 'op-ckeditor-widget--table') - .toElement('opTable'); - } -} diff --git a/frontend/ckeditor/postcss.config.js b/frontend/ckeditor/postcss.config.js new file mode 100644 index 00000000000..265ffccc052 --- /dev/null +++ b/frontend/ckeditor/postcss.config.js @@ -0,0 +1,13 @@ +'use strict'; + +const path = require( 'path' ); +const postcssImport = require( 'postcss-import' ); +const postcssCssnext = require( 'postcss-cssnext' ); +//const CKThemeImporter = require( './ck-theme-importer' ); + +module.exports = { + plugins: [ + postcssImport(), + postcssCssnext() + ] +}; diff --git a/frontend/ckeditor/tsconfig.json b/frontend/ckeditor/tsconfig.json new file mode 100644 index 00000000000..ab4b704afe8 --- /dev/null +++ b/frontend/ckeditor/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES6", + "allowJs": true, + "allowSyntheticDefaultImports": true, + "module": "ES6", + "moduleResolution": "node", + "removeComments": true, + "preserveConstEnums": true, + "sourceMap": true, + "noEmitOnError": false, + // Increase strictness + "noImplicitAny": false, + "noImplicitThis": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "strictNullChecks": true, + "skipLibCheck": true, + "baseUrl": ".", + "paths": { + "core-components/*": ["../app/components/*"], + "op-ckeditor/*": ["./*"] + } + }, + "compileOnSave": false, + "exclude": [ + "node_modules" + ] +} diff --git a/frontend/npm-shrinkwrap.json b/frontend/npm-shrinkwrap.json index 46018646867..959b13e3be6 100644 --- a/frontend/npm-shrinkwrap.json +++ b/frontend/npm-shrinkwrap.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@angular/common/-/common-4.4.6.tgz", "integrity": "sha1-S4FCByTggooOg5uVpV6xp+g5GPI=", "requires": { - "tslib": "1.8.0" + "tslib": "1.9.0" } }, "@angular/compiler": { @@ -17,7 +17,7 @@ "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-4.4.6.tgz", "integrity": "sha1-LuH68lt1fh0SiXkHS+f65SmzvCA=", "requires": { - "tslib": "1.8.0" + "tslib": "1.9.0" } }, "@angular/core": { @@ -25,15 +25,7 @@ "resolved": "https://registry.npmjs.org/@angular/core/-/core-4.4.6.tgz", "integrity": "sha1-EwMf0Q3P5DiHVBmzjyESCVi8I1Q=", "requires": { - "tslib": "1.8.0" - } - }, - "@angular/forms": { - "version": "4.4.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-4.4.6.tgz", - "integrity": "sha1-/mSs5CQ1wbgPSQNLfEHOjK8UpEo=", - "requires": { - "tslib": "1.8.0" + "tslib": "1.9.0" } }, "@angular/platform-browser": { @@ -41,7 +33,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-4.4.6.tgz", "integrity": "sha1-qYOcVH4bZU+h0kqJeAyLpquNzOA=", "requires": { - "tslib": "1.8.0" + "tslib": "1.9.0" } }, "@angular/platform-browser-dynamic": { @@ -49,7 +41,7 @@ "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-4.4.6.tgz", "integrity": "sha1-TT2aanvyzz3kBYphWuBZ7/ZB+jY=", "requires": { - "tslib": "1.8.0" + "tslib": "1.9.0" } }, "@angular/upgrade": { @@ -57,83 +49,85 @@ "resolved": "https://registry.npmjs.org/@angular/upgrade/-/upgrade-4.4.6.tgz", "integrity": "sha1-x4iiawkicycKJd22+k09Xp89SYk=", "requires": { - "tslib": "1.8.0" + "tslib": "1.9.0" } }, + "@openproject/commonmark-ckeditor-build": { + "version": "git+https://github.com/opf/commonmark-ckeditor-build.git#2c776a29eaa01fa14bfb9053c019c5a9b78927ae" + }, "@types/angular": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.6.5.tgz", - "integrity": "sha1-WvNGQtR17qTIkUtgcz/teqZefkc=", - "requires": { - "@types/jquery": "2.0.40" - } + "version": "1.6.42", + "resolved": "https://registry.npmjs.org/@types/angular/-/angular-1.6.42.tgz", + "integrity": "sha512-JKx/tYYWzVRGQs/FF9Jo55VsF9Vb4D2/CMS1M6fyWOI1dq0dLzt0obJfmxtbgBgjBVzcBJW0ikMJ8oz96Dx7Ow==" }, "@types/angular-mocks": { - "version": "1.5.9", - "resolved": "https://registry.npmjs.org/@types/angular-mocks/-/angular-mocks-1.5.9.tgz", - "integrity": "sha1-TZG7caXPsADQKwITO8mMIPVxAf0=", + "version": "1.5.11", + "resolved": "https://registry.npmjs.org/@types/angular-mocks/-/angular-mocks-1.5.11.tgz", + "integrity": "sha512-C8ipXVKQvw+w64kH97Npa3a7uZB7ZL9Kr4+sOe33oYIyxeg09M8bzAWCIYCmPRRV0px6ozFTZeSVjBXDikz2zw==", "requires": { - "@types/angular": "1.6.5" + "@types/angular": "1.6.42" } }, "@types/assertion-error": { - "version": "1.0.30", - "resolved": "https://registry.npmjs.org/@types/assertion-error/-/assertion-error-1.0.30.tgz", - "integrity": "sha1-89DV2i7Ie1FOMNs/+aAYh7VhnCk=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-32f/Uonzj4fU2WPRo3Jd8x7vilyZvjdUV6YZwMW2QNkTc/mRs0BLWIqUAjzwnYDnkMFREIwqsd1Qcl5cjE6A8A==", + "requires": { + "assertion-error": "1.1.0" + } }, "@types/chai": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-3.4.34.tgz", - "integrity": "sha1-1TNXkoI7sJzd1eOMPSEbcJGDhU0=" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-3.5.2.tgz", + "integrity": "sha1-wRzSgX06QBt7oPWkIPNcVhObHB4=" }, "@types/chai-as-promised": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-0.0.29.tgz", "integrity": "sha1-Q9UokqqZjhhaPePiR37bhXO+HXc=", "requires": { - "@types/chai": "3.4.34", + "@types/chai": "3.5.2", "@types/promises-a-plus": "0.0.27" } }, "@types/es6-shim": { - "version": "0.31.32", - "resolved": "https://registry.npmjs.org/@types/es6-shim/-/es6-shim-0.31.32.tgz", - "integrity": "sha1-gZbAnh5ArJd8cTvyWAkJifUB2P8=" + "version": "0.31.35", + "resolved": "https://registry.npmjs.org/@types/es6-shim/-/es6-shim-0.31.35.tgz", + "integrity": "sha512-jecKfIChNeUKKaQ5tWSzK69FDhW/hegDdJIkLXHJfLVDNjoJOdDtNbCnmK8V2IPTgVVEOi+FLhljbvDix8EDtA==" }, "@types/jquery": { - "version": "2.0.40", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.40.tgz", - "integrity": "sha1-rN1p4pt0zewV3DwHS8sGS8G4chM=" + "version": "2.0.48", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-2.0.48.tgz", + "integrity": "sha512-nNLzUrVjaRV/Ds1eHZLYTd7IZxs38cwwLSaqMJj8OTXY8xNUbxSK69bi9cMLvQ7dm/IBeQ1wHwQ0S1uYa0rd2w==" }, "@types/jqueryui": { - "version": "1.11.32", - "resolved": "https://registry.npmjs.org/@types/jqueryui/-/jqueryui-1.11.32.tgz", - "integrity": "sha1-WiG97dZRfCG673VIiZMbfSe1+z4=", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@types/jqueryui/-/jqueryui-1.12.1.tgz", + "integrity": "sha512-aLMCZSEsZJqnE6K1wcTsMojH/MZRaYkoiWbr/NauE96LP3+BzR8ki29wWYkVOunolb95a7hotCtTgzeoTPqb6A==", "requires": { - "@types/jquery": "2.0.40" + "@types/jquery": "2.0.48" } }, "@types/lodash": { - "version": "4.14.100", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.100.tgz", - "integrity": "sha512-RdmitCjynsHc+U09x9LEmMrxNz2lgmeK3jMrfZFO38WZ/wTqojrpe4nRCLzLMLnL+s+8apNofGmQ9KdMxPcfCA==" + "version": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.52.tgz", + "integrity": "sha512-i7U/y/J3of/RrZP+oUHLD1ksPk+e7FJ+sKZcJ/rkHYA4CKP4D6ofZ36f+3lXY4oZHWY6ZIFRXXZ349VIqwhIbQ==" }, "@types/mocha": { - "version": "2.2.39", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.39.tgz", - "integrity": "sha1-9o1j24tpw46VWLQHNSXPlsT3qCk=" + "version": "2.2.48", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", + "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==" }, "@types/mousetrap": { - "version": "1.5.33", - "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.5.33.tgz", - "integrity": "sha1-oIBFBedqa05ZfzVDDFf74qZ3lO8=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.0.tgz", + "integrity": "sha512-Jn2cF8X6RAMiSmJaATGjf2r3GzIfpZQpvnQhKprQ5sAbMaNXc7hc9sA2XHdMl3bEMEQhTV79JVW7n4Pgg7sjtg==" }, "@types/ng-dialog": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@types/ng-dialog/-/ng-dialog-0.6.0.tgz", - "integrity": "sha1-BjteL/+O3oQ+RHpgxcSUcp9L6zg=", + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@types/ng-dialog/-/ng-dialog-0.6.2.tgz", + "integrity": "sha512-HyuGb6SAWmd2uYGViXChqOFTWTQaUw3P5ZRtpVnMkecLUm9n3VZ7KlQ53hhKe+pBwgQ7PJFAzZiNXYUL+XZTJQ==", "requires": { - "@types/angular": "1.6.5" + "@types/angular": "1.6.42" } }, "@types/promises-a-plus": { @@ -147,51 +141,51 @@ "integrity": "sha1-NZZrq/BhkUCAqJ6iSbNHMRVzZag=" }, "@types/sinon": { - "version": "1.16.35", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-1.16.35.tgz", - "integrity": "sha1-7mh8xC0aeUSCVvHAEqM6CEDoXFw=" + "version": "1.16.36", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-1.16.36.tgz", + "integrity": "sha1-dLtu15KFl8Gz+xsAkAXpTcbq41c=" }, "@types/sinon-chai": { - "version": "2.7.27", - "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-2.7.27.tgz", - "integrity": "sha1-63cpBY3fJTppeeVZuytJEISWmqE=", + "version": "2.7.29", + "resolved": "https://registry.npmjs.org/@types/sinon-chai/-/sinon-chai-2.7.29.tgz", + "integrity": "sha512-EkI/ZvJT4hglWo7Ipf9SX+J+R9htNOMjW8xiOhce7+0csqvgoF5IXqY5Ae1GqRgNtWCuaywR5HjVa1snkTqpOw==", "requires": { - "@types/chai": "3.4.34", - "@types/sinon": "1.16.35" + "@types/chai": "3.5.2", + "@types/sinon": "1.16.36" } }, "@types/urijs": { - "version": "1.15.31", - "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.15.31.tgz", - "integrity": "sha1-aBmlUs7/ZwziiGkPDFiL+Wt5wSk=", + "version": "1.15.35", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.15.35.tgz", + "integrity": "sha512-x/IC0V3wLB+9vzvZMj3L53dohARRIhe8J7PBgnao9ixeqF6j8mlHAFoN894NXRym/091Np5QgHZ7ils011uJgA==", "requires": { - "@types/jquery": "2.0.40" + "@types/jquery": "2.0.48" } }, "@types/webpack-env": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.13.0.tgz", - "integrity": "sha1-MEQ4FkfhHulzxa8uklMjkw9pHYA=" + "version": "1.13.5", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.13.5.tgz", + "integrity": "sha512-YJf5OCQXQ7eciY5js9WgDniScllmeQUcY1acsdBoRVqVFbqarGksLv1Iaba1u4x3sW9DFsw7PhxWgo2FaIUhUA==" }, "@uirouter/angularjs": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@uirouter/angularjs/-/angularjs-1.0.13.tgz", - "integrity": "sha512-SXsJJRgOkTZrugV1KOR8RDnXHCLY+DYFYCZYsGZpVuotrsuIPNIXNjLvbiYDlRaj9vwIMksPUeLrCoM0I1v8hw==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@uirouter/angularjs/-/angularjs-1.0.14.tgz", + "integrity": "sha512-XqHQA96DiOUJthHk9d7gmzt/Fu72e/Ahn+1cuBCYhofaWecibj4AhfyvxwsdzfLo0QBDMMiYOi2GlPzXOyvo4w==", "requires": { - "@uirouter/core": "5.0.14" + "@uirouter/core": "5.0.16" }, "dependencies": { "@uirouter/core": { - "version": "5.0.14", - "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-5.0.14.tgz", - "integrity": "sha512-wfNpvwmaVj4FU1QFtQRrr4xKtd79iA/O7Qf+prLCEZFFeBoKteBPxNmzsiD5lQXHhTK23WVabQ11lHsSincsjg==" + "version": "5.0.16", + "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-5.0.16.tgz", + "integrity": "sha512-iCEkShFX0/NflH6rmpxTLXHQpe2t8ZkxcDa0g7sQD2/tDPUgiVXHVC0Jfw0qCnUaIeWHUBOATMe8fuZrLjydqA==" } } }, "@uirouter/core": { - "version": "5.0.14", - "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-5.0.14.tgz", - "integrity": "sha512-wfNpvwmaVj4FU1QFtQRrr4xKtd79iA/O7Qf+prLCEZFFeBoKteBPxNmzsiD5lQXHhTK23WVabQ11lHsSincsjg==" + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/@uirouter/core/-/core-5.0.17.tgz", + "integrity": "sha512-aJOSpaRbctGw24Mh74sonLwCyskl7KzFz7M0jRDqrd+eHZK6s/xxi4ZSNuGHRy6kF4x7195buQSJEo7u82t+rA==" }, "URIjs": { "version": "1.16.1", @@ -202,9 +196,8 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "dev": true, "requires": { - "mime-types": "2.1.14", + "mime-types": "2.1.17", "negotiator": "0.6.1" } }, @@ -234,27 +227,27 @@ "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" }, "ajv": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", - "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "4.6.0", "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "ajv-keywords": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", - "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz", + "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74=" }, "align-text": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "requires": { - "kind-of": "3.1.0", + "kind-of": "3.2.2", "longest": "1.0.1", "repeat-string": "1.6.1" } @@ -264,7 +257,7 @@ "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", "integrity": "sha1-x1iICGF1cgNKrmJICvJrHU0cs80=", "requires": { - "stable": "0.1.5" + "stable": "0.1.6" } }, "amdefine": { @@ -335,9 +328,9 @@ "version": "git://github.com/sparkalow/angular-truncate.git#fdf60fda265042d12e9414b5354b2cc52f1419de" }, "angular-ui-bootstrap": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/angular-ui-bootstrap/-/angular-ui-bootstrap-2.5.0.tgz", - "integrity": "sha1-L6zvuRU4ZlXcX0QVAlgDJRcjbQE=" + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/angular-ui-bootstrap/-/angular-ui-bootstrap-2.5.6.tgz", + "integrity": "sha512-yzcHpPMLQl0232nDzm5P4iAFTFQ9dMw0QgFLuKYbDj9M0xJ62z0oudYD/Lvh1pWfRsukiytP4Xj6BHOSrSXP8A==" }, "animation-frame-polyfill": { "version": "1.0.1", @@ -355,14 +348,19 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "anymatch": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.0.tgz", - "integrity": "sha1-o+Uvo5FoyCX/V7AkgSbOWo/5VQc=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11" + "micromatch": "2.3.11", + "normalize-path": "2.1.1" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, "argparse": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", @@ -376,13 +374,13 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "requires": { - "arr-flatten": "1.0.1" + "arr-flatten": "1.1.0" } }, "arr-flatten": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.0.1.tgz", - "integrity": "sha1-5f/lTUXhnzLyFukeuZyM6JK7YEs=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "array-flatten": { "version": "1.1.1", @@ -400,6 +398,19 @@ "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=" }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", @@ -440,23 +451,22 @@ } }, "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, "assertion-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.2.tgz", - "integrity": "sha1-E8pRXYYgbaC6xm6DTdOX2HWBCUw=", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" }, "async": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.5.0.tgz", - "integrity": "sha512-e+lJAJeNWuPCNyxZKOBdaJGyLGHugXVQtrAwtuAe2vhxTYxFTKE73p8JuTmdH0qdQZtDvI4dhJwjZc5zsfIsYw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", "requires": { - "lodash": "4.17.4" + "lodash": "4.17.5" } }, "async-each": { @@ -476,15 +486,15 @@ "integrity": "sha1-DMDpGkgOc4+SPrwQNnZHF3mzSkk=" }, "autoprefixer": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.0.tgz", - "integrity": "sha1-iJks8E3xQee4KTVQ8u5xbFZdHK4=", + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", "requires": { - "browserslist": "1.6.0", - "caniuse-db": "1.0.30000617", + "browserslist": "1.7.7", + "caniuse-db": "1.0.30000808", "normalize-range": "0.1.2", "num2fraction": "1.2.2", - "postcss": "5.2.11", + "postcss": "5.2.18", "postcss-value-parser": "3.3.0" } }, @@ -495,23 +505,16 @@ "requires": { "colors": "1.1.2", "enhanced-resolve": "2.3.0", - "loader-utils": "0.2.16", - "lodash": "4.17.4", + "loader-utils": "0.2.17", + "lodash": "4.17.5", "object-assign": "4.1.1", - "source-map-support": "0.4.11" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - } + "source-map-support": "0.4.18" } }, "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", "dev": true }, "aws4": { @@ -536,9 +539,9 @@ "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" }, "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "base64-arraybuffer": { "version": "0.1.5", @@ -580,14 +583,14 @@ } }, "big.js": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.1.3.tgz", - "integrity": "sha1-TK2iGTZS6zyp7I5VyQFWacmAaXg=" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" }, "binary-extensions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.8.0.tgz", - "integrity": "sha1-SOyNFt9Dd+rl+liEaCSAr02Vx3Q=" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" }, "blob": { "version": "0.0.4", @@ -595,9 +598,9 @@ "integrity": "sha1-vPEwUspURj8w+fx+lbmkdjCpSSE=" }, "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" }, "bn.js": { "version": "4.11.8", @@ -605,29 +608,29 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" }, "body-parser": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.16.0.tgz", - "integrity": "sha1-kkpeRyxiKfudabhaINXyUy3seIs=", + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { - "bytes": "2.4.0", - "content-type": "1.0.2", - "debug": "2.6.0", - "depd": "1.1.0", - "http-errors": "1.5.1", - "iconv-lite": "0.4.15", + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", "on-finished": "2.3.0", - "qs": "6.2.1", - "raw-body": "2.2.0", - "type-is": "1.6.14" + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.15" } }, "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "4.2.0" } }, "bourbon": { @@ -636,16 +639,16 @@ "integrity": "sha1-SKgF3/R1+/YeACpk4eTbaNL4L7o=" }, "bowser": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.6.1.tgz", - "integrity": "sha1-kVfpSY9FbpNxc6KRjzshYeU1PrM=" + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-1.9.2.tgz", + "integrity": "sha512-fuiANC1Bqbqa/S4gmvfCt7bGBmNELMsGZj4Wg3PrP6esP66Ttoj1JSlzFlXtHyduMv07kDNmDsX6VsMWT/MLGg==" }, "brace-expansion": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", - "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "0.4.2", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -680,7 +683,7 @@ "create-hash": "1.1.3", "evp_bytestokey": "1.0.3", "inherits": "2.0.3", - "safe-buffer": "5.0.1" + "safe-buffer": "5.1.1" } }, "browserify-cipher": { @@ -735,12 +738,12 @@ } }, "browserslist": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.6.0.tgz", - "integrity": "sha1-hft8mTVA0/2jHCgrr39a7mmKye4=", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", "requires": { - "caniuse-db": "1.0.30000617", - "electron-to-chromium": "1.2.1" + "caniuse-db": "1.0.30000808", + "electron-to-chromium": "1.3.33" } }, "buffer": { @@ -753,11 +756,6 @@ "isarray": "1.0.0" } }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -774,17 +772,64 @@ "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=" }, "bundle-loader": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/bundle-loader/-/bundle-loader-0.5.4.tgz", - "integrity": "sha1-B8OO6QbgoOcA/UdqIYNHAepwZvM=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/bundle-loader/-/bundle-loader-0.5.6.tgz", + "integrity": "sha512-SUgX+u/LJzlJiuoIghuubZ66eflehnjmqSfh/ib9DTe08sxRJ5F/MhHSjp7GfSJivSp8NWgez4PVNAUuMg7vSg==", "requires": { - "loader-utils": "0.2.16" + "loader-utils": "1.1.0" + }, + "dependencies": { + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + } } }, "bytes": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", - "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "cacache": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.2.tgz", + "integrity": "sha512-dljb7dk1jqO5ogE+dRpoR9tpHYv5xz9vPSNunh1+0wRuNdYxmzp9WmsyokgW/DUF1FDRVA/TMsmxt027R8djbQ==", + "requires": { + "bluebird": "3.5.1", + "chownr": "1.0.1", + "glob": "7.1.2", + "graceful-fs": "4.1.11", + "lru-cache": "4.1.1", + "mississippi": "1.3.1", + "mkdirp": "0.5.1", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.6.2", + "ssri": "5.2.1", + "unique-filename": "1.1.0", + "y18n": "3.2.1" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } + } }, "callsite": { "version": "1.0.0", @@ -797,14 +842,14 @@ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" }, "caniuse-db": { - "version": "1.0.30000617", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000617.tgz", - "integrity": "sha1-m3/YH1ijVSYxXIPmDLXwdvC+s5I=" + "version": "1.0.30000808", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000808.tgz", + "integrity": "sha1-MN/YMAnVcE8C3/s3clBo7RKjZrs=" }, "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, "center-align": { @@ -822,7 +867,7 @@ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=", "dev": true, "requires": { - "assertion-error": "1.0.2", + "assertion-error": "1.1.0", "deep-eql": "0.1.3", "type-detect": "1.0.0" } @@ -859,11 +904,11 @@ "dev": true }, "chokidar": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", - "integrity": "sha1-L0RHq16W5Q+z14n9kNTHLg5McMI=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "requires": { - "anymatch": "1.3.0", + "anymatch": "1.3.2", "async-each": "1.0.1", "fsevents": "1.1.3", "glob-parent": "2.0.0", @@ -872,23 +917,43 @@ "is-glob": "2.0.1", "path-is-absolute": "1.0.1", "readdirp": "2.1.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } } }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" + }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { "inherits": "2.0.3", - "safe-buffer": "5.0.1" + "safe-buffer": "5.1.1" } }, "clean-webpack-plugin": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.15.tgz", - "integrity": "sha1-+swE4MjbqZv0Ua6GWtA2H1GvHfE=", + "version": "0.1.18", + "resolved": "https://registry.npmjs.org/clean-webpack-plugin/-/clean-webpack-plugin-0.1.18.tgz", + "integrity": "sha512-Kf1BxQnNy2Zq5TBIgWBTEHrhycOM1QjjBYOoTV5P7WioAPr/sh6fgPwn6xYvTIp3EP+yUqoOL4YFpLQVobeIUg==", "requires": { - "rimraf": "2.5.4" + "rimraf": "2.6.2" } }, "cliui": { @@ -941,14 +1006,7 @@ "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", "requires": { - "lodash": "4.17.4" - }, - "dependencies": { - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" - } + "lodash": "4.17.5" } }, "combined-stream": { @@ -966,6 +1024,11 @@ "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=", "dev": true }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, "component-bind": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", @@ -982,56 +1045,38 @@ "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" }, "compressible": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.10.tgz", - "integrity": "sha1-/tocf3YXkScyspv4zyYlKiC57s0=", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz", + "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=", "dev": true, "requires": { - "mime-db": "1.28.0" - }, - "dependencies": { - "mime-db": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.28.0.tgz", - "integrity": "sha1-/t00m+BtKGW3/FfYN8beTxfXrDw=", - "dev": true - } + "mime-db": "1.30.0" } }, "compression": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.6.2.tgz", - "integrity": "sha1-zOsSHsydCcUtetDDNQ6pPd1AK8M=", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz", + "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=", "dev": true, "requires": { - "accepts": "1.3.3", - "bytes": "2.3.0", - "compressible": "2.0.10", - "debug": "2.2.0", + "accepts": "1.3.4", + "bytes": "3.0.0", + "compressible": "2.0.12", + "debug": "2.6.9", "on-headers": "1.0.1", - "vary": "1.1.1" + "safe-buffer": "5.1.1", + "vary": "1.1.2" }, "dependencies": { - "bytes": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.3.0.tgz", - "integrity": "sha1-1baAoWW2IBc5rLYRVCqrwtjOsHA=", - "dev": true - }, - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", "dev": true, "requires": { - "ms": "0.7.1" + "mime-types": "2.1.17", + "negotiator": "0.6.1" } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=", - "dev": true } } }, @@ -1041,62 +1086,30 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz", - "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", - "dev": true, + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.0.6", + "readable-stream": "2.3.4", "typedarray": "0.0.6" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" - } - } } }, "connect": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.0.tgz", - "integrity": "sha1-s1dSWgtMH1BZnNmD4dnv7qlncZg=", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.5.tgz", + "integrity": "sha1-+43ee6B2OHfQ7J352sC0tA5yx9o=", "requires": { - "debug": "2.2.0", - "finalhandler": "0.5.0", - "parseurl": "1.3.1", - "utils-merge": "1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" - } + "debug": "2.6.9", + "finalhandler": "1.0.6", + "parseurl": "1.3.2", + "utils-merge": "1.0.1" } }, "connect-history-api-fallback": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", - "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", "dev": true }, "console-browserify": { @@ -1119,9 +1132,9 @@ "dev": true }, "content-type": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", - "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, "contra": { "version": "1.9.4", @@ -1148,10 +1161,38 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } + }, + "copy-webpack-plugin": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.4.1.tgz", + "integrity": "sha512-ojaz8MpS3zoLJT/JbYMusYM+dCEArhW24hGAUPYPydTCS+87NFh2TWr85sywG3So4Q4E68QoerqQ+Ns1g0fhDg==", + "requires": { + "cacache": "10.0.2", + "find-cache-dir": "1.0.0", + "globby": "7.1.1", + "is-glob": "4.0.0", + "loader-utils": "0.2.17", + "minimatch": "3.0.4", + "p-limit": "1.2.0", + "serialize-javascript": "1.4.0" + } + }, "core-js": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.1.tgz", - "integrity": "sha1-rmh03GaTd4m4B1T/VCjfZoGcpQs=" + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", + "integrity": "sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4=" }, "core-util-is": { "version": "1.0.2", @@ -1159,11 +1200,12 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cosmiconfig": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.1.1.tgz", - "integrity": "sha1-gX8sIDk0eh6b99CQwJI+U/dJyoI=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", "requires": { - "js-yaml": "3.7.0", + "is-directory": "0.3.1", + "js-yaml": "3.10.0", "minimist": "1.2.0", "object-assign": "4.1.1", "os-homedir": "1.0.2", @@ -1207,7 +1249,7 @@ "create-hash": "1.1.3", "inherits": "2.0.3", "ripemd160": "2.0.1", - "safe-buffer": "5.0.1", + "safe-buffer": "5.1.1", "sha.js": "2.4.10" } }, @@ -1226,18 +1268,7 @@ "requires": { "lru-cache": "4.1.1", "shebang-command": "1.2.0", - "which": "1.2.14" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - } + "which": "1.3.0" } }, "crossvent": { @@ -1249,12 +1280,23 @@ } }, "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + } } }, "crypto-browserify": { @@ -1281,7 +1323,7 @@ "integrity": "sha1-LhqgDOfjDvLGp6SzAKCAp8l54Nw=", "requires": { "csso": "1.3.12", - "loader-utils": "0.2.16", + "loader-utils": "0.2.17", "source-map": "0.1.43" }, "dependencies": { @@ -1305,12 +1347,17 @@ "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=" }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=" + }, "d": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/d/-/d-0.1.1.tgz", "integrity": "sha1-2hhMU10Y2O57oqoim5FACfrhEwk=", "requires": { - "es5-ext": "0.10.12" + "es5-ext": "0.10.38" } }, "dashdash": { @@ -1320,14 +1367,6 @@ "dev": true, "requires": { "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "date-now": { @@ -1336,11 +1375,11 @@ "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" }, "debug": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", - "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "requires": { - "ms": "0.7.2" + "ms": "2.0.0" } }, "decamelize": { @@ -1372,9 +1411,9 @@ "dev": true }, "depd": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", - "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, "des.js": { "version": "1.0.0", @@ -1412,16 +1451,25 @@ "randombytes": "2.0.6" } }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "1.0.1", + "path-type": "3.0.0" + } + }, "dom-autoscroller": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/dom-autoscroller/-/dom-autoscroller-2.2.8.tgz", - "integrity": "sha1-NJuat/AnL0TOmD7I3cYN/lQYdBI=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/dom-autoscroller/-/dom-autoscroller-2.3.4.tgz", + "integrity": "sha512-HcAdt/2Dq9x4CG6LWXc2x9Iq0MJPAu8fuzHncclq7byufqYEYVtx9sZ/dyzR+gdj4qwEC9p27Lw1G2HRRYX6jQ==", "requires": { "animation-frame-polyfill": "1.0.1", "create-point-cb": "1.2.0", "dom-mousemove-dispatcher": "1.0.1", "dom-plane": "1.0.2", - "dom-set": "1.1.0", + "dom-set": "1.1.1", "type-func": "1.0.3" } }, @@ -1445,14 +1493,14 @@ "requires": { "custom-event": "1.0.1", "ent": "2.2.0", - "extend": "3.0.0", + "extend": "3.0.1", "void-elements": "2.0.1" } }, "dom-set": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/dom-set/-/dom-set-1.1.0.tgz", - "integrity": "sha1-qMX8b7JxVtLaAzIkYk3vXuwC2CA=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/dom-set/-/dom-set-1.1.1.tgz", + "integrity": "sha1-XCxhDuSDm1IO1fmN28vjFMD6lUo=", "requires": { "array-from": "2.1.1", "is-array": "1.0.1", @@ -1488,6 +1536,17 @@ } } }, + "duplexify": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.3.tgz", + "integrity": "sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA==", + "requires": { + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "stream-shift": "1.0.0" + } + }, "ecc-jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", @@ -1504,9 +1563,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.2.1.tgz", - "integrity": "sha1-Y6x1eaHFvtspbIYHYh8u/JpUuWg=" + "version": "1.3.33", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz", + "integrity": "sha1-vwBwPWKnxlI4E2V4w1LWxcBCpUU=" }, "elliptic": { "version": "6.4.0", @@ -1528,33 +1587,31 @@ "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" }, "encodeurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", - "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } }, "engine.io": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.2.tgz", - "integrity": "sha1-a1m+cws0jAElsKRYneHDVavPen4=", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.3.tgz", + "integrity": "sha1-jef5eJXSDTm4X4ju7nd7K9QrE9Q=", "requires": { "accepts": "1.3.3", "base64id": "1.0.0", "cookie": "0.3.1", "debug": "2.3.3", "engine.io-parser": "1.3.2", - "ws": "1.1.1" + "ws": "1.1.2" }, "dependencies": { - "accepts": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", - "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", - "requires": { - "mime-types": "2.1.14", - "negotiator": "0.6.1" - } - }, "debug": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/debug/-/debug-2.3.3.tgz", @@ -1563,17 +1620,17 @@ "ms": "0.7.2" } }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" } } }, "engine.io-client": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.2.tgz", - "integrity": "sha1-w4dnVH8qfRhPV1L28K1QEAZwN2Y=", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.3.tgz", + "integrity": "sha1-F5jtk0USRkU9TG9jXXogH+lA1as=", "requires": { "component-emitter": "1.2.1", "component-inherit": "0.0.3", @@ -1584,7 +1641,7 @@ "parsejson": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "1.1.1", + "ws": "1.1.2", "xmlhttprequest-ssl": "1.5.3", "yeast": "0.1.2" }, @@ -1601,6 +1658,11 @@ "requires": { "ms": "0.7.2" } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" } } }, @@ -1625,7 +1687,7 @@ "graceful-fs": "4.1.11", "memory-fs": "0.3.0", "object-assign": "4.1.1", - "tapable": "0.2.6" + "tapable": "0.2.8" } }, "ent": { @@ -1634,38 +1696,48 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=" }, "errno": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", - "integrity": "sha1-uJbiOp5ei6M4cfyZar02NfyaHH0=", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", + "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", "requires": { - "prr": "0.0.0" + "prr": "1.0.1" } }, "error-ex": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz", - "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "requires": { "is-arrayish": "0.2.1" } }, "es5-ext": { - "version": "0.10.12", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.12.tgz", - "integrity": "sha1-qoRkHU23a2Krul5F/YBey6sUAEc=", + "version": "0.10.38", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", + "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", "requires": { - "es6-iterator": "2.0.0", - "es6-symbol": "3.1.0" + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" } }, "es6-iterator": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.0.tgz", - "integrity": "sha1-vZaFZ9YWNeM8C4BydhPJy0sJa6w=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "requires": { - "d": "0.1.1", - "es5-ext": "0.10.12", - "es6-symbol": "3.1.0" + "d": "1.0.0", + "es5-ext": "0.10.38", + "es6-symbol": "3.1.1" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + } } }, "es6-map": { @@ -1688,50 +1760,13 @@ "requires": { "es5-ext": "0.10.38" } - }, - "es5-ext": { - "version": "0.10.38", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", - "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-symbol": "3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } } } }, "es6-promise": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.0.tgz", - "integrity": "sha1-3aA8qPn4m8WX5omEKSnee6jOvfA=" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==" }, "es6-set": { "version": "0.1.5", @@ -1752,43 +1787,6 @@ "requires": { "es5-ext": "0.10.38" } - }, - "es5-ext": { - "version": "0.10.38", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", - "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-symbol": "3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } } } }, @@ -1798,12 +1796,22 @@ "integrity": "sha1-m/tzY/7//4emzbbNk+QF7DxLbyY=" }, "es6-symbol": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.0.tgz", - "integrity": "sha1-lEgcZV56fK2C66gy2X1UM0ltf/o=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", "requires": { - "d": "0.1.1", - "es5-ext": "0.10.12" + "d": "1.0.0", + "es5-ext": "0.10.38" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + } } }, "es6-weak-map": { @@ -1812,7 +1820,7 @@ "integrity": "sha1-cGzvnpmqI2undmwjnIueKG6n0ig=", "requires": { "d": "0.1.1", - "es5-ext": "0.10.12", + "es5-ext": "0.10.38", "es6-iterator": "0.1.3", "es6-symbol": "2.0.1" }, @@ -1823,7 +1831,7 @@ "integrity": "sha1-1vWLjE/EE8JJtLqhl2j45NfIlE4=", "requires": { "d": "0.1.1", - "es5-ext": "0.10.12", + "es5-ext": "0.10.38", "es6-symbol": "2.0.1" } }, @@ -1833,7 +1841,7 @@ "integrity": "sha1-dhtcZ8/U8dGK+yNPaR1nhoLLO/M=", "requires": { "d": "0.1.1", - "es5-ext": "0.10.12" + "es5-ext": "0.10.38" } } } @@ -1867,34 +1875,6 @@ "es5-ext": "0.10.38" } }, - "es5-ext": { - "version": "0.10.38", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.38.tgz", - "integrity": "sha512-jCMyePo7AXbUESwbl8Qi01VSH2piY9s/a3rSU/5w/MlTIx8HPL1xn2InGN8ejt/xulcJgnTO7vqNtOAxzYd2Kg==", - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38", - "es6-symbol": "3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.38" - } - }, "es6-weak-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", @@ -1909,9 +1889,9 @@ } }, "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" }, "esrecurse": { "version": "4.2.0", @@ -1933,18 +1913,28 @@ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "etag": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", - "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true }, "event-emitter": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.4.tgz", - "integrity": "sha1-jWPd+0z+H647MsomXExyAiIIC7U=", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", "requires": { - "d": "0.1.1", - "es5-ext": "0.10.12" + "d": "1.0.0", + "es5-ext": "0.10.38" + }, + "dependencies": { + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.38" + } + } } }, "eventemitter3": { @@ -1973,13 +1963,6 @@ "requires": { "md5.js": "1.3.4", "safe-buffer": "5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - } } }, "exec": { @@ -2058,20 +2041,22 @@ } }, "exports-loader": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.3.tgz", - "integrity": "sha1-V9x4kX9wm5byR/qR5ptVTIVQE8g=", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/exports-loader/-/exports-loader-0.6.4.tgz", + "integrity": "sha1-1w/GEhl1s1/BKDDPUnVL4nQPyIY=", "requires": { - "loader-utils": "0.2.16", - "source-map": "0.1.43" + "loader-utils": "1.1.0", + "source-map": "0.5.7" }, "dependencies": { - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "amdefine": "1.0.1" + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" } } } @@ -2082,114 +2067,86 @@ "integrity": "sha1-RXn1MGXUqaEfdrR58nRxVUV6WZs=" }, "express": { - "version": "4.15.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", - "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", + "version": "4.16.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.2.tgz", + "integrity": "sha1-41xt/i1kt9ygpc1PIXgb4ymeB2w=", "dev": true, "requires": { - "accepts": "1.3.3", + "accepts": "1.3.4", "array-flatten": "1.1.1", + "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.2", + "content-type": "1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", - "debug": "2.6.7", - "depd": "1.1.0", - "encodeurl": "1.0.1", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", "escape-html": "1.0.3", - "etag": "1.8.0", - "finalhandler": "1.0.3", - "fresh": "0.5.0", + "etag": "1.8.1", + "finalhandler": "1.1.0", + "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "1.1.2", "on-finished": "2.3.0", - "parseurl": "1.3.1", + "parseurl": "1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "1.1.4", - "qs": "6.4.0", + "proxy-addr": "2.0.2", + "qs": "6.5.1", "range-parser": "1.2.0", - "send": "0.15.3", - "serve-static": "1.12.3", - "setprototypeof": "1.0.3", + "safe-buffer": "5.1.1", + "send": "0.16.1", + "serve-static": "1.13.1", + "setprototypeof": "1.1.0", "statuses": "1.3.1", "type-is": "1.6.15", - "utils-merge": "1.0.0", - "vary": "1.1.1" + "utils-merge": "1.0.1", + "vary": "1.1.2" }, "dependencies": { - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", "dev": true, "requires": { - "ms": "2.0.0" + "mime-types": "2.1.17", + "negotiator": "0.6.1" } }, "finalhandler": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", - "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", "dev": true, "requires": { - "debug": "2.6.7", - "encodeurl": "1.0.1", + "debug": "2.6.9", + "encodeurl": "1.0.2", "escape-html": "1.0.3", "on-finished": "2.3.0", - "parseurl": "1.3.1", + "parseurl": "1.3.2", "statuses": "1.3.1", "unpipe": "1.0.0" } }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, - "type-is": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", - "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.15" - } + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", + "dev": true } } }, "extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extglob": { "version": "0.3.2", @@ -2197,6 +2154,13 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "requires": { "is-extglob": "1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + } } }, "extract-text-webpack-plugin": { @@ -2204,10 +2168,10 @@ "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.0.tgz", "integrity": "sha1-kMqnkHvESfM1AF46x1MrQbAN5hI=", "requires": { - "async": "2.5.0", + "async": "2.6.0", "loader-utils": "1.1.0", "schema-utils": "0.3.0", - "webpack-sources": "1.0.1" + "webpack-sources": "1.1.0" }, "dependencies": { "loader-utils": { @@ -2215,7 +2179,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "3.1.3", + "big.js": "3.2.0", "emojis-list": "2.1.0", "json5": "0.5.1" } @@ -2223,29 +2187,17 @@ } }, "extract-zip": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz", - "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=", + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", "dev": true, "requires": { - "concat-stream": "1.5.0", - "debug": "0.7.4", + "concat-stream": "1.6.0", + "debug": "2.6.9", "mkdirp": "0.5.0", "yauzl": "2.4.1" }, "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=", - "dev": true - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, "mkdirp": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", @@ -2258,9 +2210,9 @@ } }, "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", "dev": true }, "fast-deep-equal": { @@ -2268,6 +2220,11 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, "fastparse": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", @@ -2279,7 +2236,7 @@ "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { - "websocket-driver": "0.6.5" + "websocket-driver": "0.7.0" } }, "fd-slicer": { @@ -2296,13 +2253,13 @@ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.8.5.tgz", "integrity": "sha1-knXQMf54DyfUf19K8CvUNxPMFRs=", "requires": { - "loader-utils": "0.2.16" + "loader-utils": "0.2.17" } }, "filename-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", - "integrity": "sha1-mW4+gEebmLmJfxWopYs9CE6SZ3U=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" }, "fill-range": { "version": "2.2.3", @@ -2311,38 +2268,42 @@ "requires": { "is-number": "2.1.0", "isobject": "2.1.0", - "randomatic": "1.1.6", + "randomatic": "1.1.7", "repeat-element": "1.1.2", "repeat-string": "1.6.1" } }, "finalhandler": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.0.tgz", - "integrity": "sha1-6VCKvs6bbbqHGmlCodeRG5GRGsc=", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.6.tgz", + "integrity": "sha1-AHrqM9Gk0+QgF/YkhIrVjSEvgU8=", "requires": { - "debug": "2.2.0", + "debug": "2.6.9", + "encodeurl": "1.0.2", "escape-html": "1.0.3", "on-finished": "2.3.0", + "parseurl": "1.3.2", "statuses": "1.3.1", "unpipe": "1.0.0" }, "dependencies": { - "debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", - "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", - "requires": { - "ms": "0.7.1" - } - }, - "ms": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", - "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" } } }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "requires": { + "commondir": "1.0.1", + "make-dir": "1.1.0", + "pkg-dir": "2.0.0" + } + }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -2351,17 +2312,26 @@ "locate-path": "2.0.0" } }, + "flush-write-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz", + "integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, "for-in": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", - "integrity": "sha1-yfluib+tGKVFr17D7TUqHZ5bTcg=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "for-own": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", - "integrity": "sha1-AUm0GjkIjHUV9R6+HBOG1F+TUHI=", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "requires": { - "for-in": "0.1.6" + "for-in": "1.0.2" } }, "forever-agent": { @@ -2371,951 +2341,29 @@ "dev": true }, "fork-ts-checker-webpack-plugin": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.2.8.tgz", - "integrity": "sha1-ZtyEHCn/g0XgowdV3etMzDIT4hA=", + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-0.2.10.tgz", + "integrity": "sha1-0KQIDnfp9dbjtDzc59JmWPnSUMY=", "requires": { "babel-code-frame": "6.26.0", "chalk": "1.1.3", "chokidar": "1.7.0", "lodash.endswith": "4.2.1", - "lodash.isfunction": "3.0.8", + "lodash.isfunction": "3.0.9", "lodash.isstring": "4.0.1", - "lodash.startswith": "4.2.1" - }, - "dependencies": { - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "1.3.0", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - }, - "dependencies": { - "fsevents": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.3.tgz", - "integrity": "sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q==", - "optional": true, - "requires": { - "nan": "2.8.0", - "node-pre-gyp": "0.6.39" - }, - "dependencies": { - "abbrev": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", - "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", - "optional": true - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "optional": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "aproba": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz", - "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=", - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz", - "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.2.9" - } - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "optional": true - }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "optional": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "optional": true - }, - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "2.0.3" - } - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "requires": { - "hoek": "2.16.3" - } - }, - "brace-expansion": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", - "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=", - "requires": { - "balanced-match": "0.4.2", - "concat-map": "0.0.1" - } - }, - "buffer-shims": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "combined-stream": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", - "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "requires": { - "boom": "2.10.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true - } - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", - "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", - "optional": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "optional": true - }, - "detect-libc": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz", - "integrity": "sha1-ca1dIEvxempsqPRQxhRUBm70YeE=", - "optional": true - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "optional": true - }, - "extsprintf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "optional": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "optional": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.15" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.1" - } - }, - "fstream-ignore": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz", - "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=", - "optional": true, - "requires": { - "fstream": "1.0.11", - "inherits": "2.0.3", - "minimatch": "3.0.4" - } - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, - "requires": { - "aproba": "1.1.1", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "optional": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true - } - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "optional": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "optional": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "optional": true - }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=" - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "optional": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", - "sshpk": "1.13.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", - "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "optional": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "optional": true - }, - "jodid25519": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "optional": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "optional": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "optional": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "optional": true - }, - "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true - } - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=" - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "requires": { - "mime-db": "1.27.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "optional": true - }, - "node-pre-gyp": { - "version": "0.6.39", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz", - "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==", - "optional": true, - "requires": { - "detect-libc": "1.0.2", - "hawk": "3.1.3", - "mkdirp": "0.5.1", - "nopt": "4.0.1", - "npmlog": "4.1.0", - "rc": "1.2.1", - "request": "2.81.0", - "rimraf": "2.6.1", - "semver": "5.3.0", - "tar": "2.2.1", - "tar-pack": "3.4.0" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "optional": true, - "requires": { - "abbrev": "1.1.0", - "osenv": "0.1.4" - } - }, - "npmlog": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz", - "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==", - "optional": true, - "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "optional": true - }, - "osenv": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", - "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "optional": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "optional": true - }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "optional": true - }, - "rc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", - "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", - "optional": true, - "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.4", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "optional": true - } - } - }, - "readable-stream": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz", - "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=", - "requires": { - "buffer-shims": "1.0.0", - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "1.0.1", - "util-deprecate": "1.0.2" - } - }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "optional": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.15", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.0.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.6.0", - "uuid": "3.0.1" - } - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "requires": { - "glob": "7.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "optional": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "requires": { - "hoek": "2.16.3" - } - }, - "sshpk": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz", - "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=", - "optional": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jodid25519": "1.0.2", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "optional": true - } - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz", - "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=", - "requires": { - "safe-buffer": "5.0.1" - } - }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "optional": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "optional": true - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-pack": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz", - "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=", - "optional": true, - "requires": { - "debug": "2.6.8", - "fstream": "1.0.11", - "fstream-ignore": "1.0.5", - "once": "1.4.0", - "readable-stream": "2.2.9", - "rimraf": "2.6.1", - "tar": "2.2.1", - "uid-number": "0.0.6" - } - }, - "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", - "optional": true, - "requires": { - "punycode": "1.4.1" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "optional": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "optional": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "uuid": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz", - "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=", - "optional": true - }, - "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", - "optional": true, - "requires": { - "extsprintf": "1.0.2" - } - }, - "wide-align": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - } - } - } - } + "lodash.startswith": "4.2.1", + "minimatch": "3.0.4" } }, "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", "dev": true, "requires": { "asynckit": "0.4.0", "combined-stream": "1.0.5", - "mime-types": "2.1.14" + "mime-types": "2.1.17" } }, "formatio": { @@ -3328,9 +2376,9 @@ } }, "forwarded": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", - "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", "dev": true }, "foundation-apps": { @@ -3339,11 +2387,20 @@ "integrity": "sha1-urkXW+qLXSN8qH/j7MIUqtM9z5w=" }, "fresh": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", - "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, "fs-extra": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-1.0.0.tgz", @@ -3355,6 +2412,17 @@ "klaw": "1.3.1" } }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "4.1.11", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.4" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4268,21 +3336,6 @@ "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-3.2.0.tgz", "integrity": "sha1-8ESOgGmFW/Kj5oPNwdMg5+KgfvQ=" }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=", - "dev": true - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "1.0.2" - } - }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", @@ -4300,14 +3353,6 @@ "dev": true, "requires": { "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } } }, "glob": { @@ -4319,6 +3364,16 @@ "inherits": "2.0.3", "minimatch": "2.0.10", "once": "1.4.0" + }, + "dependencies": { + "minimatch": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", + "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "requires": { + "brace-expansion": "1.1.11" + } + } } }, "glob-base": { @@ -4328,6 +3383,21 @@ "requires": { "glob-parent": "2.0.0", "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } } }, "glob-parent": { @@ -4336,6 +3406,49 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "requires": { "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "glob": "7.1.2", + "ignore": "3.3.7", + "pify": "3.0.0", + "slash": "1.0.0" + }, + "dependencies": { + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + } } }, "graceful-fs": { @@ -4356,9 +3469,9 @@ "dev": true }, "happypack": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/happypack/-/happypack-4.0.0.tgz", - "integrity": "sha1-3hdw1HLasz4/MXgqPttOd8xlhjE=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/happypack/-/happypack-4.0.1.tgz", + "integrity": "sha1-1xplINE8Hd9sxcoEDP4icRy6Ugk=", "requires": { "async": "1.5.0", "json-stringify-safe": "5.0.1", @@ -4376,34 +3489,27 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "3.1.3", + "big.js": "3.2.0", "emojis-list": "2.1.0", "json5": "0.5.1" } } } }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", "dev": true, "requires": { - "chalk": "1.1.3", - "commander": "2.10.0", - "is-my-json-valid": "2.16.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "commander": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.10.0.tgz", - "integrity": "sha1-4fXTJF3iRtGlygRwL6GtG9fkBf4=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - } + "ajv": "5.5.2", + "har-schema": "2.0.0" } }, "has-ansi": { @@ -4467,17 +3573,23 @@ } }, "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" } }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -4489,9 +3601,9 @@ } }, "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", "dev": true }, "hosted-git-info": { @@ -4506,7 +3618,7 @@ "requires": { "fastparse": "1.1.1", "html-minifier": "0.5.6", - "loader-utils": "0.2.16", + "loader-utils": "0.2.17", "source-map": "0.1.43" }, "dependencies": { @@ -4526,15 +3638,29 @@ "integrity": "sha1-DxW0N8J7XOmqhKRMooUIgOkleZY=" }, "http-errors": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", - "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", "requires": { + "depd": "1.1.1", "inherits": "2.0.3", - "setprototypeof": "1.0.2", - "statuses": "1.3.1" + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + } } }, + "http-parser-js": { + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", + "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", + "dev": true + }, "http-proxy": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.16.2.tgz", @@ -4552,16 +3678,10 @@ "requires": { "http-proxy": "1.16.2", "is-glob": "3.1.0", - "lodash": "4.17.4", + "lodash": "4.17.5", "micromatch": "2.3.11" }, "dependencies": { - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, "is-glob": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", @@ -4574,13 +3694,13 @@ } }, "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.0", + "assert-plus": "1.0.0", + "jsprim": "1.4.1", "sshpk": "1.13.1" } }, @@ -4590,15 +3710,30 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" }, "ieee754": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.8.tgz", "integrity": "sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=" }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -4629,9 +3764,9 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "ipaddr.js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.3.0.tgz", - "integrity": "sha1-HgOlL9rYOou7KyXL9JmLTP/NPew=", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.5.2.tgz", + "integrity": "sha1-1LUFvemUaYfM8PxY2QEP+WB+P6A=", "dev": true }, "is-array": { @@ -4649,13 +3784,13 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.8.0" + "binary-extensions": "1.11.0" } }, "is-buffer": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz", - "integrity": "sha1-z8hszV3FpS+oBIkRHGkgxFfi2Ys=" + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-builtin-module": { "version": "1.0.0", @@ -4665,10 +3800,15 @@ "builtin-modules": "1.1.1" } }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, "is-dotfile": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.2.tgz", - "integrity": "sha1-LBMjg/ORmfjtwmjKAbmwB9IFzE0=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" }, "is-equal-shallow": { "version": "0.1.3", @@ -4684,9 +3824,9 @@ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -4697,23 +3837,11 @@ } }, "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", "requires": { - "is-extglob": "1.0.0" - } - }, - "is-my-json-valid": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz", - "integrity": "sha1-8Hndm/2uZe4gOKrorLyGqxCeNpM=", - "dev": true, - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "is-extglob": "2.1.1" } }, "is-number": { @@ -4721,7 +3849,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "requires": { - "kind-of": "3.1.0" + "kind-of": "3.2.2" } }, "is-posix-bracket": { @@ -4740,12 +3868,6 @@ "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=", "dev": true }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4813,23 +3935,17 @@ } }, "jquery": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.1.1.tgz", - "integrity": "sha1-NHwcIcfgBBFeCk2jLOzgQfrTyKM=" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" }, "jquery-mockjax": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/jquery-mockjax/-/jquery-mockjax-2.2.2.tgz", - "integrity": "sha1-nH0rEDpEz2HJnMeKnueHhQS2CQc=", + "integrity": "sha512-stVgUln5bo7g14KjeU45c31nAYlBHAUVBo4JbdoDYIJ3i6Nzlu8mkjKcAviwad9AU1dBEHHpuzA7R6mKcWgvZA==", "dev": true, "requires": { - "jquery": "3.1.1" - } - }, - "jquery-ui": { - "version": "git://github.com/jquery/jquery-ui.git#74f8a0ac952f6f45f773312292baef1c26d81300", - "requires": { - "jquery": "3.1.1" + "jquery": "3.3.1" } }, "jquery-ujs": { @@ -4837,7 +3953,7 @@ "resolved": "https://registry.npmjs.org/jquery-ujs/-/jquery-ujs-1.2.2.tgz", "integrity": "sha1-ao7xAg5rbdo4W5CkvdwSjCHFY5c=", "requires": { - "jquery": "3.1.1" + "jquery": "3.3.1" } }, "jquery.caret": { @@ -4846,9 +3962,9 @@ "integrity": "sha1-nAkzGPrzJ+/zIugmyp8yQTaLx7g=" }, "js-base64": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "integrity": "sha1-8OgK4DmkvWVLXygfyT8EqRSn/M4=" + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", + "integrity": "sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw==" }, "js-tokens": { "version": "3.0.2", @@ -4856,12 +3972,12 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", "requires": { "argparse": "1.0.9", - "esprima": "2.7.3" + "esprima": "4.0.0" } }, "jsbn": { @@ -4887,14 +4003,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -4928,80 +4036,61 @@ "graceful-fs": "4.1.11" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, "jsprim": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz", - "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", "dev": true, "requires": { "assert-plus": "1.0.0", - "extsprintf": "1.0.2", + "extsprintf": "1.3.0", "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + "verror": "1.10.0" } }, "karma": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/karma/-/karma-1.4.1.tgz", - "integrity": "sha1-QZgacdVCN2BrCj6oxYyQdz9BZQ4=", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", + "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", "requires": { - "bluebird": "3.4.7", - "body-parser": "1.16.0", - "chokidar": "1.6.1", + "bluebird": "3.5.1", + "body-parser": "1.18.2", + "chokidar": "1.7.0", "colors": "1.1.2", "combine-lists": "1.0.1", - "connect": "3.5.0", - "core-js": "2.5.1", + "connect": "3.6.5", + "core-js": "2.5.3", "di": "0.0.1", "dom-serialize": "2.2.1", "expand-braces": "0.1.2", - "glob": "7.1.1", + "glob": "7.1.2", "graceful-fs": "4.1.11", "http-proxy": "1.16.2", "isbinaryfile": "3.0.2", "lodash": "3.10.1", "log4js": "0.6.38", - "mime": "1.3.4", - "minimatch": "3.0.3", + "mime": "1.6.0", + "minimatch": "3.0.4", "optimist": "0.6.1", "qjobs": "1.1.5", "range-parser": "1.2.0", - "rimraf": "2.5.4", - "safe-buffer": "5.0.1", - "socket.io": "1.7.2", - "source-map": "0.5.6", - "tmp": "0.0.28", - "useragent": "2.1.12" + "rimraf": "2.6.2", + "safe-buffer": "5.1.1", + "socket.io": "1.7.3", + "source-map": "0.5.7", + "tmp": "0.0.31", + "useragent": "2.3.0" }, "dependencies": { "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", "inherits": "2.0.3", - "minimatch": "3.0.3", + "minimatch": "3.0.4", "once": "1.4.0", "path-is-absolute": "1.0.1" } @@ -5010,24 +4099,6 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=" - }, - "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" - }, - "minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", - "requires": { - "brace-expansion": "1.1.6" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" } } }, @@ -5055,7 +4126,7 @@ "integrity": "sha1-CsDiLlc2UPZUExL9ynlcOCTM+WI=", "dev": true, "requires": { - "which": "1.2.14" + "which": "1.3.0" } }, "karma-firefox-launcher": { @@ -5093,8 +4164,8 @@ "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=", "dev": true, "requires": { - "lodash": "4.17.4", - "phantomjs-prebuilt": "2.1.14" + "lodash": "4.17.5", + "phantomjs-prebuilt": "2.1.16" } }, "kew": { @@ -5104,11 +4175,11 @@ "dev": true }, "kind-of": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz", - "integrity": "sha1-R11pil5J/15T0U4+cyQp3Iv0z0c=", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.4" + "is-buffer": "1.1.6" } }, "klaw": { @@ -5142,6 +4213,13 @@ "parse-json": "2.2.0", "pify": "2.3.0", "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } } }, "loader-runner": { @@ -5150,11 +4228,11 @@ "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=" }, "loader-utils": { - "version": "0.2.16", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.16.tgz", - "integrity": "sha1-8IYyBm7YKCg13/iN+1JwR2Wt7m0=", + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "requires": { - "big.js": "3.1.3", + "big.js": "3.2.0", "emojis-list": "2.1.0", "json5": "0.5.1", "object-assign": "4.1.1" @@ -5170,9 +4248,9 @@ } }, "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=" + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" }, "lodash._baseassign": { "version": "3.2.0", @@ -5237,9 +4315,9 @@ "dev": true }, "lodash.isfunction": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz", - "integrity": "sha1-TbcJ/IG8So/XEnpFilNGxc3OLGs=" + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" }, "lodash.isstring": { "version": "4.0.1", @@ -5287,10 +4365,10 @@ "string_decoder": "0.10.31" } }, - "semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" } } }, @@ -5306,22 +4384,34 @@ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" }, "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", + "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } }, "lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", "requires": { - "es5-ext": "0.10.12" + "es5-ext": "0.10.38" + } + }, + "make-dir": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", + "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", + "requires": { + "pify": "3.0.0" } }, "mark.js": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.0.tgz", - "integrity": "sha1-cOsXe5pMQffgc9fW83G3B3UQigM=" + "version": "8.11.1", + "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", + "integrity": "sha1-GA8fnr74sOY45BZq1S24eb6y/8U=" }, "md5.js": { "version": "1.3.4", @@ -5338,7 +4428,7 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { "inherits": "2.0.3", - "safe-buffer": "5.0.1" + "safe-buffer": "5.1.1" } } } @@ -5362,12 +4452,12 @@ "integrity": "sha1-TsoNiu057J0Bf0xcLy9kMvQuXI8=", "requires": { "d": "0.1.1", - "es5-ext": "0.10.12", + "es5-ext": "0.10.38", "es6-weak-map": "0.1.4", - "event-emitter": "0.3.4", + "event-emitter": "0.3.5", "lru-queue": "0.1.0", "next-tick": "0.2.2", - "timers-ext": "0.1.0" + "timers-ext": "0.1.2" } }, "memory-fs": { @@ -5375,8 +4465,8 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.3.0.tgz", "integrity": "sha1-e8xrYp46Q+hx1+Kaymrop/FcuyA=", "requires": { - "errno": "0.1.4", - "readable-stream": "2.2.2" + "errno": "0.1.6", + "readable-stream": "2.3.4" } }, "merge-descriptors": { @@ -5401,14 +4491,29 @@ "braces": "1.8.5", "expand-brackets": "0.1.5", "extglob": "0.3.2", - "filename-regex": "2.0.0", + "filename-regex": "2.0.1", "is-extglob": "1.0.0", "is-glob": "2.0.1", - "kind-of": "3.1.0", - "normalize-path": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", "object.omit": "2.0.1", "parse-glob": "3.0.4", - "regex-cache": "0.4.3" + "regex-cache": "0.4.4" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } } }, "miller-rabin": { @@ -5421,21 +4526,21 @@ } }, "mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.26.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.26.0.tgz", - "integrity": "sha1-6v/NDk/Gk1z4E02iRuLmw1MFrf8=" + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" }, "mime-types": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.14.tgz", - "integrity": "sha1-9+99l1g/yvO30oK2+LVnnaselO4=", + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", "requires": { - "mime-db": "1.26.0" + "mime-db": "1.30.0" } }, "mimic-fn": { @@ -5454,17 +4559,34 @@ "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" }, "minimatch": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.6" + "brace-expansion": "1.1.11" } }, "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mississippi": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.1.tgz", + "integrity": "sha512-/6rB8YXFbAtsUVRphIRQqB0+9c7VaPHCjVtvto+JqwVxgz8Zz+I+f68/JgQ+Pb4VlZb2svA9OtdXnHHsZz7ltg==", + "requires": { + "concat-stream": "1.6.0", + "duplexify": "3.5.3", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.0.2", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "1.0.3", + "pumpify": "1.4.0", + "stream-each": "1.2.2", + "through2": "2.0.3" + } }, "mkdirp": { "version": "0.5.1", @@ -5472,50 +4594,28 @@ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "requires": { "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } } }, "mocha": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", - "integrity": "sha1-0O9NMyEm2/GNDWQMmzgt1IvpdZQ=", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", + "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", "dev": true, "requires": { "browser-stdout": "1.3.0", "commander": "2.9.0", - "debug": "2.6.0", + "debug": "2.6.8", "diff": "3.2.0", "escape-string-regexp": "1.0.5", "glob": "7.1.1", "growl": "1.9.2", + "he": "1.1.1", "json3": "3.3.2", "lodash.create": "3.1.1", "mkdirp": "0.5.1", "supports-color": "3.1.2" }, "dependencies": { - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, "commander": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", @@ -5525,6 +4625,15 @@ "graceful-readlink": "1.0.1" } }, + "debug": { + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", + "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, "glob": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", @@ -5539,15 +4648,6 @@ "path-is-absolute": "1.0.1" } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, "supports-color": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", @@ -5560,16 +4660,16 @@ } }, "moment": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.17.1.tgz", - "integrity": "sha1-/tlQYGPzaxDwZsi1mhRNf66+HYI=" + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", + "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" }, "moment-timezone": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.11.tgz", - "integrity": "sha1-m3bAPY71FMfkJJp7vOZJ7tOe8p8=", + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.14.tgz", + "integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=", "requires": { - "moment": "2.17.1" + "moment": "2.20.1" } }, "monocle": { @@ -5587,20 +4687,33 @@ "integrity": "sha1-xMJ25Sl3riXbUZH+UdAIVQ8V2bs=", "dev": true, "requires": { - "minimatch": "2.0.10" + "minimatch": "3.0.4" } } } }, "mousetrap": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.0.tgz", - "integrity": "sha1-AWj8q7EdB2aeh0kDJMmBIIEhrE0=" + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.1.tgz", + "integrity": "sha1-KghfXHUSlMdefoH27CVFspy/Qtk=" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.2", + "run-queue": "1.0.3" + } }, "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "nan": { "version": "2.8.0", @@ -5611,8 +4724,7 @@ "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", - "dev": true + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" }, "next-tick": { "version": "0.2.2", @@ -5631,8 +4743,8 @@ "ordered-ast-traverse": "1.1.1", "simple-fmt": "0.1.0", "simple-is": "0.2.0", - "source-map": "0.5.6", - "stable": "0.1.5", + "source-map": "0.5.7", + "stable": "0.1.6", "stringmap": "0.2.2", "stringset": "0.2.1", "tryor": "0.1.2" @@ -5643,10 +4755,10 @@ "resolved": "https://registry.npmjs.org/ng-annotate-loader/-/ng-annotate-loader-0.2.0.tgz", "integrity": "sha1-1GLcBj3WnSzdcaoEpGxu0KAG5SM=", "requires": { - "loader-utils": "0.2.16", + "loader-utils": "0.2.17", "ng-annotate": "1.2.1", - "normalize-path": "2.0.1", - "source-map": "0.5.6" + "normalize-path": "2.1.1", + "source-map": "0.5.7" } }, "ng-dialog": { @@ -5664,7 +4776,7 @@ "resolved": "https://registry.npmjs.org/ng2-rx-componentdestroyed/-/ng2-rx-componentdestroyed-1.1.2.tgz", "integrity": "sha512-BT8oCYfdkpG4e8ZPeyrLWlWhxqOFFKAA3KvKmrLN9/vqW7LKohqp0ojdYBN38vc4+WUwCUCIbkE8m966D0eiSg==", "requires": { - "rxjs": "5.4.3" + "rxjs": "5.5.6" } }, "ngtemplate-loader": { @@ -5672,7 +4784,7 @@ "resolved": "https://registry.npmjs.org/ngtemplate-loader/-/ngtemplate-loader-0.1.3.tgz", "integrity": "sha1-FwydvcXTpN8t5WQPjbZXoJRxC8U=", "requires": { - "loader-utils": "0.2.16" + "loader-utils": "0.2.17" } }, "node-libs-browser": { @@ -5694,7 +4806,7 @@ "process": "0.11.10", "punycode": "1.4.1", "querystring-es3": "0.2.1", - "readable-stream": "2.3.3", + "readable-stream": "2.3.4", "stream-browserify": "2.0.1", "stream-http": "2.8.0", "string_decoder": "1.0.3", @@ -5703,35 +4815,6 @@ "url": "0.11.0", "util": "0.10.3", "vm-browserify": "0.0.4" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - } } }, "normalize-package-data": { @@ -5741,14 +4824,17 @@ "requires": { "hosted-git-info": "2.5.0", "is-builtin-module": "1.0.0", - "semver": "5.4.1", + "semver": "4.3.6", "validate-npm-package-license": "3.0.1" } }, "normalize-path": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } }, "normalize-range": { "version": "0.1.2", @@ -5794,7 +4880,7 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "requires": { - "for-own": "0.1.4", + "for-own": "0.1.5", "is-extendable": "0.1.1" } }, @@ -5804,8 +4890,8 @@ "integrity": "sha1-Y4qFmEyZ1YTw8RM8o5q4gpoTsIU=", "requires": { "d": "0.1.1", - "es5-ext": "0.10.12", - "event-emitter": "0.3.4", + "es5-ext": "0.10.38", + "event-emitter": "0.3.5", "memoizee": "0.3.10", "observable-value": "0.0.5" } @@ -5816,9 +4902,9 @@ "integrity": "sha1-r2Wo2g+rm3JIjWiwLiDvP3629Ps=", "requires": { "d": "0.1.1", - "es5-ext": "0.10.12", - "es6-symbol": "3.1.0", - "event-emitter": "0.3.4", + "es5-ext": "0.10.38", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5", "memoizee": "0.3.10" } }, @@ -5855,7 +4941,7 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "0.0.10", + "minimist": "0.0.8", "wordwrap": "0.0.3" } }, @@ -5954,6 +5040,16 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==" }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "requires": { + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.4" + } + }, "parse-asn1": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.0.tgz", @@ -5972,9 +5068,24 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "requires": { "glob-base": "0.3.0", - "is-dotfile": "1.0.2", + "is-dotfile": "1.0.3", "is-extglob": "1.0.0", "is-glob": "2.0.1" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + } } }, "parse-json": { @@ -5982,7 +5093,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "1.3.0" + "error-ex": "1.3.1" } }, "parsejson": { @@ -6010,9 +5121,9 @@ } }, "parseurl": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", - "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, "path-browserify": { "version": "0.0.0", @@ -6041,11 +5152,11 @@ "dev": true }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "requires": { - "pify": "2.3.0" + "pify": "3.0.0" } }, "pbkdf2": { @@ -6056,7 +5167,7 @@ "create-hash": "1.1.3", "create-hmac": "1.1.6", "ripemd160": "2.0.1", - "safe-buffer": "5.0.1", + "safe-buffer": "5.1.1", "sha.js": "2.4.10" } }, @@ -6066,40 +5177,38 @@ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, "phantomjs-polyfill": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/phantomjs-polyfill/-/phantomjs-polyfill-0.0.2.tgz", "integrity": "sha1-jGpxY+m8j9n/2+fWBctTUvn7iR4=" }, "phantomjs-prebuilt": { - "version": "2.1.14", - "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.14.tgz", - "integrity": "sha1-1T0xH8+30dCN2yQBRVjxGIxRbaA=", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/phantomjs-prebuilt/-/phantomjs-prebuilt-2.1.16.tgz", + "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", "dev": true, "requires": { - "es6-promise": "4.0.5", - "extract-zip": "1.5.0", + "es6-promise": "4.2.4", + "extract-zip": "1.6.6", "fs-extra": "1.0.0", "hasha": "2.2.0", "kew": "0.7.0", "progress": "1.1.8", - "request": "2.79.0", + "request": "2.83.0", "request-progress": "2.0.1", - "which": "1.2.14" - }, - "dependencies": { - "es6-promise": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", - "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=", - "dev": true - } + "which": "1.3.0" } }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" }, "pinkie": { "version": "2.0.4", @@ -6116,55 +5225,75 @@ "pinkie": "2.0.4" } }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "requires": { + "find-up": "2.1.0" + } + }, "postcss": { - "version": "5.2.11", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.11.tgz", - "integrity": "sha1-/ym81tLvuYv+CKAiBV7Fmbvnt2E=", + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", "requires": { "chalk": "1.1.3", - "js-base64": "2.1.9", - "source-map": "0.5.6", + "js-base64": "2.4.3", + "source-map": "0.5.7", "supports-color": "3.2.3" } }, "postcss-load-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.1.0.tgz", - "integrity": "sha1-HDwhdghkJEjAO+vzwysbKJhSk/k=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", "requires": { - "cosmiconfig": "2.1.1", + "cosmiconfig": "2.2.2", "object-assign": "4.1.1", - "postcss-load-options": "1.1.0", - "postcss-load-plugins": "2.2.0" + "postcss-load-options": "1.2.0", + "postcss-load-plugins": "2.3.0" } }, "postcss-load-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.1.0.tgz", - "integrity": "sha1-45IV0VShn2n5y2BSv/rUqC8J81Q=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", "requires": { - "cosmiconfig": "2.1.1", + "cosmiconfig": "2.2.2", "object-assign": "4.1.1" } }, "postcss-load-plugins": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.2.0.tgz", - "integrity": "sha1-hO+c825jeBCsUmXgP21MSOrYMxQ=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", "requires": { - "cosmiconfig": "2.1.1", + "cosmiconfig": "2.2.2", "object-assign": "4.1.1" } }, "postcss-loader": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.2.2.tgz", - "integrity": "sha1-u/ThmozehVl+DJv9lgFf53WhV6w=", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-1.3.3.tgz", + "integrity": "sha1-piHqH6KQYqg5cqRvVEhncTAZFus=", "requires": { - "loader-utils": "0.2.16", + "loader-utils": "1.1.0", "object-assign": "4.1.1", - "postcss": "5.2.11", - "postcss-load-config": "1.1.0" + "postcss": "5.2.18", + "postcss-load-config": "1.2.0" + }, + "dependencies": { + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + } } }, "postcss-value-parser": { @@ -6183,9 +5312,9 @@ "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" }, "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" }, "progress": { "version": "1.1.8", @@ -6202,20 +5331,25 @@ "is-promise": "1.0.1" } }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, "proxy-addr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.4.tgz", - "integrity": "sha1-J+VF9pYKRKYn2bREZ+NcG2tM4vM=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", + "integrity": "sha1-ZXFQT0e7mI7IGAJT+F3X4UlSvew=", "dev": true, "requires": { - "forwarded": "0.1.0", - "ipaddr.js": "1.3.0" + "forwarded": "0.1.2", + "ipaddr.js": "1.5.2" } }, "prr": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", - "integrity": "sha1-GoS4WQgyVQFBGFPQCB7j+obikmo=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, "pseudomap": { "version": "1.0.2", @@ -6234,6 +5368,36 @@ "randombytes": "2.0.6" } }, + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.4.0.tgz", + "integrity": "sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA==", + "requires": { + "duplexify": "3.5.3", + "inherits": "2.0.3", + "pump": "2.0.1" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "1.4.1", + "once": "1.4.0" + } + } + } + }, "punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -6245,9 +5409,9 @@ "integrity": "sha1-ZZ3p8s+NzCehSBJ28gU3cnI4LnM=" }, "qs": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", - "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=" + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" }, "querystring": { "version": "0.2.0", @@ -6266,12 +5430,40 @@ "dev": true }, "randomatic": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.6.tgz", - "integrity": "sha1-EQ3Kv/OX6dz/fAeJzMCkmt8exbs=", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "requires": { - "is-number": "2.1.0", - "kind-of": "3.1.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } } }, "randombytes": { @@ -6280,13 +5472,6 @@ "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", "requires": { "safe-buffer": "5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - } } }, "randomfill": { @@ -6296,28 +5481,21 @@ "requires": { "randombytes": "2.0.6", "safe-buffer": "5.1.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - } } }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", - "dev": true + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" }, "raw-body": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", - "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", "requires": { - "bytes": "2.4.0", - "iconv-lite": "0.4.15", + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", "unpipe": "1.0.0" } }, @@ -6327,13 +5505,12 @@ "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=" }, "reactivestates": { - "version": "0.6.31", - "resolved": "https://registry.npmjs.org/reactivestates/-/reactivestates-0.6.31.tgz", - "integrity": "sha1-1jspVdLSBq+IXmk7rXyvhBwH3dA=", + "version": "0.6.33", + "resolved": "https://registry.npmjs.org/reactivestates/-/reactivestates-0.6.33.tgz", + "integrity": "sha1-9TfSwzlLUVySoET1o69yeeumQSw=", "requires": { "es6-shim": "0.35.1", - "rxjs": "5.4.3", - "zone.js": "0.8.18" + "rxjs": "5.5.6" }, "dependencies": { "es6-shim": { @@ -6351,6 +5528,21 @@ "load-json-file": "2.0.0", "normalize-package-data": "2.4.0", "path-type": "2.0.0" + }, + "dependencies": { + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "2.3.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } } }, "read-pkg-up": { @@ -6363,16 +5555,16 @@ } }, "readable-stream": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.2.tgz", - "integrity": "sha1-qeb+w8fdqF+LsbO6cChgRVb8gl4=", + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", + "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", "requires": { - "buffer-shims": "1.0.0", "core-util-is": "1.0.2", "inherits": "2.0.3", "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", "util-deprecate": "1.0.2" } }, @@ -6382,35 +5574,29 @@ "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "requires": { "graceful-fs": "4.1.11", - "minimatch": "3.0.3", - "readable-stream": "2.2.2", + "minimatch": "3.0.4", + "readable-stream": "2.3.4", "set-immediate-shim": "1.0.1" - }, - "dependencies": { - "minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", - "requires": { - "brace-expansion": "1.1.6" - } - } } }, "reflect-metadata": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.10.tgz", - "integrity": "sha1-tPg3BEFqytiZiMmxVjXUfgO5NEo=" + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", + "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==" }, "regex-cache": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", - "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "requires": { - "is-equal-shallow": "0.1.3", - "is-primitive": "2.0.0" + "is-equal-shallow": "0.1.3" } }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", @@ -6422,39 +5608,33 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "request": { - "version": "2.79.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", - "integrity": "sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4=", + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", "dev": true, "requires": { - "aws-sign2": "0.6.0", + "aws-sign2": "0.7.0", "aws4": "1.6.0", - "caseless": "0.11.0", + "caseless": "0.12.0", "combined-stream": "1.0.5", - "extend": "3.0.0", + "extend": "3.0.1", "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", - "mime-types": "2.1.14", + "mime-types": "2.1.17", "oauth-sign": "0.8.2", - "qs": "6.3.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", "stringstream": "0.0.5", - "tough-cookie": "2.3.2", - "tunnel-agent": "0.4.3", - "uuid": "3.1.0" - }, - "dependencies": { - "qs": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.3.2.tgz", - "integrity": "sha1-51vV9uJoEioqDgvaYwslUMFmUCw=", - "dev": true - } + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" } }, "request-progress": { @@ -6495,33 +5675,25 @@ } }, "rimraf": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", - "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "requires": { - "glob": "7.1.1" + "glob": "7.1.2" }, "dependencies": { "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", "inherits": "2.0.3", - "minimatch": "3.0.3", + "minimatch": "3.0.4", "once": "1.4.0", "path-is-absolute": "1.0.1" } - }, - "minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", - "requires": { - "brace-expansion": "1.1.6" - } } } }, @@ -6534,18 +5706,26 @@ "inherits": "2.0.3" } }, - "rxjs": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.4.3.tgz", - "integrity": "sha512-fSNi+y+P9ss+EZuV0GcIIqPUK07DEaMRUtLJvdcvMyFjc9dizuDjere+A4V7JrLGnm9iCc+nagV/4QdMTkqC4A==", + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "requires": { - "symbol-observable": "1.0.4" + "aproba": "1.2.0" + } + }, + "rxjs": { + "version": "5.5.6", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", + "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "requires": { + "symbol-observable": "1.0.1" } }, "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "samsam": { "version": "1.1.2", @@ -6558,77 +5738,50 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", "requires": { - "ajv": "5.2.2" + "ajv": "5.5.2" } }, "screenfull": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-3.2.0.tgz", - "integrity": "sha1-pNZjfFfkdJ7TLq9EIyJtQ6mcwRs=" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-3.3.2.tgz", + "integrity": "sha512-zrnT8EidEWGFkmXEa1d/YUYNvvJaMX05g4O82K+Oiy9jR6Fh3ZTsovsccJOjRJyhS0KPV7AQpDFQRAYXBl9a5A==" }, "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" }, "send": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", - "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz", + "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==", "dev": true, "requires": { - "debug": "2.6.7", - "depd": "1.1.0", + "debug": "2.6.9", + "depd": "1.1.2", "destroy": "1.0.4", - "encodeurl": "1.0.1", + "encodeurl": "1.0.2", "escape-html": "1.0.3", - "etag": "1.8.0", - "fresh": "0.5.0", - "http-errors": "1.6.1", - "mime": "1.3.4", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.2", + "mime": "1.4.1", "ms": "2.0.0", "on-finished": "2.3.0", "range-parser": "1.2.0", "statuses": "1.3.1" }, "dependencies": { - "debug": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", - "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "http-errors": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", - "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", - "dev": true, - "requires": { - "depd": "1.1.0", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - } - }, "mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "dev": true }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=", "dev": true } } @@ -6638,81 +5791,48 @@ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", "integrity": "sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=" }, + "serialize-javascript": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=" + }, "serve-index": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.0.tgz", - "integrity": "sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc=", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.3", + "accepts": "1.3.4", "batch": "0.6.1", - "debug": "2.6.8", + "debug": "2.6.9", "escape-html": "1.0.3", - "http-errors": "1.6.1", - "mime-types": "2.1.15", - "parseurl": "1.3.1" + "http-errors": "1.6.2", + "mime-types": "2.1.17", + "parseurl": "1.3.2" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "accepts": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", + "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=", "dev": true, "requires": { - "ms": "2.0.0" + "mime-types": "2.1.17", + "negotiator": "0.6.1" } - }, - "http-errors": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", - "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", - "dev": true, - "requires": { - "depd": "1.1.0", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.3.1" - } - }, - "mime-db": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz", - "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE=", - "dev": true - }, - "mime-types": { - "version": "2.1.15", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz", - "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=", - "dev": true, - "requires": { - "mime-db": "1.27.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", - "dev": true } } }, "serve-static": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", - "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.1.tgz", + "integrity": "sha512-hSMUZrsPa/I09VYFJwa627JJkNs0NrfL1Uzuup+GqHfToR2KcsXFymXSV90hoyw3M+msjFuQly+YzIH/q0MGlQ==", "dev": true, "requires": { - "encodeurl": "1.0.1", + "encodeurl": "1.0.2", "escape-html": "1.0.3", - "parseurl": "1.3.1", - "send": "0.15.3" + "parseurl": "1.3.2", + "send": "0.16.1" } }, "set-blocking": { @@ -6731,9 +5851,9 @@ "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" }, "setprototypeof": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", - "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" }, "sha.js": { "version": "2.4.10", @@ -6741,7 +5861,7 @@ "integrity": "sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA==", "requires": { "inherits": "2.0.3", - "safe-buffer": "5.0.1" + "safe-buffer": "5.1.1" } }, "shebang-command": { @@ -6790,31 +5910,36 @@ } }, "sinon-chai": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.11.0.tgz", - "integrity": "sha1-k9kPmJ//Z85FdnB3/+V13eH66m0=", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.14.0.tgz", + "integrity": "sha512-9stIF1utB0ywNHNT7RgiXbdmen8QDCRsrTjw+G9TgKt1Yexjiv8TOWZ6WHsTPz57Yky3DIswZvEqX8fpuHNDtQ==", "dev": true }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "4.2.0" } }, "socket.io": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.2.tgz", - "integrity": "sha1-g7u98ueSY7N4kA2kA+eEPgXcO3E=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-1.7.3.tgz", + "integrity": "sha1-uK+cq6AJSeVo42nxMn6pvp6iRhs=", "requires": { "debug": "2.3.3", - "engine.io": "1.8.2", + "engine.io": "1.8.3", "has-binary": "0.1.7", "object-assign": "4.1.0", "socket.io-adapter": "0.5.0", - "socket.io-client": "1.7.2", + "socket.io-client": "1.7.3", "socket.io-parser": "2.3.1" }, "dependencies": { @@ -6826,6 +5951,11 @@ "ms": "0.7.2" } }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" + }, "object-assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", @@ -6849,19 +5979,24 @@ "requires": { "ms": "0.7.2" } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" } } }, "socket.io-client": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.2.tgz", - "integrity": "sha1-Of2ww91FDjIbfkDP2DYS7FM91kQ=", + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-1.7.3.tgz", + "integrity": "sha1-sw6GqhDV7zVGYBwJzeR2Xjgdo3c=", "requires": { "backo2": "1.0.2", "component-bind": "1.0.0", "component-emitter": "1.2.1", "debug": "2.3.3", - "engine.io-client": "1.8.2", + "engine.io-client": "1.8.3", "has-binary": "0.1.7", "indexof": "0.0.1", "object-component": "0.0.3", @@ -6882,6 +6017,11 @@ "requires": { "ms": "0.7.2" } + }, + "ms": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", + "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" } } }, @@ -6917,21 +6057,13 @@ } }, "sockjs": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", - "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "dev": true, "requires": { "faye-websocket": "0.10.0", - "uuid": "2.0.3" - }, - "dependencies": { - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", - "dev": true - } + "uuid": "3.2.1" } }, "sockjs-client": { @@ -6940,37 +6072,22 @@ "integrity": "sha1-W6vjhrd15M8U51IJEUUmVAFsixI=", "dev": true, "requires": { - "debug": "2.6.8", + "debug": "2.6.9", "eventsource": "0.1.6", "faye-websocket": "0.11.1", "inherits": "2.0.3", "json3": "3.3.2", - "url-parse": "1.1.9" + "url-parse": "1.2.0" }, "dependencies": { - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, "faye-websocket": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "dev": true, "requires": { - "websocket-driver": "0.6.5" + "websocket-driver": "0.7.0" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -6986,16 +6103,16 @@ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==" }, "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-support": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.11.tgz", - "integrity": "sha1-ZH+TmXizhTWQlTCIUwPa8jJ58yI=", + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "requires": { - "source-map": "0.5.6" + "source-map": "0.5.7" } }, "spdx-correct": { @@ -7035,25 +6152,25 @@ "getpass": "0.1.7", "jsbn": "0.1.1", "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } + } + }, + "ssri": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.2.1.tgz", + "integrity": "sha512-y4PjOWlAuxt+yAcXitQYOnOzZpKaH3+f/qGV3OWxbyC2noC9FA9GNC9uILnVdV7jruA1aDKr4OKz3ZDBcVZwFQ==", + "requires": { + "safe-buffer": "5.1.1" } }, "stable": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.5.tgz", - "integrity": "sha1-CCMvYMcy6YkHhLW+0HNPizKoh7k=" + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz", + "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=" }, "statuses": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", - "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, "stream-browserify": { "version": "2.0.1", @@ -7061,7 +6178,7 @@ "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", "requires": { "inherits": "2.0.3", - "readable-stream": "2.2.2" + "readable-stream": "2.3.4" } }, "stream-cache": { @@ -7070,6 +6187,15 @@ "integrity": "sha1-GsWtaDJCjKVWZ9ve45Xa1ObbEY8=", "dev": true }, + "stream-each": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz", + "integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==", + "requires": { + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" + } + }, "stream-http": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.0.tgz", @@ -7077,40 +6203,16 @@ "requires": { "builtin-status-codes": "3.0.0", "inherits": "2.0.3", - "readable-stream": "2.3.3", + "readable-stream": "2.3.4", "to-arraybuffer": "1.0.1", "xtend": "4.0.1" - }, - "dependencies": { - "readable-stream": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", - "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "requires": { - "safe-buffer": "5.1.1" - } - } } }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -7141,9 +6243,12 @@ } }, "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "requires": { + "safe-buffer": "5.1.1" + } }, "stringmap": { "version": "0.2.2", @@ -7184,7 +6289,7 @@ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.8.3.tgz", "integrity": "sha1-9Pkut9tjdodI8VBlzWcA9aHIU1c=", "requires": { - "loader-utils": "0.2.16" + "loader-utils": "0.2.17" } }, "supports-color": { @@ -7196,14 +6301,14 @@ } }, "symbol-observable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.4.tgz", - "integrity": "sha1-Kb9hXUqnEhvdiYsi1LP5vE4qoD0=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", + "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" }, "tapable": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.6.tgz", - "integrity": "sha1-IGvo4YiGC1FEJTdebxrom/sB/Y0=" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" }, "throttleit": { "version": "1.0.0", @@ -7211,11 +6316,26 @@ "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", "dev": true }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "requires": { + "readable-stream": "2.3.4", + "xtend": "4.0.1" + } + }, "ticky": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ticky/-/ticky-1.0.1.tgz", "integrity": "sha1-t8+nHnaPHJAAxJe5FRswlHxQ5G0=" }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=", + "dev": true + }, "timers-browserify": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.6.tgz", @@ -7225,18 +6345,25 @@ } }, "timers-ext": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.0.tgz", - "integrity": "sha1-ADRaLKkwidElEyIFQ4nSY+J7d+I=", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.2.tgz", + "integrity": "sha1-YcxHp2wavTGV8UUn+XjViulMUgQ=", "requires": { - "es5-ext": "0.10.12", - "next-tick": "0.2.2" + "es5-ext": "0.10.38", + "next-tick": "1.0.0" + }, + "dependencies": { + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + } } }, "tmp": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz", - "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=", + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "requires": { "os-tmpdir": "1.0.2" } @@ -7252,9 +6379,9 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" }, "tough-cookie": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", - "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", "dev": true, "requires": { "punycode": "1.4.1" @@ -7279,10 +6406,10 @@ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-2.3.7.tgz", "integrity": "sha512-8t3bu2FcEkXb+D4L+Cn8qiK2E2C6Ms4/GQChvz6IMbVurcFHLXrhW4EMtfaol1a1ASQACZGDUGit4NHnX9g7hQ==", "requires": { - "chalk": "2.3.0", + "chalk": "2.3.1", "enhanced-resolve": "3.4.1", "loader-utils": "1.1.0", - "semver": "5.4.1" + "semver": "5.5.0" }, "dependencies": { "ansi-styles": { @@ -7294,13 +6421,13 @@ } }, "chalk": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz", - "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", "requires": { "ansi-styles": "3.2.0", "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "supports-color": "5.2.0" } }, "enhanced-resolve": { @@ -7315,16 +6442,16 @@ } }, "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "loader-utils": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "3.1.3", + "big.js": "3.2.0", "emojis-list": "2.1.0", "json5": "0.5.1" } @@ -7334,29 +6461,29 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "errno": "0.1.4", - "readable-stream": "2.2.2" + "errno": "0.1.6", + "readable-stream": "2.3.4" } }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, "supports-color": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", - "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", "requires": { - "has-flag": "2.0.0" + "has-flag": "3.0.0" } - }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" } } }, "tslib": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.8.0.tgz", - "integrity": "sha512-ymKWWZJST0/CkgduC2qkzjMOWr4bouhuURNXCn/inEX0L57BnRG6FhX76o7FOnsjHazCjfU2LKeSrlS2sIKQJg==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", + "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==" }, "tty-browserify": { "version": "0.0.0", @@ -7364,10 +6491,13 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" }, "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } }, "tweetnacl": { "version": "0.14.5", @@ -7388,19 +6518,18 @@ "integrity": "sha1-qxhCNK6A2NUAV87+/zstl9CK6bA=" }, "type-is": { - "version": "1.6.14", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.14.tgz", - "integrity": "sha1-4hljnBfe0coHiQkt1UoDgmuBfLI=", + "version": "1.6.15", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", + "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.14" + "mime-types": "2.1.17" } }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { "version": "2.7.1", @@ -7412,7 +6541,7 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "requires": { - "source-map": "0.5.6", + "source-map": "0.5.7", "uglify-to-browserify": "1.0.2", "yargs": "3.10.0" }, @@ -7441,21 +6570,37 @@ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", "requires": { - "source-map": "0.5.6", + "source-map": "0.5.7", "uglify-js": "2.8.29", - "webpack-sources": "1.0.1" + "webpack-sources": "1.1.0" } }, "ui-select": { - "version": "0.19.6", - "resolved": "https://registry.npmjs.org/ui-select/-/ui-select-0.19.6.tgz", - "integrity": "sha1-moJOydWwTD/cdIP6R0bdPFKNh6s=" + "version": "0.19.8", + "resolved": "https://registry.npmjs.org/ui-select/-/ui-select-0.19.8.tgz", + "integrity": "sha1-dIYISKf9i8SU2YVtL2J3bqmGN8E=" }, "ultron": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "requires": { + "unique-slug": "2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "requires": { + "imurmurhash": "0.1.4" + } + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -7478,18 +6623,35 @@ } }, "url-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.7.tgz", - "integrity": "sha1-Z+h3l1n4AA2nSZSQZoDJQ6mwkl0=", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz", + "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==", "requires": { - "loader-utils": "0.2.16", - "mime": "1.2.11" + "loader-utils": "1.1.0", + "mime": "1.3.6" + }, + "dependencies": { + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "3.2.0", + "emojis-list": "2.1.0", + "json5": "0.5.1" + } + }, + "mime": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=" + } } }, "url-parse": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.1.9.tgz", - "integrity": "sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.2.0.tgz", + "integrity": "sha512-DT1XbYAfmQP65M/mE6OALxmXzZ/z1+e5zk2TcSKe/KiYbNGZxgtttzC0mR/sjopbpOXcbniq7eIKmocJnUWlEw==", "dev": true, "requires": { "querystringify": "1.0.0", @@ -7505,12 +6667,12 @@ } }, "useragent": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.1.12.tgz", - "integrity": "sha1-qn2mzcSL3De6hnkIcacyHWTtuqI=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "requires": { - "lru-cache": "2.2.4", - "tmp": "0.0.28" + "lru-cache": "4.1.1", + "tmp": "0.0.31" } }, "util": { @@ -7534,14 +6696,14 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", - "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", - "integrity": "sha1-PdPT55Crwk17DToDT/q6vijrvAQ=", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", "dev": true }, "validate-npm-package-license": { @@ -7554,18 +6716,20 @@ } }, "vary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", - "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, "verror": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz", - "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "extsprintf": "1.0.2" + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" } }, "vm-browserify": { @@ -7586,39 +6750,21 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.4.0.tgz", "integrity": "sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw=", "requires": { - "async": "2.5.0", + "async": "2.6.0", "chokidar": "1.7.0", "graceful-fs": "4.1.11" - }, - "dependencies": { - "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", - "requires": { - "anymatch": "1.3.0", - "async-each": "1.0.1", - "fsevents": "1.1.3", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" - } - } } }, "webpack": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz", - "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz", + "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==", "requires": { "acorn": "5.4.1", "acorn-dynamic-import": "2.0.2", - "ajv": "5.2.2", - "ajv-keywords": "2.1.1", - "async": "2.5.0", + "ajv": "6.1.1", + "ajv-keywords": "3.1.0", + "async": "2.6.0", "enhanced-resolve": "3.4.1", "escope": "3.6.0", "interpret": "1.1.0", @@ -7629,12 +6775,12 @@ "memory-fs": "0.4.1", "mkdirp": "0.5.1", "node-libs-browser": "2.1.0", - "source-map": "0.5.6", + "source-map": "0.5.7", "supports-color": "4.5.0", "tapable": "0.2.8", "uglifyjs-webpack-plugin": "0.4.6", "watchpack": "1.4.0", - "webpack-sources": "1.0.1", + "webpack-sources": "1.1.0", "yargs": "8.0.2" }, "dependencies": { @@ -7643,6 +6789,16 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==" }, + "ajv": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.1.1.tgz", + "integrity": "sha1-l41Zf7wrfQ5aXD3esUmmgvKr+g4=", + "requires": { + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, "enhanced-resolve": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", @@ -7664,7 +6820,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", "requires": { - "big.js": "3.1.3", + "big.js": "3.2.0", "emojis-list": "2.1.0", "json5": "0.5.1" } @@ -7674,8 +6830,8 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "errno": "0.1.4", - "readable-stream": "2.2.2" + "errno": "0.1.6", + "readable-stream": "2.3.4" } }, "supports-color": { @@ -7685,24 +6841,20 @@ "requires": { "has-flag": "2.0.0" } - }, - "tapable": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", - "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" } } }, "webpack-dev-middleware": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.11.0.tgz", - "integrity": "sha1-CWkdCXOjCtH4Ksc6EuIIfwpHVPk=", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", "dev": true, "requires": { "memory-fs": "0.4.1", - "mime": "1.3.6", + "mime": "1.6.0", "path-is-absolute": "1.0.1", - "range-parser": "1.2.0" + "range-parser": "1.2.0", + "time-stamp": "2.0.0" }, "dependencies": { "memory-fs": { @@ -7711,15 +6863,9 @@ "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.4", - "readable-stream": "2.2.2" + "errno": "0.1.6", + "readable-stream": "2.3.4" } - }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", - "dev": true } } }, @@ -7729,49 +6875,57 @@ "integrity": "sha1-DL1fLSrI1OWTqs1clwLnu9XlmJI=", "dev": true, "requires": { - "compression": "1.6.2", - "connect-history-api-fallback": "1.3.0", - "express": "4.15.3", + "compression": "1.7.1", + "connect-history-api-fallback": "1.5.0", + "express": "4.16.2", "http-proxy-middleware": "0.17.4", "open": "0.0.5", "optimist": "0.6.1", - "serve-index": "1.9.0", - "sockjs": "0.3.18", + "serve-index": "1.9.1", + "sockjs": "0.3.19", "sockjs-client": "1.1.4", "stream-cache": "0.0.2", "strip-ansi": "3.0.1", "supports-color": "3.2.3", - "webpack-dev-middleware": "1.11.0" + "webpack-dev-middleware": "1.12.2" } }, "webpack-sources": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.0.1.tgz", - "integrity": "sha512-05tMxipUCwHqYaVS8xc7sYPTly8PzXayRCB4dTxLhWTqlKUiwH6ezmEe0OSreL1c30LAuA3Zqmc+uEBUGFJDjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", + "integrity": "sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw==", "requires": { "source-list-map": "2.0.0", - "source-map": "0.5.6" + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "dev": true, "requires": { - "websocket-extensions": "0.1.1" + "http-parser-js": "0.4.10", + "websocket-extensions": "0.1.3" } }, "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", "dev": true }, "which": { - "version": "1.2.14", - "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz", - "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "requires": { "isexe": "2.0.0" } @@ -7818,9 +6972,9 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.1.tgz", - "integrity": "sha1-CC3bbGQehdS7RR8D1S8G6r2x8Bg=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.2.tgz", + "integrity": "sha1-iiRPoFJAHgjJiGz0SoUYnh/UBn8=", "requires": { "options": "0.0.6", "ultron": "1.0.2" @@ -7930,9 +7084,9 @@ "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" }, "zone.js": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.18.tgz", - "integrity": "sha512-knKOBQM0oea3/x9pdyDuDi7RhxDlJhOIkeixXSiTKWLgs4LpK37iBc+1HaHwzlciHUKT172CymJFKo8Xgh+44Q==" + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.20.tgz", + "integrity": "sha512-FXlA37ErSXCMy5RNBcGFgCI/Zivqzr0D19GuvDxhcYIJc7xkFp6c29DKyODJu0Zo+EMyur/WPPgcBh1EHjB9jA==" } } } diff --git a/frontend/package.json b/frontend/package.json index 210c8326e0f..8e81e1bab49 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -34,6 +34,7 @@ "@angular/platform-browser": "^4.4.5", "@angular/platform-browser-dynamic": "^4.4.5", "@angular/upgrade": "^4.4.5", + "@openproject/commonmark-ckeditor-build": "git+https://github.com/opf/commonmark-ckeditor-build.git#2c776a29eaa01fa14bfb9053c019c5a9b78927ae", "@types/angular": "^1.6.5", "@types/angular-mocks": "^1.5.9", "@types/assertion-error": "^1.0.30", @@ -76,6 +77,7 @@ "bundle-loader": "^0.5.4", "clean-webpack-plugin": "^0.1.15", "contra": "^1.9.4", + "copy-webpack-plugin": "^4.4.1", "core-js": "^2.5.1", "crossvent": "^1.5.4", "css-loader": "^0.9.0", diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 836e6da3713..935c5da6f2a 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -29,6 +29,7 @@ }, "compileOnSave": false, "exclude": [ - "node_modules" + "node_modules", + "ckeditor/*" ] } diff --git a/frontend/webpack-ckeditor-config.js b/frontend/webpack-ckeditor-config.js new file mode 100644 index 00000000000..d18a52f01df --- /dev/null +++ b/frontend/webpack-ckeditor-config.js @@ -0,0 +1,147 @@ +// -- copyright +// OpenProject is a project management system. +// Copyright (C) 2012-2015 the OpenProject Foundation (OPF) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License version 3. +// +// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +// Copyright (C) 2006-2013 Jean-Philippe Lang +// Copyright (C) 2010-2013 the ChiliProject Team +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +// See doc/COPYRIGHT.rdoc for more details. +// ++ + +var webpack = require('webpack'); +var fs = require('fs'); +var path = require('path'); +var _ = require('lodash'); +var autoprefixer = require('autoprefixer'); + +const CKEditorWebpackPlugin = require( '@ckeditor/ckeditor5-dev-webpack-plugin' ); +var CleanWebpackPlugin = require('clean-webpack-plugin'); +var ExtractTextPlugin = require('extract-text-webpack-plugin'); + +var mode = (process.env['RAILS_ENV'] || 'production').toLowerCase(); +var uglify = (mode !== 'development'); + +var node_root = path.resolve(__dirname, 'node_modules'); +var output_root = path.resolve(__dirname, '..', 'app', 'assets', 'javascripts'); +var bundle_output = path.resolve(output_root, 'editor') + +function getWebpackCKEConfig() { + config = { + entry: { + ckeditor: [path.resolve(__dirname, 'ckeditor', 'ckeditor.ts')] + }, + + module: { + rules: [ + { + test: /\.tsx?$/, + include: [ + path.resolve(__dirname, 'ckeditor'), + path.resolve(__dirname, 'app'), + ], + use: [ + { + loader: 'ts-loader', + options: { + logLevel: 'info', + configFile: path.resolve(__dirname, 'ckeditor', 'tsconfig.json') + } + } + ] + }, + { + // Or /ckeditor5-[^/]+\/theme\/icons\/[^/]+\.svg$/ if you want to limit this loader + // to CKEditor 5's icons only. + test: /\.svg$/, + + use: [ 'raw-loader' ] + }, + { + // Or /ckeditor5-[^/]+\/theme\/[^/]+\.scss$/ if you want to limit this loader + // to CKEditor 5's theme only. + test: /\.css$/, + + use: [ + 'style-loader', + { + loader: 'postcss-loader', + options: { + config: { path: path.resolve(__dirname, 'ckeditor', 'postcss.config.js') } + } + } + ] + }, + { + // Or /ckeditor5-[^/]+\/theme\/[^/]+\.scss$/ if you want to limit this loader + // to CKEditor 5's theme only. + test: /\.scss$/, + + use: [ + 'style-loader', + { + loader: 'css-loader', + options: { + minimize: true + } + }, + 'sass-loader' + ] + } + ] + }, + + output: { + path: bundle_output, + filename: 'openproject-[name].js', + library: '[name]' + }, + + resolve: { + modules: ['node_modules'], + extensions: ['.ts', '.tsx', '.js'], + alias: _.merge({ + 'core-components': path.resolve(__dirname, 'app', 'components'), + 'op-ckeditor': path.resolve(__dirname, 'ckeditor'), + }) + }, + + plugins: [ + + + // Editor i18n TODO + new CKEditorWebpackPlugin({ + // See https://ckeditor5.github.io/docs/nightly/ckeditor5/latest/features/ui-language.html + languages: [ 'en' ] + }), + + + // Clean the output directory + new CleanWebpackPlugin(['editor'], { + root: output_root, + verbose: true + }) + ] + }; + + return config; +} + +module.exports = getWebpackCKEConfig; diff --git a/frontend/webpack-main-config.js b/frontend/webpack-main-config.js index 82536846264..bd1deedb2ac 100644 --- a/frontend/webpack-main-config.js +++ b/frontend/webpack-main-config.js @@ -187,7 +187,9 @@ function getWebpackMainConfig() { }, resolve: { - modules: ['node_modules'], + modules: [ + 'node_modules', + ], extensions: ['.ts', '.tsx', '.js'], diff --git a/frontend/webpack-vendors-config.js b/frontend/webpack-vendors-config.js index d69d0036d9f..b40d9694eb7 100644 --- a/frontend/webpack-vendors-config.js +++ b/frontend/webpack-vendors-config.js @@ -27,23 +27,20 @@ // ++ var webpack = require('webpack'); -var fs = require('fs'); var path = require('path'); -var _ = require('lodash'); -var autoprefixer = require('autoprefixer'); -var ExtractTextPlugin = require('extract-text-webpack-plugin'); var CleanWebpackPlugin = require('clean-webpack-plugin'); +var CopyWebpackPlugin = require('copy-webpack-plugin'); var mode = (process.env['RAILS_ENV'] || 'production').toLowerCase(); var uglify = (mode !== 'development'); -var node_root = path.resolve(__dirname, 'node_modules'); var output_root = path.resolve(__dirname, '..', 'app', 'assets', 'javascripts'); var bundle_output = path.resolve(output_root, 'bundles') +var ckeditor_build_dist_path = path.resolve(__dirname, 'node_modules', '@openproject', 'commonmark-ckeditor-build', 'dist', 'openproject-ckeditor.js'); function getWebpackVendorsConfig() { - config = { + var config = { entry: { vendors: [path.resolve(__dirname, 'app', 'vendors.js')] }, @@ -81,7 +78,16 @@ function getWebpackVendorsConfig() { new CleanWebpackPlugin(['bundles'], { root: output_root, verbose: true - }) + }), + + // Copy linked ckeditor build dist + new CopyWebpackPlugin([ + { + from: ckeditor_build_dist_path, + to: path.resolve(output_root, 'editor', 'openproject-ckeditor.js'), + toType: 'file' + }], + { debug: 'info', copyUnmodified: true }) ] }; diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js index 83c6a0c0f92..445a71fabcf 100644 --- a/frontend/webpack.config.js +++ b/frontend/webpack.config.js @@ -30,7 +30,9 @@ var getWebpackMainConfig = require('./webpack-main-config'); var getWebpackTestConfig = require('./webpack-test-config'); module.exports = function(env) { - var configs = [getWebpackMainConfig()]; + var configs = [ + getWebpackMainConfig() + ]; if (env && env.testconfig) { console.log("Adding test config to build"); diff --git a/lib/open_project/journal_formatter/diff.rb b/lib/open_project/journal_formatter/diff.rb index f8645e98059..b3809ac4eb5 100644 --- a/lib/open_project/journal_formatter/diff.rb +++ b/lib/open_project/journal_formatter/diff.rb @@ -29,6 +29,8 @@ require_dependency 'journal_formatter/base' class OpenProject::JournalFormatter::Diff < JournalFormatter::Base + include OpenProject::StaticRouting::UrlHelpers + def render(key, values, options = {}) merge_options = { only_path: true, no_html: false }.merge(options) diff --git a/lib/open_project/text_formatting/filters/markdown_filter.rb b/lib/open_project/text_formatting/filters/markdown_filter.rb index 42f3a5551f0..fe96dffa125 100644 --- a/lib/open_project/text_formatting/filters/markdown_filter.rb +++ b/lib/open_project/text_formatting/filters/markdown_filter.rb @@ -34,17 +34,13 @@ module OpenProject::TextFormatting # Convert Markdown to HTML using CommonMarker def call - $stderr.puts "MARKDOWN" - html = '' - $stderr.puts(Benchmark.measure do - options = [:GITHUB_PRE_LANG] - options << :HARDBREAKS if context[:gfm] != false - extensions = context.fetch :commonmarker_extensions, - %i[table strikethrough tagfilter autolink] + options = [:GITHUB_PRE_LANG] + options << :HARDBREAKS if context[:gfm] != false + extensions = context.fetch :commonmarker_extensions, + %i[table strikethrough tagfilter autolink] - html = CommonMarker.render_html(text, options, extensions) - html.rstrip! - end) + html = CommonMarker.render_html(text, options, extensions) + html.rstrip! html end diff --git a/lib/open_project/text_formatting/filters/pattern_matcher_filter.rb b/lib/open_project/text_formatting/filters/pattern_matcher_filter.rb index ab9df59c930..e35643a5da7 100644 --- a/lib/open_project/text_formatting/filters/pattern_matcher_filter.rb +++ b/lib/open_project/text_formatting/filters/pattern_matcher_filter.rb @@ -39,14 +39,11 @@ module OpenProject::TextFormatting end def call - $stderr.puts "REGEX" - $stderr.puts(Benchmark.measure do - doc.search('.//text()').each do |node| - self.class.matchers.each do |matcher| - matcher.call(node, doc: doc, context: context) - end + doc.search('.//text()').each do |node| + self.class.matchers.each do |matcher| + matcher.call(node, doc: doc, context: context) end - end) + end doc end diff --git a/lib/open_project/text_formatting/filters/sanitization_filter.rb b/lib/open_project/text_formatting/filters/sanitization_filter.rb index d557beed78d..df5334ade44 100644 --- a/lib/open_project/text_formatting/filters/sanitization_filter.rb +++ b/lib/open_project/text_formatting/filters/sanitization_filter.rb @@ -31,14 +31,6 @@ module OpenProject::TextFormatting module Filters class SanitizationFilter < HTML::Pipeline::SanitizationFilter - def call - $stderr.puts "SANITIZE" - $stderr.puts(Benchmark.measure do - super - end) - - doc - end end end end diff --git a/lib/open_project/text_formatting/pipeline.rb b/lib/open_project/text_formatting/formatters/base.rb similarity index 72% rename from lib/open_project/text_formatting/pipeline.rb rename to lib/open_project/text_formatting/formatters/base.rb index ae4e152c902..33a5aa86a30 100644 --- a/lib/open_project/text_formatting/pipeline.rb +++ b/lib/open_project/text_formatting/formatters/base.rb @@ -1,5 +1,4 @@ #-- encoding: UTF-8 - #-- copyright # OpenProject is a project management system. # Copyright (C) 2012-2017 the OpenProject Foundation (OPF) @@ -28,33 +27,23 @@ # See doc/COPYRIGHT.rdoc for more details. #++ -module OpenProject::TextFormatting - class Pipeline - attr_reader :formatter, - :context, - :pipeline +module OpenProject::TextFormatting::Formatters + class Base + attr_reader :options, :project - def initialize(formatter, context:) - @formatter = formatter - @context = context - - @pipeline = HTML::Pipeline.new(located_filters, context) + def initialize(options) + @options = options + @project = options[:project] end - def to_html(text, call_context = {}) - pipeline.to_html(text, call_context).html_safe + def to_html(text) + raise NotImplementedError end - def to_document(text, call_context = {}) - pipeline.to_document text, call_context - end + protected def filters - [ - formatter, - :sanitization, - :pattern_matcher - ] + [] end protected @@ -70,4 +59,3 @@ module OpenProject::TextFormatting end end end - diff --git a/lib/open_project/text_formatting/formatters/markdown/formatter.rb b/lib/open_project/text_formatting/formatters/markdown/formatter.rb index 82720ffa6ee..3bdb6cb42a8 100644 --- a/lib/open_project/text_formatting/formatters/markdown/formatter.rb +++ b/lib/open_project/text_formatting/formatters/markdown/formatter.rb @@ -29,8 +29,42 @@ module OpenProject::TextFormatting::Formatters module Markdown - class Formatter - # TODO Used only for consistency with the formatters registry. + class Formatter < OpenProject::TextFormatting::Formatters::Base + attr_reader :context, + :pipeline + + def initialize(context) + @context = context + @pipeline = HTML::Pipeline.new(located_filters, context) + end + + def to_html(text) + pipeline.to_html(text, context).html_safe + end + + def to_document(text) + pipeline.to_document text, context + end + + def filters + [ + :markdown, + :sanitization, + :pattern_matcher + ] + end + + protected + + def located_filters + filters.map do |f| + if [Symbol, String].include? f.class + OpenProject::TextFormatting::Filters.const_get("#{f}_filter".classify) + else + f + end + end + end end end end diff --git a/lib/open_project/text_formatting/formatters/markdown/helper.rb b/lib/open_project/text_formatting/formatters/markdown/helper.rb index dd27267fe04..efa1a8a59f5 100644 --- a/lib/open_project/text_formatting/formatters/markdown/helper.rb +++ b/lib/open_project/text_formatting/formatters/markdown/helper.rb @@ -31,18 +31,12 @@ module OpenProject::TextFormatting::Formatters module Markdown module Helper def wikitoolbar_for(field_id) - - javascript_tag(<<-EOF) - // Toolbar for markdown. Here be dragons - EOF + # Kept only for compatibility end def initial_page_content(_page) "h1. #{@page.title}" end - - def heads_for_wiki_formatter - end end end end diff --git a/lib/open_project/text_formatting/formatters/markdown/textile_converter.rb b/lib/open_project/text_formatting/formatters/markdown/textile_converter.rb new file mode 100644 index 00000000000..9c5be523aa3 --- /dev/null +++ b/lib/open_project/text_formatting/formatters/markdown/textile_converter.rb @@ -0,0 +1,189 @@ +# Textile to Markdown converter +# Based on redmine_convert_textile_to_markown +# https://github.com/Ecodev/redmine_convert_textile_to_markown +# +# Original license: +# Copyright (c) 2016 +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +require 'open3' + +module OpenProject::TextFormatting::Formatters + module Markdown + class TextileConverter + attr_reader :src, :dst + + def initialize + end + + + def run! + puts 'Starting conversion of Textile fields to CommonMark+GFM.' + + ActiveRecord::Base.transaction do + converters.each do |handler| + handler.call! + end + end + + puts "\n-- Completed --" + ensure + cleanup + end + + private + + def converters + [ + method(:convert_settings) + method(:convert_models) + ] + end + + def cleanup + src.close + dst.close + end + + def convert_settings + print 'Converting settings ' + Setting.welcome_text = convert_textile_to_markdown(Setting.welcome_text) + print '.' + + Setting.registration_footer = Setting.registration_footer.dup.tap do |footer| + footer.transform_values { |val| convert_textile_to_markdown(val) } + print '.' + end + + puts 'done' + end + + def convert_models + models_to_convert.each do |the_class, attributes| + print "#{the_class.name} " + + # Iterate in batches to avoid plucking too much + the_class.in_batches(of: 200) do |relation| + relation.pluck(:id, *attributes).each do |values| + # Zip converted texts into + # { attr_a: textile, ... } + converted = values.drop(1).map(&method(:convert_textile_to_markdown)) + update_hash = Hash[attributes.zip(converted)] + the_class.where(id: values.first).update_all(update_hash) + + print '.' + end + end + puts 'done' + end + end + + def convert_textile_to_markdown(textile) + return '' unless textile.present? + + # Redmine support @ inside inline code marked with @ (such as "@git@github.com@"), but not pandoc. + # So we inject a placeholder that will be replaced later on with a real backtick. + tag_code = 'pandoc-unescaped-single-backtick' + textile.gsub!(/@([\S]+@[\S]+)@/, tag_code + '\\1' + tag_code) + + # Drop table colspan/rowspan notation ("|\2." or "|/2.") because pandoc does not support it + # See https://github.com/jgm/pandoc/issues/22 + textile.gsub!(/\|[\/\\]\d\. /, '| ') + + # Drop table alignement notation ("|>." or "|<." or "|=.") because pandoc does not support it + # See https://github.com/jgm/pandoc/issues/22 + textile.gsub!(/\|[<>=]\. /, '| ') + + # Move the class from to
 so pandoc can generate a code block with correct language
+        textile.gsub!(/()/, '\\1\\3\\2\\4')
+
+        # Remove the  directly inside 
, because pandoc would incorrectly preserve it
+        textile.gsub!(/(]*>)/, '\\1')
+        textile.gsub!(/<\/code>(<\/pre>)/, '\\1')
+
+        # Inject a class in all 
 that do not have a blank line before them
+        # This is to force pandoc to use fenced code block (```) otherwise it would
+        # use indented code block and would very likely need to insert an empty HTML
+        # comment "" (see http://pandoc.org/README.html#ending-a-list)
+        # which are unfortunately not supported by Redmine (see http://www.redmine.org/issues/20497)
+        tag_fenced_code_block = 'force-pandoc-to-ouput-fenced-code-block'
+        textile.gsub!(/([^\n])/, "\\1 class=\"#{tag_fenced_code_block}\"\\2")
+
+        # Force 
 to have a blank line before them
+        # Without this fix, a list of items containing 
 would not be interpreted as a list at all.
+        textile.gsub!(/([^\n])( at begining of lines
+        markdown.gsub!(/^((\\[*>])+)/) { $1.gsub("\\", "") }
+
+        # Add a blank line before lists
+        markdown.gsub!(/^([^*].*)\n\*/, "\\1\n\n*")
+
+        # Remove the injected tag
+        markdown.gsub!(' ' + tag_fenced_code_block, '')
+
+        # Replace placeholder with real backtick
+        markdown.gsub!(tag_code, '`')
+
+        # Un-escape Redmine link syntax to wiki pages
+        markdown.gsub!('\[\[', '[[')
+        markdown.gsub!('\]\]', ']]')
+
+        # Un-escape Redmine quotation mark "> " that pandoc is not aware of
+        markdown.gsub!(/(^|\n)> /, "\n> ")
+
+        return markdown
+      end
+
+      def models_to_convert
+        {
+          Announcement => [:text],
+          AttributeHelpText => [:help_text],
+          Comment => [:text],
+          WikiContent => [:text],
+          WorkPackage =>  [:description],
+          Message => [:content],
+          News => [:description],
+          Document => [:description],
+          Project => [:description],
+          Journal => [:notes],
+          AttachmentJournal => [:text],
+          MessageJournal => [:content],
+          WikiContentJournal => [:text],
+          WorkPackageJournal => [:description],
+          ## TODO
+          # CF Long text values
+          # Documents
+          # Meetings
+        }
+      end
+    end
+  end
+end
diff --git a/lib/open_project/text_formatting/formatters/plain/formatter.rb b/lib/open_project/text_formatting/formatters/plain/formatter.rb
index fc871f5687f..dd569164680 100644
--- a/lib/open_project/text_formatting/formatters/plain/formatter.rb
+++ b/lib/open_project/text_formatting/formatters/plain/formatter.rb
@@ -29,18 +29,25 @@
 
 module OpenProject::TextFormatting::Formatters
   module Plain
-    class Formatter
-      include ERB::Util
-      include ActionView::Helpers::TagHelper
-      include ActionView::Helpers::TextHelper
-      include ActionView::Helpers::UrlHelper
+    class Formatter < OpenProject::TextFormatting::Formatters::Base
+      attr_reader :context,
+                  :pipeline
 
-      def initialize(text)
-        @text = text
+      def initialize(context)
+        @context = context
+        @pipeline = HTML::Pipeline.new(located_filters, context)
       end
 
-      def to_html(*_args)
-        simple_format(auto_link(CGI::escapeHTML(@text)))
+      def to_html(text)
+        pipeline.to_html(text, context).html_safe
+      end
+
+      def to_document(text)
+        pipeline.to_document text, context
+      end
+
+      def filters
+        %i(plain pattern_matcher)
       end
     end
   end
diff --git a/lib/open_project/text_formatting/formatters/textile/formatter.rb b/lib/open_project/text_formatting/formatters/textile/formatter.rb
index e90e6ed3e74..869c913f75b 100644
--- a/lib/open_project/text_formatting/formatters/textile/formatter.rb
+++ b/lib/open_project/text_formatting/formatters/textile/formatter.rb
@@ -27,117 +27,485 @@
 # See doc/COPYRIGHT.rdoc for more details.
 #++
 
-require 'redcloth3'
-
 module OpenProject::TextFormatting::Formatters
   module Textile
-    class Formatter < RedCloth3
+    class Formatter < OpenProject::TextFormatting::Formatters::Base
+      attr_reader
+
+      include Redmine::WikiFormatting::Macros::Definitions
+      include ActionView::Helpers::SanitizeHelper
+      include Redmine::I18n
+      # used for the work package quick links
+      include WorkPackagesHelper
+      include ApplicationHelper
+      # Used for escaping helper 'h()'
       include ERB::Util
+      # Rails helper
+      include ActionView::Context
       include ActionView::Helpers::TagHelper
+      include ActionView::Helpers::UrlHelper
+      include ActionView::Helpers::TextHelper
+      # For route path helpers
+      include OpenProject::ObjectLinking
+      include OpenProject::StaticRouting::UrlHelpers
+      # Truncation
+      include OpenProject::TextFormatting::Truncation
 
-      # auto_link rule after textile rules so that it doesn't break !image_url! tags
-      RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto]
+      def controller; end
 
-      def initialize(*args)
-        super
+      def to_html(text)
+        edit = !!options[:edit]
+        # don't return html in edit mode when textile or text formatting is enabled
+        return text if edit
 
-        self.hard_breaks = true
-        self.no_span_caps = true
-        self.filter_styles = true
+        object = options[:object]
+        project = options[:project]
+        only_path = options.delete(:only_path) != false
+
+        # offer 'plain' as readable version for 'no formatting' to callers
+        format = options.delete(:format) { :textile }
+        text = RedclothWrapper.new(text).to_html
+
+        # TODO: transform modifications into WikiFormatting Helper, or at least ask the helper if he wants his stuff to be modified
+        @parsed_headings = []
+        text = parse_non_pre_blocks(text) { |text|
+          [:execute_macros, :parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings, :parse_relative_urls].each do |method_name|
+            send method_name, text, project, object, options[:attribute], only_path, options
+          end
+        }
+
+        if @parsed_headings.any?
+          replace_toc(text, @parsed_headings, options)
+        end
+
+        escape_non_macros(text)
+        text.html_safe
       end
 
-      def to_html(*_rules)
-        @toc = []
-        super(*RULES).to_s
+      ##
+      # Escape double curly braces after macro expansion.
+      # This will avoid arbitrary angular expressions to be evaluated in
+      # formatted text marked html_safe.
+      def escape_non_macros(text)
+        text.gsub!(/\{\{(?! \$root\.DOUBLE_LEFT_CURLY_BRACE)/, '{{ $root.DOUBLE_LEFT_CURLY_BRACE }}')
       end
 
-      private
-
-      # Patch for RedCloth.  Fixed in RedCloth r128 but _why hasn't released it yet.
-      # http://code.whytheluckystiff.net/redcloth/changeset/128
-      def hard_break(text)
-        text.gsub!(/(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, '\\1
') if hard_breaks - end - - # Patch to add code highlighting support to RedCloth - def smooth_offtags(text) - unless @pre_list.empty? - ## replace
 content
-          text.gsub!(//) do
-            content = @pre_list[$1.to_i]
-            if content.match(/\s?(.+)/m)
-              content = "" +
-                Redmine::SyntaxHighlighting.highlight_by_language($2, $1)
+      def parse_non_pre_blocks(text)
+        s = StringScanner.new(text)
+        tags = []
+        parsed = ''
+        while !s.eos?
+          s.scan(/(.*?)(<(\/)?(pre|code)(.*?)>|\z)/im)
+          text = s[1]
+          full_tag = s[2]
+          closing = s[3]
+          tag = s[4]
+          if tags.empty?
+            yield text
+          end
+          parsed << text
+          if tag
+            if closing
+              if tags.last == tag.downcase
+                tags.pop
+              end
+            else
+              tags << tag.downcase
             end
-            content
+            parsed << full_tag
           end
         end
-      end
-
-
-      def auto_link_regexp
-        @auto_link_regexp ||= begin
-          %r{
-              (                          # leading text
-                <\w+.*?>|                # leading HTML tag, or
-                [^=<>!:'"/]|             # leading punctuation, or
-                \{\{\w+\(|               # inside a macro?
-                ^                        # beginning of line
-              )
-              (
-                (?:https?://)|           # protocol spec, or
-                (?:s?ftps?://)|
-                (?:www\.)                # www.*
-              )
-              (
-                (\S+?)                   # url
-                (\/)?                    # slash
-              )
-              ((?:>)?|[^\w\=\/;\(\)]*?)               # post
-              (?=<|\s|$)
-             }x
+        # Close any non closing tags
+        while tag = tags.pop
+          parsed << ""
         end
+        parsed
       end
 
-      # Turns all urls into clickable links (code from Rails).
-      def inline_auto_link(text)
-        text.gsub!(auto_link_regexp) do
-          all = $&
-          leading = $1
-          proto = $2
-          url = $3
-          post = $6
-          if url.nil? || leading =~ /=]?/ || leading =~ /\{\{\w+\(/
-            # don't replace URLs that are already linked
-            # and URLs prefixed with ! !> !< != (textile images)
+
+      MACROS_RE = /
+                    (!)?                        # escaping
+                    (
+                    \{\{                        # opening tag
+                    ([\w]+)                     # macro name
+                    (\(([^\}]*)\))?             # optional arguments
+                    \}\}                        # closing tag
+                    )
+                  /x unless const_defined?(:MACROS_RE)
+
+      # Macros substitution
+      def execute_macros(text, project, obj, _attr, _only_path, options)
+        return if !!options[:edit]
+        text.gsub!(MACROS_RE) do
+          esc = $1
+          all = $2
+          macro = $3
+          args = ($5 || '').split(',').each(&:strip!)
+          if esc.nil?
+            begin
+              exec_macro(macro, obj, args, view: self, project: project)
+            rescue => e
+              "\
+              #{::I18n.t(:macro_execution_error, macro_name: macro)} (#{e})\
+              ".squish
+            rescue NotImplementedError
+              "\
+              #{::I18n.t(:macro_unavailable, macro_name: macro)}\
+              ".squish
+            end || all
+          else
             all
-          else
-            # Idea below : an URL with unbalanced parethesis and
-            # ending by ')' is put into external parenthesis
-            if url[-1] == ?) and ((url.count('(') - url.count(')')) < 0)
-              url = url[0..-2] # discard closing parenth from url
-              post = ')' + post # add closing parenth to post
-            end
-            tag = content_tag('a',
-                              proto + url,
-                              href: "#{proto == 'www.' ? 'http://www.' : proto}#{url}",
-                              class: 'external icon-context icon-copy')
-            %(#{leading}#{tag}#{post})
           end
         end
       end
 
-      # Turns all email addresses into clickable links (code from Rails).
-      def inline_auto_mailto(text)
-        text.gsub!(/((?]*>(.*)(#{Regexp.escape(mail)})(.*)<\/a>/)
-            mail
+      RELATIVE_LINK_RE = %r{
+        ]+?)')|
+              (?:"(\/[^>]+?)")
+            )
+          )|
+          [^>]
+        )*
+        >
+        [^<]*?<\/a>                     # content and closing link tag.
+      }x unless const_defined?(:RELATIVE_LINK_RE)
+
+      def parse_relative_urls(text, _project, _obj, _attr, only_path, _options)
+        return if only_path
+        text.gsub!(RELATIVE_LINK_RE) do |m|
+          href = $1
+          relative_url = $2 || $3
+          next m unless href.present?
+          request = options[:request]
+          if request.present?
+            # we have a request!
+            protocol = request.protocol
+            host_with_port = request.host_with_port
+          elsif @controller
+            # use the same methods as url_for in the Mailer
+            url_opts = @controller.class.default_url_options
+            next m unless url_opts && url_opts[:protocol] && url_opts[:host]
+            protocol = "#{url_opts[:protocol]}://"
+            host_with_port = url_opts[:host]
           else
-            content_tag('a', mail, href: "mailto:#{mail}", class: 'email')
+            next m
+          end
+          m.sub href, " href=\"#{protocol}#{host_with_port}#{relative_url}\""
+        end
+      end
+
+      def parse_inline_attachments(text, _project, obj, _attr, only_path, options)
+        # when using an image link, try to use an attachment, if possible
+        if options[:attachments] || (obj && obj.respond_to?(:attachments))
+          attachments = nil
+          text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m|
+            filename = $1.downcase
+            ext = $2
+            alt = $3
+            alttext = $4
+            attachments ||= (options[:attachments] || obj.attachments).sort_by(&:created_on).reverse
+            # search for the picture in attachments
+            if found = attachments.detect { |att| att.filename.downcase == filename }
+              image_url = url_for only_path: only_path, controller: '/attachments', action: 'download', id: found
+              desc = found.description.to_s.gsub('"', '')
+              if !desc.blank? && alttext.blank?
+                alt = " title=\"#{desc}\" alt=\"#{desc}\""
+              end
+              "src=\"#{image_url}\"#{alt}"
+            else
+              m
+            end
           end
         end
       end
+
+      # Wiki links
+      #
+      # Examples:
+      #   [[mypage]]
+      #   [[mypage|mytext]]
+      # wiki links can refer other project wikis, using project name or identifier:
+      #   [[project:]] -> wiki starting page
+      #   [[project:|mytext]]
+      #   [[project:mypage]]
+      #   [[project:mypage|mytext]]
+      def parse_wiki_links(text, project, _obj, _attr, only_path, options)
+        text.gsub!(/(!)?(\[\[([^\]\n\|]+)(\|([^\]\n\|]+))?\]\])/) do |_m|
+          link_project = project
+          esc = $1
+          all = $2
+          page = $3
+          title = $5
+          if esc.nil?
+            if page =~ /\A([^\:]+)\:(.*)\z/
+              link_project = Project.find_by(identifier: $1) || Project.find_by(name: $1)
+              page = $2
+              title ||= $1 if page.blank?
+            end
+
+            if link_project && link_project.wiki
+              # extract anchor
+              anchor = nil
+              if page =~ /\A(.+?)\#(.+)\z/
+                page = $1
+                anchor = $2
+              end
+              # Unescape the escaped entities from textile
+              page = CGI.unescapeHTML(page)
+              # check if page exists
+              wiki_page = link_project.wiki.find_page(page)
+              wiki_title = wiki_page.nil? ? page : wiki_page.title
+              url = case options[:wiki_links]
+              when :local;
+                "#{title}.html"
+              when :anchor;
+                "##{title}" # used for single-file wiki export
+              else
+                wiki_page_id = wiki_page.nil? ? page.to_url : wiki_page.slug
+                url_for(only_path: only_path, controller: '/wiki', action: 'show', project_id: link_project, id: wiki_page_id, anchor: anchor)
+              end
+              link_to(h(title || wiki_title), url, class: ('wiki-page' + (wiki_page ? '' : ' new')))
+            else
+              # project or wiki doesn't exist
+              all
+            end
+          else
+            all
+          end
+        end
+      end
+
+      # Redmine links
+      #
+      # Examples:
+      #   Issues:
+      #     #52 -> Link to issue #52
+      #   Changesets:
+      #     r52 -> Link to revision 52
+      #     commit:a85130f -> Link to scmid starting with a85130f
+      #   Documents:
+      #     document#17 -> Link to document with id 17
+      #     document:Greetings -> Link to the document with title "Greetings"
+      #     document:"Some document" -> Link to the document with title "Some document"
+      #   Versions:
+      #     version#3 -> Link to version with id 3
+      #     version:1.0.0 -> Link to version named "1.0.0"
+      #     version:"1.0 beta 2" -> Link to version named "1.0 beta 2"
+      #   Attachments:
+      #     attachment:file.zip -> Link to the attachment of the current object named file.zip
+      #   Source files:
+      #     source:some/file -> Link to the file located at /some/file in the project's repository
+      #     source:some/file@52 -> Link to the file's revision 52
+      #     source:some/file#L120 -> Link to line 120 of the file
+      #     source:some/file@52#L120 -> Link to line 120 of the file's revision 52
+      #     export:some/file -> Force the download of the file
+      #   Forum messages:
+      #     message#1218 -> Link to message with id 1218
+      #
+      #   Links can refer other objects from other projects, using project identifier:
+      #     identifier:r52
+      #     identifier:document:"Some document"
+      #     identifier:version:1.0.0
+      #     identifier:source:some/file
+      def parse_redmine_links(text, project, obj, attr, only_path, options)
+        text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-_]+):)?(attachment|version|commit|source|export|message|project|user)?((#+|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|\]|<|$)}) do |_m|
+          leading = $1
+          esc = $2
+          project_prefix = $3
+          project_identifier = $4
+          prefix = $5
+          sep = $7 || $9
+          identifier = $8 || $10
+          link = nil
+          if project_identifier
+            project = Project.visible.find_by(identifier: project_identifier)
+          end
+          if esc.nil?
+            if prefix.nil? && sep == 'r'
+              # project.changesets.visible raises an SQL error because of a double join on repositories
+              if project && project.repository && (changeset = Changeset.visible.find_by(repository_id: project.repository.id, revision: identifier))
+                link = link_to(h("#{project_prefix}r#{identifier}"), { only_path: only_path, controller: '/repositories', action: 'revision', project_id: project, rev: changeset.revision },
+                               class: 'changeset',
+                               title: truncate_single_line(changeset.comments, length: 100))
+              end
+            elsif sep == '#'
+              oid = identifier.to_i
+              case prefix
+              when nil
+                if work_package = WorkPackage.visible
+                  .includes(:status)
+                  .references(:statuses)
+                  .find_by(id: oid)
+                  link = link_to("##{oid}",
+                                 work_package_path_or_url(id: oid, only_path: only_path),
+                                 class: work_package_css_classes(work_package),
+                                 title: "#{truncate(work_package.subject, length: 100)} (#{work_package.status.try(:name)})")
+                end
+              when 'version'
+                if version = Version.visible.find_by(id: oid)
+                  link = link_to h(version.name), { only_path: only_path, controller: '/versions', action: 'show', id: version },
+                                 class: 'version'
+                end
+              when 'message'
+                if message = Message.visible.includes(:parent).find_by(id: oid)
+                  link = link_to_message(message, { only_path: only_path }, class: 'message')
+                end
+              when 'project'
+                if p = Project.visible.find_by(id: oid)
+                  link = link_to_project(p, { only_path: only_path }, class: 'project')
+                end
+              when 'user'
+                if user = User.in_visible_project.find_by(id: oid)
+                  link = link_to_user(user, class: 'user-mention')
+                end
+              end
+            elsif sep == '##'
+              oid = identifier.to_i
+              if work_package = WorkPackage.visible
+                .includes(:status)
+                .references(:statuses)
+                .find_by(id: oid)
+                link = work_package_quick_info(work_package, only_path: only_path)
+              end
+            elsif sep == '###'
+              oid = identifier.to_i
+              work_package = WorkPackage.visible
+                .includes(:status)
+                .references(:statuses)
+                .find_by(id: oid)
+              if work_package && obj && !(attr == :description && obj.id == work_package.id)
+                link = work_package_quick_info_with_description(work_package, only_path: only_path)
+              end
+            elsif sep == ':'
+              # removes the double quotes if any
+              name = identifier.gsub(%r{\A"(.*)"\z}, '\\1')
+              case prefix
+              when 'version'
+                if project && version = project.versions.visible.find_by(name: name)
+                  link = link_to h(version.name), { only_path: only_path, controller: '/versions', action: 'show', id: version },
+                                 class: 'version'
+                end
+              when 'commit'
+                if project && project.repository && (changeset = Changeset.visible.where(['repository_id = ? AND scmid LIKE ?', project.repository.id, "#{name}%"]).first)
+                  link = link_to h("#{project_prefix}#{name}"), { only_path: only_path, controller: '/repositories', action: 'revision', project_id: project, rev: changeset.identifier },
+                                 class: 'changeset',
+                                 title: truncate_single_line(changeset.comments, length: 100)
+                end
+              when 'source', 'export'
+                if project && project.repository && User.current.allowed_to?(:browse_repository, project)
+                  name =~ %r{\A[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?\z}
+                  path = $1
+                  rev = $3
+                  anchor = $5
+                  link = link_to h("#{project_prefix}#{prefix}:#{name}"), { controller: '/repositories', action: 'entry', project_id: project,
+                                                                            path: path.to_s,
+                                                                            rev: rev,
+                                                                            anchor: anchor,
+                                                                            format: (prefix == 'export' ? 'raw' : nil) },
+                                 class: (prefix == 'export' ? 'source download' : 'source')
+                end
+              when 'attachment'
+                attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil)
+                if attachments && attachment = attachments.detect { |a| a.filename == name }
+                  link = link_to h(attachment.filename), { only_path: only_path, controller: '/attachments', action: 'download', id: attachment },
+                                 class: 'attachment'
+                end
+              when 'project'
+                p = Project
+                  .visible
+                  .where(['projects.identifier = :s OR LOWER(projects.name) = :s',
+                          { s: name.downcase }])
+                  .first
+                if p
+                  link = link_to_project(p, { only_path: only_path }, class: 'project')
+                end
+              when 'user'
+                if user = User.in_visible_project.find_by(login: name)
+                  link = link_to_user(user, class: 'user-mention')
+                end
+              end
+            end
+          end
+          leading + (link || "#{project_prefix}#{prefix}#{sep}#{identifier}")
+        end
+      end
+
+      HEADING_RE = /]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE)
+
+      # Headings and TOC
+      # Adds ids and links to headings unless options[:headings] is set to false
+      def parse_headings(text, _project, _obj, _attr, _only_path, options)
+        return if options[:headings] == false
+
+        text.gsub!(HEADING_RE) do
+          level = $1.to_i
+          attrs = $2
+          content = $3
+          item = strip_tags(content).strip
+          tocitem = strip_tags(content.gsub(/
/, ' ')) + anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') + @parsed_headings << [level, anchor, tocitem] + url = full_url(anchor, options[:request]) + "
\n#{content}" + end + end + + TOC_RE = /

\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE) + + # Renders the TOC with given headings + def replace_toc(text, headings, options) + text.gsub!(TOC_RE) do + if headings.empty? + '' + else + div_class = 'toc' + div_class << ' right' if $1 == '>' + div_class << ' left' if $1 == '<' + out = "

" + out << " + + #{l(:label_table_of_contents)} + +
" + out << "
  • " + root = headings.map(&:first).min + current = root + started = false + headings.each do |level, anchor, item| + if level > current + out << '
    • ' * (level - current) + elsif level < current + out << "
    \n" * (current - level) + '
  • ' + elsif started + out << '
  • ' + end + url = full_url(anchor, options[:request]) + out << "#{item}" + current = level + started = true + end + out << '
' * (current - root) + out << '' + out << '
' + end + end + end + + # + # displays the current url plus an optional anchor + # + def full_url(anchor_name = '', current_request = nil) + return "##{anchor_name}" if current_request.nil? + current = current_request.original_fullpath + return current if anchor_name.blank? + "#{current}##{anchor_name}" + end end end end diff --git a/lib/open_project/text_formatting/formatters/textile/legacy_text_formatting.rb b/lib/open_project/text_formatting/formatters/textile/legacy_text_formatting.rb deleted file mode 100644 index 9a781d4c8f9..00000000000 --- a/lib/open_project/text_formatting/formatters/textile/legacy_text_formatting.rb +++ /dev/null @@ -1,514 +0,0 @@ -#-- encoding: UTF-8 -#-- copyright -# OpenProject is a project management system. -# Copyright (C) 2012-2017 the OpenProject Foundation (OPF) -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License version 3. -# -# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: -# Copyright (C) 2006-2017 Jean-Philippe Lang -# Copyright (C) 2010-2013 the ChiliProject Team -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# -# See doc/COPYRIGHT.rdoc for more details. -#++ - -module OpenProject::TextFormatting::Formatters - module Textile - class LegacyTextFormatting - include Redmine::WikiFormatting::Macros::Definitions - include ActionView::Helpers::SanitizeHelper - include Redmine::I18n - # used for the work package quick links - include WorkPackagesHelper - # Used for escaping helper 'h()' - include ERB::Util - # Rails helper - include ActionView::Helpers::TagHelper - include ActionView::Helpers::UrlHelper - include ActionView::Helpers::TextHelper - # For route path helpers - include OpenProject::ObjectLinking - include OpenProject::StaticRouting::UrlHelpers - # Truncation - include OpenProject::TextFormatting::Truncation - - def initialize(project) - @project = project - end - - def controller; end - - # Formats text according to system settings. - # 2 ways to call this method: - # * with a String: format_text(text, options) - # * with an object and one of its attribute: format_text(issue, :description, options) - def format_text(text, options) - edit = !!options[:edit] - # don't return html in edit mode when textile or text formatting is enabled - return text if edit - - object = options[:object] - project = options[:project] - only_path = options.delete(:only_path) != false - - # offer 'plain' as readable version for 'no formatting' to callers - format = options.delete(:format) { :textile } - text = OpenProject::TextFormatting::Formatters.formatter_for(format).new(text).to_html - - # TODO: transform modifications into WikiFormatting Helper, or at least ask the helper if he wants his stuff to be modified - @parsed_headings = [] - text = parse_non_pre_blocks(text) { |text| - [:execute_macros, :parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings, :parse_relative_urls].each do |method_name| - send method_name, text, project, object, options[:attribute], only_path, options - end - } - - if @parsed_headings.any? - replace_toc(text, @parsed_headings, options) - end - - escape_non_macros(text) - text.html_safe - end - - ## - # Escape double curly braces after macro expansion. - # This will avoid arbitrary angular expressions to be evaluated in - # formatted text marked html_safe. - def escape_non_macros(text) - text.gsub!(/\{\{(?! \$root\.DOUBLE_LEFT_CURLY_BRACE)/, '{{ $root.DOUBLE_LEFT_CURLY_BRACE }}') - end - - def parse_non_pre_blocks(text) - s = StringScanner.new(text) - tags = [] - parsed = '' - while !s.eos? - s.scan(/(.*?)(<(\/)?(pre|code)(.*?)>|\z)/im) - text = s[1] - full_tag = s[2] - closing = s[3] - tag = s[4] - if tags.empty? - yield text - end - parsed << text - if tag - if closing - if tags.last == tag.downcase - tags.pop - end - else - tags << tag.downcase - end - parsed << full_tag - end - end - # Close any non closing tags - while tag = tags.pop - parsed << "" - end - parsed - end - - - MACROS_RE = / - (!)? # escaping - ( - \{\{ # opening tag - ([\w]+) # macro name - (\(([^\}]*)\))? # optional arguments - \}\} # closing tag - ) - /x unless const_defined?(:MACROS_RE) - - # Macros substitution - def execute_macros(text, project, obj, _attr, _only_path, options) - return if !!options[:edit] - text.gsub!(MACROS_RE) do - esc = $1 - all = $2 - macro = $3 - args = ($5 || '').split(',').each(&:strip!) - if esc.nil? - begin - exec_macro(macro, obj, args, view: self, project: project) - rescue => e - "\ - #{::I18n.t(:macro_execution_error, macro_name: macro)} (#{e})\ - ".squish - rescue NotImplementedError - "\ - #{::I18n.t(:macro_unavailable, macro_name: macro)}\ - ".squish - end || all - else - all - end - end - end - - RELATIVE_LINK_RE = %r{ - ]+?)')| - (?:"(\/[^>]+?)") - ) - )| - [^>] - )* - > - [^<]*?<\/a> # content and closing link tag. - }x unless const_defined?(:RELATIVE_LINK_RE) - - def parse_relative_urls(text, _project, _obj, _attr, only_path, _options) - return if only_path - text.gsub!(RELATIVE_LINK_RE) do |m| - href = $1 - relative_url = $2 || $3 - next m unless href.present? - if defined?(request) && request.present? - # we have a request! - protocol = request.protocol - host_with_port = request.host_with_port - elsif @controller - # use the same methods as url_for in the Mailer - url_opts = @controller.class.default_url_options - next m unless url_opts && url_opts[:protocol] && url_opts[:host] - protocol = "#{url_opts[:protocol]}://" - host_with_port = url_opts[:host] - else - next m - end - m.sub href, " href=\"#{protocol}#{host_with_port}#{relative_url}\"" - end - end - - def parse_inline_attachments(text, _project, obj, _attr, only_path, options) - # when using an image link, try to use an attachment, if possible - if options[:attachments] || (obj && obj.respond_to?(:attachments)) - attachments = nil - text.gsub!(/src="([^\/"]+\.(bmp|gif|jpg|jpeg|png))"(\s+alt="([^"]*)")?/i) do |m| - filename = $1.downcase - ext = $2 - alt = $3 - alttext = $4 - attachments ||= (options[:attachments] || obj.attachments).sort_by(&:created_on).reverse - # search for the picture in attachments - if found = attachments.detect { |att| att.filename.downcase == filename } - image_url = url_for only_path: only_path, controller: '/attachments', action: 'download', id: found - desc = found.description.to_s.gsub('"', '') - if !desc.blank? && alttext.blank? - alt = " title=\"#{desc}\" alt=\"#{desc}\"" - end - "src=\"#{image_url}\"#{alt}" - else - m - end - end - end - end - - # Wiki links - # - # Examples: - # [[mypage]] - # [[mypage|mytext]] - # wiki links can refer other project wikis, using project name or identifier: - # [[project:]] -> wiki starting page - # [[project:|mytext]] - # [[project:mypage]] - # [[project:mypage|mytext]] - def parse_wiki_links(text, project, _obj, _attr, only_path, options) - text.gsub!(/(!)?(\[\[([^\]\n\|]+)(\|([^\]\n\|]+))?\]\])/) do |_m| - link_project = project - esc = $1 - all = $2 - page = $3 - title = $5 - if esc.nil? - if page =~ /\A([^\:]+)\:(.*)\z/ - link_project = Project.find_by(identifier: $1) || Project.find_by(name: $1) - page = $2 - title ||= $1 if page.blank? - end - - if link_project && link_project.wiki - # extract anchor - anchor = nil - if page =~ /\A(.+?)\#(.+)\z/ - page = $1 - anchor = $2 - end - # Unescape the escaped entities from textile - page = CGI.unescapeHTML(page) - # check if page exists - wiki_page = link_project.wiki.find_page(page) - wiki_title = wiki_page.nil? ? page : wiki_page.title - url = case options[:wiki_links] - when :local; - "#{title}.html" - when :anchor; - "##{title}" # used for single-file wiki export - else - wiki_page_id = wiki_page.nil? ? page.to_url : wiki_page.slug - url_for(only_path: only_path, controller: '/wiki', action: 'show', project_id: link_project, id: wiki_page_id, anchor: anchor) - end - link_to(h(title || wiki_title), url, class: ('wiki-page' + (wiki_page ? '' : ' new'))) - else - # project or wiki doesn't exist - all - end - else - all - end - end - end - - # Redmine links - # - # Examples: - # Issues: - # #52 -> Link to issue #52 - # Changesets: - # r52 -> Link to revision 52 - # commit:a85130f -> Link to scmid starting with a85130f - # Documents: - # document#17 -> Link to document with id 17 - # document:Greetings -> Link to the document with title "Greetings" - # document:"Some document" -> Link to the document with title "Some document" - # Versions: - # version#3 -> Link to version with id 3 - # version:1.0.0 -> Link to version named "1.0.0" - # version:"1.0 beta 2" -> Link to version named "1.0 beta 2" - # Attachments: - # attachment:file.zip -> Link to the attachment of the current object named file.zip - # Source files: - # source:some/file -> Link to the file located at /some/file in the project's repository - # source:some/file@52 -> Link to the file's revision 52 - # source:some/file#L120 -> Link to line 120 of the file - # source:some/file@52#L120 -> Link to line 120 of the file's revision 52 - # export:some/file -> Force the download of the file - # Forum messages: - # message#1218 -> Link to message with id 1218 - # - # Links can refer other objects from other projects, using project identifier: - # identifier:r52 - # identifier:document:"Some document" - # identifier:version:1.0.0 - # identifier:source:some/file - def parse_redmine_links(text, project, obj, attr, only_path, options) - text.gsub!(%r{([\s\(,\-\[\>]|^)(!)?(([a-z0-9\-_]+):)?(attachment|version|commit|source|export|message|project|user)?((#+|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|\]|<|$)}) do |_m| - leading = $1 - esc = $2 - project_prefix = $3 - project_identifier = $4 - prefix = $5 - sep = $7 || $9 - identifier = $8 || $10 - link = nil - if project_identifier - project = Project.visible.find_by(identifier: project_identifier) - end - if esc.nil? - if prefix.nil? && sep == 'r' - # project.changesets.visible raises an SQL error because of a double join on repositories - if project && project.repository && (changeset = Changeset.visible.find_by(repository_id: project.repository.id, revision: identifier)) - link = link_to(h("#{project_prefix}r#{identifier}"), { only_path: only_path, controller: '/repositories', action: 'revision', project_id: project, rev: changeset.revision }, - class: 'changeset', - title: truncate_single_line(changeset.comments, length: 100)) - end - elsif sep == '#' - oid = identifier.to_i - case prefix - when nil - if work_package = WorkPackage.visible - .includes(:status) - .references(:statuses) - .find_by(id: oid) - link = link_to("##{oid}", - work_package_path_or_url(id: oid, only_path: only_path), - class: work_package_css_classes(work_package), - title: "#{truncate(work_package.subject, length: 100)} (#{work_package.status.try(:name)})") - end - when 'version' - if version = Version.visible.find_by(id: oid) - link = link_to h(version.name), { only_path: only_path, controller: '/versions', action: 'show', id: version }, - class: 'version' - end - when 'message' - if message = Message.visible.includes(:parent).find_by(id: oid) - link = link_to_message(message, { only_path: only_path }, class: 'message') - end - when 'project' - if p = Project.visible.find_by(id: oid) - link = link_to_project(p, { only_path: only_path }, class: 'project') - end - when 'user' - if user = User.in_visible_project.find_by(id: oid) - link = link_to_user(user, class: 'user-mention') - end - end - elsif sep == '##' - oid = identifier.to_i - if work_package = WorkPackage.visible - .includes(:status) - .references(:statuses) - .find_by(id: oid) - link = work_package_quick_info(work_package, only_path: only_path) - end - elsif sep == '###' - oid = identifier.to_i - work_package = WorkPackage.visible - .includes(:status) - .references(:statuses) - .find_by(id: oid) - if work_package && obj && !(attr == :description && obj.id == work_package.id) - link = work_package_quick_info_with_description(work_package, only_path: only_path) - end - elsif sep == ':' - # removes the double quotes if any - name = identifier.gsub(%r{\A"(.*)"\z}, '\\1') - case prefix - when 'version' - if project && version = project.versions.visible.find_by(name: name) - link = link_to h(version.name), { only_path: only_path, controller: '/versions', action: 'show', id: version }, - class: 'version' - end - when 'commit' - if project && project.repository && (changeset = Changeset.visible.where(['repository_id = ? AND scmid LIKE ?', project.repository.id, "#{name}%"]).first) - link = link_to h("#{project_prefix}#{name}"), { only_path: only_path, controller: '/repositories', action: 'revision', project_id: project, rev: changeset.identifier }, - class: 'changeset', - title: truncate_single_line(changeset.comments, length: 100) - end - when 'source', 'export' - if project && project.repository && User.current.allowed_to?(:browse_repository, project) - name =~ %r{\A[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?\z} - path = $1 - rev = $3 - anchor = $5 - link = link_to h("#{project_prefix}#{prefix}:#{name}"), { controller: '/repositories', action: 'entry', project_id: project, - path: path.to_s, - rev: rev, - anchor: anchor, - format: (prefix == 'export' ? 'raw' : nil) }, - class: (prefix == 'export' ? 'source download' : 'source') - end - when 'attachment' - attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil) - if attachments && attachment = attachments.detect { |a| a.filename == name } - link = link_to h(attachment.filename), { only_path: only_path, controller: '/attachments', action: 'download', id: attachment }, - class: 'attachment' - end - when 'project' - p = Project - .visible - .where(['projects.identifier = :s OR LOWER(projects.name) = :s', - { s: name.downcase }]) - .first - if p - link = link_to_project(p, { only_path: only_path }, class: 'project') - end - when 'user' - if user = User.in_visible_project.find_by(login: name) - link = link_to_user(user, class: 'user-mention') - end - end - end - end - leading + (link || "#{project_prefix}#{prefix}#{sep}#{identifier}") - end - end - - HEADING_RE = /]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE) - - # Headings and TOC - # Adds ids and links to headings unless options[:headings] is set to false - def parse_headings(text, _project, _obj, _attr, _only_path, options) - return if options[:headings] == false - - text.gsub!(HEADING_RE) do - level = $1.to_i - attrs = $2 - content = $3 - item = strip_tags(content).strip - tocitem = strip_tags(content.gsub(/
/, ' ')) - anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') - @parsed_headings << [level, anchor, tocitem] - url = full_url(anchor, options[:request]) - "
\n#{content}" - end - end - - TOC_RE = /

\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE) - - # Renders the TOC with given headings - def replace_toc(text, headings, options) - text.gsub!(TOC_RE) do - if headings.empty? - '' - else - div_class = 'toc' - div_class << ' right' if $1 == '>' - div_class << ' left' if $1 == '<' - out = "

" - out << " - - #{l(:label_table_of_contents)} - -
" - out << "
  • " - root = headings.map(&:first).min - current = root - started = false - headings.each do |level, anchor, item| - if level > current - out << '
    • ' * (level - current) - elsif level < current - out << "
    \n" * (current - level) + '
  • ' - elsif started - out << '
  • ' - end - url = full_url(anchor, options[:request]) - out << "#{item}" - current = level - started = true - end - out << '
' * (current - root) - out << '' - out << '
' - end - end - end - - # - # displays the current url plus an optional anchor - # - def full_url(anchor_name = '', current_request = nil) - return "##{anchor_name}" if current_request.nil? - current = current_request.original_fullpath - return current if anchor_name.blank? - "#{current}##{anchor_name}" - end - end - end -end diff --git a/lib/open_project/text_formatting/formatters/textile/redcloth_wrapper.rb b/lib/open_project/text_formatting/formatters/textile/redcloth_wrapper.rb new file mode 100644 index 00000000000..7501751732e --- /dev/null +++ b/lib/open_project/text_formatting/formatters/textile/redcloth_wrapper.rb @@ -0,0 +1,143 @@ +#-- encoding: UTF-8 +#-- copyright +# OpenProject is a project management system. +# Copyright (C) 2012-2017 the OpenProject Foundation (OPF) +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License version 3. +# +# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: +# Copyright (C) 2006-2017 Jean-Philippe Lang +# Copyright (C) 2010-2013 the ChiliProject Team +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +# +# See doc/COPYRIGHT.rdoc for more details. +#++ + +require 'redcloth3' + +module OpenProject::TextFormatting::Formatters + module Textile + class RedclothWrapper < RedCloth3 + include ERB::Util + include ActionView::Helpers::TagHelper + + # auto_link rule after textile rules so that it doesn't break !image_url! tags + RULES = [:textile, :block_markdown_rule, :inline_auto_link, :inline_auto_mailto] + + def initialize(*args) + super + + self.hard_breaks = true + self.no_span_caps = true + self.filter_styles = true + end + + def to_html(*_rules) + @toc = [] + super(*RULES).to_s + end + + private + + # Patch for RedCloth. Fixed in RedCloth r128 but _why hasn't released it yet. + # http://code.whytheluckystiff.net/redcloth/changeset/128 + def hard_break(text) + text.gsub!(/(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, '\\1
') if hard_breaks + end + + # Patch to add code highlighting support to RedCloth + def smooth_offtags(text) + unless @pre_list.empty? + ## replace
 content
+          text.gsub!(//) do
+            content = @pre_list[$1.to_i]
+            if content.match(/\s?(.+)/m)
+              content = "" +
+                Redmine::SyntaxHighlighting.highlight_by_language($2, $1)
+            end
+            content
+          end
+        end
+      end
+
+
+      def auto_link_regexp
+        @auto_link_regexp ||= begin
+          %r{
+              (                          # leading text
+                <\w+.*?>|                # leading HTML tag, or
+                [^=<>!:'"/]|             # leading punctuation, or
+                \{\{\w+\(|               # inside a macro?
+                ^                        # beginning of line
+              )
+              (
+                (?:https?://)|           # protocol spec, or
+                (?:s?ftps?://)|
+                (?:www\.)                # www.*
+              )
+              (
+                (\S+?)                   # url
+                (\/)?                    # slash
+              )
+              ((?:>)?|[^\w\=\/;\(\)]*?)               # post
+              (?=<|\s|$)
+             }x
+        end
+      end
+
+      # Turns all urls into clickable links (code from Rails).
+      def inline_auto_link(text)
+        text.gsub!(auto_link_regexp) do
+          all = $&
+          leading = $1
+          proto = $2
+          url = $3
+          post = $6
+          if url.nil? || leading =~ /=]?/ || leading =~ /\{\{\w+\(/
+            # don't replace URLs that are already linked
+            # and URLs prefixed with ! !> !< != (textile images)
+            all
+          else
+            # Idea below : an URL with unbalanced parethesis and
+            # ending by ')' is put into external parenthesis
+            if url[-1] == ?) and ((url.count('(') - url.count(')')) < 0)
+              url = url[0..-2] # discard closing parenth from url
+              post = ')' + post # add closing parenth to post
+            end
+            tag = content_tag('a',
+                              proto + url,
+                              href: "#{proto == 'www.' ? 'http://www.' : proto}#{url}",
+                              class: 'external icon-context icon-copy')
+            %(#{leading}#{tag}#{post})
+          end
+        end
+      end
+
+      # Turns all email addresses into clickable links (code from Rails).
+      def inline_auto_mailto(text)
+        text.gsub!(/((?]*>(.*)(#{Regexp.escape(mail)})(.*)<\/a>/)
+            mail
+          else
+            content_tag('a', mail, href: "mailto:#{mail}", class: 'email')
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/lib/open_project/text_formatting/renderer.rb b/lib/open_project/text_formatting/renderer.rb
index b03fccb7982..7c5dc87737b 100644
--- a/lib/open_project/text_formatting/renderer.rb
+++ b/lib/open_project/text_formatting/renderer.rb
@@ -37,20 +37,8 @@ module OpenProject::TextFormatting
         # offer 'plain' as readable version for 'no formatting' to callers
         format = options.fetch(:format, Setting.text_formatting)
 
-        # Forward to the legacy text formatting for textile syntax
-        if format == 'textile'
-          return OpenProject::TextFormatting::Formatters::Textile::LegacyTextFormatting
-            .new(options[:project])
-            .format_text(text, options)
-        end
-
-        # Get the associated formatter
-        pipeline = OpenProject::TextFormatting::Pipeline.new(
-          format,
-          context: options
-        )
-
-        pipeline.to_html(text)
+        formatter = OpenProject::TextFormatting::Formatters.formatter_for(format).new(options)
+        formatter.to_html(text)
       end
     end
   end
diff --git a/lib/tasks/markdown.rake b/lib/tasks/markdown.rake
new file mode 100644
index 00000000000..6b8c9180f75
--- /dev/null
+++ b/lib/tasks/markdown.rake
@@ -0,0 +1,46 @@
+
+# Textile to Markdown converter
+# Based on redmine_convert_textile_to_markown
+# https://github.com/Ecodev/redmine_convert_textile_to_markown
+#
+# Original license:
+# Copyright (c) 2016
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+namespace :markdown do
+  task :convert_from_textile  => :environment do
+
+    warning = <<~EOS
+      **WARNING**
+      THIS IS NOT REVERSIBLE.
+      Ensure you have backed up your installation before running this task.
+
+      This rake task will modify EVERY formattable textile field in your database.
+      It uses pandoc to convert each textile field to GFM-Markdown.
+    EOS
+
+    printf "#{warning}\nPress 'y' to continue: "
+    prompt = STDIN.gets.chomp
+    exit(1) unless prompt == 'y'
+
+    converter = OpenProject::TextFormatting::Formatters::Markdown::TextileConverter.new
+    converter.run!
+  end
+end
diff --git a/spec/features/security/angular_xss_spec.rb b/spec/features/security/angular_xss_spec.rb
index bea29c20e6e..028e7a18168 100644
--- a/spec/features/security/angular_xss_spec.rb
+++ b/spec/features/security/angular_xss_spec.rb
@@ -86,7 +86,7 @@ describe 'Angular expression escaping', type: :feature do
       )
     }
     let(:user) { FactoryGirl.create :admin }
-    let(:field) { WorkPackageTextAreaField.new wp_page, 'description' }
+    let(:field) { WorkPackageEditorField.new wp_page, 'description' }
     let(:wp_page) { Pages::SplitWorkPackage.new(work_package, project) }
 
     before do
diff --git a/spec/features/work_packages/details/activity_comments_spec.rb b/spec/features/work_packages/details/activity_comments_spec.rb
index 9846f08e26c..b1621cc3c90 100644
--- a/spec/features/work_packages/details/activity_comments_spec.rb
+++ b/spec/features/work_packages/details/activity_comments_spec.rb
@@ -13,9 +13,9 @@ describe 'activity comments', js: true, selenium: true do
   let(:wp_page) { Pages::SplitWorkPackage.new(work_package, project) }
   let(:selector) { '.work-packages--activity--add-comment' }
   let(:comment_field) {
-    WorkPackageTextAreaField.new wp_page,
-                                 'comment',
-                                 selector: selector
+    WorkPackageEditorField.new wp_page,
+                               'comment',
+                               selector: selector
   }
   let(:initial_comment) { 'the first comment in this WP' }
 
@@ -167,7 +167,7 @@ describe 'activity comments', js: true, selenium: true do
 
           # Check the edit textarea
           activity.find('.icon-edit').click
-          edit = WorkPackageTextAreaField.new wp_page,
+          edit = WorkPackageEditorField.new wp_page,
                                               'comment',
                                               selector: '.user-comment--form'
 
@@ -184,7 +184,7 @@ describe 'activity comments', js: true, selenium: true do
 
           # Check the edit textarea
           activity.find('.icon-edit').click
-          edit = WorkPackageTextAreaField.new wp_page,
+          edit = WorkPackageEditorField.new wp_page,
                                               'comment',
                                               selector: '.user-comment--form'
 
diff --git a/spec/features/work_packages/details/custom_fields/custom_field_spec.rb b/spec/features/work_packages/details/custom_fields/custom_field_spec.rb
index 37f0e454575..3ddc6f3ef0f 100644
--- a/spec/features/work_packages/details/custom_fields/custom_field_spec.rb
+++ b/spec/features/work_packages/details/custom_fields/custom_field_spec.rb
@@ -43,7 +43,7 @@ describe 'custom field inplace editor', js: true do
       FactoryGirl.create(:text_issue_custom_field, name: 'LongText')
     }
     let(:initial_custom_values) { { custom_field.id => 'foo' } }
-    let(:field) { WorkPackageTextAreaField.new wp_page, :customField1 }
+    let(:field) { WorkPackageEditorField.new wp_page, :customField1 }
 
     it 'can cancel through the button only' do
       # Activate the field
diff --git a/spec/features/work_packages/details/inplace_editor/description_editor_spec.rb b/spec/features/work_packages/details/inplace_editor/description_editor_spec.rb
index 1772f77647e..cc71188b67b 100644
--- a/spec/features/work_packages/details/inplace_editor/description_editor_spec.rb
+++ b/spec/features/work_packages/details/inplace_editor/description_editor_spec.rb
@@ -17,7 +17,7 @@ describe 'description inplace editor', js: true, selenium: true do
     )
   }
   let(:user) { FactoryGirl.create :admin }
-  let(:field) { WorkPackageTextAreaField.new wp_page, 'description' }
+  let(:field) { WorkPackageEditorField.new wp_page, 'description' }
   let(:wp_page) { Pages::SplitWorkPackage.new(work_package, project) }
 
   before do
diff --git a/spec/features/work_packages/details/inplace_editor/shared_examples.rb b/spec/features/work_packages/details/inplace_editor/shared_examples.rb
index 839e35af1ca..b8771dd3283 100644
--- a/spec/features/work_packages/details/inplace_editor/shared_examples.rb
+++ b/spec/features/work_packages/details/inplace_editor/shared_examples.rb
@@ -97,7 +97,7 @@ shared_examples 'a cancellable field' do
 end
 
 shared_examples 'a previewable field' do
-  it 'can preview the field' do
+  xit 'can preview the field' do
     field.activate!
 
     field.input_element.set '*Highlight*'
@@ -116,7 +116,7 @@ end
 shared_examples 'a workpackage autocomplete field' do
   let!(:wp2) { FactoryGirl.create(:work_package, project: project, subject: 'AutoFoo') }
 
-  it 'autocompletes the other work package' do
+  xit 'autocompletes the other work package' do
     field.activate!
     field.input_element.send_keys(" ##{wp2.id}")
     expect(page).to have_selector('.atwho-view-ul li.cur', text: wp2.to_s.strip)
diff --git a/spec/features/work_packages/table/inline_create/parallel_creation_spec.rb b/spec/features/work_packages/table/inline_create/parallel_creation_spec.rb
index 54b3613adc8..f31639654e3 100644
--- a/spec/features/work_packages/table/inline_create/parallel_creation_spec.rb
+++ b/spec/features/work_packages/table/inline_create/parallel_creation_spec.rb
@@ -37,7 +37,7 @@ describe 'Parallel work package creation spec', js: true do
 
     # Create in split screen
     split = wp_table.create_wp_split_screen type.name
-    description_field = WorkPackageTextAreaField.new split, 'description'
+    description_field = WorkPackageEditorField.new split, 'description'
     description_field.expect_active!
     description_field.set_value description
   end
diff --git a/spec/features/work_packages/tabs/activity_tab_spec.rb b/spec/features/work_packages/tabs/activity_tab_spec.rb
index e2293fcbab9..e1bbf64ac38 100644
--- a/spec/features/work_packages/tabs/activity_tab_spec.rb
+++ b/spec/features/work_packages/tabs/activity_tab_spec.rb
@@ -147,17 +147,16 @@ describe 'Activity tab', js: true, selenium: true do
       it 'can quote a previous comment' do
         activity_tab.hover_action('1', :quote)
 
-        field = WorkPackageTextAreaField.new work_package_page,
+        field = WorkPackageEditorField.new work_package_page,
                                              'comment',
                                              selector: '.work-packages--activity--add-comment'
 
         expect(field.editing?).to be true
 
         # Add our comment
-        quote = field.input_element[:value]
-        expect(quote).to include("> #{initial_comment}")
-        quote << "\nthis is some remark under a quote"
-        field.input_element.set(quote)
+        quote = field.input_element[:innerHTML]
+        expect(quote).to have_selector('p', text: 'Anonymous wrote:')
+        expect(quote).to have_selector('blockquote', text: 'First comment on this wp.')
         field.submit_by_click
 
         expect(page).to have_selector('.user-comment > .message', count: 3)
diff --git a/spec_legacy/unit/lib/redmine/wiki_formatting/null_formatter_spec.rb b/spec/lib/open_project/text_formatting/plain_spec.rb
similarity index 83%
rename from spec_legacy/unit/lib/redmine/wiki_formatting/null_formatter_spec.rb
rename to spec/lib/open_project/text_formatting/plain_spec.rb
index def0affbcc7..4e6be8d60c2 100644
--- a/spec_legacy/unit/lib/redmine/wiki_formatting/null_formatter_spec.rb
+++ b/spec/lib/open_project/text_formatting/plain_spec.rb
@@ -27,12 +27,10 @@
 # See docs/COPYRIGHT.rdoc for more details.
 #++
 
-require_relative '../../../../legacy_spec_helper'
+require 'spec_helper'
 
-describe Redmine::WikiFormatting::NullFormatter::Formatter do
-  before do
-    @formatter = Redmine::WikiFormatting::NullFormatter::Formatter
-  end
+describe OpenProject::TextFormatting::Formatters::Plain::Formatter do
+  subject { described_class.new({}) }
 
   it 'should plain text' do
     assert_html_output('This is some input' => 'This is some input')
@@ -48,11 +46,11 @@ describe Redmine::WikiFormatting::NullFormatter::Formatter do
 
   def assert_html_output(to_test, expect_paragraph = true)
     to_test.each do |text, expected|
-      assert_equal((expect_paragraph ? "

#{expected}

" : expected), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n") + assert_equal((expect_paragraph ? "

#{expected}

" : expected), subject.to_html(text), "Formatting the following text failed:\n===\n#{text}\n===\n") end end def to_html(text) - @formatter.new(text).to_html + subject.to_html(text) end end diff --git a/spec_legacy/unit/lib/redmine/wiki_formatting/textile_formatter_spec.rb b/spec/lib/open_project/text_formatting/textile/textile_formatting_spec.rb similarity index 90% rename from spec_legacy/unit/lib/redmine/wiki_formatting/textile_formatter_spec.rb rename to spec/lib/open_project/text_formatting/textile/textile_formatting_spec.rb index eec93d8bd65..2986cb48864 100644 --- a/spec_legacy/unit/lib/redmine/wiki_formatting/textile_formatter_spec.rb +++ b/spec/lib/open_project/text_formatting/textile/textile_formatting_spec.rb @@ -27,15 +27,9 @@ # See docs/COPYRIGHT.rdoc for more details. #++ -require_relative '../../../../legacy_spec_helper' - -describe Redmine::WikiFormatting::Textile::Formatter do - include Rails::Dom::Testing::Assertions - - before do - @formatter = Redmine::WikiFormatting::Textile::Formatter - end +require 'spec_helper' +describe OpenProject::TextFormatting::Formatters::Textile::RedclothWrapper do MODIFIERS = { '*' => 'strong', # bold '_' => 'em', # italic @@ -167,7 +161,7 @@ Nullam commodo metus accumsan nulla. Curabitur lobortis dui id dolor.

He's right.

EXPECTED - assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '') + expect(expected.gsub(%r{\s+}, '')).to eq(to_html(raw).gsub(%r{\s+}, '')) end it 'should table' do @@ -189,7 +183,7 @@ RAW EXPECTED - assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '') + expect(expected.gsub(%r{\s+}, '')).to eq(to_html(raw).gsub(%r{\s+}, '')) end it 'should table with line breaks' do @@ -228,11 +222,11 @@ RAW EXPECTED - assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '') + expect(expected.gsub(%r{\s+}, '')).to eq(to_html(raw).gsub(%r{\s+}, '')) end it 'should textile should not mangle brackets' do - assert_equal '

[msg1][msg2]

', to_html('[msg1][msg2]') + expect(to_html('[msg1][msg2]')).to eq '

[msg1][msg2]

' end it 'should textile should escape image urls' do @@ -240,18 +234,19 @@ EXPECTED raw = '!/images/comment.png"onclick=alert('XSS');"!' expected = '

' - assert_equal expected.gsub(%r{\s+}, ''), to_html(raw).gsub(%r{\s+}, '') + expect(expected.gsub(%r{\s+}, '')).to eq(to_html(raw).gsub(%r{\s+}, '')) end private def assert_html_output(to_test, expect_paragraph = true) to_test.each do |text, expected| - assert_dom_equal((expect_paragraph ? "

#{expected}

" : expected), @formatter.new(text).to_html, "Formatting the following text failed:\n===\n#{text}\n===\n") + expected = expect_paragraph ? "

#{expected}

" : expected + expect(to_html(text)).to be_html_eql expected end end def to_html(text) - @formatter.new(text).to_html + described_class.new(text).to_html end end diff --git a/spec/lib/open_project/text_formatting/textile_spec.rb b/spec/lib/open_project/text_formatting/textile/textile_spec.rb similarity index 100% rename from spec/lib/open_project/text_formatting/textile_spec.rb rename to spec/lib/open_project/text_formatting/textile/textile_spec.rb diff --git a/spec_legacy/unit/lib/redmine/wiki_formatting_spec.rb b/spec/lib/open_project/text_formatting/wiki_formatting_spec.rb similarity index 52% rename from spec_legacy/unit/lib/redmine/wiki_formatting_spec.rb rename to spec/lib/open_project/text_formatting/wiki_formatting_spec.rb index 365f5592c3f..e69ab31443e 100644 --- a/spec_legacy/unit/lib/redmine/wiki_formatting_spec.rb +++ b/spec/lib/open_project/text_formatting/wiki_formatting_spec.rb @@ -26,17 +26,25 @@ # # See docs/COPYRIGHT.rdoc for more details. #++ -require 'legacy_spec_helper' +require 'spec_helper' -describe Redmine::WikiFormatting do - it 'should textile formatter' do - assert_equal Redmine::WikiFormatting::Textile::Formatter, Redmine::WikiFormatting.formatter_for('textile') - assert_equal Redmine::WikiFormatting::Textile::Helper, Redmine::WikiFormatting.helper_for('textile') +describe OpenProject::WikiFormatting do + it 'should markdown formatter' do + expect(OpenProject::TextFormatting::Formatters::Markdown::Formatter).to eq(OpenProject::TextFormatting::Formatters.formatter_for('markdown')) + expect(OpenProject::TextFormatting::Formatters::Markdown::Helper).to eq(OpenProject::TextFormatting::Formatters.helper_for('markdown')) end - it 'should null formatter' do - assert_equal Redmine::WikiFormatting::NullFormatter::Formatter, Redmine::WikiFormatting.formatter_for('') - assert_equal Redmine::WikiFormatting::NullFormatter::Helper, Redmine::WikiFormatting.helper_for('') + it 'should textile formatter' do + expect(OpenProject::TextFormatting::Formatters::Textile::Formatter).to eq(OpenProject::TextFormatting::Formatters.formatter_for('textile')) + expect(OpenProject::TextFormatting::Formatters::Textile::Helper).to eq(OpenProject::TextFormatting::Formatters.helper_for('textile')) + end + + it 'should plain formatter' do + expect(OpenProject::TextFormatting::Formatters::Plain::Formatter).to eq(OpenProject::TextFormatting::Formatters.formatter_for('plain')) + expect(OpenProject::TextFormatting::Formatters::Plain::Helper).to eq(OpenProject::TextFormatting::Formatters.helper_for('plain')) + + expect(OpenProject::TextFormatting::Formatters::Plain::Formatter).to eq(OpenProject::TextFormatting::Formatters.formatter_for('doesnotexist')) + expect(OpenProject::TextFormatting::Formatters::Plain::Helper).to eq(OpenProject::TextFormatting::Formatters.helper_for('doesnotexist')) end it 'should link urls and email addresses' do @@ -46,10 +54,10 @@ and an email address foo@example.net DIFF expected = <<-EXPECTED -

This is a sample *text* with a link: http://www.redmine.org
+

This is a sample *text* with a link: http://www.redmine.org
and an email address foo@example.net

EXPECTED - assert_equal expected.gsub(%r{[\r\n\t]}, ''), Redmine::WikiFormatting::NullFormatter::Formatter.new(raw).to_html.gsub(%r{[\r\n\t]}, '') + assert_equal expected.gsub(%r{[\r\n\t]}, ''),OpenProject::TextFormatting::Formatters::Plain::Formatter.new({}).to_html(raw).gsub(%r{[\r\n\t]}, '') end end diff --git a/spec/support/pages/abstract_work_package.rb b/spec/support/pages/abstract_work_package.rb index 360c59bd6f9..de3c20f86cd 100644 --- a/spec/support/pages/abstract_work_package.rb +++ b/spec/support/pages/abstract_work_package.rb @@ -154,12 +154,12 @@ module Pages cf = CustomField.find $1 if cf.field_format == 'text' - WorkPackageTextAreaField.new page, key + WorkPackageEditorField.new page, key else WorkPackageField.new page, key end elsif key == :description - WorkPackageTextAreaField.new page, key + WorkPackageEditorField.new page, key elsif key == :status WorkPackageStatusField.new page else diff --git a/spec/support/work_packages/work_package_editor_field.rb b/spec/support/work_packages/work_package_editor_field.rb new file mode 100644 index 00000000000..570d3fb0323 --- /dev/null +++ b/spec/support/work_packages/work_package_editor_field.rb @@ -0,0 +1,49 @@ +require_relative './work_package_field' + +class WorkPackageEditorField < WorkPackageField + + def input_selector + 'div.op-ckeditor-wrapper' + end + + def expect_save_button(enabled: true) + if enabled + expect(field_container).to have_no_selector("#{control_link}[disabled]") + else + expect(field_container).to have_selector("#{control_link}[disabled]") + end + end + + def expect_value(value) + expect(input_element.text).to eq(value) + end + + def save! + submit_by_click + end + + def submit_by_click + target = field_container.find(control_link) + scroll_to_element(target) + target.click + end + + def submit_by_keyboard + input_element.native.send_keys :tab + end + + def cancel_by_click + target = field_container.find(control_link(:cancel)) + scroll_to_element(target) + target.click + end + + def field_type + input_selector + end + + def control_link(action = :save) + raise 'Invalid link' unless [:save, :cancel].include?(action) + ".inplace-edit--control--#{action}" + end +end diff --git a/spec_legacy/functional/user_mailer_spec.rb b/spec_legacy/functional/user_mailer_spec.rb index 913c9ecbe12..cb3bd8ef06c 100644 --- a/spec_legacy/functional/user_mailer_spec.rb +++ b/spec_legacy/functional/user_mailer_spec.rb @@ -102,55 +102,11 @@ describe UserMailer, type: :mailer do end end - it 'should generated links with prefix' do - Setting.default_language = 'en' - Setting.host_name = 'mydomain.foo/rdm' - Setting.protocol = 'http' - - project, user, related_issue, issue, changeset, attachment, journal = setup_complex_issue_update - - assert UserMailer.work_package_updated(user, journal).deliver_now - assert last_email - - assert_select_email do - # link to the main ticket - assert_select 'a[href=?]', - "http://mydomain.foo/rdm/work_packages/#{issue.id}", - text: "My Type ##{issue.id}: My awesome Ticket" - # link to a description diff - assert_select 'li', text: /Description changed/ - assert_select 'li>a[href=?]', - "http://mydomain.foo/rdm/journals/#{journal.id}/diff/description", - text: 'Details' - # link to a referenced ticket - assert_select 'a[href=?][title=?]', - "http://mydomain.foo/rdm/work_packages/#{related_issue.id}", - "My related Ticket (#{related_issue.status})", - text: "##{related_issue.id}" - # link to a changeset - if changeset - assert_select 'a[href=?][title=?]', - url_for(controller: 'repositories', - action: 'revision', - project_id: project, - rev: changeset.revision), - 'This commit fixes #1, #2 and references #1 and #3', - text: "r#{changeset.revision}" - end - # link to an attachment - assert_select 'a[href=?]', - "http://mydomain.foo/rdm/attachments/#{attachment.id}/#{attachment.filename}", - text: "#{attachment.filename}" - end - end - - it 'should generated links with prefix and no relative url root' do - begin + context 'with prefix', with_config: { rails_relative_url_root: '/rdm' } do + it 'should generated links with prefix and relative url root' do Setting.default_language = 'en' - relative_url_root = OpenProject::Configuration['rails_relative_url_root'] - Setting.host_name = 'mydomain.foo/rdm' + Setting.host_name = 'mydomain.foo' Setting.protocol = 'http' - OpenProject::Configuration['rails_relative_url_root'] = nil project, user, related_issue, issue, changeset, attachment, journal = setup_complex_issue_update @@ -176,6 +132,7 @@ describe UserMailer, type: :mailer do if changeset assert_select 'a[href=?][title=?]', url_for(controller: 'repositories', + script_name: '/rdm', action: 'revision', project_id: project, rev: changeset.revision), @@ -187,9 +144,6 @@ describe UserMailer, type: :mailer do "http://mydomain.foo/rdm/attachments/#{attachment.id}/#{attachment.filename}", text: "#{attachment.filename}" end - ensure - # restore it - OpenProject::Configuration['rails_relative_url_root'] = relative_url_root end end