From 5e54cd4d4367f5d7b81c72d556ce9f17609f361b Mon Sep 17 00:00:00 2001 From: Eugenio Romano Date: Thu, 6 Jun 2019 16:47:50 +0100 Subject: [PATCH] Increase timeout and modify login async (#4795) * increase timeout and modify login async * run e2e if testing is changed * improve cdk fix * fix travis update projects * disable ghostMode lite server * lint fix * fix timeout * multiple try * Update content-services-e2e.sh * Update search-e2e.sh * Update process-services-e2e.sh * Update core-e2e.sh * Update protractor.conf.ts * fix unit * remove async * increqase notification time * 3 parallel * dix path issue in save * small refactor protractor ts * fix save * create license check first script adf cli * modify regex check * refactor notification history component * decrease notification * fix notification message problem * fix test * update packages wit high risk * revert cahnge login sso e2e * fix dep * fix documentation duplication and issue * fix after review * fix after review * try 6 parallel test * back to 3 parallel test no real time improve with 6 --- .travis.yml | 6 +- .../app-layout/app-layout.component.html | 2 + .../task-attachments.component.html | 2 +- docs/README.md | 10 +- docs/compatibility.md | 2 +- .../models/image-resolver.model.md | 2 +- .../models/row-filter.model.md | 2 +- .../services/document-list.service.md | 2 +- .../notification-history.component.md | 28 + docs/core/services/notification.service.md | 31 +- .../images/notification-history-component.png | Bin 0 -> 37912 bytes docs/extensions/services/extension.service.md | 2 +- docs/license-info/license-info-undefined.md | 2 +- docs/license-info/license-info-v3.0.0.md | 2 +- docs/license-info/license-info-v3.1.0.md | 2 +- docs/license-info/license-info-v3.2.0.md | 2 +- .../components/group-cloud.component.md | 2 +- .../components/people-cloud.component.md | 4 +- .../components/task-form-cloud.component.md | 36 +- .../services/apps-process-cloud.service.md | 7 +- .../services/form-cloud.service.md | 6 +- .../services/task-cloud.service.md | 4 + docs/release-notes/RelNote170.md | 6 +- docs/release-notes/RelNote200.md | 8 +- docs/release-notes/RelNote230.md | 2 +- docs/release-notes/RelNote250.md | 4 +- docs/release-notes/RelNote310.md | 12 +- docs/release-notes/RelNote320.md | 11 +- docs/release-notes/RelNote321.md | 9 - docs/tutorials/README.md | 2 +- docs/versionIndex.md | 2 +- .../directives/create-folder-directive.e2e.ts | 8 +- .../notifications-component.e2e.ts | 82 +- .../permissions/permissions-component.e2e.ts | 13 +- .../permissions/site-permissions.e2e.ts | 11 +- .../share-file/share-file.e2e.ts | 11 +- .../upload/user-permission.e2e.ts | 11 +- .../version/version-permissions.e2e.ts | 9 +- .../datatable/data-table-component.e2e.ts | 30 +- e2e/core/login/login-sso/login-sso.e2e.ts | 13 +- e2e/lite-server-proxy.js | 5 +- e2e/pages/adf/demo-shell/dataTablePage.ts | 2 +- .../process-services/taskListDemoPage.ts | 1 + e2e/pages/adf/dialog/shareDialog.ts | 6 - e2e/pages/adf/process-services/filtersPage.ts | 3 +- .../adf/process-services/taskDetailsPage.ts | 1 + .../process-attachmentList-actionMenu.e2e.ts | 3 +- .../processwithvariables-extensions.json | 1 + .../processes/processwithvariables.bpmn20.xml | 31 + .../processes/simpleProcess-extensions.json | 1 + .../processes/simpleProcess.bpmn20.xml | 31 + .../activiti7/simpleapp/simpleapp.json | 1 + e2e/test.config.js | 8 +- lib/cli/README.md | 24 + {tools => lib/cli/bin}/doc/licenseList.js | 63 +- lib/cli/bin/doc/templates/licensePage.ejs | 28 + lib/cli/package-lock.json | 402 +++ lib/cli/package.json | 25 + lib/core/core.module.ts | 7 +- lib/core/i18n/en.json | 5 + lib/core/index.ts | 1 + lib/core/info-drawer/info-drawer.component.ts | 4 +- lib/core/models/notification.model.ts | 21 + lib/core/models/public-api.ts | 1 + lib/core/notification-history/index.ts | 18 + .../notification-history.component.html | 33 + .../notification-history.component.scss | 23 + .../notification-history.component.spec.ts | 80 + .../notification-history.component.ts | 78 + .../notification-history.module.ts | 38 + lib/core/notification-history/public-api.ts | 19 + lib/core/services/notification.service.ts | 10 + .../components/user-info.component.scss | 1 - .../components/people/people.component.ts | 10 +- .../core/pages/data-table-component.page.ts | 8 +- lib/testing/src/lib/core/pages/login.page.ts | 12 +- .../core/pages/notification-history.page.ts | 52 + lib/testing/src/lib/core/pages/public-api.ts | 2 +- lib/tsconfig.doc.json | 59 + package-lock.json | 2716 +++++------------ package.json | 15 +- protractor.conf.ts | 169 +- scripts/npm-move-tag.sh | 4 +- scripts/npm-publish.sh | 1 + scripts/test-e2e-lib.sh | 9 +- scripts/travis/e2e/content-services-e2e.sh | 6 +- scripts/travis/e2e/core-e2e.sh | 13 +- scripts/travis/e2e/insights-e2e.sh | 2 +- .../travis/e2e/process-services-cloud-e2e.sh | 7 +- scripts/travis/e2e/process-services-e2e.sh | 8 +- scripts/travis/e2e/search-e2e.sh | 8 +- scripts/update-version.sh | 3 +- tools/doc/buildYamlSourceInfo.js | 14 +- tools/doc/docProcessor.js | 83 - tools/doc/mdNav.ts | 11 +- tools/doc/mqDefs.js | 9 +- tools/doc/reviewChecker.ts | 22 - tools/doc/templates/component.ejs | 6 +- tools/doc/templates/directive.ejs | 6 +- tools/doc/templates/gqIndex.ejs | 10 +- tools/doc/templates/licensePage.ejs | 4 +- tools/doc/templates/tutIndex.ejs | 4 +- tools/doc/tools/fileChecker.ts | 7 +- tools/doc/tools/gqIndex.js | 2 +- tools/doc/tools/gqIndex.ts | 4 +- tools/doc/tools/index.js | 17 +- tools/doc/tools/linkFixer.js | 7 - tools/doc/tools/linkFixer.ts | 19 +- tools/doc/tools/reducer.ts | 5 +- tools/doc/tools/seealso.js | 11 +- tools/doc/tools/sourceLinker.js | 8 +- tools/doc/tools/sourceLinker.ts | 10 +- tools/doc/tools/tsInfo.ts | 84 - tools/doc/tools/tutorialIndex.ts | 13 +- tools/doc/tools/typeLinker.js | 61 +- tools/doc/tools/typeLinker.ts | 63 +- tools/doc/tools/versionIndex.js | 12 +- tools/schematics/adf/package-lock.json | 190 +- 118 files changed, 2364 insertions(+), 2797 deletions(-) create mode 100644 docs/core/components/notification-history.component.md create mode 100644 docs/docassets/images/notification-history-component.png create mode 100755 e2e/resources/activiti7/simpleapp/processes/processwithvariables-extensions.json create mode 100755 e2e/resources/activiti7/simpleapp/processes/processwithvariables.bpmn20.xml create mode 100755 e2e/resources/activiti7/simpleapp/processes/simpleProcess-extensions.json create mode 100755 e2e/resources/activiti7/simpleapp/processes/simpleProcess.bpmn20.xml create mode 100755 e2e/resources/activiti7/simpleapp/simpleapp.json create mode 100644 lib/cli/README.md rename {tools => lib/cli/bin}/doc/licenseList.js (67%) mode change 100644 => 100755 create mode 100644 lib/cli/bin/doc/templates/licensePage.ejs create mode 100644 lib/cli/package-lock.json create mode 100644 lib/cli/package.json create mode 100644 lib/core/models/notification.model.ts create mode 100644 lib/core/notification-history/index.ts create mode 100644 lib/core/notification-history/notification-history.component.html create mode 100644 lib/core/notification-history/notification-history.component.scss create mode 100644 lib/core/notification-history/notification-history.component.spec.ts create mode 100644 lib/core/notification-history/notification-history.component.ts create mode 100644 lib/core/notification-history/notification-history.module.ts create mode 100644 lib/core/notification-history/public-api.ts create mode 100644 lib/testing/src/lib/core/pages/notification-history.page.ts create mode 100644 lib/tsconfig.doc.json diff --git a/.travis.yml b/.travis.yml index de5f204479a..0ae3987849a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,7 +15,7 @@ branches: only: - master - development - - /.*old-env.*/ + - /.*old-env.*/ - /.*next-release.*/ - /.*beta.*/ - /.*greenkeeper.*/ @@ -59,9 +59,9 @@ jobs: script: ./scripts/travis/deploy/deploy.sh - stage: Update children projects dependency #Update children projects dependency - name: Update Generator + name: Update Related Project if: tag =~ .*beta.* - script: ./scripts/travis/e2e/update-project.sh + script: ./scripts/update-project.sh - stage: e2e Test name: core script: ./scripts/travis/e2e/core-e2e.sh diff --git a/demo-shell/src/app/components/app-layout/app-layout.component.html b/demo-shell/src/app/components/app-layout/app-layout.component.html index 4db83becfa6..92d19af5099 100644 --- a/demo-shell/src/app/components/app-layout/app-layout.component.html +++ b/demo-shell/src/app/components/app-layout/app-layout.component.html @@ -25,6 +25,8 @@ + + diff --git a/demo-shell/src/app/components/process-service/task-attachments.component.html b/demo-shell/src/app/components/process-service/task-attachments.component.html index 471a790f2d7..bf7f8664268 100644 --- a/demo-shell/src/app/components/process-service/task-attachments.component.html +++ b/demo-shell/src/app/components/process-service/task-attachments.component.html @@ -1,5 +1,5 @@
-
+
diff --git a/docs/README.md b/docs/README.md index 01c8635c683..7f37375917c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -103,11 +103,13 @@ for more information about installing and using the source code. | [Login Dialog Panel component](core/components/login-dialog-panel.component.md) | Shows and manages a login dialog. | [Source](../lib/core/login/components/login-dialog-panel.component.ts) | | [Login Dialog component](core/components/login-dialog.component.md) | Allows a user to perform a login via a dialog. | [Source](../lib/core/login/components/login-dialog.component.ts) | | [Login component](core/components/login.component.md) | Authenticates to Alfresco Content Services and Alfresco Process Services. | [Source](../lib/core/login/components/login.component.ts) | +| [Notification History component](core/components/notification-history.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | This component is in the current status just an experimental component. | | +| The main purpose of the Notification history component is list all the notification received in the current session. They will disappear from the list after the refresh. | [Source](../lib/core/notification-history/notification-history.component.ts) | | | [Pagination Component](core/components/pagination.component.md) | Adds pagination to the component it is used with. | [Source](../lib/core/pagination/pagination.component.ts) | | [Sidebar action menu component](core/components/sidebar-action-menu.component.md) | Displays a sidebar-action menu information panel. | [Source](../lib/core/layout/components/sidebar-action/sidebar-action-menu.component.ts) | | [Sidenav Layout component](core/components/sidenav-layout.component.md) | Displays the standard three-region ADF application layout. | [Source](../lib/core/layout/components/sidenav-layout/sidenav-layout.component.ts) | | [Sorting Picker Component](core/components/sorting-picker.component.md) | Selects from a set of predefined sorting definitions and directions. | [Source](../lib/core/sorting-picker/sorting-picker.component.ts) | -| [Start Form component](core/components/start-form.component.md) | Displays the Start Form for a process. | [Source](../lib/core/form/components/start-form.component.ts) | +| [Start Form component](core/components/start-form.component.md) | Displays the Start Form for a process. | [Source](../lib/process-services/form/start-form.component.ts) | | [Text Mask directive](core/components/text-mask.component.md) | Implements text field input masks. | [Source](../lib/core/form/components/widgets/text/text-mask.component.ts) | | [Toolbar Divider Component](core/components/toolbar-divider.component.md) | Divides groups of elements in a Toolbar with a visual separator. | [Source](../lib/core/toolbar/toolbar-divider.component.ts) | | [Toolbar Title Component](core/components/toolbar-title.component.md) | Supplies custom HTML to be included in a Toolbar component title. | [Source](../lib/core/toolbar/toolbar-title.component.ts) | @@ -158,7 +160,7 @@ for more information about installing and using the source code. | [Format Space pipe](core/pipes/format-space.pipe.md) | Replaces all the white space in a string with a supplied character. | [Source](../lib/core/pipes/format-space.pipe.ts) | | [Full name pipe](core/pipes/full-name.pipe.md) | Joins the first and last name properties from a UserProcessModel object into a single string. | [Source](../lib/core/pipes/full-name.pipe.ts) | | [Mime Type Icon pipe](core/pipes/mime-type-icon.pipe.md) | Retrieves an icon to represent a MIME type. | [Source](../lib/core/pipes/mime-type-icon.pipe.ts) | -| [Multi Value pipe](core/pipes/multi-value.pipe.md) | Takes an array of strings and turns it into one string where items are separated by a separator. The default separator applied to the list is ', ', however, you can set your own separator in the params of the pipe. | [Source](../lib/core/pipes/multi-value.pipe.ts) | +| [](core/pipes/multi-value.pipe.md) | Takes an array of strings and turns it into one string where items are separated by a separator. The default separator applied to the list is ', ', however, you can set your own separator in the params of the pipe. | [Source](../lib/core/pipes/multi-value.pipe.ts) | | [Node Name Tooltip pipe](core/pipes/node-name-tooltip.pipe.md) | Formats the tooltip for a Node. | [Source](../lib/core/pipes/node-name-tooltip.pipe.ts) | | [Text Highlight pipe](core/pipes/text-highlight.pipe.md) | Adds highlighting to words or sections of text that match a search string. | [Source](../lib/core/pipes/text-highlight.pipe.ts) | | [Time Ago pipe](core/pipes/time-ago.pipe.md) | Converts a recent past date into a number of days ago. | [Source](../lib/core/pipes/time-ago.pipe.ts) | @@ -410,7 +412,7 @@ for more information about installing and using the source code. | [Edit Task Filter Cloud component](process-services-cloud/components/edit-task-filter-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Edits task filter details. | [Source](../lib/process-services-cloud/src/lib/task/task-filters/components/edit-task-filter-cloud.component.ts) | | [Form cloud custom outcomes component](process-services-cloud/components/form-cloud-custom-outcome.component.md) | Supplies custom outcome buttons to be included in Form cloud component. | [Source](../lib/process-services-cloud/src/lib/form/components/form-cloud-custom-outcomes.component.ts) | | [Form cloud component](process-services-cloud/components/form-cloud.component.md) | Shows a form from Process Services. | [Source](../lib/process-services-cloud/src/lib/form/components/form-cloud.component.ts) | -| [Form definition selector Cloud componet](process-services-cloud/components/form-definition-selector-cloud.component.md) | Allows one form to be selected. | [Source](../lib/process-services-cloud/src/lib/form-definition-selector/components/form-definition-selector-cloud.component.ts) | +| [Form definition selector Cloud componet](process-services-cloud/components/form-definition-selector-cloud.component.md) | Allows one form to be selected. | [Source](../lib/process-services-cloud/src/lib/form/components/form-definition-selector-cloud.component.ts) | | [Group Cloud component](process-services-cloud/components/group-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Searches Groups. | [Source](../lib/process-services-cloud/src/lib/group/components/group-cloud.component.ts) | | [People Cloud Component](process-services-cloud/components/people-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Allows one or more users to be selected (with auto-suggestion) based on the input parameters. | [Source](../lib/process-services-cloud/src/lib/task/start-task/components/people-cloud/people-cloud.component.ts) | | [Process Filters Cloud Component](process-services-cloud/components/process-filters-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Lists all available process filters and allows to select a filter. | [Source](../lib/process-services-cloud/src/lib/process/process-filters/components/process-filters-cloud.component.ts) | @@ -419,7 +421,7 @@ for more information about installing and using the source code. | [Start Process Cloud Component](process-services-cloud/components/start-process-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Starts a process. | [Source](../lib/process-services-cloud/src/lib/process/start-process/components/start-process-cloud.component.ts) | | [Start Task Cloud Component](process-services-cloud/components/start-task-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Creates/starts a new task for the specified app. | [Source](../lib/process-services-cloud/src/lib/task/start-task/components/start-task-cloud.component.ts) | | [Task Filters Cloud component](process-services-cloud/components/task-filters-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Shows all available filters. | [Source](../lib/process-services-cloud/src/lib/task/task-filters/components/task-filters-cloud.component.ts) | -| [Form cloud component](process-services-cloud/components/task-form-cloud.component.md) | Shows a form for a task. | [Source](../lib/process-services-cloud/src/lib/form/components/task-form-cloud.component.ts) | +| [Form cloud component](process-services-cloud/components/task-form-cloud.component.md) | Shows a form for a task. | [Source](../lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.ts) | | [Task Header Cloud Component](process-services-cloud/components/task-header-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Shows all the information related to a task. | [Source](../lib/process-services-cloud/src/lib/task/task-header/components/task-header-cloud.component.ts) | | [Task List Cloud component](process-services-cloud/components/task-list-cloud.component.md) ![Experimental](docassets/images/ExperimentalIcon.png) | Renders a list containing all the tasks matched by the parameters specified. | [Source](../lib/process-services-cloud/src/lib/task/task-list/components/task-list-cloud.component.ts) | diff --git a/docs/compatibility.md b/docs/compatibility.md index eb002796c89..0b7b5093629 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -20,7 +20,7 @@ You can find further information about released versions of ADF in the [version index](versionIndex.md) and the [release notes](release-notes/README.md). | ADF version | Content Services | Process Services | -| -- | -- | -- | +| --- | --- | --- | | [3.2.0](versionIndex.md#v320) - [3.2.1](versionIndex.md#v321) | **Full test:** v6.1.0
**Smoke test:** v5.2.4 | **Full test:** v7.1.0 (latest CI pipeline build), v1.9.0
**Smoke test:** v1.8.1 | | [3.1.0](versionIndex.md#v310) | **Full test:** v6.1.0 RC7
**Smoke test:** v5.2.4 | **Full test:** v2.0.0 (latest CI pipeline build), v1.9.0
**Smoke test:** v1.8.1 | | [3.0.0](versionIndex.md#v300) | **Full test:** v6.1.0 RC7
**Smoke test:** v5.2.4 | **Full test:** v2.0.0 (latest CI pipeline build), v1.9.0
**Smoke test:** v1.8.1 | diff --git a/docs/content-services/models/image-resolver.model.md b/docs/content-services/models/image-resolver.model.md index 1ea0d8592f1..5bca6809151 100644 --- a/docs/content-services/models/image-resolver.model.md +++ b/docs/content-services/models/image-resolver.model.md @@ -11,7 +11,7 @@ Defines the Image Resolver function used by the [Document List Component](../com ## Definitions -- `type` **[ImageResolver](../../../lib/content-services/document-list/data/image-resolver.model.ts)** = (row: [`DataRow`](../../../lib/core/datatable/data/data-row.model.ts), column: [`DataColumn`](../../../lib/core/datatable/data/data-column.model.ts)) => `string` +- `type` **[`ImageResolver`](../../../lib/content-services/document-list/data/image-resolver.model.ts)** = (row: [`DataRow`](../../../lib/core/datatable/data/data-row.model.ts), column: [`DataColumn`](../../../lib/core/datatable/data/data-column.model.ts)) => `string` - _row:_ [`DataRow`](../../../lib/core/datatable/data/data-row.model.ts) - Data that defines the row - _column:_ [`DataColumn`](../../../lib/core/datatable/data/data-column.model.ts) - Data that defines the column - **Returns** File path for the image diff --git a/docs/content-services/models/row-filter.model.md b/docs/content-services/models/row-filter.model.md index 894c8c4530a..f553ddb9a8f 100644 --- a/docs/content-services/models/row-filter.model.md +++ b/docs/content-services/models/row-filter.model.md @@ -11,7 +11,7 @@ Defines the Row Filter function used by the [Document List Component](../compone ## Definitions -- `type` **[RowFilter](../../../lib/content-services/document-list/data/row-filter.model.ts)** = (value: [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts), index: `number`, array: [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts)`[]`) => any +- `type` **[`RowFilter`](../../../lib/content-services/document-list/data/row-filter.model.ts)** = (value: [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts), index: `number`, array: [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts)`[]`) => any - _value:_ [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts) - Data that defines the row - _index:_ `number` - Index of the row within the list - _array:_ [`ShareDataRow`](../../../lib/content-services/document-list/data/share-data-row.model.ts)`[]` - The full set of rows for the list diff --git a/docs/content-services/services/document-list.service.md b/docs/content-services/services/document-list.service.md index 139b0795eac..c2a5630d7a9 100644 --- a/docs/content-services/services/document-list.service.md +++ b/docs/content-services/services/document-list.service.md @@ -48,7 +48,7 @@ Implements node operations used by the [Document List component](../components/d - _nodeId:_ `string` - - _pagination:_ [`PaginationModel`](../../../lib/core/models/pagination.model.ts) - - _includeFields:_ `string[]` - - - _where:_ `string` - (Optional) + - _where:_ `string` - (Optional) - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`DocumentLoaderNode`](../../../lib/content-services/document-list/models/document-folder.model.ts)`>` - - **moveNode**(nodeId: `string`, targetParentId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`NodeEntry`](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-core-rest-api/docs/NodeEntry.md)`>`
diff --git a/docs/core/components/notification-history.component.md b/docs/core/components/notification-history.component.md new file mode 100644 index 00000000000..f94c0b92bee --- /dev/null +++ b/docs/core/components/notification-history.component.md @@ -0,0 +1,28 @@ +--- +Title: Notification History component +Added: v3.3.0 +Status: Experimental +Last reviewed: 2019-06-05 +--- + +# [Notification History component](../../../lib/core/notification-history/notification-history.component.ts "Defined in notification-history.component.ts") + +This component is in the current status just an experimental component. +The main purpose of the [Notification history component](../../core/components/notification-history.component.md) is list all the notification received in the current session. They will disappear from the list after the refresh. + +![Notification history component](../../docassets/notification-history-component.png) + +## Basic Usage + +```html + +``` + +## Class members + +### Properties + +| Name | Type | Default value | Description | +| ---- | ---- | ------------- | ----------- | +| menuPositionX | `string` | "after" | Custom choice for opening the menu at the bottom. Can be `before` or `after`. | +| menuPositionY | `string` | "below" | Custom choice for opening the menu at the bottom. Can be `above` or `below`. | diff --git a/docs/core/services/notification.service.md b/docs/core/services/notification.service.md index 070995acac6..5fc8204a19b 100644 --- a/docs/core/services/notification.service.md +++ b/docs/core/services/notification.service.md @@ -28,22 +28,21 @@ Shows a notification message with optional feedback. - _action:_ `string` - Caption for the response button - _config:_ `number|MatSnackBarConfig` - (Optional) Time before notification disappears after being shown or MatSnackBarConfig object - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - Information/control object for the SnackBar -- **showError**(message: `string`, action: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
- Rase error message - - _message:_ `string` - The message (or resource key) to show. - - _action:_ `string` - Caption for the response button - - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - Information/control object for the SnackBar -- **showInfo**(message: `string`, action: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
- Rase info message - - _message:_ `string` - The message (or resource key) to show. - - _action:_ `string` - Caption for the response button - - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - Information/control object for the SnackBar -- **showWarning**(message: `string`, action: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
- Rase warning message - - _message:_ `string` - The message (or resource key) to show. - - _action:_ `string` - Caption for the response button - - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - Information/control object for the SnackBar - +- **showError**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+ Rase error message + - _message:_ `string` - Text message or translation key for the message. + - _action:_ `string` - (Optional) Action name + - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - +- **showInfo**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+ Rase info message + - _message:_ `string` - Text message or translation key for the message. + - _action:_ `string` - (Optional) Action name + - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - +- **showWarning**(message: `string`, action?: `string`): [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)``
+ Rase warning message + - _message:_ `string` - Text message or translation key for the message. + - _action:_ `string` - (Optional) Action name + - **Returns** [`MatSnackBarRef`](https://material.angular.io/components/snack-bar/overview)`` - ## Details diff --git a/docs/docassets/images/notification-history-component.png b/docs/docassets/images/notification-history-component.png new file mode 100644 index 0000000000000000000000000000000000000000..c8088309908d3f8c1d37962e835ca91df65adb0b GIT binary patch literal 37912 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

mrBJ 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 literal 0 HcmV?d00001 diff --git a/docs/extensions/services/extension.service.md b/docs/extensions/services/extension.service.md index 53a41f27823..9d96435cc2d 100644 --- a/docs/extensions/services/extension.service.md +++ b/docs/extensions/services/extension.service.md @@ -16,7 +16,7 @@ Manages and runs basic extension functionality. - **evaluateRule**(ruleId: `string`, context?: [`RuleContext`](../../../lib/extensions/src/lib/config/rule.extensions.ts)): `boolean`
Evaluates a rule. - _ruleId:_ `string` - ID of the rule to evaluate - - _context:_ [`RuleContext`](../../../lib/extensions/src/lib/config/rule.extensions.ts) - (Optional) (optional) Custom rule execution context. + - _context:_ [`RuleContext`](../../../lib/extensions/src/lib/config/rule.extensions.ts) - (Optional) Custom rule execution context. - **Returns** `boolean` - True if the rule passed, false otherwise - **getActionById**(id: `string`): [`ActionRef`](../../../lib/extensions/src/lib/config/action.extensions.ts)
Retrieves an action using its ID value. diff --git a/docs/license-info/license-info-undefined.md b/docs/license-info/license-info-undefined.md index 8d5583ee84f..a771ed9e8a1 100644 --- a/docs/license-info/license-info-undefined.md +++ b/docs/license-info/license-info-undefined.md @@ -9,7 +9,7 @@ This page lists all third party libraries that ADF depends on. ## Libraries | Name | Version | License | -| -- | -- | -- | +| --- | --- | --- | | [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | | [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | | [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | diff --git a/docs/license-info/license-info-v3.0.0.md b/docs/license-info/license-info-v3.0.0.md index 5e38e0788b9..82e3edea7e6 100644 --- a/docs/license-info/license-info-v3.0.0.md +++ b/docs/license-info/license-info-v3.0.0.md @@ -10,7 +10,7 @@ with links to their licenses. ## Libraries | Name | Version | License | -| -- | -- | -- | +| --- | --- | --- | | [@angular/compiler](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | | [@angular/core](https://github.com/angular/angular) | 7.0.3 | [MIT](http://www.opensource.org/licenses/MIT) | | [alfresco-components](https://github.com/Alfresco/alfresco-ng2-components) | 2.7.0-beta5 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | diff --git a/docs/license-info/license-info-v3.1.0.md b/docs/license-info/license-info-v3.1.0.md index bea70c46aa1..b8491aa2449 100644 --- a/docs/license-info/license-info-v3.1.0.md +++ b/docs/license-info/license-info-v3.1.0.md @@ -9,7 +9,7 @@ This page lists all third party libraries that ADF v3.1.0 depends on. ## Libraries | Name | Version | License | -| -- | -- | -- | +| --- | --- | --- | | [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.1.0-beta5 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | | [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 3.1.0-beta5 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | | [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 3.1.0-beta5 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | diff --git a/docs/license-info/license-info-v3.2.0.md b/docs/license-info/license-info-v3.2.0.md index 0bd168f678e..339f8791e3a 100644 --- a/docs/license-info/license-info-v3.2.0.md +++ b/docs/license-info/license-info-v3.2.0.md @@ -9,7 +9,7 @@ This page lists all third party libraries that ADF v3.2.0 depends on. ## Libraries | Name | Version | License | -| -- | -- | -- | +| --- | --- | --- | | [@alfresco/adf-content-services](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | | [@alfresco/adf-core](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | | [@alfresco/adf-extensions](https://github.com/Alfresco/alfresco-ng2-components) | 3.2.0-beta6 | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | diff --git a/docs/process-services-cloud/components/group-cloud.component.md b/docs/process-services-cloud/components/group-cloud.component.md index 54663768e7d..8a8ec1b2e18 100644 --- a/docs/process-services-cloud/components/group-cloud.component.md +++ b/docs/process-services-cloud/components/group-cloud.component.md @@ -29,8 +29,8 @@ Searches Groups. | appName | `string` | | Name of the application. If specified this shows the users who have access to the app. | | mode | `string` | | User selection mode (single/multiple). | | preSelectGroups | [`GroupModel`](../../../lib/process-services-cloud/src/lib/group/models/group.model.ts)`[]` | \[] | Array of users to be pre-selected. This pre-selects all users in multi selection mode and only the first user of the array in single selection mode. | -| searchGroupsControl | `FormControl` | new FormControl() | FormControl to search the group. | | roles | `string[]` | \[] | Role names of the groups to be listed. | +| searchGroupsControl | `FormControl` | new FormControl() | FormControl to search the group | | title | `string` | | Title of the field | ### Events diff --git a/docs/process-services-cloud/components/people-cloud.component.md b/docs/process-services-cloud/components/people-cloud.component.md index 880e4f1ffde..c3cb17eb9f8 100644 --- a/docs/process-services-cloud/components/people-cloud.component.md +++ b/docs/process-services-cloud/components/people-cloud.component.md @@ -28,9 +28,9 @@ Allows one or more users to be selected (with auto-suggestion) based on the inpu | mode | `string` | | User selection mode (single/multiple). | | preSelectUsers | [`IdentityUserModel`](../../../lib/core/userinfo/models/identity-user.model.ts)`[]` | | Array of users to be pre-selected. All users in the array are pre-selected in multi selection mode, but only the first user is pre-selected in single selection mode. Mandatory properties are: id, email, username | | roles | `string[]` | | Role names of the users to be listed. | +| searchUserCtrl | `FormControl` | new FormControl() | FormControl to search the user | | title | `string` | | Placeholder translation key | -| searchUserCtrl | `FormControl` | new FormControl() | FormControl to search the users. | -| validate | `Boolean` | false | This flag enables the validation on the preSelectUsers passed as input. In case the flag is true the components call the [identity service](../../../lib/testing/src/lib/core/actions/identity/identity.service.ts) to verify the validity of the information passed as input. Otherwise, no check will be done. | +| validate | `Boolean` | false | This flag enables the validation on the preSelectUsers passed as input. In case the flag is true the components call the identity service to verify the validity of the information passed as input. Otherwise, no check will be done. | ### Events diff --git a/docs/process-services-cloud/components/task-form-cloud.component.md b/docs/process-services-cloud/components/task-form-cloud.component.md index 748b0837d15..954cdb4f478 100644 --- a/docs/process-services-cloud/components/task-form-cloud.component.md +++ b/docs/process-services-cloud/components/task-form-cloud.component.md @@ -5,18 +5,10 @@ Status: Active Last reviewed: 2019-04-17 --- -# [Task form cloud component](../../../lib/process-services-cloud/src/lib/form/components/task-form-cloud.component.ts "Defined in task-form-cloud.component.ts") +# [Task form cloud component](../../../lib/process-services-cloud/src/lib/task/task-form/components/task-form-cloud.component.ts "Defined in task-form-cloud.component.ts") Shows a [`form`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) for a task. -## Contents - -- [Basic Usage](#basic-usage) -- [Class members](#class-members) - - [Properties](#properties) - - [Events](#events) -- [See also](#see-also) - ## Basic Usage ```html @@ -33,27 +25,27 @@ Shows a [`form`](../../../lib/process-services-cloud/src/lib/form/models/form-cl | Name | Type | Default value | Description | | ---- | ---- | ------------- | ----------- | | appName | `string` | | App id to fetch corresponding form and values. | -| taskId | `string` | | Task id to fetch corresponding form and values. | +| readOnly | `boolean` | false | Toggle readonly state of the task. | +| showCancelButton | `boolean` | true | Toggle rendering of the `Cancel` button. | +| showCompleteButton | `boolean` | true | Toggle rendering of the `Complete` button. | | showRefreshButton | `boolean` | false | Toggle rendering of the `Refresh` button. | | showValidationIcon | `boolean` | true | Toggle rendering of the `Validation` icon. | -| showCancelButton | `boolean` | true | Toggle rendering of the `Cancel` outcome button. | -| showCompleteButton | `boolean` | true | Toggle rendering of the `Complete` outcome button. | -| readOnly | `boolean` | false | Toggle readOnly state of the task. | +| taskId | `string` | | Task id to fetch corresponding form and values. | ### Events | Name | Type | Description | | ---- | ---- | ----------- | -| formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is saved. | -| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. | -| taskCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`string`>` | Emitted when the task is completed. | -| taskClaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`string`>` | Emitted when the task is claimed. | -| taskUnclaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`string`>` | Emitted when the task is unclaimed. | -| cancelClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`string`>` | Emitted when the cancel button is clicked. | +| cancelClick | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the cancel button is clicked. | | error | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when any error occurs. | +| formCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is submitted with the `Complete` outcome. | +| formSaved | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`<`[`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)`>` | Emitted when the form is saved. | +| taskClaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task is claimed. | +| taskCompleted | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task is completed. | +| taskUnclaimed | [`EventEmitter`](https://angular.io/api/core/EventEmitter)`` | Emitted when the task is unclaimed. | ## See also -- [Form component](./form-cloud.component.md) -- [Form field model](../../core/models/form-field.model.md) -- [Form cloud service](../services/form-cloud.service.md) +- [Form component](./form-cloud.component.md) +- [Form field model](../../core/models/form-field.model.md) +- [Form cloud service](../services/form-cloud.service.md) diff --git a/docs/process-services-cloud/services/apps-process-cloud.service.md b/docs/process-services-cloud/services/apps-process-cloud.service.md index 399cc0a6759..60686f7f81f 100644 --- a/docs/process-services-cloud/services/apps-process-cloud.service.md +++ b/docs/process-services-cloud/services/apps-process-cloud.service.md @@ -16,9 +16,12 @@ Gets details of deployed apps for the current user. - **getDeployedApplicationsByStatus**(status: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ApplicationInstanceModel`](../../../lib/process-services-cloud/src/lib/app/models/application-instance.model.ts)`[]>`
Gets a list of deployed apps for this user by status. - _status:_ `string` - Required status value - - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ApplicationInstanceModel`](../../../lib/process-services-cloud/src/lib/app/models/application-instance.model.ts)`[]>` - The list of deployed apps. + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`ApplicationInstanceModel`](../../../lib/process-services-cloud/src/lib/app/models/application-instance.model.ts)`[]>` - The list of deployed apps +- **hasDeployedApps**(): `boolean`
- You can override the behaviour by defining the required applications in app.config.json against the property `alfresco-deployed-apps`. The service will fetch the deployed apps only when there are no apps defined in the app.config.json + - **Returns** `boolean` - + +- **loadApps**()
## Details diff --git a/docs/process-services-cloud/services/form-cloud.service.md b/docs/process-services-cloud/services/form-cloud.service.md index 0c06cef3129..459b6461ec1 100644 --- a/docs/process-services-cloud/services/form-cloud.service.md +++ b/docs/process-services-cloud/services/form-cloud.service.md @@ -45,6 +45,10 @@ class MyComponent { - _appName:_ `string` - - **Returns** `string` - +- **getDropDownJsonData**(url: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FormFieldOption`](../../../lib/core/form/components/widgets/core/form-field-option.ts)`[]>`
+ Parses JSON data to create a corresponding form. + - _url:_ `string` - String data to make the request + - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`FormFieldOption`](../../../lib/core/form/components/widgets/core/form-field-option.ts)`[]>` - Array of FormFieldOption object - **getForm**(appName: `string`, taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)``
Gets a form definition. - _appName:_ `string` - Name of the app @@ -74,7 +78,7 @@ class MyComponent { - **parseForm**(json: `any`, data?: [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]`, readOnly: `boolean` = `false`): [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts)
Parses JSON data to create a corresponding form. - _json:_ `any` - JSON data to create the form - - _data:_ [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` - (Optional) (Optional) Values for the form's fields + - _data:_ [`TaskVariableCloud`](../../../lib/process-services-cloud/src/lib/form/models/task-variable-cloud.model.ts)`[]` - (Optional) Values for the form's fields - _readOnly:_ `boolean` - Toggles whether or not the form should be read-only - **Returns** [`FormCloud`](../../../lib/process-services-cloud/src/lib/form/models/form-cloud.model.ts) - [Form](../../../lib/process-services/task-list/models/form.model.ts) created from the JSON specification - **saveTaskForm**(appName: `string`, taskId: `string`, formId: `string`, formValues: [`FormValues`](../../../lib/core/form/components/widgets/core/form-values.ts)): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`
diff --git a/docs/process-services-cloud/services/task-cloud.service.md b/docs/process-services-cloud/services/task-cloud.service.md index 8589f850a3f..ab45210b112 100644 --- a/docs/process-services-cloud/services/task-cloud.service.md +++ b/docs/process-services-cloud/services/task-cloud.service.md @@ -46,6 +46,10 @@ Manages task cloud. - _appName:_ `string` - Name of the app - _taskId:_ `string` - ID of the task whose details you want - **Returns** [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>` - Task details +- **isTaskEditable**(taskDetails: [`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)): `boolean`
+ Validate if a task is editable. + - _taskDetails:_ [`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts) - task details object + - **Returns** `boolean` - Boolean value if the task is editable - **unclaimTask**(appName: `string`, taskId: `string`): [`Observable`](http://reactivex.io/documentation/observable.html)`<`[`TaskDetailsCloudModel`](../../../lib/process-services-cloud/src/lib/task/start-task/models/task-details-cloud.model.ts)`>`
Un-claims a task. - _appName:_ `string` - Name of the app diff --git a/docs/release-notes/RelNote170.md b/docs/release-notes/RelNote170.md index 337110e61a2..6047536e20a 100644 --- a/docs/release-notes/RelNote170.md +++ b/docs/release-notes/RelNote170.md @@ -246,8 +246,8 @@ Two new methods has been added into the alfresco-js-api to support retrieve the | API | Name | HTTP method | URL | Description | | --- | ---- | ----------- | --- | ----------- | -| _ActivitiPublicRestApi.[TaskApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/docs/TaskApi.md)_ | [**getTaskAuditJson**](https://github.com/Alfresco/alfresco-js-api/blob/a82ce3bbe56cb0944f8771d14193704b571adf96/src/alfresco-activiti-rest-api/docs/TaskApi.md#getTaskAuditJson) | **GET** | /api/enterprise/tasks/{taskId}/audit | Retrieve audit infromation in json format | -| _ActivitiPublicRestApi.[TaskApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/docs/TaskApi.md)_ | [**getTaskAuditPdf**](https://github.com/Alfresco/alfresco-js-api/blob/a82ce3bbe56cb0944f8771d14193704b571adf96/src/alfresco-activiti-rest-api/docs/TaskApi.md#getTaskAuditPdf) | **GET** | /app/rest/tasks/{taskId}/audit | Retrieve the task audit infromation in pdf format | +| _ActivitiPublicRestApi.[`TaskApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/docs/TaskApi.md)_ | [**getTaskAuditJson**](https://github.com/Alfresco/alfresco-js-api/blob/a82ce3bbe56cb0944f8771d14193704b571adf96/src/alfresco-activiti-rest-api/docs/TaskApi.md#getTaskAuditJson) | **GET** | /api/enterprise/tasks/{taskId}/audit | Retrieve audit infromation in json format | +| _ActivitiPublicRestApi.[`TaskApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/docs/TaskApi.md)_ | [**getTaskAuditPdf**](https://github.com/Alfresco/alfresco-js-api/blob/a82ce3bbe56cb0944f8771d14193704b571adf96/src/alfresco-activiti-rest-api/docs/TaskApi.md#getTaskAuditPdf) | **GET** | /app/rest/tasks/{taskId}/audit | Retrieve the task audit infromation in pdf format | For further details about those endepoints please refer to the [official documentation](https://github.com/Alfresco/alfresco-js-api/blob/master/src/alfresco-activiti-rest-api/docs/TaskApi.md) @@ -343,7 +343,7 @@ Release Notes - Apps Development Framework - Version 1.7. - \[[ADF-819](https://issues.alfresco.com/jira/browse/ADF-819)] - Snackbar does not appear when uploading files via DnD - \[[ADF-923](https://issues.alfresco.com/jira/browse/ADF-923)] - Involved user should not be able to see 'Complete' button as active in a task. - \[[ADF-939](https://issues.alfresco.com/jira/browse/ADF-939)] - [Login] Sign in button does not stay at the bottom -- \[[ADF-943](https://issues.alfresco.com/jira/browse/ADF-943)] - APS [ContentApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is not present on index.d.ts and [SitesApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/sites.api.ts) is not complete +- \[[ADF-943](https://issues.alfresco.com/jira/browse/ADF-943)] - APS [`ContentApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is not present on index.d.ts and [`SitesApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/sites.api.ts) is not complete - \[[ADF-945](https://issues.alfresco.com/jira/browse/ADF-945)] - 'Undefined' is displayed in 'attach file' widget after restore. - \[[ADF-950](https://issues.alfresco.com/jira/browse/ADF-950)] - when the [`Form`](../../lib/process-services/task-list/models/form.model.ts) in readonly mode you can edit the date - \[[ADF-957](https://issues.alfresco.com/jira/browse/ADF-957)] - Duplicate Rest calls are made for fields where Rest end points are given diff --git a/docs/release-notes/RelNote200.md b/docs/release-notes/RelNote200.md index a82a38475dc..f8187f3dc10 100644 --- a/docs/release-notes/RelNote200.md +++ b/docs/release-notes/RelNote200.md @@ -701,7 +701,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-1710](https://issues.alfresco.com/jira/browse/ADF-1710)] - An error is logged into the console when using data widget - \[[ADF-1711](https://issues.alfresco.com/jira/browse/ADF-1711)] - The adf-task-attachment-list component displays drag-and-drop area that is not working - \[[ADF-1712](https://issues.alfresco.com/jira/browse/ADF-1712)] - The adf-task-header component displays a Requeue button for none pooled tasks -- \[[ADF-1716](https://issues.alfresco.com/jira/browse/ADF-1716)] - Process List - processDefinitionKey is not part of the [ProcessInstanceQueryRepresentation](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ProcessInstanceQueryRepresentation.md) +- \[[ADF-1716](https://issues.alfresco.com/jira/browse/ADF-1716)] - Process List - processDefinitionKey is not part of the [`ProcessInstanceQueryRepresentation`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/activiti-rest-api/docs/ProcessInstanceQueryRepresentation.md) - \[[ADF-1718](https://issues.alfresco.com/jira/browse/ADF-1718)] - [`Pagination`](../../lib/content-services/document-list/models/document-library.model.ts) should not be displayed on Search Results page when there are no results - \[[ADF-1720](https://issues.alfresco.com/jira/browse/ADF-1720)] - Date-time picker is not working properly with other Date Display Format than default - \[[ADF-1722](https://issues.alfresco.com/jira/browse/ADF-1722)] - [object Object] appears in People control when selecting the same name @@ -738,7 +738,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-1824](https://issues.alfresco.com/jira/browse/ADF-1824)] - Moment js security issue - \[[ADF-1825](https://issues.alfresco.com/jira/browse/ADF-1825)] - [`Form`](../../lib/process-services/task-list/models/form.model.ts) field in start task no aligned - \[[ADF-1827](https://issues.alfresco.com/jira/browse/ADF-1827)] - 'Object Object' displayed on search results page -- \[[ADF-1829](https://issues.alfresco.com/jira/browse/ADF-1829)] - [PeopleApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/people.api.ts) - getSiteMembership wrong returned type +- \[[ADF-1829](https://issues.alfresco.com/jira/browse/ADF-1829)] - [`PeopleApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/people.api.ts) - getSiteMembership wrong returned type - \[[ADF-1830](https://issues.alfresco.com/jira/browse/ADF-1830)] - Cannot access processes or reports - \[[ADF-1832](https://issues.alfresco.com/jira/browse/ADF-1832)] - [Document List] IE 11 erro on click - \[[ADF-1835](https://issues.alfresco.com/jira/browse/ADF-1835)] - The pagination on search results page is not working properly @@ -746,7 +746,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-1839](https://issues.alfresco.com/jira/browse/ADF-1839)] - Login does not switch user preferences - \[[ADF-1856](https://issues.alfresco.com/jira/browse/ADF-1856)] - Document List - location fails for a user that has granular permissions - \[[ADF-1859](https://issues.alfresco.com/jira/browse/ADF-1859)] - The [document list component](../content-services/components/document-list.component.md) no longer exports [`ShareDataRow`](../../lib/content-services/document-list/data/share-data-row.model.ts) -- \[[ADF-1860](https://issues.alfresco.com/jira/browse/ADF-1860)] - [NodesApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/nodes.api.ts).getNodeChildren has wrong return type +- \[[ADF-1860](https://issues.alfresco.com/jira/browse/ADF-1860)] - [`NodesApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/nodes.api.ts).getNodeChildren has wrong return type - \[[ADF-1861](https://issues.alfresco.com/jira/browse/ADF-1861)] - Line breaks not displayed in "Display Text" widget in forms - \[[ADF-1862](https://issues.alfresco.com/jira/browse/ADF-1862)] - Adf toolbar should get the background color from the theme - \[[ADF-1865](https://issues.alfresco.com/jira/browse/ADF-1865)] - [Document List] "Empty View" does not wrap long text @@ -782,7 +782,7 @@ Release Notes - Apps Development Framework - Version 2.0. - \[[ADF-1951](https://issues.alfresco.com/jira/browse/ADF-1951)] - Date widget doesn't display the correct date. - \[[ADF-1956](https://issues.alfresco.com/jira/browse/ADF-1956)] - Date widget with advanced properties does not display value. - \[[ADF-1962](https://issues.alfresco.com/jira/browse/ADF-1962)] - getContentThumbnailUrl returns file data instead or URL -- \[[ADF-1963](https://issues.alfresco.com/jira/browse/ADF-1963)] - [ContentApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is missing the preview rendition API +- \[[ADF-1963](https://issues.alfresco.com/jira/browse/ADF-1963)] - [`ContentApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/api/content.api.ts) is missing the preview rendition API - \[[ADF-1964](https://issues.alfresco.com/jira/browse/ADF-1964)] - [Demo Shell] Max size filter is not switched off. - \[[ADF-1965](https://issues.alfresco.com/jira/browse/ADF-1965)] - 'Upload file' button is enabled if user does not have permission to upload a file/folder - \[[ADF-1966](https://issues.alfresco.com/jira/browse/ADF-1966)] - Wrong sort on Document List diff --git a/docs/release-notes/RelNote230.md b/docs/release-notes/RelNote230.md index 56fb9dfb241..17d148762a7 100644 --- a/docs/release-notes/RelNote230.md +++ b/docs/release-notes/RelNote230.md @@ -324,7 +324,7 @@ Release Notes - Apps Development Framework - Version 2.3.0 - \[[ADF-2442](https://issues.alfresco.com/jira/browse/ADF-2442)] - [Search Service](../../lib/core/services/search.service.ts) has wrong types for the 'search' API - \[[ADF-2443](https://issues.alfresco.com/jira/browse/ADF-2443)] - Typo in the UserPreferences service - \[[ADF-2444](https://issues.alfresco.com/jira/browse/ADF-2444)] - CLONE - Incorrect Items per page values on all lists after upgrade to ADF 2.2.0 -- \[[ADF-2448](https://issues.alfresco.com/jira/browse/ADF-2448)] - Wrong type definition for [RequestPagination](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/search-rest-api/docs/RequestPagination.md) +- \[[ADF-2448](https://issues.alfresco.com/jira/browse/ADF-2448)] - Wrong type definition for [`RequestPagination`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/search-rest-api/docs/RequestPagination.md) - \[[ADF-2450](https://issues.alfresco.com/jira/browse/ADF-2450)] - Search api type definition is not defined - \[[ADF-2454](https://issues.alfresco.com/jira/browse/ADF-2454)] - Login dialog icon and header text not centered correctly - \[[ADF-2455](https://issues.alfresco.com/jira/browse/ADF-2455)] - Document List does not render thumbnails diff --git a/docs/release-notes/RelNote250.md b/docs/release-notes/RelNote250.md index d047cd68c4c..87d811996e1 100644 --- a/docs/release-notes/RelNote250.md +++ b/docs/release-notes/RelNote250.md @@ -338,7 +338,7 @@ Release Notes - Apps Development Framework - Version 2.5.0 ] - CLONE - Thumbs.db files are uploading with a folder upload - \[ [ADF-3289](https://issues.alfresco.com/jira/browse/ADF-3289) - ] - [AppsDefinitionApi](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/src/api/AppsDefinitionApi.ts) contains two methods with same name and different firms + ] - [`AppsDefinitionApi`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api-legacy/activiti-rest-api/src/api/AppsDefinitionApi.ts) contains two methods with same name and different firms - \[ [ADF-3292](https://issues.alfresco.com/jira/browse/ADF-3292) ] - CLONE - Filter category should be deselected when user makes a new search query @@ -374,7 +374,7 @@ Release Notes - Apps Development Framework - Version 2.5.0 ] - Refresh button is not displayed on the form - \[ [ADF-3383](https://issues.alfresco.com/jira/browse/ADF-3383) - ] - Incorrect datatype for password in [PersonBodyCreate](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/model/personBodyCreate.ts) in index.d.ts + ] - Incorrect datatype for password in [`PersonBodyCreate`](https://github.com/Alfresco/alfresco-js-api/blob/development/src/api/content-rest-api/model/personBodyCreate.ts) in index.d.ts - \[ [ADF-3386](https://issues.alfresco.com/jira/browse/ADF-3386) ] - Task Filters accordion is not expanding / collapsing diff --git a/docs/release-notes/RelNote310.md b/docs/release-notes/RelNote310.md index 301303437ef..0a94d720958 100644 --- a/docs/release-notes/RelNote310.md +++ b/docs/release-notes/RelNote310.md @@ -382,13 +382,13 @@ Below is the list of JIRA issues that were closed for this release. - [ADF-3497](https://issues.alfresco.com/jira/browse/ADF-3497) - Facet intervals on search filter -- [ADF-3677](https://issues.alfresco.com/jira/browse/ADF-3677) - [SearchQueryBuilderService](../content-services/services/search-query-builder.service.md) to support highlight +- [ADF-3677](https://issues.alfresco.com/jira/browse/ADF-3677) - [`SearchQueryBuilderService`](../content-services/services/search-query-builder.service.md) to support highlight - [ADF-3735](https://issues.alfresco.com/jira/browse/ADF-3735) - SSO Login Error for [login component](../core/components/login.component.md) - [ADF-3798](https://issues.alfresco.com/jira/browse/ADF-3798) - [Demo Shell][aps2] Show Task list related to a Process -- [ADF-4003](https://issues.alfresco.com/jira/browse/ADF-4003) - Add roles filtering to [PeopleCloudComponent](../process-services-cloud/components/people-cloud.component.md) +- [ADF-4003](https://issues.alfresco.com/jira/browse/ADF-4003) - Add roles filtering to [`PeopleCloudComponent`](../process-services-cloud/components/people-cloud.component.md) - [ADF-4078](https://issues.alfresco.com/jira/browse/ADF-4078) - Fixed headers in the document list @@ -469,7 +469,7 @@ Below is the list of JIRA issues that were closed for this release. - [ADF-3934](https://issues.alfresco.com/jira/browse/ADF-3934) - [People Cloud Component](../process-services-cloud/components/people-cloud.component.md) - Remove the concept of assignee -- [ADF-3979](https://issues.alfresco.com/jira/browse/ADF-3979) - [GroupCloudComponent](../process-services-cloud/components/group-cloud.component.md) should be able to detect "preSelectGroups" input changes +- [ADF-3979](https://issues.alfresco.com/jira/browse/ADF-3979) - [`GroupCloudComponent`](../process-services-cloud/components/group-cloud.component.md) should be able to detect "preSelectGroups" input changes - [ADF-3989](https://issues.alfresco.com/jira/browse/ADF-3989) - The list of apps in 'appName' filter is duplicated after switching between saved filters @@ -495,7 +495,7 @@ Below is the list of JIRA issues that were closed for this release. - [ADF-4154](https://issues.alfresco.com/jira/browse/ADF-4154) - Unit tests failing after upgrade to ADF 3.1.0-beta3 -- [ADF-4156](https://issues.alfresco.com/jira/browse/ADF-4156) - Regression in [TaskListComponent](../process-services/components/task-list.component.md) Caused by in-place Date Formatting +- [ADF-4156](https://issues.alfresco.com/jira/browse/ADF-4156) - Regression in [`TaskListComponent`](../process-services/components/task-list.component.md) Caused by in-place Date Formatting - [ADF-4165](https://issues.alfresco.com/jira/browse/ADF-4165) - ADF 3.0 Not able to login with implicitFlow false @@ -529,7 +529,7 @@ Below is the list of JIRA issues that were closed for this release. - [ADF-4305](https://issues.alfresco.com/jira/browse/ADF-4305) - DocumentList - CardViewMode - Field values missing in the display. -- [ADF-4313](https://issues.alfresco.com/jira/browse/ADF-4313) - [Demo shell] [Form](../../lib/process-services/task-list/models/form.model.ts) field looks like an editable field in task header after task was completed +- [ADF-4313](https://issues.alfresco.com/jira/browse/ADF-4313) - [Demo shell][form](../../lib/process-services/task-list/models/form.model.ts) field looks like an editable field in task header after task was completed - [ADF-4316](https://issues.alfresco.com/jira/browse/ADF-4316) - [People component](../process-services/components/people.component.md) table is not well aligned @@ -657,7 +657,7 @@ Below is the list of JIRA issues that were closed for this release. - [ADF-4120](https://issues.alfresco.com/jira/browse/ADF-4120) - automate ADF-3989 - The list of apps in 'appName' filter is duplicated after switching between saved filters -- [ADF-4126](https://issues.alfresco.com/jira/browse/ADF-4126) - Automate ADF-4003 - Add roles filtering to [PeopleCloudComponent](../process-services-cloud/components/people-cloud.component.md) +- [ADF-4126](https://issues.alfresco.com/jira/browse/ADF-4126) - Automate ADF-4003 - Add roles filtering to [`PeopleCloudComponent`](../process-services-cloud/components/people-cloud.component.md) - [ADF-4129](https://issues.alfresco.com/jira/browse/ADF-4129) - Automate ADF-4066 - Task doesn't have an assignee when the assignee is empty from Start Task form diff --git a/docs/release-notes/RelNote320.md b/docs/release-notes/RelNote320.md index aef38c6f0f9..b5a672e6a3f 100644 --- a/docs/release-notes/RelNote320.md +++ b/docs/release-notes/RelNote320.md @@ -73,7 +73,7 @@ This component is responsible to show the form renderer in case the task has a f For more details refer to the: -- [TaskFormCloudComponent](../process-services-cloud/components/task-form-cloud.component). +- [`TaskFormCloudComponent`](../process-services-cloud/components/task-form-cloud.component.md). #### Form Cloud @@ -86,9 +86,9 @@ This component is responsible to render the form cloud definition attached to th ``` -In case the form has an upload widget and the alfresco content has been configured*, the attached file will be stored into the alfresco repositoty. +In case the form has an upload widget and the alfresco content has been configured\*, the attached file will be stored into the alfresco repository. -Note*: +Note\*: Don't forget to set the `providers` property to `ALL` and `ecmHost` value in the `app.config.json`. e.g. @@ -100,7 +100,7 @@ e.g. For more details refer to the: -- [FormCloudComponent](../process-services-cloud/components/form-cloud.component.md). +- [`FormCloudComponent`](../process-services-cloud/components/form-cloud.component.md). #### New permission template to app list @@ -119,13 +119,12 @@ Cloud form definition selector component is a dropdown that shows all the form p For more details refer to the: -- [FormDefinitionSelectorCloudComponent](../process-services-cloud/components/form-definition-selector-cloud.component.md). +- [`FormDefinitionSelectorCloudComponent`](../process-services-cloud/components/form-definition-selector-cloud.component.md). #### Start a standalone task with a form The start task cloud is now using the `cloud-form-definition-selector` that allows the user to attach a form to a task - ### Five more languages available Starting from ADF 3.2, five more languages are now available, together with the other ten already in the list. The new languages supported are: Danish, Finnish, Swedish, Czech, Polish. diff --git a/docs/release-notes/RelNote321.md b/docs/release-notes/RelNote321.md index 8b38551ad3d..a774fa557e5 100644 --- a/docs/release-notes/RelNote321.md +++ b/docs/release-notes/RelNote321.md @@ -13,14 +13,6 @@ The release can be found on GitHub at [this location](https://github.com/Alfresc See the [ADF roadmap](../roadmap.md) for details of features planned for future versions of ADF. -## Contents - -- [New package versions](#new-package-versions) -- [Goals for this release](#goals-for-this-release) - - [Fix deployment service](#fix-deployment-service) -- [Localisation](#localisation) -- [References](#references) - ## New package versions "@alfresco/adf-content-services" : "3.2.1" @@ -33,7 +25,6 @@ versions of ADF. This patch version contain a fix for a changed endpoint in Activiti 7 [Rename alfresco-deployment-service in deployment-service](https://github.com/Alfresco/alfresco-ng2-components/pull/4711/files) - ## Localisation This release includes: French, German, Italian, Spanish, Arabic, Japanese, Dutch, Norwegian (Bokmål), Russian, Danish, Finnish, Swedish, Czech, Polish, Brazilian Portuguese and Simplified Chinese versions. diff --git a/docs/tutorials/README.md b/docs/tutorials/README.md index fd191e8235d..f26ccff6c7d 100644 --- a/docs/tutorials/README.md +++ b/docs/tutorials/README.md @@ -13,7 +13,7 @@ Github only: true | [**Adding a new component**](new-component.md) | Basic | In this tutorial, you will learn how to create a component using [Angular CLI](https://cli.angular.io/) within an existing application. | | [**Adding a new view**](new-view.md) | Beginner | In this tutorial you will learn how to create a new view in your application and how to access it using a defined endpoint. | | [**Using ADF Components**](using-components.md) | Basic | In this tutorial you will learn how to extend, use and configure ADF Components. | -| [**Basic theming**](basic-theming.md) | Beginner | In this tutorial you will see how to theme an ADF app by modifying the CSS. | +| [**Basic theming**](basic-theming.md) | Beginner | In this tutorial you will see how to theme an ADF app by modifying the CSS. | | [**Customizing the Login component**](customising-login.md) | Intermediate | In this tutorial you will learn how to customize the [Login component](../core/components/login.component.md) following the technical documentation. | | [**Working with a Data Table**](working-with-data-table.md) | Intermediate | In this tutorial you will learn how to populate a DataTable component. | | [**Working with the Nodes API Service**](working-with-nodes-api-service.md) | Intermediate | In this tutorial you will learn how to use the [`NodesApiService`](../core/services/nodes-api.service.md). | diff --git a/docs/versionIndex.md b/docs/versionIndex.md index c49df14fbe6..2db1a7a8969 100644 --- a/docs/versionIndex.md +++ b/docs/versionIndex.md @@ -111,7 +111,7 @@ backend services have been tested with each released version of ADF. ### Components retired | Name | Reason | Alternative | -| -- | -- | -- | +| --- | --- | --- | | Accordion component | Superseded by Angular `` | See the [Angular Expansion Panel](https://material.angular.io/components/expansion/overview#accordion) component for details. | | Accordion group component | Superseded by Angular `` | See the [Angular Expansion Panel](https://material.angular.io/components/expansion/overview#accordion) component for details. | diff --git a/e2e/content-services/directives/create-folder-directive.e2e.ts b/e2e/content-services/directives/create-folder-directive.e2e.ts index b28dc93e640..e98ecb84d87 100644 --- a/e2e/content-services/directives/create-folder-directive.e2e.ts +++ b/e2e/content-services/directives/create-folder-directive.e2e.ts @@ -15,12 +15,10 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; +import { LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { CreateFolderDialog } from '../../pages/adf/dialog/createFolderDialog'; -import { NotificationPage } from '../../pages/adf/notificationPage'; import { MetadataViewPage } from '../../pages/adf/metadataViewPage'; - import { AcsUserModel } from '../../models/ACS/acsUserModel'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { browser, Key } from 'protractor'; @@ -30,7 +28,7 @@ describe('Create folder directive', function () { const loginPage = new LoginPage(); const contentServicesPage = new ContentServicesPage(); const createFolderDialog = new CreateFolderDialog(); - const notificationPage = new NotificationPage(); + const notificationHistoryPage = new NotificationHistoryPage(); const metadataViewPage = new MetadataViewPage(); const acsUser = new AcsUserModel(); @@ -91,7 +89,7 @@ describe('Create folder directive', function () { contentServicesPage.createNewFolder(folderName); - notificationPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); + notificationHistoryPage.checkNotifyContains('There\'s already a folder with this name. Try a different name.'); }); it('[C260157] Should be possible create a folder under a folder with the same name', () => { diff --git a/e2e/content-services/notifications-component.e2e.ts b/e2e/content-services/notifications-component.e2e.ts index ed969ce8fbe..391dde571da 100644 --- a/e2e/content-services/notifications-component.e2e.ts +++ b/e2e/content-services/notifications-component.e2e.ts @@ -24,7 +24,7 @@ import { browser } from 'protractor'; describe('Notifications Component', () => { const loginPage = new LoginPage(); - const notificationPage = new NotificationPage(); + const notificationHistoryPage = new NotificationPage(); const acsUser = new AcsUserModel(); @@ -43,74 +43,74 @@ describe('Notifications Component', () => { await loginPage.loginToContentServicesUsingUserModel(acsUser); - notificationPage.goToNotificationsPage(); + notificationHistoryPage.goToNotificationsPage(); - notificationPage.enterDurationField(3000); + notificationHistoryPage.enterDurationField(3000); done(); }); afterEach( () => { browser.executeScript(`document.querySelector('button[data-automation-id="notification-custom-dismiss-button"]').click();`); - notificationPage.enterDurationField(3000); + notificationHistoryPage.enterDurationField(3000); }); it('[C279977] Should show notification when the message is not empty and button is clicked', () => { - notificationPage.enterMessageField('Notification test'); - notificationPage.clickNotificationButton(); - notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + notificationHistoryPage.enterMessageField('Notification test'); + notificationHistoryPage.clickNotificationButton(); + notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); }); it('[C279979] Should not show notification when the message is empty and button is clicked', () => { - notificationPage.clearMessage(); - notificationPage.clickNotificationButton(); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); + notificationHistoryPage.clearMessage(); + notificationHistoryPage.clickNotificationButton(); + notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); }); it('[C279978] Should show notification with action when the message is not empty and button is clicked', () => { - notificationPage.enterMessageField('Notification test'); - notificationPage.clickActionToggle(); - notificationPage.clickNotificationButton(); - notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); - notificationPage.clickActionButton(); - notificationPage.checkActionEvent(); - notificationPage.clickActionToggle(); + notificationHistoryPage.enterMessageField('Notification test'); + notificationHistoryPage.clickActionToggle(); + notificationHistoryPage.clickNotificationButton(); + notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + notificationHistoryPage.clickActionButton(); + notificationHistoryPage.checkActionEvent(); + notificationHistoryPage.clickActionToggle(); }); it('[C279981] Should show notification with action when the message is not empty and custom configuration button is clicked', () => { - notificationPage.enterMessageField('Notification test'); - notificationPage.clickNotificationButton(); - notificationPage.checkNotificationSnackBarIsDisplayed(); + notificationHistoryPage.enterMessageField('Notification test'); + notificationHistoryPage.clickNotificationButton(); + notificationHistoryPage.checkNotificationSnackBarIsDisplayed(); }); it('[C279987] Should show custom notification during a limited time when a duration is added', () => { - notificationPage.enterMessageField('Notification test'); - notificationPage.enterDurationField(1000); - notificationPage.clickNotificationButton(); - notificationPage.checkNotificationSnackBarIsDisplayed(); + notificationHistoryPage.enterMessageField('Notification test'); + notificationHistoryPage.enterDurationField(1000); + notificationHistoryPage.clickNotificationButton(); + notificationHistoryPage.checkNotificationSnackBarIsDisplayed(); browser.sleep(1500); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); + notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); }); it('[C280000] Should show notification with action when the message is not empty and custom button is clicked', () => { - notificationPage.enterMessageField('Notification test'); - notificationPage.clickActionToggle(); - notificationPage.clickNotificationButton(); - notificationPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); - notificationPage.clickNotificationButton(); - notificationPage.clickActionButton(); - notificationPage.checkActionEvent(); - notificationPage.clickActionToggle(); + notificationHistoryPage.enterMessageField('Notification test'); + notificationHistoryPage.clickActionToggle(); + notificationHistoryPage.clickNotificationButton(); + notificationHistoryPage.checkNotificationSnackBarIsDisplayedWithMessage('Notification test'); + notificationHistoryPage.checkNotificationSnackBarIsNotDisplayed(); + notificationHistoryPage.clickNotificationButton(); + notificationHistoryPage.clickActionButton(); + notificationHistoryPage.checkActionEvent(); + notificationHistoryPage.clickActionToggle(); }); it('[C280001] Should meet configuration when a custom notification is set', () => { - notificationPage.enterMessageField('Notification test'); - notificationPage.enterDurationField(1000); - notificationPage.selectHorizontalPosition('Right'); - notificationPage.selectVerticalPosition('Top'); - notificationPage.selectDirection('Left to right'); - notificationPage.clickNotificationButton(); - expect(notificationPage.getConfigObject()).toBe('{"direction": "ltr", "duration": "1000", "horizontalPosition": "right", "verticalPosition": "top"}'); + notificationHistoryPage.enterMessageField('Notification test'); + notificationHistoryPage.enterDurationField(1000); + notificationHistoryPage.selectHorizontalPosition('Right'); + notificationHistoryPage.selectVerticalPosition('Top'); + notificationHistoryPage.selectDirection('Left to right'); + notificationHistoryPage.clickNotificationButton(); + expect(notificationHistoryPage.getConfigObject()).toBe('{"direction": "ltr", "duration": "1000", "horizontalPosition": "right", "verticalPosition": "top"}'); }); }); diff --git a/e2e/content-services/permissions/permissions-component.e2e.ts b/e2e/content-services/permissions/permissions-component.e2e.ts index 4afc372d207..f784af6832d 100644 --- a/e2e/content-services/permissions/permissions-component.e2e.ts +++ b/e2e/content-services/permissions/permissions-component.e2e.ts @@ -16,18 +16,16 @@ */ import { PermissionsPage } from '../../pages/adf/permissionsPage'; -import { LoginPage } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { AcsUserModel } from '../../models/ACS/acsUserModel'; import resources = require('../../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/fileModel'; import { UploadActions } from '../../actions/ACS/upload.actions'; -import { StringUtil, BrowserActions } from '@alfresco/adf-testing'; +import { StringUtil, BrowserActions, LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { FolderModel } from '../../models/ACS/folderModel'; import { ViewerPage } from '../../pages/adf/viewerPage'; -import { NotificationPage } from '../../pages/adf/notificationPage'; import { MetadataViewPage } from '../../pages/adf/metadataViewPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; @@ -44,7 +42,7 @@ describe('Permissions Component', function () { const viewerPage = new ViewerPage(); const metadataViewPage = new MetadataViewPage(); - const notificationPage = new NotificationPage(); + const notificationPage = new NotificationHistoryPage(); const uploadDialog = new UploadDialog(); let fileOwnerUser, filePermissionUser, file; const fileModel = new FileModel({ @@ -300,8 +298,12 @@ describe('Permissions Component', function () { afterEach(async (done) => { - await uploadActions.deleteFilesOrFolder(alfrescoJsApi, file.entry.id); + try { + await uploadActions.deleteFilesOrFolder(alfrescoJsApi, file.entry.id); + } catch (error) { + + } done(); }); @@ -587,7 +589,6 @@ describe('Permissions Component', function () { permissionsPage.clickPermissionInheritedButton(); notificationPage.checkNotifyContains('You are not allowed to change permissions'); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); permissionsPage.clickAddPermissionButton(); diff --git a/e2e/content-services/permissions/site-permissions.e2e.ts b/e2e/content-services/permissions/site-permissions.e2e.ts index 3f8c375f20a..19ced9aca8f 100644 --- a/e2e/content-services/permissions/site-permissions.e2e.ts +++ b/e2e/content-services/permissions/site-permissions.e2e.ts @@ -23,10 +23,9 @@ import resources = require('../../util/resources'); import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { FileModel } from '../../models/ACS/fileModel'; import { UploadActions } from '../../actions/ACS/upload.actions'; -import { StringUtil } from '@alfresco/adf-testing'; +import { StringUtil, NotificationHistoryPage } from '@alfresco/adf-testing'; import { browser } from 'protractor'; import { ViewerPage } from '../../pages/adf/viewerPage'; -import { NotificationPage } from '../../pages/adf/notificationPage'; import CONSTANTS = require('../../util/constants'); import { MetadataViewPage } from '../../pages/adf/metadataViewPage'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; @@ -44,7 +43,7 @@ describe('Permissions Component', function () { const viewerPage = new ViewerPage(); const navigationBarPage = new NavigationBarPage(); const metadataViewPage = new MetadataViewPage(); - const notificationPage = new NotificationPage(); + const notificationHistoryPage = new NotificationHistoryPage(); const uploadDialog = new UploadDialog(); let folderOwnerUser, consumerUser, siteConsumerUser, contributorUser, managerUser, collaboratorUser; @@ -224,11 +223,11 @@ describe('Permissions Component', function () { contentServicesPage.metadataContent('Site' + fileModel.name); - notificationPage.checkNotifyContains('You don\'t have access to do this.'); + notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); contentServicesPage.uploadFile(fileModel.location); - notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content'); + notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); @@ -254,7 +253,7 @@ describe('Permissions Component', function () { contentServicesPage.metadataContent('Site' + fileModel.name); - notificationPage.checkNotifyContains('You don\'t have access to do this.'); + notificationHistoryPage.checkNotifyContains('You don\'t have access to do this.'); contentServicesPage.uploadFile(testFileModel.location).checkContentIsDisplayed(testFileModel.name); diff --git a/e2e/content-services/share-file/share-file.e2e.ts b/e2e/content-services/share-file/share-file.e2e.ts index 39181209a73..a39e7054282 100644 --- a/e2e/content-services/share-file/share-file.e2e.ts +++ b/e2e/content-services/share-file/share-file.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage, BrowserActions, LocalStorageUtil } from '@alfresco/adf-testing'; +import { LoginPage, BrowserActions, LocalStorageUtil, NotificationHistoryPage } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { ViewerPage } from '../../pages/adf/viewerPage'; @@ -38,6 +38,7 @@ describe('Share file', () => { const shareDialog = new ShareDialog(); const navigationBarPage = new NavigationBarPage(); const viewerPage = new ViewerPage(); + const notificationHistoryPage = new NotificationHistoryPage(); const acsUser = new AcsUserModel(); const uploadActions = new UploadActions(); @@ -101,7 +102,7 @@ describe('Share file', () => { contentServicesPage.clickShareButton(); shareDialog.checkDialogIsDisplayed(); shareDialog.clickShareLinkButton(); - shareDialog.checkNotificationWithMessage('Link copied to the clipboard'); + notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); }); it('[C286543] Should be possible to close Share dialog', () => { @@ -179,7 +180,7 @@ describe('Share file', () => { contentServicesPage.clickShareButton(); shareDialog.checkDialogIsDisplayed(); shareDialog.clickShareLinkButton(); - shareDialog.checkNotificationWithMessage('Link copied to the clipboard'); + notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); const sharedLink = await shareDialog.getShareLink(); BrowserActions.getUrl(sharedLink); viewerPage.checkFileNameIsDisplayed(pngFileModel.name); @@ -190,13 +191,13 @@ describe('Share file', () => { contentServicesPage.clickShareButton(); shareDialog.checkDialogIsDisplayed(); shareDialog.clickShareLinkButton(); - shareDialog.checkNotificationWithMessage('Link copied to the clipboard'); + notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); const sharedLink = await shareDialog.getShareLink(); shareDialog.clickCloseButton(); contentServicesPage.clickShareButton(); shareDialog.checkDialogIsDisplayed(); shareDialog.clickShareLinkButton(); - shareDialog.checkNotificationWithMessage('Link copied to the clipboard'); + notificationHistoryPage.checkNotifyContains('Link copied to the clipboard'); const secondSharedLink = await shareDialog.getShareLink(); expect(sharedLink).toEqual(secondSharedLink); BrowserActions.getUrl(sharedLink); diff --git a/e2e/content-services/upload/user-permission.e2e.ts b/e2e/content-services/upload/user-permission.e2e.ts index 62a9f11f2f1..8a9e6039e62 100644 --- a/e2e/content-services/upload/user-permission.e2e.ts +++ b/e2e/content-services/upload/user-permission.e2e.ts @@ -17,14 +17,11 @@ import { browser } from 'protractor'; -import { StringUtil } from '@alfresco/adf-testing'; - -import { LoginPage } from '@alfresco/adf-testing'; +import { StringUtil, LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; import { UploadToggles } from '../../pages/adf/dialog/uploadToggles'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -import { NotificationPage } from '../../pages/adf/notificationPage'; import { AcsUserModel } from '../../models/ACS/acsUserModel'; import { FileModel } from '../../models/ACS/fileModel'; @@ -45,7 +42,7 @@ describe('Upload - User permission', () => { let acsUser; let acsUserTwo; const navigationBarPage = new NavigationBarPage(); - const notificationPage = new NotificationPage(); + const notificationHistoryPage = new NotificationHistoryPage(); const emptyFile = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.TXT_0B.file_name, @@ -169,7 +166,7 @@ describe('Upload - User permission', () => { contentServicesPage.uploadFile(emptyFile.location); - notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content'); + notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); xit('[C279916] Should not be allowed to upload a folder in folder with consumer permissions', () => { @@ -194,7 +191,7 @@ describe('Upload - User permission', () => { contentServicesPage.uploadFolder(folder.location); - notificationPage.checkNotifyContains('You don\'t have the create permission to upload the content'); + notificationHistoryPage.checkNotifyContains('You don\'t have the create permission to upload the content'); }); }); diff --git a/e2e/content-services/version/version-permissions.e2e.ts b/e2e/content-services/version/version-permissions.e2e.ts index 1fb2c7c0e27..d8d8d87f0fa 100644 --- a/e2e/content-services/version/version-permissions.e2e.ts +++ b/e2e/content-services/version/version-permissions.e2e.ts @@ -21,7 +21,6 @@ import { LoginPage, BrowserActions } from '@alfresco/adf-testing'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; import { VersionManagePage } from '../../pages/adf/versionManagerPage'; import { UploadDialog } from '../../pages/adf/dialog/uploadDialog'; -import { NotificationPage } from '../../pages/adf/notificationPage'; import { ContentServicesPage } from '../../pages/adf/contentServicesPage'; import { AcsUserModel } from '../../models/ACS/acsUserModel'; @@ -34,7 +33,7 @@ import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { UploadActions } from '../../actions/ACS/upload.actions'; import { NodeActions } from '../../actions/ACS/node.actions'; -import { StringUtil } from '@alfresco/adf-testing'; +import { StringUtil, NotificationHistoryPage } from '@alfresco/adf-testing'; import CONSTANTS = require('../../util/constants'); describe('Version component permissions', () => { @@ -43,7 +42,7 @@ describe('Version component permissions', () => { const versionManagePage = new VersionManagePage(); const navigationBarPage = new NavigationBarPage(); const uploadDialog = new UploadDialog(); - const notificationPage = new NotificationPage(); + const notificationHistoryPage = new NotificationHistoryPage(); const contentServices = new ContentServicesPage(); let site; @@ -198,7 +197,7 @@ describe('Version component permissions', () => { it('[C277197] Should a user with Consumer permission not be able to upload a new version for a file with different creator', () => { contentServices.versionManagerContent(differentCreatorFile.name); - notificationPage.checkNotifyContains(`You don't have access to do this`); + notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); }); it('[C277201] Should a user with Consumer permission not be able to upload a new version for a locked file', () => { @@ -259,7 +258,7 @@ describe('Version component permissions', () => { it('[C277198] Should a user with Contributor permission not be able to upload a new version for a file with different creator', () => { contentServices.versionManagerContent(differentCreatorFile.name); - notificationPage.checkNotifyContains(`You don't have access to do this`); + notificationHistoryPage.checkNotifyContains(`You don't have access to do this`); }); it('[C277202] Should be disabled the option for a locked file', () => { diff --git a/e2e/core/datatable/data-table-component.e2e.ts b/e2e/core/datatable/data-table-component.e2e.ts index 3bd5b6db715..f55665236fb 100644 --- a/e2e/core/datatable/data-table-component.e2e.ts +++ b/e2e/core/datatable/data-table-component.e2e.ts @@ -15,7 +15,7 @@ * limitations under the License. */ -import { LoginPage } from '@alfresco/adf-testing'; +import { LoginPage, NotificationHistoryPage } from '@alfresco/adf-testing'; import { DataTablePage } from '../../pages/adf/demo-shell/dataTablePage'; import { DataTableComponentPage } from '@alfresco/adf-testing'; import { AcsUserModel } from '../../models/ACS/acsUserModel'; @@ -23,7 +23,6 @@ import { browser } from 'protractor'; import { AlfrescoApiCompatibility as AlfrescoApi } from '@alfresco/js-api'; import { NavigationBarPage } from '../../pages/adf/navigationBarPage'; -import { NotificationPage } from '../../pages/adf/notificationPage'; import { DropActions } from '../../actions/drop.actions'; import resources = require('../../util/resources'); import { FileModel } from '../../models/ACS/fileModel'; @@ -37,7 +36,7 @@ describe('Datatable component', () => { const acsUser = new AcsUserModel(); const navigationBarPage = new NavigationBarPage(); const dataTableComponent = new DataTableComponentPage(); - const notificationPage = new NotificationPage(); + const notificationHistoryPage = new NotificationHistoryPage(); const dragAndDrop = new DropActions(); const pngFile = new FileModel({ 'name': resources.Files.ADF_DOCUMENTS.PNG.file_name, @@ -118,23 +117,23 @@ describe('Datatable component', () => { dataTablePage.mouseOverNameColumn('Name 2'); dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); dataTablePage.clickOnNameColumn('Name 2'); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); + notificationHistoryPage.checkNotifyNotContains('Name 2'); }); it('[C307046] No tooltip is displayed when hover over a column that has default value for copyContent property', () => { dataTablePage.mouseOverCreatedByColumn('Created One'); dataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); dataTablePage.clickOnCreatedByColumn('Created One'); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); + notificationHistoryPage.checkNotifyNotContains('Created One'); }); it('[C307040] A column value with copyContent set to true is copied when clicking on it', () => { dataTablePage.mouseOverIdColumn('1'); expect(dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); dataTablePage.clickOnIdColumn('1'); - notificationPage.checkNotifyContains('Text copied to clipboard'); + notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); dataTablePage.clickOnIdColumn('2'); - notificationPage.checkNotifyContains('Text copied to clipboard'); + notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); dataTablePage.pasteClipboard(); expect(dataTablePage.getClipboardInputText()).toEqual('2'); }); @@ -150,23 +149,23 @@ describe('Datatable component', () => { copyContentDataTablePage.mouseOverNameColumn('Second'); copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); copyContentDataTablePage.clickOnNameColumn('Second'); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); + notificationHistoryPage.checkNotifyNotContains('Second'); }); it('[C307075] No tooltip is displayed when hover over a column that has default value for copyContent property', () => { copyContentDataTablePage.mouseOverCreatedByColumn('Created one'); copyContentDataTablePage.dataTable.copyContentTooltipIsNotDisplayed(); copyContentDataTablePage.clickOnCreatedByColumn('Created one'); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); + notificationHistoryPage.checkNotifyNotContains('Created One'); }); it('[C307073] A column value with copyContent set to true is copied when clicking on it', () => { copyContentDataTablePage.mouseOverIdColumn('1'); expect(copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); copyContentDataTablePage.clickOnIdColumn('1'); - notificationPage.checkNotifyContains('Text copied to clipboard'); + notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); copyContentDataTablePage.clickOnIdColumn('2'); - notificationPage.checkNotifyContains('Text copied to clipboard'); + notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); copyContentDataTablePage.pasteClipboard(); expect(copyContentDataTablePage.getClipboardInputText()).toEqual('2'); }); @@ -175,7 +174,7 @@ describe('Datatable component', () => { dataTablePage.mouseOverIdColumn('1'); expect(dataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); dataTablePage.clickOnIdColumn('1'); - notificationPage.checkNotifyContains('Text copied to clipboard'); + notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); dataTablePage.pasteClipboard(); expect(dataTablePage.getClipboardInputText()).toEqual('1'); }); @@ -185,7 +184,7 @@ describe('Datatable component', () => { copyContentDataTablePage.mouseOverJsonColumn(2); expect(copyContentDataTablePage.getCopyContentTooltip()).toEqual('Click to copy'); copyContentDataTablePage.clickOnJsonColumn(2); - notificationPage.checkNotifyContains('Text copied to clipboard'); + notificationHistoryPage.checkNotifyContains('Text copied to clipboard'); copyContentDataTablePage.pasteClipboard(); expect(copyContentDataTablePage.getClipboardInputText()).toContain(jsonValue); }); @@ -201,12 +200,11 @@ describe('Datatable component', () => { it('[C307984] Should trigger the event handling header-drop and cell-drop', () => { const dragAndDropHeader = dragAndDropDataTablePage.getDropTargetIdColumnHeader(); dragAndDrop.dropFile(dragAndDropHeader, pngFile.location); - notificationPage.checkNotifyContains('Dropped data on [ id ] header'); - notificationPage.checkNotificationSnackBarIsNotDisplayed(); + notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] header'); const dragAndDropCell = dragAndDropDataTablePage.getDropTargetIdColumnCell(1); dragAndDrop.dropFile(dragAndDropCell, pngFile.location); - notificationPage.checkNotifyContains('Dropped data on [ id ] cell'); + notificationHistoryPage.checkNotifyContains('Dropped data on [ id ] cell'); }); }); }); diff --git a/e2e/core/login/login-sso/login-sso.e2e.ts b/e2e/core/login/login-sso/login-sso.e2e.ts index a7c9831da64..3c4e0dfd75d 100644 --- a/e2e/core/login/login-sso/login-sso.e2e.ts +++ b/e2e/core/login/login-sso/login-sso.e2e.ts @@ -55,12 +55,17 @@ describe('Login component - SSO', () => { describe('SSO Login Error for login component', () => { - it('[C299205] Should display the login error message when the SSO identity service is wrongly configured', async () => { - await settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, + afterEach(() => { + browser.executeScript('window.sessionStorage.clear();'); + browser.executeScript('window.localStorage.clear();'); + }); + + it('[C299205] Should display the login error message when the SSO identity service is wrongly configured', () => { + settingsPage.setProviderEcmSso(browser.params.testConfig.adf.url, 'http://aps22/auth/realms/alfresco', browser.params.testConfig.adf.hostIdentity, false, true, 'alfresco'); - await loginSSOPage.clickOnSSOButton(); - await loginSSOPage.checkLoginErrorIsDisplayed(); + loginSSOPage.clickOnSSOButton(); + loginSSOPage.checkLoginErrorIsDisplayed(); expect(loginSSOPage.getLoginErrorMessage()).toContain('SSO Authentication server unreachable'); }); }); diff --git a/e2e/lite-server-proxy.js b/e2e/lite-server-proxy.js index c6abd9da6eb..d5b28e43c19 100644 --- a/e2e/lite-server-proxy.js +++ b/e2e/lite-server-proxy.js @@ -7,19 +7,20 @@ let targetProxy = (PROXY_HOST_ADF || HOST); let fallback = require('connect-history-api-fallback'); module.exports = { + ghostMode : false, 'port': 4200, open: false, server: { middleware: { 1: proxy('/alfresco', { - target: targetProxy, + "target": targetProxy, changeOrigin: true, pathRewrite: { "^/alfresco/alfresco": "" } }), 2: proxy('/activiti-app', { - target: targetProxy, + "target": targetProxy, changeOrigin: true, "pathRewrite": { "^/activiti-app/activiti-app": "" diff --git a/e2e/pages/adf/demo-shell/dataTablePage.ts b/e2e/pages/adf/demo-shell/dataTablePage.ts index 8cebe526940..582918725e1 100644 --- a/e2e/pages/adf/demo-shell/dataTablePage.ts +++ b/e2e/pages/adf/demo-shell/dataTablePage.ts @@ -172,7 +172,7 @@ export class DataTablePage { } clickOnJsonColumn(rowNumber) { - return this.dataTable.clickElement(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); + return BrowserActions.click(this.dataTable.getCellByRowNumberAndColumnName(rowNumber - 1, this.columns.json)); } clickOnNameColumn(name) { diff --git a/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts b/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts index cd3b0efd71f..43bc96a5d12 100644 --- a/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts +++ b/e2e/pages/adf/demo-shell/process-services/taskListDemoPage.ts @@ -164,6 +164,7 @@ export class TaskListDemoPage { } clickResetButton() { + BrowserActions.closeMenuAndDialogs(); BrowserActions.click(this.resetButton); } diff --git a/e2e/pages/adf/dialog/shareDialog.ts b/e2e/pages/adf/dialog/shareDialog.ts index b7aae51830c..154a792d523 100644 --- a/e2e/pages/adf/dialog/shareDialog.ts +++ b/e2e/pages/adf/dialog/shareDialog.ts @@ -83,12 +83,6 @@ export class ShareDialog { BrowserVisibility.waitUntilElementIsPresent(this.shareToggleDisabled); } - checkNotificationWithMessage(message) { - BrowserVisibility.waitUntilElementIsPresent( - element(by.cssContainingText('simple-snack-bar', message)) - ); - } - dialogIsClosed() { BrowserVisibility.waitUntilElementIsStale(this.shareDialog); } diff --git a/e2e/pages/adf/process-services/filtersPage.ts b/e2e/pages/adf/process-services/filtersPage.ts index cc9515b8e78..7b6e5402a5c 100644 --- a/e2e/pages/adf/process-services/filtersPage.ts +++ b/e2e/pages/adf/process-services/filtersPage.ts @@ -30,8 +30,7 @@ export class FiltersPage { goToFilter(filterName) { BrowserActions.closeMenuAndDialogs(); - const filter = element(by.css(`span[data-automation-id="${filterName}_filter"]`)); - BrowserActions.click(filter); + BrowserActions.clickExecuteScript(`span[data-automation-id="${filterName}_filter"]`); return this; } diff --git a/e2e/pages/adf/process-services/taskDetailsPage.ts b/e2e/pages/adf/process-services/taskDetailsPage.ts index 8f60398a425..0654b830236 100644 --- a/e2e/pages/adf/process-services/taskDetailsPage.ts +++ b/e2e/pages/adf/process-services/taskDetailsPage.ts @@ -139,6 +139,7 @@ export class TaskDetailsPage { } clickForm() { + BrowserActions.closeMenuAndDialogs(); BrowserActions.click(this.formNameField); } diff --git a/e2e/process-services/process-attachmentList-actionMenu.e2e.ts b/e2e/process-services/process-attachmentList-actionMenu.e2e.ts index b8a99b80372..eb7ce016b52 100644 --- a/e2e/process-services/process-attachmentList-actionMenu.e2e.ts +++ b/e2e/process-services/process-attachmentList-actionMenu.e2e.ts @@ -115,7 +115,7 @@ describe('Attachment list action menu for processes', () => { viewerPage.checkFileNameIsDisplayed(pngFile.name); viewerPage.clickCloseButton(); - browser.sleep(10000); + processFiltersPage.clickRunningFilterButton(); processFiltersPage.selectFromProcessList(processName.active); @@ -140,7 +140,6 @@ describe('Attachment list action menu for processes', () => { attachmentListPage.clickAttachFileButton(pngFile.location); processDetailsPage.clickCancelProcessButton(); - browser.sleep(10000); processFiltersPage.clickCompletedFilterButton(); processDetailsPage.checkProcessTitleIsDisplayed(); diff --git a/e2e/resources/activiti7/simpleapp/processes/processwithvariables-extensions.json b/e2e/resources/activiti7/simpleapp/processes/processwithvariables-extensions.json new file mode 100755 index 00000000000..e5822f72a19 --- /dev/null +++ b/e2e/resources/activiti7/simpleapp/processes/processwithvariables-extensions.json @@ -0,0 +1 @@ +{"id":"process-c5040521-f596-4748-b3c5-15c8b9868906","extensions":{"properties":{"7cf99919-ca35-41a5-a7b0-289e05d44604":{"id":"7cf99919-ca35-41a5-a7b0-289e05d44604","name":"nameString","type":"string","required":true,"value":"string"},"059e303d-07d6-4fbc-9121-557419db3ca8":{"id":"059e303d-07d6-4fbc-9121-557419db3ca8","name":"name","type":"date","required":true,"value":"date"}},"mappings":{}}} \ No newline at end of file diff --git a/e2e/resources/activiti7/simpleapp/processes/processwithvariables.bpmn20.xml b/e2e/resources/activiti7/simpleapp/processes/processwithvariables.bpmn20.xml new file mode 100755 index 00000000000..53174bb4881 --- /dev/null +++ b/e2e/resources/activiti7/simpleapp/processes/processwithvariables.bpmn20.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/resources/activiti7/simpleapp/processes/simpleProcess-extensions.json b/e2e/resources/activiti7/simpleapp/processes/simpleProcess-extensions.json new file mode 100755 index 00000000000..c7a381ffd46 --- /dev/null +++ b/e2e/resources/activiti7/simpleapp/processes/simpleProcess-extensions.json @@ -0,0 +1 @@ +{"id":"process-75651812-d60b-4a4c-892f-55eb095705c8","extensions":{"properties":{},"mappings":{}}} \ No newline at end of file diff --git a/e2e/resources/activiti7/simpleapp/processes/simpleProcess.bpmn20.xml b/e2e/resources/activiti7/simpleapp/processes/simpleProcess.bpmn20.xml new file mode 100755 index 00000000000..a2d8412be64 --- /dev/null +++ b/e2e/resources/activiti7/simpleapp/processes/simpleProcess.bpmn20.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/e2e/resources/activiti7/simpleapp/simpleapp.json b/e2e/resources/activiti7/simpleapp/simpleapp.json new file mode 100755 index 00000000000..c8cc18849a8 --- /dev/null +++ b/e2e/resources/activiti7/simpleapp/simpleapp.json @@ -0,0 +1 @@ +{"name":"simpleapp","version":"1","description":""} \ No newline at end of file diff --git a/e2e/test.config.js b/e2e/test.config.js index 23a175a11f5..9963110d734 100644 --- a/e2e/test.config.js +++ b/e2e/test.config.js @@ -19,7 +19,7 @@ const HOST_SSO = process.env.URL_HOST_SSO_ADF; const HOST_IDENTITY = process.env.URL_HOST_IDENTITY; const TIMEOUT = parseInt(process.env.TIMEOUT, 10); const PROXY = process.env.PROXY_HOST_ADF; -const DEBUG = process.env.DEBUG; +const LOG = process.env.LOG; const BPM_HOST = process.env.URL_HOST_BPM_ADF || "bpm"; const OAUTH_HOST = process.env.URL_HOST_SSO_ADF || "keycloak"; const OAUTH_CLIENDID = process.env.OAUTH_CLIENDID || "activiti"; @@ -49,7 +49,7 @@ const appConfig = { } }; -if (DEBUG) { +if (LOG) { console.log('======= test.config.js hostBPM ====== '); console.log('hostBPM : ' + (HOST_BPM || PROXY || HOST)); console.log('EMAIL : ' + (EMAIL)); @@ -125,7 +125,7 @@ module.exports = { baseUrl = HOST; } - if (DEBUG) { + if (LOG) { console.log('hostSso baseUrl : ' + baseUrl); } @@ -145,7 +145,7 @@ module.exports = { baseUrl = HOST; } - if (DEBUG) { + if (LOG) { console.log('hostIdentity baseUrl : ' + baseUrl); } diff --git a/lib/cli/README.md b/lib/cli/README.md new file mode 100644 index 00000000000..1d3865eb6eb --- /dev/null +++ b/lib/cli/README.md @@ -0,0 +1,24 @@ +# Alfresco ADF Cli + + +## The Goal of ADF CLI + +The ADF CLI manages, builds , doc and test your ADF Application projects. + + +## Installation +To get started follow these instructions: + + + +``sh +npm install aadf-cli -g +`` + +### License Check + +Move in the folder where you have your pacakge.json and run the command: + +```bash +adf-license +``` diff --git a/tools/doc/licenseList.js b/lib/cli/bin/doc/licenseList.js old mode 100644 new mode 100755 similarity index 67% rename from tools/doc/licenseList.js rename to lib/cli/bin/doc/licenseList.js index bd8f33573bc..c656dc8f4f2 --- a/tools/doc/licenseList.js +++ b/lib/cli/bin/doc/licenseList.js @@ -1,20 +1,20 @@ +#!/usr/bin/env node + var path = require('path'); var fs = require('fs'); var checker = require('license-checker'); +var spdxCodes = require('spdx-license-list'); var ejs = require('ejs'); var program = require('commander'); -var spdxCodes = require('spdx-license-list'); -var startPath = path.resolve('.'); var templatePath = path.resolve(__dirname, 'templates', 'licensePage.ejs'); - const nonStandardLicenses = { "public domain": "PDDL-1.0", "apache": "Apache-2.0", "bsd": "BSD-2-Clause" -} +}; const missingRepos = { "@alfresco/adf-testing": "https://github.com/Alfresco/alfresco-ng2-components", @@ -26,37 +26,42 @@ const missingRepos = { "adf-monaco-extension": "https://github.com/eromano/aca-monaco-extension", "indexof": "https://github.com/component/indexof", "rxjs-compat": "https://github.com/ReactiveX/rxjs/tree/master/compat", -} +}; program -.usage('') -.parse(process.argv); + .usage('') + .parse(process.argv); -console.log(`Checking ${startPath}`); +var packageJson = JSON.parse(fs.readFileSync(path.resolve('./','package.json')), 'utf8'); + +if (!packageJson) { + console.error('Move in the path where you have the package.json'); + return; +} + +console.log(path.resolve('./','package.json')); checker.init({ - start: startPath, + start: './', production: true, - failOn: "GPL" -}, function(err, packages) { + failOn: 'GPL' +}, function (err, packages) { if (err) { console.log(err); } else { - //console.log(JSON.stringify(packages)); - for (var packageName in packages) { var pack = packages[packageName]; pack['licenseExp'] = pack['licenses'] - .replace(/\*/, '') - .replace(/[a-zA-Z0-9\-\.]+/g, match => { - var lowerMatch = match.toLowerCase(); - - if ((lowerMatch !== 'and') && (lowerMatch !== 'or') && (lowerMatch !== 'with')) { - return licenseWithMDLinks(match); - } else { - return match; - } - }); + .replace(/\*/, '') + .replace(/[a-zA-Z0-9\-\.]+/g, match => { + var lowerMatch = match.toLowerCase(); + + if ((lowerMatch !== 'and') && (lowerMatch !== 'or') && (lowerMatch !== 'with')) { + return licenseWithMDLinks(match); + } else { + return match; + } + }); if (!pack['repository']) { var lastAtSignPos = packageName.lastIndexOf('@'); @@ -68,14 +73,16 @@ checker.init({ } } - ejs.renderFile(templatePath, {packages: packages, projVersion: program.args[0]}, {}, (err, mdText) => { + ejs.renderFile(templatePath, { + packages: packages, + projVersion: packageJson.version, + projName: packageJson.description + }, {}, (err, mdText) => { if (err) { console.log(err); } else { - //console.log(mdText); - var licenseFilePath = path.resolve('.', 'docs', 'license-info', `license-info-${program.args[0]}.md`) - fs.writeFileSync(licenseFilePath, mdText); - console.log(`Wrote license list at ${licenseFilePath}`); + fs.writeFileSync(`license-info-${packageJson.version}.md`, mdText); + console.log(`Wrote license`); } }); } diff --git a/lib/cli/bin/doc/templates/licensePage.ejs b/lib/cli/bin/doc/templates/licensePage.ejs new file mode 100644 index 00000000000..17a4e74a8f8 --- /dev/null +++ b/lib/cli/bin/doc/templates/licensePage.ejs @@ -0,0 +1,28 @@ +--- +Title: License info, <%= projName %> <%= projVersion %> +--- + +# License information for <%= projName %> <%= projVersion %> + +This page lists all third party libraries that ADF <%= projVersion %> depends on. + +## Libraries + +| Name | Version | License | +| --- | --- | --- | +<% for (var packageName in packages) { + var lastAtSignPos = packageName.lastIndexOf('@'); + + var name = packageName.substring(0, lastAtSignPos); + var version = packageName.substring(lastAtSignPos + 1); + var pack = packages[packageName]; + var licenses = pack['licenseExp'] || 'N/A'; + var repo = pack['repository']; + var linkedName = name; + + if (repo) { + linkedName = `[${name}](${repo})` + } +-%> +| <%= linkedName %> | <%= version %> | <%= licenses %> | +<% } %> diff --git a/lib/cli/package-lock.json b/lib/cli/package-lock.json new file mode 100644 index 00000000000..b6ebc584f00 --- /dev/null +++ b/lib/cli/package-lock.json @@ -0,0 +1,402 @@ +{ + "name": "@alfresco/adf-cli", + "version": "3.2.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=" + }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "license-checker": { + "version": "25.0.1", + "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", + "integrity": "sha512-mET5AIwl7MR2IAKYYoVBBpV0OnkKQ1xGj2IMMeEFIs42QAkEVjRtFZGWmQ28WeU7MP779iAgOaOy93Mn44mn6g==", + "requires": { + "chalk": "^2.4.1", + "debug": "^3.1.0", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "read-installed": "~4.0.3", + "semver": "^5.5.0", + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-satisfies": "^4.0.0", + "treeify": "^1.1.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.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "nopt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "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=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "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=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "read-installed": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/read-installed/-/read-installed-4.0.3.tgz", + "integrity": "sha1-/5uLZ/GH0eTCm5/rMfayI6zRkGc=", + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", + "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", + "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "resolve": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", + "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slide": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", + "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + }, + "spdx-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz", + "integrity": "sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==", + "requires": { + "array-find-index": "^1.0.2", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", + "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" + }, + "spdx-license-list": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-list/-/spdx-license-list-5.0.0.tgz", + "integrity": "sha512-N5u9tEFRBUzQDjMKRRt8SHxC/UaqYApPmdF4MMFnICQg3z52onNbnneuro/sWw2rd+eGu9agQOzUbD671Xia7Q==" + }, + "spdx-ranges": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.0.tgz", + "integrity": "sha512-OOWghvosfmECc9edy/A9j7GabERmn8bJWHc0J1knVytQtO5Rw7VfxK6CDqmivJhfMJqWhWWUfffNNMPYvyvyQA==" + }, + "spdx-satisfies": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-4.0.1.tgz", + "integrity": "sha512-WVzZ/cXAzoNmjCWiEluEA3BjHp5tiUmmhn9MK+X0tBbR9sOqtC6UQwmgCNrAIZvNlMuBUYAaHYfb2oqlF9SwKA==", + "requires": { + "spdx-compare": "^1.0.0", + "spdx-expression-parse": "^3.0.0", + "spdx-ranges": "^2.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==" + }, + "util-extend": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/util-extend/-/util-extend-1.0.3.tgz", + "integrity": "sha1-p8IW0mdUUWljeztu3GypEZ4v+T8=" + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + } +} diff --git a/lib/cli/package.json b/lib/cli/package.json new file mode 100644 index 00000000000..d4944a1c05e --- /dev/null +++ b/lib/cli/package.json @@ -0,0 +1,25 @@ +{ + "name": "@alfresco/adf-cli", + "description": "Alfresco ADF cli and utils", + "version": "3.2.1", + "author": "Alfresco Software, Ltd.", + "bin": { + "adf-license": "./bin/doc/licenseList.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/Alfresco/alfresco-ng2-components.git" + }, + "bugs": { + "url": "https://github.com/Alfresco/alfresco-ng2-components/issues" + }, + "dependencies": { + "spdx-license-list": "^5.0.0", + "license-checker": "^25.0.1", + "commander": "^2.15.1" + }, + "keywords": [ + "alfresco-component" + ], + "license": "Apache-2.0" +} diff --git a/lib/core/core.module.ts b/lib/core/core.module.ts index 2978a6fbef5..d724a1bf147 100644 --- a/lib/core/core.module.ts +++ b/lib/core/core.module.ts @@ -41,6 +41,7 @@ import { CommentsModule } from './comments/comments.module'; import { ButtonsMenuModule } from './buttons-menu/buttons-menu.module'; import { TemplateModule } from './templates/template.module'; import { ClipboardModule } from './clipboard/clipboard.module'; +import { NotificationHistoryModule } from './notification-history/notification-history.module'; import { DirectiveModule } from './directives/directive.module'; import { DialogModule } from './dialogs/dialog.module'; @@ -87,7 +88,8 @@ import { DirectionalityConfigService } from './services/directionality-config.se ButtonsMenuModule, TemplateModule, IconModule, - SortingPickerModule + SortingPickerModule, + NotificationHistoryModule ], exports: [ AboutModule, @@ -119,7 +121,8 @@ import { DirectionalityConfigService } from './services/directionality-config.se ButtonsMenuModule, TemplateModule, SortingPickerModule, - IconModule + IconModule, + NotificationHistoryModule ] }) export class CoreModule { diff --git a/lib/core/i18n/en.json b/lib/core/i18n/en.json index e4ac621af85..91833526cee 100644 --- a/lib/core/i18n/en.json +++ b/lib/core/i18n/en.json @@ -5,6 +5,11 @@ "CLAIM": "CLAIM", "UNCLAIM": "RELEASE", "START PROCESS": "START PROCESS", + "NOTIFICATION_HISTORY":{ + "NO_MESSAGE" : "No messages", + "NOTIFICATIONS": "Notifications", + "MARK_AS_READ": "Mark all as read" + }, "FORM": { "START_FORM": { "TITLE": "Start Form" diff --git a/lib/core/index.ts b/lib/core/index.ts index 24c9893edd8..7411e7597fc 100644 --- a/lib/core/index.ts +++ b/lib/core/index.ts @@ -41,6 +41,7 @@ export * from './directives/index'; export * from './clipboard/index'; export * from './dialogs/index'; export * from './icon/index'; +export * from './notification-history/index'; export * from './utils/index'; export * from './interface/index'; diff --git a/lib/core/info-drawer/info-drawer.component.ts b/lib/core/info-drawer/info-drawer.component.ts index 771a9753dac..ca2873fcef3 100644 --- a/lib/core/info-drawer/info-drawer.component.ts +++ b/lib/core/info-drawer/info-drawer.component.ts @@ -22,7 +22,7 @@ import { MatTabChangeEvent } from '@angular/material'; template: '' }) export class InfoDrawerTabComponent { - /** The title of the tab. */ + /** The title of the tab (string or translation key). */ @Input() label: string = ''; @@ -42,7 +42,7 @@ export class InfoDrawerTabComponent { host: { 'class': 'adf-info-drawer' } }) export class InfoDrawerComponent { - /** The title of the info drawer. */ + /** The title of the info drawer (string or translation key). */ @Input() title: string|null = null; diff --git a/lib/core/models/notification.model.ts b/lib/core/models/notification.model.ts new file mode 100644 index 00000000000..973d71e9ba4 --- /dev/null +++ b/lib/core/models/notification.model.ts @@ -0,0 +1,21 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface NotificationModel { + dateTime: Date; + message: string; +} diff --git a/lib/core/models/public-api.ts b/lib/core/models/public-api.ts index c6eacdeccb8..4805bf3ea11 100644 --- a/lib/core/models/public-api.ts +++ b/lib/core/models/public-api.ts @@ -26,3 +26,4 @@ export * from './redirection.model'; export * from './pagination.model'; export * from './oauth-config.model'; export * from './request-pagination.model'; +export * from './notification.model'; diff --git a/lib/core/notification-history/index.ts b/lib/core/notification-history/index.ts new file mode 100644 index 00000000000..a7e30cc675a --- /dev/null +++ b/lib/core/notification-history/index.ts @@ -0,0 +1,18 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './public-api'; diff --git a/lib/core/notification-history/notification-history.component.html b/lib/core/notification-history/notification-history.component.html new file mode 100644 index 00000000000..00fe54a17c3 --- /dev/null +++ b/lib/core/notification-history/notification-history.component.html @@ -0,0 +1,33 @@ +

+ + + +
+ + +
{{ 'NOTIFICATION_HISTORY.NOTIFICATIONS' | translate }}
+
+
+ + + + + {{notification.info? notification.info: 'info'}} +

{{notification.message}}

+

{{notification.dateTime | date}}

+
+ +

{{ 'NOTIFICATION_HISTORY.NO_MESSAGE' | translate }}

+
+ + + +
+
+
+
diff --git a/lib/core/notification-history/notification-history.component.scss b/lib/core/notification-history/notification-history.component.scss new file mode 100644 index 00000000000..9db3cec3fd7 --- /dev/null +++ b/lib/core/notification-history/notification-history.component.scss @@ -0,0 +1,23 @@ +.adf { + + &-notification-history-menu_button.mat-button { + margin-right: 0; + border-radius: 90%; + padding: 0; + min-width: 40px; + height: 40px; + } +} + +@media only screen and (min-device-width: 480px) { + .mat-menu-panel.adf-notification-history-menu { + max-height: 450px; + min-width: 450px; + overflow: auto; + padding: 0; + } +} + +.mat-menu-panel.adf-notification-history-menu .mat-menu-content { + padding: 0; +} diff --git a/lib/core/notification-history/notification-history.component.spec.ts b/lib/core/notification-history/notification-history.component.spec.ts new file mode 100644 index 00000000000..18e3e8b534a --- /dev/null +++ b/lib/core/notification-history/notification-history.component.spec.ts @@ -0,0 +1,80 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { async, ComponentFixture, inject, TestBed } from '@angular/core/testing'; +import { NotificationService } from '../services'; +import { setupTestBed } from '../testing/setupTestBed'; +import { CoreTestingModule } from '../testing/core.testing.module'; +import { NotificationHistoryComponent } from './notification-history.component'; +import { OverlayContainer } from '@angular/cdk/overlay'; + +describe('Notification History Component', () => { + + let fixture: ComponentFixture; + let element: HTMLElement; + let notificationService: NotificationService; + let overlayContainerElement: HTMLElement; + + function openNotification() { + fixture.detectChanges(); + const button: HTMLButtonElement = element.querySelector('#adf-notification-history-open-button'); + button.click(); + fixture.detectChanges(); + } + + setupTestBed({ + imports: [CoreTestingModule] + }); + + beforeEach(async(() => { + fixture = TestBed.createComponent(NotificationHistoryComponent); + element = fixture.nativeElement; + + notificationService = TestBed.get(NotificationService); + })); + + beforeEach(inject([OverlayContainer], (oc: OverlayContainer) => { + overlayContainerElement = oc.getContainerElement(); + })); + + afterEach(() => { + fixture.destroy(); + }); + + describe('ui ', () => { + + it('should empty message be present when there are no notifications in the history', (done) => { + openNotification(); + fixture.detectChanges(); + fixture.whenStable().then(() => { + expect(overlayContainerElement.querySelector('#adf-notification-history-component-no-message')).toBeDefined(); + done(); + }); + }); + + it('should message be present and empty message not be present when there are notifications in the history', (done) => { + notificationService.showInfo('Example Message'); + openNotification(); + fixture.detectChanges(); + fixture.whenStable().then(() => { + expect(overlayContainerElement.querySelector('#adf-notification-history-component-no-message')).toBeNull(); + expect(overlayContainerElement.querySelector('#adf-notification-history-list').innerHTML).toContain('Example Message'); + done(); + }); + }); + }); +}); diff --git a/lib/core/notification-history/notification-history.component.ts b/lib/core/notification-history/notification-history.component.ts new file mode 100644 index 00000000000..120337a8ffb --- /dev/null +++ b/lib/core/notification-history/notification-history.component.ts @@ -0,0 +1,78 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Component, Input, ViewChild, OnDestroy } from '@angular/core'; +import { NotificationService } from '../services/notification.service'; +import { NotificationModel } from '../models/notification.model'; +import { MatMenuTrigger } from '@angular/material'; +import { takeUntil } from 'rxjs/operators'; +import { Subject } from 'rxjs'; + +@Component({ + selector: 'adf-notification-history', + styleUrls: ['notification-history.component.scss'], + templateUrl: 'notification-history.component.html' +}) +export class NotificationHistoryComponent implements OnDestroy { + + onDestroy$ = new Subject(); + + notifications: NotificationModel[] = []; + + @ViewChild(MatMenuTrigger) + trigger: MatMenuTrigger; + + /** Custom choice for opening the menu at the bottom. Can be `before` or `after`. */ + @Input() + menuPositionX: string = 'after'; + + /** Custom choice for opening the menu at the bottom. Can be `above` or `below`. */ + @Input() + menuPositionY: string = 'below'; + + constructor( + private notificationService: NotificationService) { + this.notificationService.messages + .pipe(takeUntil(this.onDestroy$)) + .subscribe((message) => { + this.notifications.push(message); + }); + } + + isEmptyNotification(): boolean { + return (!this.notifications || this.notifications.length === 0); + } + + onKeyPress(event: KeyboardEvent) { + this.closeUserModal(event); + } + + markAsRead() { + this.notifications = []; + } + + ngOnDestroy() { + this.onDestroy$.next(true); + this.onDestroy$.complete(); + } + + private closeUserModal($event: KeyboardEvent) { + if ($event.keyCode === 27) { + this.trigger.closeMenu(); + } + } +} diff --git a/lib/core/notification-history/notification-history.module.ts b/lib/core/notification-history/notification-history.module.ts new file mode 100644 index 00000000000..7ff6a537e62 --- /dev/null +++ b/lib/core/notification-history/notification-history.module.ts @@ -0,0 +1,38 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { CommonModule } from '@angular/common'; +import { NgModule } from '@angular/core'; +import { MaterialModule } from '../material.module'; + +import { NotificationHistoryComponent } from './notification-history.component'; +import { TranslateModule } from '@ngx-translate/core'; + +@NgModule({ + imports: [ + CommonModule, + MaterialModule, + TranslateModule.forChild() + ], + declarations: [ + NotificationHistoryComponent + ], + exports: [ + NotificationHistoryComponent + ] +}) +export class NotificationHistoryModule {} diff --git a/lib/core/notification-history/public-api.ts b/lib/core/notification-history/public-api.ts new file mode 100644 index 00000000000..887fe4b1c6e --- /dev/null +++ b/lib/core/notification-history/public-api.ts @@ -0,0 +1,19 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './notification-history.component'; +export * from './notification-history.module'; diff --git a/lib/core/services/notification.service.ts b/lib/core/services/notification.service.ts index 748ec3f3adb..53690fa08d0 100644 --- a/lib/core/services/notification.service.ts +++ b/lib/core/services/notification.service.ts @@ -19,6 +19,8 @@ import { Injectable } from '@angular/core'; import { MatSnackBar, MatSnackBarRef, MatSnackBarConfig } from '@angular/material'; import { TranslationService } from './translation.service'; import { AppConfigService, AppConfigValues } from '../app-config/app-config.service'; +import { Subject } from 'rxjs'; +import { NotificationModel } from '../models/notification.model'; @Injectable({ providedIn: 'root' @@ -27,6 +29,8 @@ export class NotificationService { DEFAULT_DURATION_MESSAGE: number = 5000; + messages: Subject = new Subject(); + constructor(private snackBar: MatSnackBar, private translationService: TranslationService, private appConfigService: AppConfigService) { @@ -53,6 +57,8 @@ export class NotificationService { }; } + this.messages.next({ message: translatedMessage, dateTime: new Date }); + return this.snackBar.open(translatedMessage, null, config); } @@ -76,6 +82,8 @@ export class NotificationService { }; } + this.messages.next({ message: translatedMessage, dateTime: new Date }); + return this.snackBar.open(translatedMessage, action, config); } @@ -89,6 +97,8 @@ export class NotificationService { protected showMessage(message: string, panelClass: string, action?: string): MatSnackBarRef { message = this.translationService.instant(message); + this.messages.next({ message: message, dateTime: new Date }); + return this.snackBar.open(message, action, { duration: this.DEFAULT_DURATION_MESSAGE, panelClass diff --git a/lib/core/userinfo/components/user-info.component.scss b/lib/core/userinfo/components/user-info.component.scss index 5805eba518b..a975720e8d4 100644 --- a/lib/core/userinfo/components/user-info.component.scss +++ b/lib/core/userinfo/components/user-info.component.scss @@ -183,7 +183,6 @@ @media only screen and (min-device-width: 480px) { .mat-menu-panel.adf-userinfo-menu { max-height: 450px; - min-width: 4500px; min-width: 450px; overflow: auto; padding: 0; diff --git a/lib/process-services/people/components/people/people.component.ts b/lib/process-services/people/components/people/people.component.ts index ed706772485..ee217ae385f 100644 --- a/lib/process-services/people/components/people/people.component.ts +++ b/lib/process-services/people/components/people/people.component.ts @@ -83,10 +83,12 @@ export class PeopleComponent implements OnInit, AfterViewInit { } involveUser(user: UserProcessModel) { - this.peopleProcessService.involveUserWithTask(this.taskId, user.id.toString()) - .subscribe(() => { - this.people = [...this.people, user]; - }, (error) => this.logService.error('Impossible to involve user with task')); + if (user && user.id) { + this.peopleProcessService.involveUserWithTask(this.taskId, user.id.toString()) + .subscribe(() => { + this.people = [...this.people, user]; + }, (error) => this.logService.error('Impossible to involve user with task')); + } } removeInvolvedUser(user: UserProcessModel) { diff --git a/lib/testing/src/lib/core/pages/data-table-component.page.ts b/lib/testing/src/lib/core/pages/data-table-component.page.ts index 7bb6d5697b2..875415b8e22 100644 --- a/lib/testing/src/lib/core/pages/data-table-component.page.ts +++ b/lib/testing/src/lib/core/pages/data-table-component.page.ts @@ -339,13 +339,7 @@ export class DataTableComponentPage { } clickColumn(columnName, columnValue) { - const column = this.getCellElementByValue(columnName, columnValue); - this.clickElement(column); - return this; - } - - clickElement(elem) { - BrowserActions.click(elem); + BrowserActions.clickExecuteScript(`div[title="${columnName}"] div[data-automation-id="text_${columnValue}"] span`); return this; } } diff --git a/lib/testing/src/lib/core/pages/login.page.ts b/lib/testing/src/lib/core/pages/login.page.ts index ceac8f5c39d..85f36ebcb32 100644 --- a/lib/testing/src/lib/core/pages/login.page.ts +++ b/lib/testing/src/lib/core/pages/login.page.ts @@ -75,17 +75,15 @@ export class LoginPage { ) ); - async goToLoginPage() { + goToLoginPage() { browser.waitForAngularEnabled(true); browser.driver.get(this.loginURL); - this.waitForElements(); - return this; + return this.waitForElements(); } waitForElements() { BrowserVisibility.waitUntilElementIsVisible(this.txtUsername); - BrowserVisibility.waitUntilElementIsVisible(this.txtPassword); - return this; + return BrowserVisibility.waitUntilElementIsVisible(this.txtPassword); } enterUsername(username) { @@ -165,7 +163,7 @@ export class LoginPage { } async loginToAllUsingUserModel(userModel) { - this.goToLoginPage(); + await this.goToLoginPage(); await LocalStorageUtil.clearStorage(); await LocalStorageUtil.setStorageItem('providers', 'ALL'); await LocalStorageUtil.apiReset(); @@ -173,7 +171,7 @@ export class LoginPage { } async loginToProcessServicesUsingUserModel(userModel) { - this.goToLoginPage(); + await this.goToLoginPage(); await LocalStorageUtil.clearStorage(); await LocalStorageUtil.setStorageItem('providers', 'BPM'); await LocalStorageUtil.apiReset(); diff --git a/lib/testing/src/lib/core/pages/notification-history.page.ts b/lib/testing/src/lib/core/pages/notification-history.page.ts new file mode 100644 index 00000000000..ebee023d63f --- /dev/null +++ b/lib/testing/src/lib/core/pages/notification-history.page.ts @@ -0,0 +1,52 @@ +/*! + * @license + * Copyright 2019 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { by, element } from 'protractor'; +import { BrowserActions } from '../utils/browser-actions'; + +export class NotificationHistoryPage { + + notificationList = element(by.css('#adf-notification-history-list')); + + clickNotificationButton() { + BrowserActions.clickExecuteScript('#adf-notification-history-open-button'); + } + + clickMarkAsRead() { + BrowserActions.click(element(by.css('#adf-notification-history-mark-as-read'))); + } + + checkNotificationIsPresent(text: string) { + expect(BrowserActions.getText(this.notificationList)).toContain(text); + } + + checkNotificationIsNotPresent(text: string) { + expect(BrowserActions.getText(this.notificationList)).not.toContain(text); + } + + checkNotifyContains(text: string) { + this.clickNotificationButton(); + this.checkNotificationIsPresent(text); + this.clickMarkAsRead(); + } + + checkNotifyNotContains(text: string) { + this.clickNotificationButton(); + this.checkNotificationIsNotPresent(text); + BrowserActions.closeMenuAndDialogs(); + } +} diff --git a/lib/testing/src/lib/core/pages/public-api.ts b/lib/testing/src/lib/core/pages/public-api.ts index 660bf348ecf..301ad324f05 100644 --- a/lib/testing/src/lib/core/pages/public-api.ts +++ b/lib/testing/src/lib/core/pages/public-api.ts @@ -25,5 +25,5 @@ export * from './data-table-component.page'; export * from './pagination.page'; export * from './error.page'; export * from './login.page'; - +export * from './notification-history.page'; export * from './form/public-api'; diff --git a/lib/tsconfig.doc.json b/lib/tsconfig.doc.json new file mode 100644 index 00000000000..ff1afcf3d1c --- /dev/null +++ b/lib/tsconfig.doc.json @@ -0,0 +1,59 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "commonjs", + "moduleResolution": "node", + "sourceMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "skipLibCheck": false, + "noLib": false, + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "noImplicitAny": false, + "noImplicitReturns": false, + "noImplicitUseStrict": false, + "noFallthroughCasesInSwitch": true, + "removeComments": true, + "declaration": true, + "outDir": "./dist", + "baseUrl" : "./", + "types": ["jasmine"], + "allowSyntheticDefaultImports": true, + "paths": { + "@alfresco/adf-process-services-cloud": ["./process-services-cloud/"], + "@alfresco/adf-testing": ["./testing/"], + "@alfresco/adf-process-services": ["./process-services/"], + "@alfresco/adf-content-services": ["./content-services/"], + "@alfresco/adf-extensions": ["./extensions/"], + "@alfresco/adf-core": ["./core/"], + "@alfresco/adf-insights": ["./analytics"] + }, + "lib": [ + "es2016", + "dom" + ], + "suppressImplicitAnyIndexErrors": true, + "noUnusedLocals": true + }, + "exclude": [ + "testing", + "*/node_modules", + "*/demo", + "config", + "*/coverage", + "node_modules", + "*/dist", + "dist" + ], + "angularCompilerOptions": { + "strictMetadataEmit": false, + "skipTemplateCodegen": true, + "preserveWhitespaces": false + }, + "typedocOptions": { + "json": "docs/docs.json", + "exclude": ["**/*.spec.ts", "node_modules"], + "ignoreCompilerErrors": true + } +} diff --git a/package-lock.json b/package-lock.json index 70100937bee..ff7a3fca277 100644 --- a/package-lock.json +++ b/package-lock.json @@ -91,16 +91,16 @@ } }, "@angular-devkit/build-angular": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.6.tgz", - "integrity": "sha512-gdP856Z5tuQ69mJla5VPKm/uR86dcrPWYW41Jyu5oIhL2GAQ4JtDEuL2+ppwQO8i8hsXGIAbulGAbrlvU5I8OA==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.9.tgz", + "integrity": "sha512-onh07LhdxotDFjja0KKsDWNCwgpM/ymuRr5h0e+vT4AgklP2Uioz1CpzVOgxPIKkdVdGR9QgDinVsWAmY90J8g==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.6", - "@angular-devkit/build-optimizer": "0.13.6", - "@angular-devkit/build-webpack": "0.13.6", - "@angular-devkit/core": "7.3.6", - "@ngtools/webpack": "7.3.6", + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/build-optimizer": "0.13.9", + "@angular-devkit/build-webpack": "0.13.9", + "@angular-devkit/core": "7.3.9", + "@ngtools/webpack": "7.3.9", "ajv": "6.9.1", "autoprefixer": "9.4.6", "circular-dependency-plugin": "5.0.2", @@ -116,8 +116,8 @@ "loader-utils": "1.2.3", "mini-css-extract-plugin": "0.5.0", "minimatch": "3.0.4", - "node-sass": "4.11.0", - "opn": "5.4.0", + "node-sass": "4.12.0", + "open": "6.0.0", "parse5": "4.0.0", "postcss": "7.0.14", "postcss-import": "12.0.1", @@ -128,7 +128,7 @@ "semver": "5.6.0", "source-map-loader": "0.2.4", "source-map-support": "0.5.10", - "speed-measure-webpack-plugin": "1.3.0", + "speed-measure-webpack-plugin": "1.3.1", "stats-webpack-plugin": "0.7.0", "style-loader": "0.23.1", "stylus": "0.54.5", @@ -143,6 +143,29 @@ "webpack-subresource-integrity": "1.1.0-rc.6" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz", + "integrity": "sha512-EAFtCs9dsGhpMRC45PoYsrkiExpWz9Ax15qXfzwdDRacz5DmdOVt+QpkLW1beUOwiyj/bhFyj23eaONK2RTn/w==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.9", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/core": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, "ajv": { "version": "6.9.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", @@ -176,10 +199,17 @@ "supports-color": "^2.0.0" } }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, "node-sass": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.11.0.tgz", - "integrity": "sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", + "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", "dev": true, "optional": true, "requires": { @@ -190,12 +220,10 @@ "get-stdin": "^4.0.1", "glob": "^7.0.3", "in-publish": "^2.0.0", - "lodash.assign": "^4.2.0", - "lodash.clonedeep": "^4.3.2", - "lodash.mergewith": "^4.6.0", + "lodash": "^4.17.11", "meow": "^3.7.0", "mkdirp": "^0.5.1", - "nan": "^2.10.0", + "nan": "^2.13.2", "node-gyp": "^3.8.0", "npmlog": "^4.0.0", "request": "^2.88.0", @@ -240,6 +268,12 @@ "ajv-keywords": "^3.1.0" } }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -329,9 +363,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.6.tgz", - "integrity": "sha512-/EOO0wxw7FIKfove4Fv/aKiKgvH0kFhRT2GOe3pW0yV2y2e1dfQdo2AqdGCfJ4rSbwsfWSGTUUFITc+9jgXFZw==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.9.tgz", + "integrity": "sha512-GQtCntthQHSBv5l1ZY5p00JOECb/WcE1qUBo5kFjp84z0fszDkhOy52M1kcWCX4PFzJaY4DKk58hbUE/2UN0jw==", "dev": true, "requires": { "loader-utils": "1.2.3", @@ -349,16 +383,51 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.6.tgz", - "integrity": "sha512-lQmYrhOHeBn/r7uw+FfpJUq9puApYe72+mrIfg/UtLwSEYt58n5d156jnuMcfWnCyhYUgYqLTaOUfSM0RV7akw==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.9.tgz", + "integrity": "sha512-6ypu6pzNmQxzATF4rTWEhGSl5hyGQ8a/3aCZF/ux+XGc3d4hi2HW+NWlDm1UEna6ZjNtgEPlgfP4q8BKrjRmfA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.6", - "@angular-devkit/core": "7.3.6", + "@angular-devkit/architect": "0.13.9", + "@angular-devkit/core": "7.3.9", "rxjs": "6.3.3" }, "dependencies": { + "@angular-devkit/architect": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.9.tgz", + "integrity": "sha512-EAFtCs9dsGhpMRC45PoYsrkiExpWz9Ax15qXfzwdDRacz5DmdOVt+QpkLW1beUOwiyj/bhFyj23eaONK2RTn/w==", + "dev": true, + "requires": { + "@angular-devkit/core": "7.3.9", + "rxjs": "6.3.3" + } + }, + "@angular-devkit/core": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "rxjs": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", @@ -367,6 +436,12 @@ "requires": { "tslib": "^1.9.0" } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true } } }, @@ -1097,18 +1172,43 @@ "dev": true }, "@ngtools/webpack": { - "version": "7.3.6", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.6.tgz", - "integrity": "sha512-gDMHybwe8B+1BSvtwM5z4qAkUnZ9b4PTyIVWWECgTLDp2x3WhJi2rMk2X8HTkpbZ52pLPue5GL1sfqlZIOcX7Q==", + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.9.tgz", + "integrity": "sha512-+ROpqfCXLdQwfP+UNDLk4p959ZrocpStkdd2Iy9CeOJ8yDkityqpstTwQC3oHzzu/95BiyZ0hrHbM6AsPPIvJg==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.6", + "@angular-devkit/core": "7.3.9", "enhanced-resolve": "4.1.0", "rxjs": "6.3.3", "tree-kill": "1.2.1", "webpack-sources": "1.3.0" }, "dependencies": { + "@angular-devkit/core": { + "version": "7.3.9", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.9.tgz", + "integrity": "sha512-SaxD+nKFW3iCBKsxNR7+66J30EexW/y7tm8m5AvUH+GwSAgIj0ZYmRUzFEPggcaLVA4WnE/YWqIXZMJW5dT7gw==", + "dev": true, + "requires": { + "ajv": "6.9.1", + "chokidar": "2.0.4", + "fast-json-stable-stringify": "2.0.0", + "rxjs": "6.3.3", + "source-map": "0.7.3" + } + }, + "ajv": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.1.tgz", + "integrity": "sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "rxjs": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", @@ -1117,6 +1217,12 @@ "requires": { "tslib": "^1.9.0" } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true } } }, @@ -1814,12 +1920,11 @@ "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==", "dev": true }, - "addressparser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz", - "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=", - "dev": true, - "optional": true + "acorn-walk": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.1.1.tgz", + "integrity": "sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw==", + "dev": true }, "adf-monaco-extension": { "version": "0.0.8", @@ -1932,50 +2037,6 @@ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, - "amqplib": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.5.3.tgz", - "integrity": "sha512-ZOdUhMxcF+u62rPI+hMtU1NBXSDFQ3eCJJrenamtdQ7YYwh7RZJHOIM1gonVbZ5PyVdYH4xqBPje9OYqk7fnqw==", - "dev": true, - "optional": true, - "requires": { - "bitsyntax": "~0.1.0", - "bluebird": "^3.5.2", - "buffer-more-ints": "~1.0.0", - "readable-stream": "1.x >=1.1.9", - "safe-buffer": "~5.1.2", - "url-parse": "~1.4.3" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - } - } - }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", @@ -2208,12 +2269,6 @@ "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", "dev": true }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -2274,11 +2329,12 @@ } }, "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -2317,13 +2373,6 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, - "ast-types": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.12.2.tgz", - "integrity": "sha512-8c83xDLJM/dLDyXNLiR6afRRm4dPKN6KAnKqytRK3DBJul9lA+atxdQkNDkSVPdTqea5HiRq3lnnOIZ0MBpvdg==", - "dev": true, - "optional": true - }, "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", @@ -2407,13 +2456,45 @@ "dev": true }, "axios": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.16.2.tgz", - "integrity": "sha1-uk+S8XFn37q0CYN4VFS5rBScPG0=", + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", + "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", "dev": true, "requires": { - "follow-redirects": "^1.2.3", - "is-buffer": "^1.1.5" + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "follow-redirects": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", + "dev": true, + "requires": { + "debug": "=3.1.0" + } + }, + "is-buffer": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", + "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, "axobject-query": { @@ -2502,25 +2583,6 @@ "babel-runtime": "^6.22.0" } }, - "babel-polyfill": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.23.0.tgz", - "integrity": "sha1-g2TKYt+Or7gwSZ9pkXdGbDsDSZ0=", - "dev": true, - "requires": { - "babel-runtime": "^6.22.0", - "core-js": "^2.4.0", - "regenerator-runtime": "^0.10.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } - } - }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -2716,14 +2778,15 @@ "callsite": "1.0.0" } }, - "bfj-node4": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", - "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", + "bfj": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.1.tgz", + "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", "dev": true, "requires": { "bluebird": "^3.5.1", "check-types": "^7.3.0", + "hoopy": "^0.1.2", "tryer": "^1.0.0" } }, @@ -2738,43 +2801,11 @@ "integrity": "sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==", "dev": true }, - "bitsyntax": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz", - "integrity": "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==", - "dev": true, - "optional": true, - "requires": { - "buffer-more-ints": "~1.0.0", - "debug": "~2.6.9", - "safe-buffer": "~5.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - } - } - }, "bl": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.1.2.tgz", "integrity": "sha1-/cqHGplxOqANGeO7ukHER4emU5g=", "dev": true, - "optional": true, "requires": { "readable-stream": "~2.0.5" }, @@ -2783,15 +2814,13 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true, - "optional": true + "dev": true }, "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, - "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -2805,8 +2834,7 @@ "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true + "dev": true } } }, @@ -2907,15 +2935,6 @@ "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -3014,14 +3033,24 @@ "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, + "brotli-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/brotli-size/-/brotli-size-0.1.0.tgz", + "integrity": "sha512-5ny7BNvpe2TSmdafF1T9dnFYp3AIrJ8qJt29K0DQJzORlK38LBim/CmlY26JtreV6SWmXza7Oa+9m61SzvxR0Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "iltorb": "^2.4.3" + } + }, "browser-sync": { - "version": "2.26.3", - "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.3.tgz", - "integrity": "sha512-VLzpjCA4uXqfzkwqWtMM6hvPm2PNHp2RcmzBXcbi6C9WpkUhhFb8SVAr4CFrCsFxDg+oY6HalOjn8F+egyvhag==", + "version": "2.26.5", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.26.5.tgz", + "integrity": "sha512-zVa6MmadAFgl5Uk53Yy5cw5tGTO7xSGAWK3Yx70GJ1t5jK+r6B4q3xq+1XbYfLt1SbeFg7WoNWneNhMT4B9jFw==", "dev": true, "requires": { - "browser-sync-client": "^2.26.2", - "browser-sync-ui": "^2.26.2", + "browser-sync-client": "^2.26.4", + "browser-sync-ui": "^2.26.4", "bs-recipes": "1.3.4", "bs-snippet-injector": "^2.0.1", "chokidar": "^2.0.4", @@ -3036,7 +3065,7 @@ "http-proxy": "1.15.2", "immutable": "^3", "localtunnel": "1.9.1", - "micromatch": "2.3.11", + "micromatch": "^3.1.10", "opn": "5.3.0", "portscanner": "2.1.1", "qs": "6.2.3", @@ -3052,135 +3081,27 @@ "yargs": "6.4.0" }, "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "eventemitter3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", + "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", "dev": true }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", "dev": true, "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "engine.io": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", - "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "1.0.0", - "cookie": "0.3.1", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.0", - "ws": "~3.3.1" - } - }, - "engine.io-client": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", - "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.1.1", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~3.3.1", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" - } - }, - "eventemitter3": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.2.0.tgz", - "integrity": "sha1-HIaZHYFq0eUEdQ5zh0Ik7PO+xQg=", - "dev": true - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "fs-extra": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", - "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^3.0.0", - "universalify": "^0.1.0" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, "http-proxy": { @@ -3193,39 +3114,6 @@ "requires-port": "1.x.x" } }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, "jsonfile": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", @@ -3235,42 +3123,6 @@ "graceful-fs": "^4.1.6" } }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "opn": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", @@ -3286,61 +3138,6 @@ "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", "dev": true }, - "socket.io": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", - "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", - "dev": true, - "requires": { - "debug": "~3.1.0", - "engine.io": "~3.2.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.1.1", - "socket.io-parser": "~3.2.0" - } - }, - "socket.io-client": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", - "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "engine.io-client": "~3.2.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.2.0", - "to-array": "0.1.4" - } - }, - "socket.io-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", - "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } - } - }, "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", @@ -3381,9 +3178,9 @@ } }, "browser-sync-client": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.2.tgz", - "integrity": "sha512-FEuVJD41fI24HJ30XOT2RyF5WcnEtdJhhTqeyDlnMk/8Ox9MZw109rvk9pdfRWye4soZLe+xcAo9tHSMxvgAdw==", + "version": "2.26.4", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.26.4.tgz", + "integrity": "sha512-mQiDp5/tf79VezDS5j/EExU4Ze6f5DQYuL0Z7VdJgBbNLTHDfkYGi2R620qc6HkY9XZA0m4/UwihT7J42RBIJA==", "dev": true, "requires": { "etag": "1.8.1", @@ -3410,9 +3207,9 @@ } }, "browser-sync-ui": { - "version": "2.26.2", - "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.2.tgz", - "integrity": "sha512-LF7GMWo8ELOE0eAlxuRCfnGQT1ZxKP9flCfGgZdXFc6BwmoqaJHlYe7MmVvykKkXjolRXTz8ztXAKGVqNwJ3EQ==", + "version": "2.26.4", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.26.4.tgz", + "integrity": "sha512-u20P3EsZoM8Pt+puoi3BU3KlbQAH1lAcV+/O4saF26qokrBqIDotmGonfWwoRbUmdxZkM9MBmA0K39ZTG1h4sA==", "dev": true, "requires": { "async-each-series": "0.1.1", @@ -3571,43 +3368,12 @@ "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, - "buffer-more-ints": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", - "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==", - "dev": true - }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "buildmail": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz", - "integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=", - "dev": true, - "optional": true, - "requires": { - "addressparser": "1.0.1", - "libbase64": "0.1.0", - "libmime": "3.0.0", - "libqp": "1.1.0", - "nodemailer-fetch": "1.6.0", - "nodemailer-shared": "1.1.0", - "punycode": "1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - } - } - }, "builtin-modules": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz", @@ -3627,69 +3393,90 @@ "dev": true }, "bundlesize": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/bundlesize/-/bundlesize-0.15.3.tgz", - "integrity": "sha512-CqLtaDKQFZVh9l53Py67lJOLOT//aNrmF9xT1v5cS080bbqyhOdTX5+LuoVI8LOKa351fUikGcxsQDYWQXfizg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/bundlesize/-/bundlesize-0.17.2.tgz", + "integrity": "sha512-cJAZ6wvs6IHQCnUn9kTme4GL+ahoICjcS0QPcGTj61Hl4bCc8wKkkVLUote4k/1yxa0+kUIrIo9wyNJ+XIciEw==", "dev": true, "requires": { - "axios": "^0.16.2", - "bytes": "^3.0.0", + "axios": "^0.18.0", + "brotli-size": "0.1.0", + "bytes": "^3.1.0", "ci-env": "^1.4.0", - "commander": "^2.11.0", + "commander": "^2.20.0", "github-build": "^1.2.0", - "glob": "^7.1.2", + "glob": "^7.1.4", "gzip-size": "^4.0.0", - "opencollective": "^1.0.3", "prettycli": "^1.4.3", - "read-pkg-up": "^2.0.0" + "read-pkg-up": "^3.0.0" }, "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", + "parse-json": "^4.0.0", + "pify": "^3.0.0", "strip-bom": "^3.0.0" } }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "pify": "^2.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "^2.0.0", + "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "path-type": "^3.0.0" } }, "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "read-pkg": "^3.0.0" } }, "strip-bom": { @@ -3955,18 +3742,18 @@ "dev": true }, "chrome-trace-event": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", - "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { "tslib": "^1.9.0" } }, "ci-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/ci-env/-/ci-env-1.7.0.tgz", - "integrity": "sha512-ifHfV5JmACoTnoPxwjKjUUAekL1UCKZ9EU27GaaSkLVopkV3H1w0eYIpY+aAiX31SVEtTrZFMS94EFETSj0vIA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ci-env/-/ci-env-1.8.0.tgz", + "integrity": "sha512-OKShe5VZpuvVfJhiadgix/+lnOVJIcNLdLOrUwbllNfvHPAQzJxuNjefH3xfw3yHxAV8CDbLqXT9C4ygDtg8ow==", "dev": true }, "ci-info": { @@ -3991,12 +3778,6 @@ "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", "dev": true }, - "circular-json": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.5.9.tgz", - "integrity": "sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==", - "dev": true - }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -4224,15 +4005,6 @@ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true }, - "combine-lists": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/combine-lists/-/combine-lists-1.0.1.tgz", - "integrity": "sha1-RYwH4J4NkA/Ci3Cj/sLazR0st/Y=", - "dev": true, - "requires": { - "lodash": "^4.5.0" - } - }, "combined-stream": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", @@ -4280,25 +4052,33 @@ "dev": true }, "compressible": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.16.tgz", - "integrity": "sha512-JQfEOdnI7dASwCuSPWIeVYwc/zMsu/+tRhoUvEfXz2gxOA2DNjmG5vhtFdBlhWPPGo+RdT9S3tgc/uH5qgDiiA==", + "version": "2.0.17", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", + "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "mime-db": ">= 1.38.0 < 2" + "mime-db": ">= 1.40.0 < 2" + }, + "dependencies": { + "mime-db": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", + "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", + "dev": true + } } }, "compression": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", - "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "~2.0.14", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "~1.0.1", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, @@ -4696,16 +4476,6 @@ "which": "^1.2.9" } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.x.x" - } - }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -5072,25 +4842,6 @@ "assert-plus": "^1.0.0" } }, - "data-uri-to-buffer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-2.0.0.tgz", - "integrity": "sha512-YbKCNLPPP4inc0E5If4OaalBc7gpaM2MRv77Pv2VThVComLKfbGYtJcdDCViDyp1Wd4SebhHLz94vp91zbK6bw==", - "dev": true, - "optional": true, - "requires": { - "@types/node": "^8.0.7" - }, - "dependencies": { - "@types/node": { - "version": "8.10.44", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.44.tgz", - "integrity": "sha512-HY3SK7egERHGUfY8p6ztXIEQWcIPHouYhCGcLAPQin7gE2G/fALFz+epnMwcxKUS6aKqTVoAFdi+t1llQd3xcw==", - "dev": true, - "optional": true - } - } - }, "date-fns": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz", @@ -5098,9 +4849,9 @@ "dev": true }, "date-format": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-1.2.0.tgz", - "integrity": "sha1-YV6CjiM90aubua4JUODOzPpuytg=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.0.0.tgz", + "integrity": "sha512-M6UqVvZVgFYqZL1SfHsRGIQSz3ZL+qgbsV5Lp1Vj61LZVYuEwcMXYay7DRDtYs2HQQBK5hQtQ0fD9aEJ89V0LA==", "dev": true }, "date-now": { @@ -5155,6 +4906,15 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -5258,37 +5018,16 @@ "kind-of": "^6.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "degenerator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", - "integrity": "sha1-/PSQo37OJmRk2cxDGrmMWBnO0JU=", - "dev": true, - "optional": true, - "requires": { - "ast-types": "0.x.x", - "escodegen": "1.x.x", - "esprima": "3.x.x" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "optional": true + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } } } }, @@ -5383,6 +5122,12 @@ "repeating": "^2.0.0" } }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, "detect-node": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", @@ -5530,13 +5275,6 @@ "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", "dev": true }, - "double-ended-queue": { - "version": "2.1.0-0", - "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", - "integrity": "sha1-ED01J/0xUo9AGIEwyEHv3XgmTlw=", - "dev": true, - "optional": true - }, "duplexer": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", @@ -5710,9 +5448,9 @@ } }, "engine.io": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.5.tgz", - "integrity": "sha512-D06ivJkYxyRrcEe0bTpNnBQNgP9d3xog+qZlLbui8EsMr/DouQpf5o9FzJnWYHEYE0YsFHllUv2R1dkgYZXHcA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.2.1.tgz", + "integrity": "sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w==", "dev": true, "requires": { "accepts": "~1.3.4", @@ -5720,7 +5458,6 @@ "cookie": "0.3.1", "debug": "~3.1.0", "engine.io-parser": "~2.1.0", - "uws": "~9.14.0", "ws": "~3.3.1" }, "dependencies": { @@ -5742,9 +5479,9 @@ } }, "engine.io-client": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.6.tgz", - "integrity": "sha512-hnuHsFluXnsKOndS4Hv6SvUrgdYx1pk2NqfaDMW+GWdgfU3+/V25Cj7I8a0x92idSpa5PIhJRKxPvp9mnoLsfg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.3.2.tgz", + "integrity": "sha512-y0CPINnhMvPuwtqXfsGuWE8BB66+B6wTtCofQDRecMQPYX3MYUZXFNKDhdrSe3EVjgOu4V3rxdeqN/Tr91IgbQ==", "dev": true, "requires": { "component-emitter": "1.2.1", @@ -5755,7 +5492,7 @@ "indexof": "0.0.1", "parseqs": "0.0.5", "parseuri": "0.0.5", - "ws": "~3.3.1", + "ws": "~6.1.0", "xmlhttprequest-ssl": "~1.5.4", "yeast": "0.1.2" }, @@ -5774,6 +5511,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "ws": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } } } }, @@ -5938,36 +5684,6 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, - "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "dev": true, - "optional": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -6116,34 +5832,6 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "expand-braces": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", - "integrity": "sha1-SIsdHSRRyz06axks/AMPRMWFX+o=", - "dev": true, - "requires": { - "array-slice": "^0.2.3", - "array-unique": "^0.2.1", - "braces": "^0.1.2" - }, - "dependencies": { - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-0.1.5.tgz", - "integrity": "sha1-wIVxEIUpHYt1/ddOqw+FlygHEeY=", - "dev": true, - "requires": { - "expand-range": "^0.1.0" - } - } - } - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -6194,29 +5882,11 @@ } } }, - "expand-range": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-0.1.1.tgz", - "integrity": "sha1-TLjtoJk8pW+k9B/ELzy7TMrf8EQ=", - "dev": true, - "requires": { - "is-number": "^0.1.1", - "repeat-string": "^0.2.2" - }, - "dependencies": { - "is-number": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-0.1.1.tgz", - "integrity": "sha1-aaevEWlj1HIG7JvZtIoUIW8eOAY=", - "dev": true - }, - "repeat-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-0.2.2.tgz", - "integrity": "sha1-x6jTI2BoNiBZp+RlH8aITosftK4=", - "dev": true - } - } + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true }, "expand-tilde": { "version": "2.0.2", @@ -6543,19 +6213,6 @@ } } }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -6806,6 +6463,12 @@ "null-check": "^1.0.0" } }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "fs-extra": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", @@ -7374,9 +7037,9 @@ } }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -7385,53 +7048,6 @@ "rimraf": "2" } }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "optional": true, - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true, - "optional": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true, - "optional": true - }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true, - "optional": true - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -7474,26 +7090,6 @@ "globule": "^1.0.0" } }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dev": true, - "optional": true, - "requires": { - "is-property": "^1.0.2" - } - }, - "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, - "optional": true, - "requires": { - "is-property": "^1.0.0" - } - }, "genfun": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", @@ -7530,45 +7126,6 @@ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", "dev": true }, - "get-uri": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-2.0.3.tgz", - "integrity": "sha512-x5j6Ks7FOgLD/GlvjKwgu7wdmMR55iuRHhn8hj/+gA+eSbxQvZ+AEomq+3MgVEZj1vpi738QahGbCCSIDtXtkw==", - "dev": true, - "optional": true, - "requires": { - "data-uri-to-buffer": "2", - "debug": "4", - "extend": "~3.0.2", - "file-uri-to-path": "1", - "ftp": "~0.3.10", - "readable-stream": "3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "readable-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", - "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", - "dev": true, - "optional": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -7628,6 +7185,12 @@ } } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "dev": true + }, "github-slugger": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.1.tgz", @@ -7650,42 +7213,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -7953,9 +7480,9 @@ "dev": true }, "handlebars": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.1.tgz", - "integrity": "sha512-3Zhi6C0euYZL5sM0Zcy7lInLXKQ+YLcF/olbN010mzGQ4XVm50JeyBnMqofHh696GrciGruC7kCcApPDJvVgwA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -8108,36 +7635,12 @@ "minimalistic-assert": "^1.0.1" } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "optional": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, "highlight.js": { "version": "9.15.6", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", "dev": true }, - "hipchat-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hipchat-notifier/-/hipchat-notifier-1.1.0.tgz", - "integrity": "sha1-ttJJdVQ3wZEII2d5nTupoPI7Ix4=", - "dev": true, - "optional": true, - "requires": { - "lodash": "^4.0.0", - "request": "^2.0.0" - } - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -8149,12 +7652,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, "homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", @@ -8164,6 +7661,12 @@ "parse-passwd": "^1.0.0" } }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, "hosted-git-info": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", @@ -8311,22 +7814,6 @@ "sshpk": "^1.7.0" } }, - "httpntlm": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz", - "integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=", - "dev": true, - "requires": { - "httpreq": ">=0.4.22", - "underscore": "~1.7.0" - } - }, - "httpreq": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz", - "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=", - "dev": true - }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -8554,9 +8041,9 @@ } }, "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", "dev": true }, "iferr": { @@ -8580,6 +8067,27 @@ "minimatch": "^3.0.4" } }, + "iltorb": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.3.tgz", + "integrity": "sha512-cr/kC07Cf9sW3TWH7yUxV2QkNjby4LMCsXGmxPCQs5x//QzTpF3GLPNY7L66G+DkNGaTRCgY+vYZ+dyAcuDOnQ==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "nan": "^2.13.2", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true + } + } + }, "image-size": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", @@ -8730,13 +8238,6 @@ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", "dev": true }, - "inflection": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", - "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=", - "dev": true, - "optional": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9027,21 +8528,6 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -9103,27 +8589,6 @@ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", "dev": true }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true, - "optional": true - }, - "is-my-json-valid": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz", - "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==", - "dev": true, - "optional": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - } - }, "is-npm": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", @@ -9213,28 +8678,10 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "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=", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", "dev": true }, "is-redirect": { @@ -9724,9 +9171,9 @@ "dev": true }, "js-yaml": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", - "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -9820,9 +9267,9 @@ "dev": true }, "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", "dev": true }, "json5": { @@ -9854,13 +9301,6 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true, - "optional": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -9886,40 +9326,46 @@ } }, "karma": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/karma/-/karma-2.0.5.tgz", - "integrity": "sha512-rECezBeY7mjzGUWhFlB7CvPHgkHJLXyUmWg+6vHCEsdWNUTnmiS6jRrIMcJEWgU2DUGZzGWG0bTRVky8fsDTOA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/karma/-/karma-4.1.0.tgz", + "integrity": "sha512-xckiDqyNi512U4dXGOOSyLKPwek6X/vUizSy2f3geYevbLj+UIdvNwbn7IwfUIL2g1GXEPWt/87qFD1fBbl/Uw==", "dev": true, "requires": { "bluebird": "^3.3.0", "body-parser": "^1.16.1", + "braces": "^2.3.2", "chokidar": "^2.0.3", "colors": "^1.1.0", - "combine-lists": "^1.0.0", "connect": "^3.6.0", "core-js": "^2.2.0", "di": "^0.0.1", "dom-serialize": "^2.2.0", - "expand-braces": "^0.1.1", + "flatted": "^2.0.0", "glob": "^7.1.1", "graceful-fs": "^4.1.2", "http-proxy": "^1.13.0", "isbinaryfile": "^3.0.0", - "lodash": "^4.17.4", - "log4js": "^2.5.3", - "mime": "^1.3.4", + "lodash": "^4.17.11", + "log4js": "^4.0.0", + "mime": "^2.3.1", "minimatch": "^3.0.2", "optimist": "^0.6.1", "qjobs": "^1.1.4", "range-parser": "^1.2.0", "rimraf": "^2.6.0", "safe-buffer": "^5.0.1", - "socket.io": "2.0.4", + "socket.io": "2.1.1", "source-map": "^0.6.1", "tmp": "0.0.33", - "useragent": "2.2.1" + "useragent": "2.3.0" }, "dependencies": { + "mime": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", + "dev": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10181,37 +9627,6 @@ "type-check": "~0.3.2" } }, - "libbase64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz", - "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=", - "dev": true - }, - "libmime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz", - "integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=", - "dev": true, - "requires": { - "iconv-lite": "0.4.15", - "libbase64": "0.1.0", - "libqp": "1.1.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", - "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=", - "dev": true - } - } - }, - "libqp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz", - "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=", - "dev": true - }, "license-checker": { "version": "25.0.1", "resolved": "https://registry.npmjs.org/license-checker/-/license-checker-25.0.1.tgz", @@ -10502,15 +9917,15 @@ } }, "lite-server": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/lite-server/-/lite-server-2.4.0.tgz", - "integrity": "sha512-Vo06tHpXrqm37i6T7tVdq5PSbrFmvQRw64+dlFXdh1tltv6KCvpE+xzXz2+x6KWJ8ja+GgwSy4P13GUWyhaDHQ==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/lite-server/-/lite-server-2.5.3.tgz", + "integrity": "sha512-D+CfLgGn/WVlGKKrZaGnBDIpXqm5lFXLt2tw0aCQNxMIbXD7VlYiud2bxe3oQDAIwfVPEBHIF6RdZVml2cBcLA==", "dev": true, "requires": { - "browser-sync": "^2.24.4", + "browser-sync": "^2.26.5", "connect-history-api-fallback": "^1.2.0", "connect-logger": "0.0.1", - "lodash": "^4.11.1", + "lodash": "^4.17.11", "minimist": "1.2.0" } }, @@ -10885,246 +10300,33 @@ } }, "log4js": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-2.11.0.tgz", - "integrity": "sha512-z1XdwyGFg8/WGkOyF6DPJjivCWNLKrklGdViywdYnSKOvgtEBo2UyEMZS5sD2mZrQlU3TvO8wDWLc8mzE1ncBQ==", - "dev": true, - "requires": { - "amqplib": "^0.5.2", - "axios": "^0.15.3", - "circular-json": "^0.5.4", - "date-format": "^1.2.0", - "debug": "^3.1.0", - "hipchat-notifier": "^1.1.0", - "loggly": "^1.1.0", - "mailgun-js": "^0.18.0", - "nodemailer": "^2.5.0", - "redis": "^2.7.1", - "semver": "^5.5.0", - "slack-node": "~0.2.0", - "streamroller": "0.7.0" - }, - "dependencies": { - "axios": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.15.3.tgz", - "integrity": "sha1-LJ1jiy4ZGgjqHWzJiOrda6W9wFM=", - "dev": true, - "optional": true, - "requires": { - "follow-redirects": "1.0.0" - } - }, - "follow-redirects": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.0.0.tgz", - "integrity": "sha1-jjQpjL0uF28lTv/sdaHHjMhJ/Tc=", - "dev": true, - "optional": true, - "requires": { - "debug": "^2.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - } - } - }, - "loggly": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/loggly/-/loggly-1.1.1.tgz", - "integrity": "sha1-Cg/B0/o6XsRP3HuJe+uipGlc6+4=", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-4.3.1.tgz", + "integrity": "sha512-nPGS7w7kBnzNm1j8JycFxwLCbIMae8tHCo0cCdx/khB20Tcod8SZThYEB9E0c27ObcTGA1mlPowaf3hantQ/FA==", "dev": true, - "optional": true, "requires": { - "json-stringify-safe": "5.0.x", - "request": "2.75.x", - "timespan": "2.3.x" + "date-format": "^2.0.0", + "debug": "^4.1.1", + "flatted": "^2.0.0", + "rfdc": "^1.1.2", + "streamroller": "^1.0.5" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true, - "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=", - "dev": true, - "optional": true - }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true, - "optional": true - }, - "caseless": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz", - "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "optional": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "form-data": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.0.0.tgz", - "integrity": "sha1-bwrrrcxdoWwT4ezBETfYX5uIOyU=", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.11" - } - }, - "har-validator": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", - "dev": true, - "optional": true, - "requires": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - } - }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^0.2.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true, - "optional": true - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true, - "optional": true - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.3.tgz", - "integrity": "sha1-HPyyXBCpsrSDBT/zn138kjOQjP4=", - "dev": true, - "optional": true - }, - "request": { - "version": "2.75.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.75.0.tgz", - "integrity": "sha1-0rgmiihtoT6qXQGt9dGMyQ9lfZM=", - "dev": true, - "optional": true, - "requires": { - "aws-sign2": "~0.6.0", - "aws4": "^1.2.1", - "bl": "~1.1.2", - "caseless": "~0.11.0", - "combined-stream": "~1.0.5", - "extend": "~3.0.0", - "forever-agent": "~0.6.1", - "form-data": "~2.0.0", - "har-validator": "~2.0.6", - "hawk": "~3.1.3", - "http-signature": "~1.1.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.7", - "node-uuid": "~1.4.7", - "oauth-sign": "~0.8.1", - "qs": "~6.2.0", - "stringstream": "~0.0.4", - "tough-cookie": "~2.3.0", - "tunnel-agent": "~0.4.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true, - "optional": true - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, - "optional": true, "requires": { - "punycode": "^1.4.1" + "ms": "^2.1.1" } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true, - "optional": true } } }, "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.2.tgz", + "integrity": "sha512-Jt2MHrCNdtIe1W6co3tF5KXGRkzF+TYffiQstfXa04mrss9IKXzAAXYWak8LbZseAQY03sH2GzMCMU0ZOUc9bg==", "dev": true }, "longest-streak": { @@ -11177,54 +10379,6 @@ "sourcemap-codec": "^1.4.4" } }, - "mailcomposer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz", - "integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=", - "dev": true, - "optional": true, - "requires": { - "buildmail": "4.0.1", - "libmime": "3.0.0" - } - }, - "mailgun-js": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/mailgun-js/-/mailgun-js-0.18.1.tgz", - "integrity": "sha512-lvuMP14u24HS2uBsJEnzSyPMxzU2b99tQsIx1o6QNjqxjk8b3WvR+vq5oG1mjqz/IBYo+5gF+uSoDS0RkMVHmg==", - "dev": true, - "optional": true, - "requires": { - "async": "~2.6.0", - "debug": "~3.1.0", - "form-data": "~2.3.0", - "inflection": "~1.12.0", - "is-stream": "^1.1.0", - "path-proxy": "~1.0.0", - "promisify-call": "^2.0.2", - "proxy-agent": "~3.0.0", - "tsscmp": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true, - "optional": true - } - } - }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -11393,28 +10547,29 @@ "dev": true }, "markdownlint": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.11.0.tgz", - "integrity": "sha512-wE5WdKD6zW2DQaPQ5TFBTXh5j76DnWd/IFffnDQgHmi6Y61DJXBDfLftZ/suJHuv6cwPjM6gKw2GaRLJMOR+Mg==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.14.2.tgz", + "integrity": "sha512-Lzw5u46jcIQW0RX8nfz6mOjg3VwoTi7KTubk+G7LgJMybV98h3tyVaMpsNRm3UomBosNOUKVe3XOjJs6WS6DdQ==", "dev": true, "requires": { "markdown-it": "8.4.2" } }, "markdownlint-cli": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.12.0.tgz", - "integrity": "sha512-qufCBqpR+uRj9jY+Q4IrrBFf1Z5rISzn/aN6M4MQaci309B5xdoUye2AEoqkfddmFVpgH+s0q9FMdOFw7SDWrA==", + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.16.0.tgz", + "integrity": "sha512-BmtWhDvbsnbgYirYOiSOxP8THhkCjp28+xVfTyj3D1JsOlj0Txf3IA9wlT5GHCYaR6QfDlWq4pz/rh+bfOw2Vg==", "dev": true, "requires": { "commander": "~2.9.0", "deep-extend": "~0.5.1", "get-stdin": "~5.0.1", - "glob": "~7.0.3", - "js-yaml": "~3.11.0", + "glob": "~7.1.2", + "js-yaml": "^3.13.1", "lodash.differencewith": "~4.5.0", "lodash.flatten": "~4.4.0", - "markdownlint": "~0.11.0", + "markdownlint": "~0.14.1", + "minimatch": "~3.0.4", "rc": "~1.2.7" }, "dependencies": { @@ -11432,30 +10587,6 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=", "dev": true - }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } } } }, @@ -11474,12 +10605,6 @@ "escape-string-regexp": "^1.0.4" } }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true - }, "mathml-tag-names": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.0.tgz", @@ -11684,6 +10809,12 @@ "integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==", "dev": true }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, "mini-css-extract-plugin": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", @@ -11947,6 +11078,12 @@ "to-regex": "^3.0.1" } }, + "napi-build-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", + "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==", + "dev": true + }, "nconf": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.10.0.tgz", @@ -12012,13 +11149,6 @@ "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", "dev": true }, - "netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha1-ICl+idhvb2QA8lDZ9Pa0wZRfzTU=", - "dev": true, - "optional": true - }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -12252,21 +11382,20 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "node-abi": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.8.0.tgz", + "integrity": "sha512-1/aa2clS0pue0HjckL62CsbhWWU35HARvBDXcJtYKbYR7LnIutmpxmXbuDMV9kEviD2lP/wACOgWmmwljghHyQ==", + "dev": true, + "requires": { + "semver": "^5.4.1" + } + }, "node-ensure": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/node-ensure/-/node-ensure-0.0.0.tgz", "integrity": "sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc=" }, - "node-fetch": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.6.3.tgz", - "integrity": "sha1-3CNO3WSJmC1Y6PDbT2lQKavNjAQ=", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, "node-fetch-npm": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", @@ -12512,96 +11641,10 @@ "find-parent-dir": "^0.3.0" } }, - "nodemailer": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz", - "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=", - "dev": true, - "optional": true, - "requires": { - "libmime": "3.0.0", - "mailcomposer": "4.0.1", - "nodemailer-direct-transport": "3.3.2", - "nodemailer-shared": "1.1.0", - "nodemailer-smtp-pool": "2.8.2", - "nodemailer-smtp-transport": "2.7.2", - "socks": "1.1.9" - }, - "dependencies": { - "smart-buffer": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", - "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=", - "dev": true, - "optional": true - }, - "socks": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz", - "integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=", - "dev": true, - "optional": true, - "requires": { - "ip": "^1.1.2", - "smart-buffer": "^1.0.4" - } - } - } - }, - "nodemailer-direct-transport": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz", - "integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-fetch": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz", - "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=", - "dev": true - }, - "nodemailer-shared": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz", - "integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=", - "dev": true, - "requires": { - "nodemailer-fetch": "1.6.0" - } - }, - "nodemailer-smtp-pool": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz", - "integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-smtp-transport": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", - "integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=", - "dev": true, - "optional": true, - "requires": { - "nodemailer-shared": "1.1.0", - "nodemailer-wellknown": "0.1.10", - "smtp-connection": "2.12.0" - } - }, - "nodemailer-wellknown": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz", - "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=", + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", "dev": true }, "nopt": { @@ -12914,27 +11957,6 @@ "isobject": "^3.0.0" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -12991,132 +12013,13 @@ } } }, - "opencollective": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/opencollective/-/opencollective-1.0.3.tgz", - "integrity": "sha1-ruY3K8KBRFg2kMPKja7PwSDdDvE=", + "open": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.0.0.tgz", + "integrity": "sha512-/yb5mVZBz7mHLySMiSj2DcLtMBbFPJk5JBKEkHVZFxZAPzeg3L026O0T+lbdz1B2nyDnkClRSwRQJdeVUIF7zw==", "dev": true, "requires": { - "babel-polyfill": "6.23.0", - "chalk": "1.1.3", - "inquirer": "3.0.6", - "minimist": "1.2.0", - "node-fetch": "1.6.3", - "opn": "4.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "inquirer": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.0.6.tgz", - "integrity": "sha1-4EqqnQW3o8ubD0B9BDdfBEcZA0c=", - "dev": true, - "requires": { - "ansi-escapes": "^1.1.0", - "chalk": "^1.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.1", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx": "^4.1.0", - "string-width": "^2.0.0", - "strip-ansi": "^3.0.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "opn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", - "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "is-wsl": "^1.1.0" } }, "opencollective-postinstall": { @@ -13278,37 +12181,6 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "pac-proxy-agent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-3.0.0.tgz", - "integrity": "sha512-AOUX9jES/EkQX2zRz0AW7lSx9jD//hQS8wFXBvcnd/J2Py9KaMJMqV/LPqJssj1tgGufotb2mmopGPR15ODv1Q==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "^4.2.0", - "debug": "^3.1.0", - "get-uri": "^2.0.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "pac-resolver": "^3.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "^4.0.1" - } - }, - "pac-resolver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-3.0.0.tgz", - "integrity": "sha512-tcc38bsjuE3XZ5+4vP96OfhOugrX+JcnpUbhfuc4LuXBLQhoTthOstZeoQJBDnQUDYzYmdImKsbz0xSl1/9qeA==", - "dev": true, - "optional": true, - "requires": { - "co": "^4.6.0", - "degenerator": "^1.0.4", - "ip": "^1.1.5", - "netmask": "^1.0.6", - "thunkify": "^2.1.2" - } - }, "package-json": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", @@ -13501,35 +12373,6 @@ "is-hexadecimal": "^1.0.0" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.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=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -13650,25 +12493,6 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, - "path-proxy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-proxy/-/path-proxy-1.0.0.tgz", - "integrity": "sha1-GOijaFn8nS8aU7SN7hOFQ8Ag3l4=", - "dev": true, - "optional": true, - "requires": { - "inflection": "~1.3.0" - }, - "dependencies": { - "inflection": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.3.8.tgz", - "integrity": "sha1-y9Fg2p91sUw8xjV41POWeEvzAU4=", - "dev": true, - "optional": true - } - } - }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -14112,6 +12936,30 @@ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, + "prebuild-install": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz", + "integrity": "sha512-aaLVANlj4HgZweKttFNUVNRxDukytuIuxeK2boIMHjagNJCiVKWFsKF4tCE3ql3GbrD2tExPQ7/pwtEJcHNZeg==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.2.7", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + } + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -14124,12 +12972,6 @@ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, "pretty-bytes": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", @@ -14216,16 +13058,6 @@ "retry": "^0.10.0" } }, - "promisify-call": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/promisify-call/-/promisify-call-2.0.4.tgz", - "integrity": "sha1-1IwtRWUszM1SgB3ey9UzptS9X7o=", - "dev": true, - "optional": true, - "requires": { - "with-callback": "^1.0.2" - } - }, "property-expr": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz", @@ -14374,6 +13206,12 @@ } } }, + "protractor-browser-logs": { + "version": "1.0.423", + "resolved": "https://registry.npmjs.org/protractor-browser-logs/-/protractor-browser-logs-1.0.423.tgz", + "integrity": "sha512-SlB56Zs1VjXu4onlkADSypelphHBzuRVzgIuTtEr55I6HyZ2O+3qWGO9swqMBK5LNb+8P2sdSbeSQgGqO8Pnkw==", + "dev": true + }, "protractor-html-reporter-2": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/protractor-html-reporter-2/-/protractor-html-reporter-2-1.0.4.tgz", @@ -14595,30 +13433,6 @@ "ipaddr.js": "1.8.0" } }, - "proxy-agent": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-3.0.3.tgz", - "integrity": "sha512-PXVVVuH9tiQuxQltFJVSnXWuDtNr+8aNBP6XVDDCDiUuDN8eRCm+ii4/mFWmXWEA0w8jjJSlePa4LXlM4jIzNA==", - "dev": true, - "optional": true, - "requires": { - "agent-base": "^4.2.0", - "debug": "^3.1.0", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "lru-cache": "^4.1.2", - "pac-proxy-agent": "^3.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^4.0.1" - } - }, - "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=", - "dev": true, - "optional": true - }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -14707,9 +13521,9 @@ "dev": true }, "querystringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.0.tgz", - "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", "dev": true }, "quick-lru": { @@ -14718,25 +13532,6 @@ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", "dev": true }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -14963,39 +13758,13 @@ "redent": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "redis": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz", - "integrity": "sha512-M1OkonEQwtRmZv4tEWF2VgpG0JWJ8Fv1PhlgT5+B+uNq2cA3Rt1Yt/ryoR+vQNOQcIEgdCdfH0jr3bDpihAw1A==", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, - "optional": true, "requires": { - "double-ended-queue": "^2.1.0-0", - "redis-commands": "^1.2.0", - "redis-parser": "^2.6.0" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, - "redis-commands": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.4.0.tgz", - "integrity": "sha512-cu8EF+MtkwI4DLIT0x9P8qNTLFhQD4jLfxLR0cCNkeGzs87FN6879JOJwNQR/1zD7aSYNbU0hgsV9zGY71Itvw==", - "dev": true, - "optional": true - }, - "redis-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-2.6.0.tgz", - "integrity": "sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=", - "dev": true, - "optional": true - }, "reflect-metadata": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", @@ -15012,15 +13781,6 @@ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -15281,19 +14041,6 @@ } } }, - "requestretry": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/requestretry/-/requestretry-1.13.0.tgz", - "integrity": "sha512-Lmh9qMvnQXADGAQxsXHP4rbgO6pffCfuR8XUBdP9aitJcLQJxhp7YZK4xAVYXnPJ5E52mwrfiKQtKonPL8xsmg==", - "dev": true, - "optional": true, - "requires": { - "extend": "^3.0.0", - "lodash": "^4.15.0", - "request": "^2.74.0", - "when": "^3.7.7" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -15433,6 +14180,12 @@ "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", "dev": true }, + "rfdc": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", + "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", + "dev": true + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -15986,9 +14739,9 @@ } }, "serialize-javascript": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.6.1.tgz", - "integrity": "sha512-A5MOagrPFga4YaKQSWHryl7AXvbQkEqpw4NNYMTNYUNV51bA8ABHgYFpqKx+YFFrw59xMV1qGH1R4AgoNIVgCw==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", + "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", "dev": true }, "serve-index": { @@ -16167,6 +14920,23 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dev": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "simple-git": { "version": "1.113.0", "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.113.0.tgz", @@ -16187,16 +14957,6 @@ } } }, - "slack-node": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/slack-node/-/slack-node-0.2.0.tgz", - "integrity": "sha1-3kuN3aqLeT9h29KTgQT9q/N9+jA=", - "dev": true, - "optional": true, - "requires": { - "requestretry": "^1.2.2" - } - }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -16234,16 +14994,6 @@ "integrity": "sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw==", "dev": true }, - "smtp-connection": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz", - "integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=", - "dev": true, - "requires": { - "httpntlm": "1.6.1", - "nodemailer-shared": "1.1.0" - } - }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -16366,43 +15116,92 @@ } } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "optional": true, - "requires": { - "hoek": "2.x.x" - } - }, "socket.io": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz", - "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.1.1.tgz", + "integrity": "sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA==", "dev": true, "requires": { - "debug": "~2.6.6", - "engine.io": "~3.1.0", + "debug": "~3.1.0", + "engine.io": "~3.2.0", + "has-binary2": "~1.0.2", "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.0.4", - "socket.io-parser": "~3.1.1" + "socket.io-client": "2.1.1", + "socket.io-parser": "~3.2.0" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" } }, + "engine.io-client": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.2.1.tgz", + "integrity": "sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "component-inherit": "0.0.3", + "debug": "~3.1.0", + "engine.io-parser": "~2.1.1", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "ws": "~3.3.1", + "xmlhttprequest-ssl": "~1.5.4", + "yeast": "0.1.2" + } + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "socket.io-client": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.1.1.tgz", + "integrity": "sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ==", + "dev": true, + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "engine.io-client": "~3.2.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.2.0", + "to-array": "0.1.4" + } + }, + "socket.io-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.2.0.tgz", + "integrity": "sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA==", + "dev": true, + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + } } } }, @@ -16413,30 +15212,31 @@ "dev": true }, "socket.io-client": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz", - "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.2.0.tgz", + "integrity": "sha512-56ZrkTDbdTLmBIyfFYesgOxsjcLnwAKoN4CiPyTVkMQj3zTUh0QAx3GbvIvLpFEOvQWu92yyWICxB0u7wkVbYA==", "dev": true, "requires": { "backo2": "1.0.2", "base64-arraybuffer": "0.1.5", "component-bind": "1.0.0", "component-emitter": "1.2.1", - "debug": "~2.6.4", - "engine.io-client": "~3.1.0", + "debug": "~3.1.0", + "engine.io-client": "~3.3.1", + "has-binary2": "~1.0.2", "has-cors": "1.1.0", "indexof": "0.0.1", "object-component": "0.0.3", "parseqs": "0.0.5", "parseuri": "0.0.5", - "socket.io-parser": "~3.1.1", + "socket.io-parser": "~3.3.0", "to-array": "0.1.4" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { "ms": "2.0.0" @@ -16451,14 +15251,13 @@ } }, "socket.io-parser": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.1.3.tgz", - "integrity": "sha512-g0a2HPqLguqAczs3dMECuA1RgoGFPyvDqcbaDEdCWY9g59kdUAz3YRmaJBNKXflrHNwB7Q12Gkf/0CZXfdHR7g==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", "dev": true, "requires": { "component-emitter": "1.2.1", "debug": "~3.1.0", - "has-binary2": "~1.0.2", "isarray": "2.0.1" }, "dependencies": { @@ -16730,9 +15529,9 @@ } }, "readable-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.2.0.tgz", - "integrity": "sha512-RV20kLjdmpZuTF1INEb9IA3L68Nmi+Ri7ppZqo78wj//Pn62fCoJyV9zalccNzDD/OuJpMG4f+pfMl8+L6QdGw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -16749,9 +15548,9 @@ "dev": true }, "speed-measure-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-b9Yd0TrzceMVYSbuamM1sFsGM1oVfyFTM22gOoyLhymNvBVApuYpkdFOgYkKJpN/KhTpcCYcTGHg7X+FJ33Vvw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.3.1.tgz", + "integrity": "sha512-qVIkJvbtS9j/UeZumbdfz0vg+QfG/zxonAjzefZrqzkr7xOncLVXkeGbTpzd1gjCBM4PmVNkWlkeTVhgskAGSQ==", "dev": true, "requires": { "chalk": "^2.0.1" @@ -16904,15 +15703,29 @@ } }, "streamroller": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-0.7.0.tgz", - "integrity": "sha512-WREzfy0r0zUqp3lGO096wRuUp7ho1X6uo/7DJfTlEi0Iv/4gT7YHqXDjKC2ioVGBZtE8QzsQD9nx1nIuoZ57jQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.5.tgz", + "integrity": "sha512-iGVaMcyF5PcUY0cPbW3xFQUXnr9O4RZXNBBjhuLZgrjLO4XCLLGfx4T2sGqygSeylUjwgWRsnNbT9aV0Zb8AYw==", "dev": true, "requires": { - "date-format": "^1.2.0", - "debug": "^3.1.0", - "mkdirp": "^0.5.1", - "readable-stream": "^2.3.0" + "async": "^2.6.2", + "date-format": "^2.0.0", + "debug": "^3.2.6", + "fs-extra": "^7.0.1", + "lodash": "^4.17.11" + }, + "dependencies": { + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + } } }, "string-argv": { @@ -16974,13 +15787,6 @@ "is-regexp": "^1.0.0" } }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "dev": true, - "optional": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -17538,16 +16344,55 @@ "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, "requires": { "block-stream": "*", - "fstream": "^1.0.2", + "fstream": "^1.0.12", "inherits": "2" } }, + "tar-fs": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", + "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", + "dev": true, + "requires": { + "chownr": "^1.0.1", + "mkdirp": "^0.5.1", + "pump": "^1.0.0", + "tar-stream": "^1.1.2" + }, + "dependencies": { + "pump": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", + "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "requires": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + } + }, "temp": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz", @@ -17734,9 +16579,9 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pify": { @@ -17850,13 +16695,6 @@ "xtend": "~4.0.1" } }, - "thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha1-+qDp0jDFGsyVyhOjYawFyn4EVT0=", - "dev": true, - "optional": true - }, "thunky": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz", @@ -17884,13 +16722,6 @@ "setimmediate": "^1.0.4" } }, - "timespan": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/timespan/-/timespan-2.3.0.tgz", - "integrity": "sha1-SQLOBAvRPYRcj1myfp1ZutbzmSk=", - "dev": true, - "optional": true - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -17912,6 +16743,12 @@ "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "dev": true + }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", @@ -18183,13 +17020,6 @@ } } }, - "tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", - "dev": true, - "optional": true - }, "tsutils": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.9.1.tgz", @@ -18349,12 +17179,6 @@ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", "dev": true }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=", - "dev": true - }, "unherit": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", @@ -18658,12 +17482,12 @@ "dev": true }, "url-parse": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.4.tgz", - "integrity": "sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", "dev": true, "requires": { - "querystringify": "^2.0.0", + "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, @@ -18698,21 +17522,13 @@ "dev": true }, "useragent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.2.1.tgz", - "integrity": "sha1-z1k+9PLRdYdei7ZY6pLhik/QbY4=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", + "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", "dev": true, "requires": { - "lru-cache": "2.2.x", + "lru-cache": "4.1.x", "tmp": "0.0.x" - }, - "dependencies": { - "lru-cache": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.2.4.tgz", - "integrity": "sha1-bGWGGb7PFAMdDQtZSxYELOTcBj0=", - "dev": true - } } }, "util": { @@ -18747,13 +17563,6 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, - "uws": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/uws/-/uws-9.14.0.tgz", - "integrity": "sha512-HNMztPP5A1sKuVFmdZ6BPVpBQd5bUjNC8EFMFiICK+oho/OQsAJy5hnIx4btMHiOk8j04f/DbIlqnEZ9d72dqg==", - "dev": true, - "optional": true - }, "v8-compile-cache": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", @@ -18954,39 +17763,49 @@ } }, "webpack-bundle-analyzer": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz", - "integrity": "sha512-rwxyfecTAxoarCC9VlHlIpfQCmmJ/qWD5bpbjkof+7HrNhTNZIwZITxN6CdlYL2axGmwNUQ+tFgcSOiNXMf/sQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", + "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", "dev": true, "requires": { - "acorn": "^5.3.0", - "bfj-node4": "^5.2.0", - "chalk": "^2.3.0", - "commander": "^2.13.0", - "ejs": "^2.5.7", - "express": "^4.16.2", - "filesize": "^3.5.11", - "gzip-size": "^4.1.0", - "lodash": "^4.17.4", + "acorn": "^6.0.7", + "acorn-walk": "^6.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.10", "mkdirp": "^0.5.1", - "opener": "^1.4.3", - "ws": "^4.0.0" + "opener": "^1.5.1", + "ws": "^6.0.0" }, "dependencies": { - "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "ws": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", - "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", "dev": true, "requires": { - "async-limiter": "~1.0.0", - "safe-buffer": "~5.1.0" + "async-limiter": "~1.0.0" } } } @@ -19285,9 +18104,9 @@ }, "dependencies": { "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true } } @@ -19463,9 +18282,9 @@ } }, "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", + "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", "dev": true }, "os-locale": { @@ -19498,9 +18317,9 @@ } }, "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "pump": { @@ -19685,6 +18504,12 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -19742,13 +18567,6 @@ "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=", "dev": true }, - "with-callback": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/with-callback/-/with-callback-1.0.2.tgz", - "integrity": "sha1-oJYpuakgAo1yFAT7Q1vc/1yRvCE=", - "dev": true, - "optional": true - }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -19756,9 +18574,9 @@ "dev": true }, "worker-farm": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", - "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { "errno": "~0.1.7" diff --git a/package.json b/package.json index a93943a20c1..6950a45d681 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "00": "echo -------------------------------------------- DOC -----------------------------------------------", "00s": "", "markdownlint": "markdownlint ./docs", - "docbuild": "node node_modules/typedoc/bin/typedoc --tsconfig lib/tsconfig.json && node tools/doc/buildYamlSourceInfo.js docs/docs.json && node ./tools/doc/docProcessor.js", + "docbuild": "node node_modules/typedoc/bin/typedoc --tsconfig lib/tsconfig.doc.json && node tools/doc/buildYamlSourceInfo.js docs/docs.json && node ./tools/doc/docProcessor.js", "license-checker": "license-checker --production --failOn 'GPL' > licenses.txt", "01": "echo -------------------------------------------- Build Lib -----------------------------------------------", "01s": "", @@ -128,13 +128,13 @@ "@types/jasminewd2": "~2.0.2", "@types/node": "6.0.90", "ajv-cli": "^3.0.0", - "bundlesize": "^0.15.3", + "bundlesize": "^0.17.2", "chalk": "^2.3.2", "codelyzer": "5.0.0", - "dotenv": "6.2.0", "commander": "^2.15.1", "concurrently": "^3.5.1", "cspell": "^3.1.3", + "dotenv": "6.2.0", "ejs": "^2.6.1", "extract-text-webpack-plugin": "^4.0.0-beta.0", "fs-extra": "^4.0.2", @@ -147,8 +147,8 @@ "jasmine-reporters": "^2.3.2", "jasmine-spec-reporter": "~4.2.1", "jasmine2-protractor-utils": "1.1.3", - "js-yaml": "^3.12.0", - "karma": "~2.0.0", + "js-yaml": "^3.13.1", + "karma": "^4.1.0", "karma-chrome-launcher": "~2.2.0", "karma-cli": "~1.0.1", "karma-coverage": "^1.1.2", @@ -160,9 +160,9 @@ "karma-remap-istanbul": "0.6.0", "karma-systemjs": "0.16.0", "license-checker": "^25.0.1", - "lite-server": "^2.4.0", "lint-staged": "^8.1.7", - "markdownlint-cli": "^0.12.0", + "lite-server": "^2.4.0", + "markdownlint-cli": "^0.16.0", "mdast-util-compact": "^1.0.1", "mdast-util-heading-range": "^2.1.0", "mdast-util-toc": "^2.0.1", @@ -172,6 +172,7 @@ "ng-packagr": "4.7.1", "node-sass": "4.9.2", "protractor": "^5.4.0", + "protractor-browser-logs": "^1.0.423", "protractor-html-reporter-2": "^1.0.4", "protractor-retry": "^1.2.0", "raw-loader": "0.5.1", diff --git a/protractor.conf.ts b/protractor.conf.ts index 63a22c62cfe..74edc951ccd 100644 --- a/protractor.conf.ts +++ b/protractor.conf.ts @@ -33,9 +33,10 @@ let MAXINSTANCES = process.env.MAXINSTANCES || 1; let TIMEOUT = parseInt(process.env.TIMEOUT, 10); let SAVE_SCREENSHOT = (process.env.SAVE_SCREENSHOT == 'true'); let LIST_SPECS = process.env.LIST_SPECS || []; +let LOG = process.env.LOG ? true : false; let arraySpecs = []; -if (process.env.DEBUG) { +if (LOG) { console.log('======= PROTRACTOR CONFIGURATION ====== '); console.log('SAVE_SCREENSHOT : ' + SAVE_SCREENSHOT); console.log('BROWSER_RUN : ' + BROWSER_RUN); @@ -83,7 +84,7 @@ let buildNumber = () => { return process.env.TRAVIS_BUILD_NUMBER; }; -let saveScreenshots = async function (alfrescoJsApi, retryCount) { +let uploadScreenshot = async function (alfrescoJsApi, retryCount) { let files = fs.readdirSync(path.join(__dirname, './e2e-output/screenshots')); if (files && files.length > 0) { @@ -132,7 +133,7 @@ let saveScreenshots = async function (alfrescoJsApi, retryCount) { } }; -let saveReport = async function (filenameReport, alfrescoJsApi) { +let uploadReport = async function (alfrescoJsApi, filenameReport) { let pathFile = path.join(__dirname, './e2e-output/junit-report/html', filenameReport + '.html'); let reportFile = fs.createReadStream(pathFile); @@ -176,6 +177,72 @@ let saveReport = async function (filenameReport, alfrescoJsApi) { } }; +let browserLogErrorPrint = function () { + if (process.env.LOG) { + var browserLogs = require('protractor-browser-logs'), + logs = browserLogs(browser); + + global.logs = logs; + + beforeEach(function () { + logs.reset(); + + // You can put here all expected generic expectations. + logs.ignore('favicon.ico'); + logs.ignore('favicon.ico'); + logs.ignore('favicon-96x96.png'); + logs.ignore(logs.or(logs.INFO, logs.DEBUG)); + }); + + afterEach(async () => { + let url = await browser.getCurrentUrl(); + + return logs.verify(); + }); + } +}; + +let saveReport = async function (alfrescoJsApi, retryCount) { + let filenameReport = `ProtractorTestReport-${FOLDER}-${retryCount}`; + + let output = ''; + let savePath = `${projectRoot}/e2e-output/junit-report/`; + let temporaryHtmlPath = savePath + 'html/temporaryHtml/'; + let lastFileName = ''; + + let files = fs.readdirSync(savePath); + + if (files && files.length > 0) { + for (const fileName of files) { + const testConfigReport = { + reportTitle: 'Protractor Test Execution Report', + outputPath: temporaryHtmlPath, + outputFilename: Math.random().toString(36).substr(2, 5) + filenameReport, + }; + + let filePath = `${projectRoot}/e2e-output/junit-report/` + fileName; + + new htmlReporter().from(filePath, testConfigReport); + lastFileName = testConfigReport.outputFilename; + } + } + + let lastHtmlFile = temporaryHtmlPath + lastFileName + '.html'; + + if (!(fs.lstatSync(lastHtmlFile).isDirectory())) { + output = output + fs.readFileSync(lastHtmlFile); + } + + let fileName = savePath + 'html/' + filenameReport + '.html'; + + fs.writeFileSync(fileName, output, 'utf8'); + + await uploadReport(alfrescoJsApi, filenameReport); + + rimraf(`${projectRoot}/e2e-output/screenshots/`, function () { + console.log('done delete screenshot'); + }); +}; exports.config = { allScriptsTimeout: TIMEOUT, @@ -184,6 +251,11 @@ exports.config = { useAllAngular2AppRoots: true, capabilities: { + + loggingPrefs: { + browser: 'ALL' // "OFF", "SEVERE", "WARNING", "INFO", "CONFIG", "FINE", "FINER", "FINEST", "ALL". + }, + browserName: 'chrome', shardTestFiles: true, @@ -219,7 +291,7 @@ exports.config = { jasmineNodeOpts: { showColors: true, - defaultTimeoutInterval: 30000, + defaultTimeoutInterval: 120000, print: function () { } }, @@ -241,11 +313,21 @@ exports.config = { screenshotPath: `${projectRoot}/e2e-output/screenshots/` }], + postTest(results) { + browser.manage().logs() + .get('browser').then(function (browserLog) { + console.log('log: ' + + require('util').inspect(browserLog)); + }); + retry.onCleanUp(results); + }, + onCleanUp(results) { retry.onCleanUp(results); }, onPrepare() { + browserLogErrorPrint(); retry.onPrepare(); @@ -281,6 +363,7 @@ exports.config = { }); jasmine.getEnv().addReporter(junitReporter); + return browser.driver.executeScript(disableCSSAnimation); function disableCSSAnimation() { @@ -301,78 +384,48 @@ exports.config = { }, beforeLaunch: function () { + if (SAVE_SCREENSHOT) { + let reportsFolder = `${projectRoot}/e2e-output/junit-report/`; - let reportsFolder = `${projectRoot}/e2e-output/junit-report/`; - - fs.exists(reportsFolder, function (exists, error) { - if (exists) { - rimraf(reportsFolder, function (err) { - }); - } - - if (error) { - console.error('[ERROR] fs', error); - } - }); + fs.exists(reportsFolder, function (exists, error) { + if (exists) { + rimraf(reportsFolder, function (err) { + }); + } + if (error) { + console.error('[ERROR] fs', error); + } + }); + } }, afterLaunch: async function () { - if (SAVE_SCREENSHOT) { + let retryCount = 1; if (argv.retry) { retryCount = ++argv.retry; } - let filenameReport = `ProtractorTestReport-${FOLDER}-${retryCount}`; - - let output = ''; - let savePath = `${projectRoot}/e2e-output/junit-report/`; - let temporaryHtmlPath = savePath + 'html/temporaryHtml/'; - let lastFileName = ''; - - let files = fs.readdirSync(savePath); - - if (files && files.length > 0) { - for (const fileName of files) { - const testConfigReport = { - reportTitle: 'Protractor Test Execution Report', - outputPath: temporaryHtmlPath, - outputFilename: Math.random().toString(36).substr(2, 5) + filenameReport, - }; - - let filePath = `${projectRoot}/e2e-output/junit-report/` + fileName; - - new htmlReporter().from(filePath, testConfigReport); - lastFileName = testConfigReport.outputFilename; - } - } - - let lastHtmlFile = temporaryHtmlPath + lastFileName + '.html'; - - if (!(fs.lstatSync(lastHtmlFile).isDirectory())) { - output = output + fs.readFileSync(lastHtmlFile); - } - - let fileName = savePath + 'html/' + filenameReport + '.html'; - - fs.writeFileSync(fileName, output, 'utf8'); - let alfrescoJsApi = new AlfrescoApi({ provider: 'ECM', hostEcm: TestConfig.adf.url }); - alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); - - await saveScreenshots(alfrescoJsApi, retryCount); - await saveReport(filenameReport, alfrescoJsApi); + alfrescoJsApi.login(TestConfig.adf.adminEmail, TestConfig.adf.adminPassword); - rimraf(`${projectRoot}/e2e-output/screenshots/`, function () { - console.log('done delete screenshot'); - }); + try { + await uploadScreenshot(alfrescoJsApi, retryCount); + } catch (error) { + console.error('Error saving screenshot', error); + } + try { + await saveReport(alfrescoJsApi, retryCount); + } catch (error) { + console.error('Error saving Report', error); + } } return retry.afterLaunch(4); diff --git a/scripts/npm-move-tag.sh b/scripts/npm-move-tag.sh index d9871f6ddf8..0e476fd40ff 100644 --- a/scripts/npm-move-tag.sh +++ b/scripts/npm-move-tag.sh @@ -2,7 +2,9 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -eval projects=( "@alfresco/adf-core" +eval projects=( + "@alfresco/adf-cli" + "@alfresco/adf-core" "@alfresco/adf-content-services" "@alfresco/adf-insights" "@alfresco/adf-process-services" diff --git a/scripts/npm-publish.sh b/scripts/npm-publish.sh index 27add99ef47..6b9f244e48f 100755 --- a/scripts/npm-publish.sh +++ b/scripts/npm-publish.sh @@ -17,6 +17,7 @@ eval JSAPI_VERSION="" eval EXEC_BUILD=true eval projects=( + "cli" "core" "insights" "testing" diff --git a/scripts/test-e2e-lib.sh b/scripts/test-e2e-lib.sh index 9b6f9dfba9f..f8bca06beae 100755 --- a/scripts/test-e2e-lib.sh +++ b/scripts/test-e2e-lib.sh @@ -30,16 +30,21 @@ show_help() { echo "-host_bpm URL of the Back end to test" echo "-host_identity URL of the identity service backend to test" echo "-host_sso the entire path including the name of the realm" - echo "-save save the error screenshot in the remote env" + echo "-save save the error screenshot and report in the remote env" echo "-timeout or --timeout override the timeout foe the wait utils" echo "-l --lint enable lint" echo "-m --maxInstances max instances parallel for tests" + echo "-log or --log print all the browser log" echo "-disable-control-flow disable control flow" echo "-db or --debug run the debugger" echo "-vjsapi install different version from npm of JS-API defined in the package.json" echo "-h or --help" } +set_log(){ + export LOG=true +} + set_username(){ USERNAME=$1 export USERNAME_ADF=$USERNAME @@ -101,6 +106,7 @@ set_timeout(){ } set_save_screenshot(){ + mkdir -p ./e2e-output/junit-report export SAVE_SCREENSHOT=true } @@ -174,6 +180,7 @@ while [[ $1 == -* ]]; do -proxy|--proxy) set_proxy $2; shift 2;; -s|--seleniumServer) set_selenium $2; shift 2;; -host|--host) set_host $2; shift 2;; + -log|--log) set_log; shift ;; -host_bpm|--host_bpm) set_host_bpm $2; shift 2;; -host_sso|--host_sso) set_host_sso $2; shift 2;; -host_identity|--host_identity) set_host_identity $2; shift 2;; diff --git a/scripts/travis/e2e/content-services-e2e.sh b/scripts/travis/e2e/content-services-e2e.sh index 7d9ea5edc39..9e046958966 100755 --- a/scripts/travis/e2e/content-services-e2e.sh +++ b/scripts/travis/e2e/content-services-e2e.sh @@ -11,9 +11,9 @@ CONTEXT_ENV="content-services" AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV")"; -RUN_CHECK=$(echo node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1) -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b || exit 1) -if [[ $AFFECTED_LIBS =~ "$CONTEXT_ENV$" || $TRAVIS_PULL_REQUEST == "false" ]]; +node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 3 || exit 1) +if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; then $RUN_CHECK $RUN_E2E --folder $CONTEXT_ENV diff --git a/scripts/travis/e2e/core-e2e.sh b/scripts/travis/e2e/core-e2e.sh index 8215044b579..6b83320ed4f 100755 --- a/scripts/travis/e2e/core-e2e.sh +++ b/scripts/travis/e2e/core-e2e.sh @@ -11,15 +11,12 @@ CONTEXT_ENV="core" AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV")"; -RUN_CHECK_PS=$(echo node ./scripts/check-env/check-ps-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 ) -RUN_CHECK_CS=$(echo node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 ) -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" -save --use-dist -b ) +node ./scripts/check-env/check-ps-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 +node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 3 ) - -if [[ $AFFECTED_LIBS =~ "$CONTEXT_ENV$" || $TRAVIS_PULL_REQUEST == "false" ]]; +if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; then - $RUN_CHECK_PS - $RUN_CHECK_CS $RUN_E2E --folder $CONTEXT_ENV else if [[ $AFFECTED_E2E = "e2e/$CONTEXT_ENV" ]]; then @@ -28,8 +25,6 @@ else if [[ $AFFECTED_E2E = "e2e/$CONTEXT_ENV" ]]; if [[ $LIST_SPECS != "" ]]; then echo "Run $CONTEXT_ENV e2e based on the sha $HEAD_SHA_BRANCH with the specs: "$LIST_SPECS - $RUN_CHECK_PS - $RUN_CHECK_CS $RUN_E2E --specs "$LIST_SPECS" fi fi diff --git a/scripts/travis/e2e/insights-e2e.sh b/scripts/travis/e2e/insights-e2e.sh index fce77198f2b..6b302285c4b 100755 --- a/scripts/travis/e2e/insights-e2e.sh +++ b/scripts/travis/e2e/insights-e2e.sh @@ -7,7 +7,7 @@ cd $DIR/../../../ ./scripts/git-util/check-branch-updated.sh -b $TRAVIS_BRANCH || exit 1; AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; -if [[ $AFFECTED_LIBS =~ "process-services-cloud$" || $TRAVIS_PULL_REQUEST == "false" ]]; +if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "insight" || $TRAVIS_PULL_REQUEST == "false" ]]; then node ./scripts/check-env/check-ps-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1; ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --folder insights --use-dist || exit 1; diff --git a/scripts/travis/e2e/process-services-cloud-e2e.sh b/scripts/travis/e2e/process-services-cloud-e2e.sh index e36506552e0..436fcd01580 100755 --- a/scripts/travis/e2e/process-services-cloud-e2e.sh +++ b/scripts/travis/e2e/process-services-cloud-e2e.sh @@ -11,21 +11,20 @@ CONTEXT_ENV="process-services-cloud" AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV")"; -RUN_CHECK=$(echo node ./scripts/check-env/check-activiti-env.js --host "$E2E_HOST_BPM" --oauth "$E2E_HOST_SSO" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" --client 'activiti' || exit 1 ) RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST_BPM" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" -host_sso "$E2E_HOST_SSO" -host_bpm "$E2E_HOST_BPM" -host_identity "$E2E_HOST_IDENTITY" -identity_admin_email "$E2E_ADMIN_EMAIL_IDENTITY" -identity_admin_password "$E2E_ADMIN_PASSWORD_IDENTITY" --use-dist ) -if [[ $AFFECTED_LIBS =~ "$CONTEXT_ENV$" || $TRAVIS_PULL_REQUEST == "false" ]]; +if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; then - $RUN_CHECK + node ./scripts/check-env/check-activiti-env.js --host "$E2E_HOST_BPM" --oauth "$E2E_HOST_SSO" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" --client 'activiti' || exit 1 $RUN_E2E --folder $CONTEXT_ENV else if [[ $AFFECTED_E2E = "e2e/$CONTEXT_ENV" ]]; then HEAD_SHA_BRANCH="$(git merge-base origin/$TRAVIS_BRANCH HEAD)" LIST_SPECS="$(git diff --name-only $HEAD_SHA_BRANCH HEAD | grep "^e2e/$CONTEXT_ENV" | paste -sd , -)" + node ./scripts/check-env/check-activiti-env.js --host "$E2E_HOST_BPM" --oauth "$E2E_HOST_SSO" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" --client 'activiti' || exit 1 if [[ $LIST_SPECS != "" ]]; then echo "Run $CONTEXT_ENV e2e based on the sha $HEAD_SHA_BRANCH with the specs: "$LIST_SPECS - $RUN_CHECK $RUN_E2E --specs "$LIST_SPECS" fi fi diff --git a/scripts/travis/e2e/process-services-e2e.sh b/scripts/travis/e2e/process-services-e2e.sh index be2c3c8a839..819962ef9e2 100755 --- a/scripts/travis/e2e/process-services-e2e.sh +++ b/scripts/travis/e2e/process-services-e2e.sh @@ -11,12 +11,11 @@ CONTEXT_ENV="process-services" AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV/")"; -RUN_CHECK=$(echo node ./scripts/check-env/check-ps-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 ) -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 2 ) +node ./scripts/check-env/check-ps-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 3 ) -if [[ $AFFECTED_LIBS =~ "$CONTEXT_ENV$" || $TRAVIS_PULL_REQUEST == "false" ]]; +if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "$CONTEXT_ENV" || $TRAVIS_PULL_REQUEST == "false" ]]; then - $RUN_CHECK $RUN_E2E --folder $CONTEXT_ENV else if [[ $AFFECTED_E2E = "e2e/$CONTEXT_ENV" ]]; then @@ -25,7 +24,6 @@ else if [[ $AFFECTED_E2E = "e2e/$CONTEXT_ENV" ]]; if [[ $LIST_SPECS != "" ]]; then echo "Run $CONTEXT_ENV e2e based on the sha $HEAD_SHA_BRANCH with the specs: "$LIST_SPECS - $RUN_CHECK $RUN_E2E --specs "$LIST_SPECS" fi fi diff --git a/scripts/travis/e2e/search-e2e.sh b/scripts/travis/e2e/search-e2e.sh index 438b41031ce..4840574104b 100755 --- a/scripts/travis/e2e/search-e2e.sh +++ b/scripts/travis/e2e/search-e2e.sh @@ -11,12 +11,11 @@ CONTEXT_ENV="search" AFFECTED_LIBS="$(./scripts/affected-libs.sh -gnu -b $TRAVIS_BRANCH)"; AFFECTED_E2E="$(./scripts/git-util/affected-folder.sh -b $TRAVIS_BRANCH -f "e2e/$CONTEXT_ENV")"; -RUN_CHECK=$(echo node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 ) -RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -save -b ) +node ./scripts/check-env/check-cs-env.js --host "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" || exit 1 +RUN_E2E=$(echo ./scripts/test-e2e-lib.sh -host http://localhost:4200 -proxy "$E2E_HOST" -u "$E2E_USERNAME" -p "$E2E_PASSWORD" -e "$E2E_EMAIL" --use-dist -b -m 3 ) -if [[ $AFFECTED_LIBS =~ "content-services$" || $TRAVIS_PULL_REQUEST == "false" ]]; +if [[ $AFFECTED_LIBS =~ "testing" || $AFFECTED_LIBS =~ "content-services" || $TRAVIS_PULL_REQUEST == "false" ]]; then - $RUN_CHECK $RUN_E2E --folder $CONTEXT_ENV else if [[ $AFFECTED_E2E = "e2e/$CONTEXT_ENV" ]]; then @@ -25,7 +24,6 @@ else if [[ $AFFECTED_E2E = "e2e/$CONTEXT_ENV" ]]; if [[ $LIST_SPECS != "" ]]; then echo "Run $CONTEXT_ENV e2e based on the sha $HEAD_SHA_BRANCH with the specs: "$LIST_SPECS - $RUN_CHECK $RUN_E2E --specs "$LIST_SPECS" fi fi diff --git a/scripts/update-version.sh b/scripts/update-version.sh index e09cf717428..efcf393ee3c 100755 --- a/scripts/update-version.sh +++ b/scripts/update-version.sh @@ -8,7 +8,8 @@ eval AUTO=false eval TOTAL_BUILD=true; eval SEMANTIC="minor"; -eval projects=( "core" +eval projects=( "cli" + "core" "content-services" "process-services" "process-services-cloud" diff --git a/tools/doc/buildYamlSourceInfo.js b/tools/doc/buildYamlSourceInfo.js index 1becacdba28..da927b8771a 100644 --- a/tools/doc/buildYamlSourceInfo.js +++ b/tools/doc/buildYamlSourceInfo.js @@ -2,7 +2,6 @@ var fs = require("fs"); var path = require("path"); var ejs = require("ejs"); - var templateFolder = path.resolve("tools", "doc", "yamlTemplates"); var outputFolder = path.resolve("docs", "sourceinfo"); @@ -30,9 +29,9 @@ var template = ejs.compile( searchItemsRecursively(docData); - function searchItemsRecursively(item) { if (interestedIn(item.kind)) { + processItem(item); } else if (item.children) { item.children.forEach(child => { @@ -41,14 +40,17 @@ function searchItemsRecursively(item) { } } - function interestedIn(itemKind) { return (itemKind === 128) || (itemKind === 256) || (itemKind === 4194304); } function processItem(item) { - //console.log(`Generating ${item.name}`); var docText = template(item); - fs.writeFileSync(path.resolve(outputFolder, item.name + ".yml"), docText); -} \ No newline at end of file + + if( item.name === 'Widget'){ + console.log('item ' + JSON.stringify(item.name )); + } + + fs.writeFileSync(path.resolve(outputFolder, item.name + ".yml"), docText); +} diff --git a/tools/doc/docProcessor.js b/tools/doc/docProcessor.js index 414532d7ab3..d4a2599d3e8 100644 --- a/tools/doc/docProcessor.js +++ b/tools/doc/docProcessor.js @@ -6,14 +6,9 @@ var lodash = require("lodash"); var jsyaml = require("js-yaml"); var remark = require("remark"); -var parse = require("remark-parse"); -var stringify = require("remark-stringify"); var frontMatter = require("remark-frontmatter"); var mdCompact = require("mdast-util-compact"); -//var tdoc = require("typedoc"); - -var ngHelpers = require("./ngHelpers"); var si = require("./SourceInfoClasses"); // "Aggregate" data collected over the whole file set. @@ -24,15 +19,6 @@ var configFileName = "doctool.config.json"; var defaultFolder = path.resolve("docs"); var sourceInfoFolder = path.resolve("docs", "sourceinfo"); -var libFolders = [ - "core", "content-services", "process-services", - "insights", "process-services-cloud", "extensions" -]; - -var excludePatterns = [ - "**/*.spec.ts" -]; - function updatePhase(mdCache, aggData) { var errorMessages; @@ -142,63 +128,6 @@ function initMdCache(filenames) { return mdCache; } -/* -function getSourceInfo(infoFolder) { - var sourceInfo = {}; - - var yamlFiles = fs.readdirSync(infoFolder); - - yamlFiles.forEach(file => { - var yamlText = fs.readFileSync(path.resolve(infoFolder, file), "utf8"); - var yaml = jsyaml.safeLoad(yamlText); - sou - }); -} - -/* -function initSourceInfo(aggData, mdCache) { - - var app = new tdoc.Application({ - exclude: excludePatterns, - ignoreCompilerErrors: true, - experimentalDecorators: true, - tsconfig: "tsconfig.json" - }); - - let sources = app.expandInputFiles(libFolders.map(folder => { - return path.resolve("lib", folder); - })); - - aggData.projData = app.convert(sources); - - - aggData.classInfo = {}; - - var mdFiles = Object.keys(mdCache); - - mdFiles.forEach(mdFile => { - - var className = ngHelpers.ngNameToClassName(path.basename(mdFile, ".md"), aggData.config.typeNameExceptions); - var classRef = aggData.projData.findReflectionByName(className); - - - var className = ngHelpers.ngNameToClassName(path.basename(mdFile, ".md"), aggData.config.typeNameExceptions); - var yamlText = fs.readFileSync(path.resolve(sourceInfoFolder, className + ".yml"), "utf8"); - var yaml = jsyaml.safeLoad(yamlText); - - if (yaml) { - aggData.classInfo[className] = new si.ComponentInfo(yaml); - } - - if (classRef) { - aggData.classInfo[className] = new si.ComponentInfo(classRef); - } - - - }); -} -*/ - function initClassInfo(aggData) { var yamlFilenames = fs.readdirSync(path.resolve(sourceInfoFolder)); @@ -278,21 +207,9 @@ files = files.filter(filename => var mdCache = initMdCache(files); console.log("Loading source data..."); -//initSourceInfo(aggData, mdCache); initClassInfo(aggData); -/* -console.log("Initialising..."); -initPhase(aggData); - -console.log("Analysing Markdown files..."); -readPhase(mdCache, aggData); - -console.log("Computing aggregate data..."); -aggPhase(aggData); -*/ - console.log("Updating Markdown files..."); updatePhase(mdCache, aggData); diff --git a/tools/doc/mdNav.ts b/tools/doc/mdNav.ts index e9a1c875bc6..2ac4bf7eaed 100644 --- a/tools/doc/mdNav.ts +++ b/tools/doc/mdNav.ts @@ -1,6 +1,6 @@ export class MDNav { - + constructor(public root: any, public pos: number = 0) {} find(test: (element: any) => boolean = () => true, index: number = 0): MDNav { @@ -25,7 +25,6 @@ export class MDNav { return new MDNav(this.root, this.root.children.length); } - findAll(test: (element: any) => boolean = () => true, index: number = 0): MDNav[] { if (!this.root || !this.root.children) { return []; @@ -89,7 +88,7 @@ export class MDNav { return h.type === "link" && test(h); }, index); } - + list(test: (element: any) => boolean = () => true, index: number = 0): MDNav { return this.find((h) => { return h.type === "list" && test(h); @@ -165,7 +164,7 @@ export class MDNav { (this.pos >= this.root.children.length); } - + get childNav(): MDNav { return new MDNav(this.item); } @@ -181,7 +180,7 @@ export class MDNav { get textValue() : string { - if (this.item) { + if (this.item) { if (this.item["value"]) { return this.item.value; } else if ( @@ -197,4 +196,4 @@ export class MDNav { return ""; } } -} \ No newline at end of file +} diff --git a/tools/doc/mqDefs.js b/tools/doc/mqDefs.js index b2a27c58aaf..69f1481f0a5 100644 --- a/tools/doc/mqDefs.js +++ b/tools/doc/mqDefs.js @@ -1,8 +1,11 @@ "use strict"; var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + } return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } diff --git a/tools/doc/reviewChecker.ts b/tools/doc/reviewChecker.ts index 97ab21eec4d..0eabace33ca 100644 --- a/tools/doc/reviewChecker.ts +++ b/tools/doc/reviewChecker.ts @@ -33,14 +33,6 @@ let libFolders = ["core", "content-services", "extensions", "insights", "process libsearch(srcData, path.resolve(libFolder)); -/* -let keys = Object.keys(srcData); - -for (let i = 0; i < keys.length; i++) { - console.log(keys[i]); -} -*/ - const authToken = process.env.graphAuthToken; const client = new GraphQLClient('https://api.github.com/graphql', { @@ -147,20 +139,6 @@ function getDocFilePaths(folderPath) { libFolders.forEach(element => { let libPath = path.resolve(folderPath, element); addItemsRecursively(libPath, result); - let items = fs.readdirSync(libPath); - -/* - - files = files.filter(filename => - (path.extname(filename) === ".md") && - (filename !== "README.md") && - (filename.match(angFilePattern)) - ); - - files.forEach(element => { - result.push(path.join(libPath, element)); - }); - */ }); diff --git a/tools/doc/templates/component.ejs b/tools/doc/templates/component.ejs index ab63c186abc..59caf804229 100644 --- a/tools/doc/templates/component.ejs +++ b/tools/doc/templates/component.ejs @@ -2,7 +2,7 @@ ### Properties | Name | Type | Default value | Description | -| -- | -- | -- | -- | +| --- | --- | --- | --- | <% properties.forEach(function(prop) { -%> <% if (prop.isInput) { -%> | <%= prop.name %> | <% if (prop.type) { %>`<%- prop.type %>`<% } %> | <%- prop.defaultValue %> | <%- prop.docText %> | @@ -14,10 +14,10 @@ ### Events | Name | Type | Description | -| -- | -- | -- | +| --- | --- | --- | <% properties.forEach(function(prop) { -%> <% if (prop.isOutput) { -%> | <%= prop.name %> | `<%- prop.type %>` | <%- prop.docText %> | <% } -%> <% }) -%> -<% } %> \ No newline at end of file +<% } %> diff --git a/tools/doc/templates/directive.ejs b/tools/doc/templates/directive.ejs index eddb510277a..5cb2d8cd9c9 100644 --- a/tools/doc/templates/directive.ejs +++ b/tools/doc/templates/directive.ejs @@ -2,7 +2,7 @@ ### Properties | Name | Type | Default value | Description | -| -- | -- | -- | -- | +| --- | --- | --- | --- | <% properties.forEach(function(prop) { -%> <% if (prop.isInput) { -%> | <%= prop.name %> | `<%- prop.type %>` | <%- prop.defaultValue %> | <%- prop.docText %> | @@ -14,10 +14,10 @@ ### Events | Name | Type | Description | -| -- | -- | -- | +| --- | --- | --- | <% properties.forEach(function(prop) { -%> <% if (prop.isOutput) { -%> | <%= prop.name %> | `<%- prop.type %>` | <%- prop.docText %> | <% } -%> <% }) -%> -<% } %> \ No newline at end of file +<% } %> diff --git a/tools/doc/templates/gqIndex.ejs b/tools/doc/templates/gqIndex.ejs index ef3d45557b1..d99df7f21e9 100644 --- a/tools/doc/templates/gqIndex.ejs +++ b/tools/doc/templates/gqIndex.ejs @@ -3,8 +3,10 @@ return fullPath.substring(fullPath.indexOf('docs') + 5).replace('\\', '/') } - function relSrcPath(fullPath) { - return '../' + fullPath.substring(fullPath.indexOf('lib')).replace('\\', '/') + function relSrcPath(document) { + if(document && document.heading && document.heading.link && document.heading.link.url){ + return '../' + document.heading.link.url.substring(document.heading.link.url.indexOf('lib')).replace('\\', '/') + } } function renderSection(sectionName) { @@ -15,14 +17,14 @@ ### <%= sectionName %> | Name | Description | Source link | -| -- | -- | --| +| --- | --- | --| <% } sectionDocs.forEach(document => { -%> | [<%= document['title'] %>](<%= relDocPath(document['id']) %>) -%> <% if (document['status'] && document['status'] !== 'Active') { -%> ![<%= document['status'] %>](docassets/images/<%= document['status'] %>Icon.png) <% } -%> -| <%= document['paragraph']['plaintext'] %> | [Source](<%= relSrcPath(document['heading']['link']['url']) %>) | +| <%= document['paragraph']['plaintext'] %> | [Source](<%= relSrcPath(document) %>) | <% }); } -%> diff --git a/tools/doc/templates/licensePage.ejs b/tools/doc/templates/licensePage.ejs index dcefea96cf9..3466d4a9e62 100644 --- a/tools/doc/templates/licensePage.ejs +++ b/tools/doc/templates/licensePage.ejs @@ -9,7 +9,7 @@ This page lists all third party libraries that ADF <%= projVersion %> depends on ## Libraries | Name | Version | License | -| -- | -- | -- | +| --- | --- | --- | <% for (var packageName in packages) { var lastAtSignPos = packageName.lastIndexOf('@'); @@ -25,4 +25,4 @@ This page lists all third party libraries that ADF <%= projVersion %> depends on } -%> | <%= linkedName %> | <%= version %> | <%= licenses %> | -<% } %> \ No newline at end of file +<% } %> diff --git a/tools/doc/templates/tutIndex.ejs b/tools/doc/templates/tutIndex.ejs index fbce18bb0b3..9b9a0086adb 100644 --- a/tools/doc/templates/tutIndex.ejs +++ b/tools/doc/templates/tutIndex.ejs @@ -1,5 +1,5 @@ | Name | Level | Abstract | -| -- | -- | -- | +| --- | --- | --- | <% tuts.forEach(function(tut) { -%> | [**<%= tut.title %>**](<%= tut.link %>) | <%= tut.level %> | <%= tut.briefDesc %> | -<% }) %> \ No newline at end of file +<% }) %> diff --git a/tools/doc/tools/fileChecker.ts b/tools/doc/tools/fileChecker.ts index be922b1c8e6..c4a6231f942 100644 --- a/tools/doc/tools/fileChecker.ts +++ b/tools/doc/tools/fileChecker.ts @@ -7,7 +7,6 @@ import * as lev from "fast-levenshtein"; import * as ngHelpers from "../ngHelpers"; - const imageFolderPath = path.resolve('docs', 'docassets', 'images'); // Using this value for the edit distance between Markdown image URLs @@ -15,8 +14,6 @@ const imageFolderPath = path.resolve('docs', 'docassets', 'images'); // folder in the path. Keeping it low avoids crazy suggestions. const maxImagePathLevDistance = 7; - - export function processDocs(mdCache, aggData, errorMessages) { var pathnames = Object.keys(mdCache); @@ -40,7 +37,7 @@ export function processDocs(mdCache, aggData, errorMessages) { } } else { let linkElems = selectAll('link', tree); - + linkElems.forEach(linkElem => { let normUrl = normaliseLinkPath(pathname, linkElem.url); multiSetAdd(linkRefs, normUrl, pathname); @@ -138,4 +135,4 @@ function multiSetAdd(container: {}, key: string, value: string) { } else { container[key] = [ value ]; } -} \ No newline at end of file +} diff --git a/tools/doc/tools/gqIndex.js b/tools/doc/tools/gqIndex.js index 5907c48d989..569cafacb0d 100644 --- a/tools/doc/tools/gqIndex.js +++ b/tools/doc/tools/gqIndex.js @@ -13,7 +13,7 @@ var libNamesList = [ 'insights', 'process-services', 'process-services-cloud' ]; var query = "\n query libIndex($libName: String) {\n documents(idFilter: $libName) {\n title: metadata(key: \"Title\")\n status: metadata(key: \"Status\")\n id\n classType: folder(depth: 2)\n heading {\n link {\n url\n }\n }\n paragraph {\n plaintext\n }\n }\n }\n"; -function processDocs(mdCache, aggData, _errorMessages) { +function processDocs(mdCache, aggData) { var docset = new MQ.Docset(mdCache); var templateFilePath = path.resolve(__dirname, '..', 'templates', 'gqIndex.ejs'); var templateSource = fs.readFileSync(templateFilePath, 'utf8'); diff --git a/tools/doc/tools/gqIndex.ts b/tools/doc/tools/gqIndex.ts index 219fc0b6e8e..60ea660d7a5 100644 --- a/tools/doc/tools/gqIndex.ts +++ b/tools/doc/tools/gqIndex.ts @@ -37,7 +37,7 @@ let query = ` `; -export function processDocs(mdCache, aggData, _errorMessages) { +export function processDocs(mdCache, aggData) { let docset: MQ.Docset = new MQ.Docset(mdCache); let templateFilePath = path.resolve(__dirname, '..', 'templates', 'gqIndex.ejs'); @@ -77,7 +77,7 @@ export function processDocs(mdCache, aggData, _errorMessages) { }); }); - + } diff --git a/tools/doc/tools/index.js b/tools/doc/tools/index.js index 5e59c40d3ad..c8657a4f8d8 100644 --- a/tools/doc/tools/index.js +++ b/tools/doc/tools/index.js @@ -2,7 +2,6 @@ var fs = require("fs"); var path = require("path"); var remark = require("remark"); -var stringify = require("remark-stringify"); var frontMatter = require("remark-frontmatter"); var zone = require("mdast-zone"); var yaml = require("js-yaml"); @@ -14,10 +13,7 @@ var mdNav = require("../mdNav"); module.exports = { "processDocs": processDocs -} - -var angFilenameRegex = /([a-zA-Z0-9\-]+)\.((component)|(dialog)|(directive)|(model)|(pipe)|(service)|(widget))\.ts/; -var searchFolderOmitRegex = /(config)|(mock)|(i18n)|(assets)|(styles)/; +}; var docsFolderPath = path.resolve("docs"); var rootFolder = "lib"; @@ -26,8 +22,6 @@ var indexMdFilePath = path.resolve(docsFolderPath, "README.md"); var guideFolderName = "user-guide"; var guideSummaryFileName = path.resolve(docsFolderPath, guideFolderName, "summary.json"); -var maxBriefDescLength = 180; - var adfLibNames = [ "core", "content-services", "insights", "process-services", "process-services-cloud", "extensions" @@ -35,14 +29,12 @@ var adfLibNames = [ var statusIcons; - -function processDocs(mdCache, aggData, _errorMessages) { +function processDocs(mdCache, aggData) { initPhase(aggData); readPhase(mdCache, aggData); aggPhase(aggData); } - function initPhase(aggData) { statusIcons = aggData.config["statusIcons"] || {}; aggData.stoplist = makeStoplist(aggData.config); @@ -53,7 +45,6 @@ function initPhase(aggData) { searchLibraryRecursive(aggData.srcData, path.resolve(rootFolder)); } - function readPhase(mdCache, aggData) { var pathnames = Object.keys(mdCache); @@ -62,7 +53,6 @@ function readPhase(mdCache, aggData) { }); } - function getFileData(tree, pathname, aggData) { var itemName = path.basename(pathname, ".md"); @@ -162,8 +152,6 @@ function aggPhase(aggData) { subIndexText = remark().use(frontMatter, ["yaml"]).data("settings", {paddedTable: false}).stringify(subIndexTree); fs.writeFileSync(subIndexFilePath, subIndexText); - - //fs.writeFileSync(indexMdFilePath, remark().stringify(indexFileTree)); } @@ -190,7 +178,6 @@ function rejectItemViaStoplist(stoplist, itemName) { return false; } - function prepareIndexSections(aggData) { var srcNames = Object.keys(aggData.srcData); var sections = initEmptySections(); diff --git a/tools/doc/tools/linkFixer.js b/tools/doc/tools/linkFixer.js index 78269333be2..34d6230a57b 100644 --- a/tools/doc/tools/linkFixer.js +++ b/tools/doc/tools/linkFixer.js @@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true }); var path = require("path"); var fs = require("fs"); var unist_util_select_1 = require("unist-util-select"); -var angFilenameRegex = /([a-zA-Z0-9\-]+)\.((component)|(dialog)|(directive)|(interface)|(model)|(pipe)|(service)|(widget))/; var suffixesNotToCheck = /\.ts/; function processDocs(mdCache, aggData, errorMessages) { var pathnames = Object.keys(mdCache); @@ -11,12 +10,6 @@ function processDocs(mdCache, aggData, errorMessages) { var imageFolderPath = path.resolve(aggData['rootFolder'], 'docs', 'docassets', 'images'); var imageSet = new LinkSet(getImagePaths(imageFolderPath)); pathnames.forEach(function (pathname) { - var fileBaseName = path.basename(pathname, '.md'); - /* - if (!fileBaseName.match(angFilenameRegex)) { - return; - } - */ var tree = mdCache[pathname].mdOutTree; fixUrls(tree, pathname, linkSet, 'link'); fixUrls(tree, pathname, imageSet, 'image'); diff --git a/tools/doc/tools/linkFixer.ts b/tools/doc/tools/linkFixer.ts index 4d3ca1bf370..d1b52ff9bdc 100644 --- a/tools/doc/tools/linkFixer.ts +++ b/tools/doc/tools/linkFixer.ts @@ -4,29 +4,20 @@ import * as fs from 'fs'; import { selectAll } from 'unist-util-select'; import { MDAST } from 'mdast'; - -const angFilenameRegex = /([a-zA-Z0-9\-]+)\.((component)|(dialog)|(directive)|(interface)|(model)|(pipe)|(service)|(widget))/; const suffixesNotToCheck = /\.ts/; export function processDocs(mdCache, aggData, errorMessages) { var pathnames = Object.keys(mdCache); let linkSet = new LinkSet(pathnames); - + let imageFolderPath = path.resolve(aggData['rootFolder'], 'docs', 'docassets', 'images'); let imageSet = new LinkSet(getImagePaths(imageFolderPath)); pathnames.forEach(pathname => { - let fileBaseName = path.basename(pathname, '.md'); - - /* - if (!fileBaseName.match(angFilenameRegex)) { - return; - } - */ let tree = mdCache[pathname].mdOutTree; - + fixUrls(tree, pathname, linkSet, 'link'); fixUrls(tree, pathname, imageSet, 'image'); }); @@ -54,7 +45,7 @@ function fixUrls(tree: MDAST.Root, docFilePath: string, linkSet: LinkSet, select (origFullUrlPath !== '') && !fs.existsSync(origFullUrlPath) ) { - let newUrl = linkSet.update(origFullUrlPath) || origFullUrlPath; + let newUrl = linkSet.update(origFullUrlPath) || origFullUrlPath; linkElem.url = path.relative(path.dirname(docFilePath), newUrl).replace(/\\/g,'/') + anchor; errors.push(`Bad link: ${origFullUrlPath}\nReplacing with ${linkElem.url}`); } /*else { @@ -93,14 +84,14 @@ class LinkSet { urls.forEach(url => { let fileName = path.basename(url); - + if (this.links.has(fileName)) { let item = this.links.get(fileName); item.push(url); } else { this.links.set(fileName, [url]); } - }); + }); } update(oldUrl: string): string { diff --git a/tools/doc/tools/reducer.ts b/tools/doc/tools/reducer.ts index e646e92b394..227c1154fbe 100644 --- a/tools/doc/tools/reducer.ts +++ b/tools/doc/tools/reducer.ts @@ -1,8 +1,5 @@ -import * as path from "path"; -import * as fs from "fs"; - import { select, selectAll } from "unist-util-select"; export function processDocs(mdCache, aggData, errorMessages) { -} \ No newline at end of file +} diff --git a/tools/doc/tools/seealso.js b/tools/doc/tools/seealso.js index 47d998370ad..d1ee7960b3c 100644 --- a/tools/doc/tools/seealso.js +++ b/tools/doc/tools/seealso.js @@ -1,5 +1,4 @@ var path = require("path"); -var getSection = require("mdast-util-heading-range"); var unist = require("../unistHelpers"); @@ -21,7 +20,7 @@ function initPhase(aggData) { function readPhase(tree, pathname, aggData) { var saHeadingOffset = findSeeAlsoSection(tree); - + var saNode = []; if (saHeadingOffset !== -1) { @@ -39,7 +38,7 @@ function readPhase(tree, pathname, aggData) { for (var i = 0; i < list.children.length; i++) { var itemLink = getItemLinkInfo(list.children[i]); - + if (itemLink) { saNode.push(itemLink); } @@ -112,7 +111,7 @@ function tidyName(name) { function makeEmptySAList() { var result = []; - + } @@ -130,7 +129,7 @@ function tidyGraph(graph) { var currNodeName = nodeNames[n]; var currNodeArcs = graph[currNodeName]; - + for (var a = 0; a < currNodeArcs.length; a++) { var linkedNode = graph[currNodeArcs[a]]; var resultNode = result[currNodeArcs[a]]; @@ -139,7 +138,7 @@ function tidyGraph(graph) { console.log(`Warning: item '${currNodeArcs[a]}' (in See Also section of '${currNodeName}') has no corresponding file`); } else if (linkedNode.indexOf(currNodeName) === -1) { linkedNode.push(currNodeName); - resultNode.push(currNodeName); + resultNode.push(currNodeName); } } } diff --git a/tools/doc/tools/sourceLinker.js b/tools/doc/tools/sourceLinker.js index 708483aebc3..975b7295380 100644 --- a/tools/doc/tools/sourceLinker.js +++ b/tools/doc/tools/sourceLinker.js @@ -4,7 +4,7 @@ var path = require("path"); var unist_util_select_1 = require("unist-util-select"); var ngHelpers = require("../ngHelpers"); var angFilenameRegex = /([a-zA-Z0-9\-]+)\.((component)|(dialog)|(directive)|(interface)|(model)|(pipe)|(service)|(widget))/; -function processDocs(mdCache, aggData, errorMessages) { +function processDocs(mdCache, aggData) { var pathnames = Object.keys(mdCache); pathnames.forEach(function (pathname) { var fileBaseName = path.basename(pathname, '.md'); @@ -18,7 +18,7 @@ function processDocs(mdCache, aggData, errorMessages) { var titleHeading = unist_util_select_1.select('heading[depth=1]:first-of-type', tree); var relDocPath = pathname.substring(pathname.indexOf('docs')); var srcUrl = fixRelSrcUrl(relDocPath, sourcePath); - if (titleHeading.children[0].type === "text") { + if (titleHeading && titleHeading.children[0] && titleHeading.children[0].type === "text") { var titleText = titleHeading.children[0]; titleHeading.children[0] = { type: 'link', @@ -27,9 +27,9 @@ function processDocs(mdCache, aggData, errorMessages) { children: [titleText] }; } - else if ((titleHeading.children[0].type === "link") && sourcePath) { + else if ((titleHeading && titleHeading.children[0].type === "link") && sourcePath) { var linkElem = titleHeading.children[0]; - linkElem.url = srcUrl, //`../../${sourcePath}`; + linkElem.url = srcUrl, linkElem.title = "Defined in " + path.basename(sourcePath); } }); diff --git a/tools/doc/tools/sourceLinker.ts b/tools/doc/tools/sourceLinker.ts index 4db2d327574..fd200722031 100644 --- a/tools/doc/tools/sourceLinker.ts +++ b/tools/doc/tools/sourceLinker.ts @@ -4,11 +4,9 @@ import { select } from "unist-util-select"; import * as ngHelpers from "../ngHelpers"; - const angFilenameRegex = /([a-zA-Z0-9\-]+)\.((component)|(dialog)|(directive)|(interface)|(model)|(pipe)|(service)|(widget))/; - -export function processDocs(mdCache, aggData, errorMessages) { +export function processDocs(mdCache, aggData) { var pathnames = Object.keys(mdCache); pathnames.forEach(pathname => { @@ -26,7 +24,7 @@ export function processDocs(mdCache, aggData, errorMessages) { let relDocPath = pathname.substring(pathname.indexOf('docs')); let srcUrl = fixRelSrcUrl(relDocPath, sourcePath); - if (titleHeading.children[0].type === "text") { + if (titleHeading && titleHeading.children[0] && titleHeading.children[0].type === "text") { let titleText = titleHeading.children[0]; titleHeading.children[0] = { type: 'link', @@ -34,7 +32,7 @@ export function processDocs(mdCache, aggData, errorMessages) { title: `Defined in ${path.basename(sourcePath)}`, children: [titleText] } - } else if ((titleHeading.children[0].type === "link") && sourcePath) { + } else if ((titleHeading && titleHeading.children[0].type === "link") && sourcePath) { let linkElem = titleHeading.children[0]; linkElem.url = srcUrl, //`../../${sourcePath}`; linkElem.title = `Defined in ${path.basename(sourcePath)}`; @@ -52,4 +50,4 @@ function fixRelSrcUrl(docPath: string, srcPath: string) { } return dotPathPart + srcPath; -} \ No newline at end of file +} diff --git a/tools/doc/tools/tsInfo.ts b/tools/doc/tools/tsInfo.ts index 9835287ea4f..d2bb613537f 100644 --- a/tools/doc/tools/tsInfo.ts +++ b/tools/doc/tools/tsInfo.ts @@ -3,15 +3,9 @@ import * as path from "path"; import * as replaceSection from "mdast-util-heading-range"; import * as remark from "remark"; -// import * as stringify from "remark-stringify"; -// import * as frontMatter from "remark-frontmatter"; import * as ejs from "ejs"; -import { - Application, - } from "typedoc"; - import { MDNav } from "../mdNav"; import { ngNameToClassName } from "../ngHelpers"; @@ -19,21 +13,12 @@ import { ComponentInfo } from "../SourceInfoClasses" - -let libFolders = ["core", "content-services", "process-services", "insights", "process-services-cloud"]; let templateFolder = path.resolve("tools", "doc", "templates"); -let excludePatterns = [ - "**/*.spec.ts" -]; - - let nameExceptions; export function processDocs(mdCache, aggData, _errorMessages) { - //initPhase(aggData); - nameExceptions = aggData.config.typeNameExceptions; let pathnames = Object.keys(mdCache); @@ -61,39 +46,7 @@ function showErrors(filename, errorMessages) { } -/* -function initPhase(aggData) { - nameExceptions = aggData.config.typeNameExceptions; - - let app = new Application({ - exclude: excludePatterns, - ignoreCompilerErrors: true, - experimentalDecorators: true, - tsconfig: "tsconfig.json" - }); - - let sources = app.expandInputFiles(libFolders.map(folder => { - return path.resolve("lib", folder); - })); - - aggData.projData = app.convert(sources); -} -*/ - - - function updateFile(tree, pathname, aggData, errorMessages) { - /* - let compName = angNameToClassName(path.basename(pathname, ".md")); - let classRef = aggData.projData.findReflectionByName(compName); - - if (!classRef) { - // A doc file with no corresponding class (eg, Document Library Model). - return false; - } - - let compData = new ComponentInfo(classRef); - */ let className = ngNameToClassName(path.basename(pathname, ".md"), nameExceptions); let classTypeMatch = className.match(/component|directive|service/i); @@ -135,39 +88,6 @@ function updateFile(tree, pathname, aggData, errorMessages) { return true; } -/* -function initialCap(str: string) { - return str[0].toUpperCase() + str.substr(1); -} - - -function angNameToClassName(rawName: string) { - if (nameExceptions[rawName]) - return nameExceptions[rawName]; - - var name = rawName.replace(/\]|\(|\)/g, ''); - - var fileNameSections = name.split('.'); - var compNameSections = fileNameSections[0].split('-'); - - var outCompName = ''; - - for (var i = 0; i < compNameSections.length; i++) { - outCompName = outCompName + initialCap(compNameSections[i]); - } - - var itemTypeIndicator = ''; - - if (fileNameSections.length > 1) { - itemTypeIndicator = initialCap(fileNameSections[1]); - } - - var finalName = outCompName + itemTypeIndicator; - - return finalName; -} -*/ - function getPropDocsFromMD(tree, sectionHeading, docsColumn) { let result = {} @@ -259,10 +179,6 @@ function getMethodDocsFromMD(tree) { methItem = methListItems .listItem(l=>true, i); } - /* - let newRoot = unist.makeRoot([methList.item]); - console.log(remark().use(frontMatter, {type: 'yaml', fence: '---'}).data("settings", {paddedTable: false, gfm: false}).stringify(tree)); - */ return result; } diff --git a/tools/doc/tools/tutorialIndex.ts b/tools/doc/tools/tutorialIndex.ts index b3c93b846e5..b961e615e85 100644 --- a/tools/doc/tools/tutorialIndex.ts +++ b/tools/doc/tools/tutorialIndex.ts @@ -3,7 +3,6 @@ import * as path from "path"; import * as replaceSection from "mdast-util-heading-range"; import * as remark from "remark"; -import * as stringify from "remark-stringify"; import * as frontMatter from "remark-frontmatter"; import * as yaml from "js-yaml"; import * as ejs from "ejs"; @@ -15,12 +14,12 @@ const templateFolder = path.resolve("tools", "doc", "templates"); const userGuideFolder = path.resolve("docs", "user-guide"); -export function processDocs(tree, pathname, aggData, errorMessages) { - aggPhase(aggData); +export function processDocs() { + aggPhase(); } -function aggPhase(aggData) { +function aggPhase() { let indexDocData = getIndexDocData(); let templateName = path.resolve(templateFolder, "tutIndex.ejs"); @@ -118,7 +117,7 @@ function getFirstParagraph(tree) { if (s < tree.children.length) { return tree.children[s]; - + } else { return null; } @@ -131,8 +130,8 @@ function getFirstHeading(tree) { if (s < tree.children.length) { return tree.children[s]; - + } else { return null; } -} \ No newline at end of file +} diff --git a/tools/doc/tools/typeLinker.js b/tools/doc/tools/typeLinker.js index 2e78e159d8d..a7c62f64b6a 100644 --- a/tools/doc/tools/typeLinker.js +++ b/tools/doc/tools/typeLinker.js @@ -1,5 +1,5 @@ "use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +exports.__esModule = true; var path = require("path"); var unist = require("../unistHelpers"); var ngHelpers = require("../ngHelpers"); @@ -8,15 +8,13 @@ var includedNodeTypes = [ "table", "tableRow", "tableCell", "emphasis", "strong", "link", "text" ]; -var docFolder = path.resolve("docs"); -var adfLibNames = ["core", "content-services", "insights", "process-services", "process-services-cloud", "extensions"]; var externalNameLinks; var linkOverrides; -function processDocs(mdCache, aggData, errorMessages) { +function processDocs(mdCache, aggData) { initPhase(aggData, mdCache); var pathnames = Object.keys(mdCache); pathnames.forEach(function (pathname) { - updateFile(mdCache[pathname].mdOutTree, pathname, aggData, errorMessages); + updateFile(mdCache[pathname].mdOutTree, pathname, aggData); }); } exports.processDocs = processDocs; @@ -28,21 +26,6 @@ function initPhase(aggData, mdCache) { }); aggData.docFiles = {}; aggData.nameLookup = new SplitNameLookup(); - /* - adfLibNames.forEach(libName => { - let libFolderPath = path.resolve(docFolder, libName); - - let files = fs.readdirSync(libFolderPath); - - files.forEach(file => { - if (path.extname(file) === ".md") { - let relPath = libFolderPath.substr(libFolderPath.indexOf("docs") + 5).replace(/\\/, "/") + "/" + file; - let compName = path.basename(file, ".md"); - aggData.docFiles[compName] = relPath; - } - }); - }); - */ var docFilePaths = Object.keys(mdCache); docFilePaths.forEach(function (docFilePath) { var relPath = docFilePath.substring(docFilePath.indexOf('docs') + 5).replace(/\\/g, "/"); @@ -55,9 +38,8 @@ function initPhase(aggData, mdCache) { aggData.nameLookup.addName(currClassName); } }); - //console.log(JSON.stringify(aggData.nameLookup)); } -function updateFile(tree, pathname, aggData, _errorMessages) { +function updateFile(tree, pathname, aggData) { traverseMDTree(tree); return true; function traverseMDTree(node) { @@ -65,7 +47,7 @@ function updateFile(tree, pathname, aggData, _errorMessages) { return; } if (node.type === "link") { - if (node.children && ((node.children[0].type === "inlineCode") || + if (node.children[0] && ((node.children[0].type === "inlineCode") || (node.children[0].type === "text"))) { var link = resolveTypeLink(aggData, pathname, node.children[0].value); if (link) { @@ -84,15 +66,10 @@ function updateFile(tree, pathname, aggData, _errorMessages) { } var _a; }); - } /*else if (node.children) { - node.children.forEach(child => { - traverseMDTree(child); - }); } - */ } } -var SplitNameNode = /** @class */ (function () { +var SplitNameNode = (function () { function SplitNameNode(key, value) { if (key === void 0) { key = ""; } if (value === void 0) { value = ""; } @@ -105,21 +82,21 @@ var SplitNameNode = /** @class */ (function () { }; return SplitNameNode; }()); -var SplitNameMatchElement = /** @class */ (function () { +var SplitNameMatchElement = (function () { function SplitNameMatchElement(node, textPos) { this.node = node; this.textPos = textPos; } return SplitNameMatchElement; }()); -var SplitNameMatchResult = /** @class */ (function () { +var SplitNameMatchResult = (function () { function SplitNameMatchResult(value, startPos) { this.value = value; this.startPos = startPos; } return SplitNameMatchResult; }()); -var SplitNameMatcher = /** @class */ (function () { +var SplitNameMatcher = (function () { function SplitNameMatcher(root) { this.root = root; this.reset(); @@ -165,7 +142,7 @@ var SplitNameMatcher = /** @class */ (function () { }; return SplitNameMatcher; }()); -var SplitNameLookup = /** @class */ (function () { +var SplitNameLookup = (function () { function SplitNameLookup() { this.root = new SplitNameNode(); } @@ -188,7 +165,7 @@ var SplitNameLookup = /** @class */ (function () { }; return SplitNameLookup; }()); -var WordScanner = /** @class */ (function () { +var WordScanner = (function () { function WordScanner(text) { this.text = text; this.separators = " \n\r\t.;:<>[]&|"; @@ -237,10 +214,10 @@ function handleLinksInBodyText(aggData, docFilePath, text, wrapInlineCode) { var link = resolveTypeLink(aggData, docFilePath, word); var matchStart = void 0; if (!link) { - var match_1 = matcher.nextWord(word.toLowerCase(), scanner.index); - if (match_1 && match_1[0]) { - link = resolveTypeLink(aggData, docFilePath, match_1[0].value); - matchStart = match_1[0].startPos; + var match = matcher.nextWord(word.toLowerCase(), scanner.index); + if (match && match[0]) { + link = resolveTypeLink(aggData, docFilePath, match[0].value); + matchStart = match[0].startPos; } } else { @@ -339,14 +316,6 @@ function cleanTypeName(text) { return text.replace(/\[\]$/, ""); } } -/* -function isLinkable(kind: ReflectionKind) { - return (kind === ReflectionKind.Class) || - (kind === ReflectionKind.Interface) || - (kind === ReflectionKind.Enum) || - (kind === ReflectionKind.TypeAlias); -} -*/ function convertNodeToTypeLink(node, text, url, title) { if (title === void 0) { title = null; } var linkDisplayText = unist.makeInlineCode(text); diff --git a/tools/doc/tools/typeLinker.ts b/tools/doc/tools/typeLinker.ts index 209f4524686..a4ba1a67be1 100644 --- a/tools/doc/tools/typeLinker.ts +++ b/tools/doc/tools/typeLinker.ts @@ -1,13 +1,7 @@ import * as path from "path"; -import * as fs from "fs"; - -import * as remark from "remark"; -import * as stringify from "remark-stringify"; -import * as frontMatter from "remark-frontmatter"; import * as unist from "../unistHelpers"; import * as ngHelpers from "../ngHelpers"; -import { match } from "minimatch"; const includedNodeTypes = [ @@ -16,23 +10,19 @@ const includedNodeTypes = [ "link", "text" ]; -const docFolder = path.resolve("docs"); -const adfLibNames = ["core", "content-services", "insights", "process-services", "process-services-cloud", "extensions"]; - let externalNameLinks; let linkOverrides; -export function processDocs(mdCache, aggData, errorMessages) { +export function processDocs(mdCache, aggData) { initPhase(aggData, mdCache); var pathnames = Object.keys(mdCache); pathnames.forEach(pathname => { - updateFile(mdCache[pathname].mdOutTree, pathname, aggData, errorMessages); + updateFile(mdCache[pathname].mdOutTree, pathname, aggData); }); } - function initPhase(aggData, mdCache) { externalNameLinks = aggData.config.externalNameLinks; @@ -44,22 +34,6 @@ function initPhase(aggData, mdCache) { aggData.docFiles = {}; aggData.nameLookup = new SplitNameLookup(); - /* - adfLibNames.forEach(libName => { - let libFolderPath = path.resolve(docFolder, libName); - - let files = fs.readdirSync(libFolderPath); - - files.forEach(file => { - if (path.extname(file) === ".md") { - let relPath = libFolderPath.substr(libFolderPath.indexOf("docs") + 5).replace(/\\/, "/") + "/" + file; - let compName = path.basename(file, ".md"); - aggData.docFiles[compName] = relPath; - } - }); - }); - */ - let docFilePaths = Object.keys(mdCache); docFilePaths.forEach(docFilePath => { @@ -75,13 +49,9 @@ function initPhase(aggData, mdCache) { aggData.nameLookup.addName(currClassName); } }); - //console.log(JSON.stringify(aggData.nameLookup)); } - - - -function updateFile(tree, pathname, aggData, _errorMessages) { +function updateFile(tree, pathname, aggData) { traverseMDTree(tree); return true; @@ -92,7 +62,7 @@ function updateFile(tree, pathname, aggData, _errorMessages) { } if (node.type === "link") { - if (node.children && ( + if (node.children[0] && ( (node.children[0].type === "inlineCode") || (node.children[0].type === "text") )) { @@ -102,7 +72,7 @@ function updateFile(tree, pathname, aggData, _errorMessages) { convertNodeToTypeLink(node, node.children[0].value, link); } } - } else if ((node.children) && (node.type !== "heading")) { //((node.type === "paragraph") || (node.type === "tableCell")) { + } else if ((node.children) && (node.type !== "heading")) { node.children.forEach((child, index) => { if ((child.type === "text") || (child.type === "inlineCode")) { let newNodes = handleLinksInBodyText(aggData, pathname, child.value, child.type === 'inlineCode'); @@ -111,12 +81,7 @@ function updateFile(tree, pathname, aggData, _errorMessages) { traverseMDTree(child); } }); - } /*else if (node.children) { - node.children.forEach(child => { - traverseMDTree(child); - }); } - */ } } @@ -226,7 +191,6 @@ class SplitNameLookup { } } - class WordScanner { separators: string; index: number; @@ -273,7 +237,6 @@ class WordScanner { } } - function handleLinksInBodyText(aggData, docFilePath: string, text: string, wrapInlineCode: boolean = false): Node[] { let result = []; let currTextStart = 0; @@ -347,12 +310,8 @@ function resolveTypeLink(aggData, docFilePath, text): string { return ""; } - /* - let ref: Reflection = aggData.projData.findReflectionByName(possTypeName); -*/ let classInfo = aggData.classInfo[possTypeName]; - //if (ref && isLinkable(ref.kind)) { if (linkOverrides[possTypeName.toLowerCase()]) { return ''; } else if (externalNameLinks[possTypeName]) { @@ -361,12 +320,9 @@ function resolveTypeLink(aggData, docFilePath, text): string { let kebabName = ngHelpers.kebabifyClassName(possTypeName); let possDocFile = aggData.docFiles[kebabName]; - //let url = "../../" + classInfo.sourcePath; - let url = fixRelSrcUrl(docFilePath, classInfo.sourcePath); if (possDocFile) { - //url = "../" + possDocFile; url = fixRelDocUrl(docFilePath, possDocFile); } @@ -410,15 +366,6 @@ function cleanTypeName(text) { } } -/* -function isLinkable(kind: ReflectionKind) { - return (kind === ReflectionKind.Class) || - (kind === ReflectionKind.Interface) || - (kind === ReflectionKind.Enum) || - (kind === ReflectionKind.TypeAlias); -} -*/ - function convertNodeToTypeLink(node, text, url, title = null) { let linkDisplayText = unist.makeInlineCode(text); node.type = "link"; diff --git a/tools/doc/tools/versionIndex.js b/tools/doc/tools/versionIndex.js index 83c02d7cf75..9bc716b2362 100644 --- a/tools/doc/tools/versionIndex.js +++ b/tools/doc/tools/versionIndex.js @@ -15,14 +15,12 @@ var ngHelpers = require("../ngHelpers"); module.exports = { "processDocs": processDocs -} +}; -var angFilenameRegex = /([a-zA-Z0-9\-]+)\.((component)|(directive)|(model)|(pipe)|(service)|(widget))\.ts/; var docsFolderPath = path.resolve("docs"); var histFilePath = path.resolve(docsFolderPath, "versionIndex.md"); -var histSectionName = "history"; var initialVersion = "v2.0.0"; var templateFolder = path.resolve("tools", "doc", "templates"); @@ -55,11 +53,11 @@ function getFileData(tree, pathname, aggData) { if (!compName.match(angNameRegex)) return; - + if (compName.match(/boilerplate/)) return; - - if (tree.children[0].type == "yaml") { + + if (tree && tree.children[0] && tree.children[0].type == "yaml") { var metadata = yaml.load(tree.children[0].value); var version = metadata["Added"]; @@ -83,7 +81,7 @@ function aggPhase(aggData) { var keys = Object.keys(aggData.versions); keys.sort((a, b) => { - if (a > b) + if (a > b) return -1; else if (b > a) return 1; diff --git a/tools/schematics/adf/package-lock.json b/tools/schematics/adf/package-lock.json index d693f5875b1..fdefa991031 100644 --- a/tools/schematics/adf/package-lock.json +++ b/tools/schematics/adf/package-lock.json @@ -9,10 +9,10 @@ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-0.5.9.tgz", "integrity": "sha512-SH2/tvs9IGzfDDaUZ1uqLlNPTzaidPWdcT3AA3lYi4hS6ZU8zF1kGw+8Xa9CZR/3JhjMAxmNoqtIcTzt2WmlqQ==", "requires": { - "ajv": "6.4.0", - "chokidar": "1.7.0", - "rxjs": "6.0.0", - "source-map": "0.5.7" + "ajv": "~6.4.0", + "chokidar": "^1.7.0", + "rxjs": "^6.0.0-beta.3", + "source-map": "^0.5.6" } }, "@angular-devkit/schematics": { @@ -21,8 +21,8 @@ "integrity": "sha512-4DSjQUFthXqoDlZ5+ml2UvxlP29fv08FeVRbkKgofNSqC3N4QiCn/8I2PksGzcdHAXTiBGmBcgXwGbDb5zTkqA==", "requires": { "@angular-devkit/core": "0.5.9", - "@ngtools/json-schema": "1.1.0", - "rxjs": "6.0.0" + "@ngtools/json-schema": "^1.1.0", + "rxjs": "^6.0.0-beta.3" } }, "@ngtools/json-schema": { @@ -45,10 +45,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.4.0.tgz", "integrity": "sha1-06/3jpJ3VJdx2vAWTP9ISCt1T8Y=", "requires": { - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1", - "uri-js": "3.0.2" + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0", + "uri-js": "^3.0.2" } }, "anymatch": { @@ -56,8 +56,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "arr-diff": { @@ -65,7 +65,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -98,7 +98,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -107,9 +107,9 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "chokidar": { @@ -117,14 +117,14 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "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" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "concat-map": { @@ -152,7 +152,7 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -160,7 +160,7 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" } }, "extglob": { @@ -168,7 +168,7 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "fast-deep-equal": { @@ -191,11 +191,11 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "for-in": { @@ -208,7 +208,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "fs.realpath": { @@ -221,12 +221,12 @@ "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" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -234,8 +234,8 @@ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -243,7 +243,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "graceful-fs": { @@ -256,8 +256,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -270,7 +270,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -288,7 +288,7 @@ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -306,7 +306,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-number": { @@ -314,7 +314,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-posix-bracket": { @@ -345,9 +345,9 @@ "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-2.99.0.tgz", "integrity": "sha1-jKctEC5jm4Z8ZImFbg4YqceqQrc=", "requires": { - "exit": "0.1.2", - "glob": "7.1.2", - "jasmine-core": "2.99.1" + "exit": "^0.1.2", + "glob": "^7.0.6", + "jasmine-core": "~2.99.0" } }, "jasmine-core": { @@ -365,7 +365,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -373,19 +373,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "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.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "minimatch": { @@ -393,7 +393,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "normalize-path": { @@ -401,7 +401,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "object.omit": { @@ -409,8 +409,8 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "once": { @@ -418,7 +418,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "parse-glob": { @@ -426,10 +426,10 @@ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "path-is-absolute": { @@ -457,8 +457,8 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "is-number": { @@ -466,7 +466,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -474,7 +474,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -484,7 +484,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -494,13 +494,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -508,10 +508,10 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "regex-cache": { @@ -519,7 +519,7 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "remove-trailing-separator": { @@ -542,7 +542,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.0.0.tgz", "integrity": "sha512-2MgLQr1zvks8+Kip4T6hcJdiBhV+SIvxguoWjhwtSpNPTp/5e09HJbgclCwR/nW0yWzhubM+6Q0prl8G5RuoBA==", "requires": { - "tslib": "1.9.0" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -565,7 +565,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "tslib": { @@ -583,7 +583,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-3.0.2.tgz", "integrity": "sha1-+QuFhQf4HepNz7s8TD2/orVX+qo=", "requires": { - "punycode": "2.1.0" + "punycode": "^2.1.0" } }, "util-deprecate": {