├── LICENSE
├── .gitignore
├── icon.png
├── dev_manifest.json
├── PublishHtmlReport
├── icon.png
├── package.json
├── task.json
├── index.js
└── package-lock.json
├── src
├── tabContent.scss
├── tabContent.html
└── tabContent.tsx
├── tsconfig.json
├── README.md
├── OVERVIEW.md
├── webpack.config.js
├── package.json
├── azure-devops-extension.json
└── azure-pipelines.yaml
/LICENSE:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JakubRumpca/azure-pipeline-html-report/HEAD/icon.png
--------------------------------------------------------------------------------
/dev_manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifestVersion": 1,
3 | "id": "extension",
4 | "publisher": "JakubRumpca"
5 | }
--------------------------------------------------------------------------------
/PublishHtmlReport/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JakubRumpca/azure-pipeline-html-report/HEAD/PublishHtmlReport/icon.png
--------------------------------------------------------------------------------
/src/tabContent.scss:
--------------------------------------------------------------------------------
1 | @import "node_modules/azure-devops-ui/Core/_platformCommon.scss";
2 |
3 | .bolt-tabbar-tabs {
4 | font-size: $fontSizeM;
5 | margin-bottom: 10px;
6 | font-family: Arial, sans-serif;
7 | }
8 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "amd",
4 | "moduleResolution": "node",
5 | "target": "es6",
6 | "outDir": "dist/",
7 | "jsx": "react",
8 | "types": [
9 | "react",
10 | "node"
11 | ],
12 | "skipLibCheck": true,
13 | },
14 | "files": [
15 | "src/tabContent.tsx"
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/PublishHtmlReport/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "publish-html-report",
3 | "version": "1.0.8",
4 | "description": "",
5 | "main": "index.js",
6 | "private": true,
7 | "dependencies": {
8 | "azure-pipelines-task-lib": "^2.9.3",
9 | "cheerio": "^1.0.0-rc.3",
10 | "dashify": "^2.0.0",
11 | "fs": "0.0.2",
12 | "fs-extra": "^8.1.0",
13 | "globby": "^11.0.0",
14 | "hat": "0.0.3"
15 | },
16 | "devDependencies": {},
17 | "scripts": {},
18 | "author": "",
19 | "license": "ISC"
20 | }
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # azure-pipeline-html-report
2 |
3 |
4 | Azure DevOps extension that provides a task for publishing report in a HTML format and embeds it into a Build and Release pages.
5 |
6 | ### Extension
7 |
8 | In order to see report on tab one must first use `Publish HTML Report` task. This is supporting task which makes html tab visible.
9 |
10 | This task takes one parameter - required `reportDir` which is a path to report directory and also optional `tabName` which is the name of the tab displayed within Azure DevOps report.
11 | #### Example YAML setup
12 |
13 | ```YAML
14 | steps:
15 | - task: PublishHtmlReport@1
16 | displayName: 'Publish HTML Report'
17 | inputs:
18 | reportDir: '$(ResultsPath)/reportName.html'
19 | ```
--------------------------------------------------------------------------------
/OVERVIEW.md:
--------------------------------------------------------------------------------
1 | # azure-pipeline-html-report
2 |
3 |
4 | Azure DevOps extension that provides a task for publishing report in a HTML format and embeds it into a Build and Release pages.
5 |
6 | ### Extension
7 |
8 | In order to see report on tab one must first use `Publish HTML Report` task. This is supporting task which makes html tab visible.
9 |
10 | This task takes one parameter - required `reportDir` which is a path to report directory and also optional `tabName` which is the name of the tab displayed within Azure DevOps report.
11 | #### Example YAML setup
12 |
13 | ```YAML
14 | steps:
15 | - task: PublishHtmlReport@1
16 | displayName: 'Publish HTML Report'
17 | inputs:
18 | reportDir: '$(ResultsPath)/reportName.html'
19 | ```
--------------------------------------------------------------------------------
/PublishHtmlReport/task.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "bf52d8fd-c399-4acd-98c7-a03ceee2a974",
3 | "name": "PublishHtmlReport",
4 | "friendlyName": "Publish Html Report",
5 | "description": "Publish Html Report",
6 | "author": "",
7 | "helpMarkDown": "Replace with markdown to show in help",
8 | "category": "Utility",
9 | "visibility": [
10 | "Build"
11 | ],
12 | "demands": [],
13 | "version": {
14 | "Major": "1",
15 | "Minor": "0",
16 | "Patch": "8"
17 | },
18 | "minimumAgentVersion": "1.95.0",
19 | "instanceNameFormat": "Publish Html Report",
20 | "inputs": [
21 | {
22 | "name": "tabName",
23 | "type": "string",
24 | "label": "Report tab name",
25 | "defaultValue": "HTML-Report",
26 | "required": false,
27 | "helpMarkDown": "Name of the tab displayed in the report"
28 | },
29 | {
30 | "name": "reportDir",
31 | "type": "filePath",
32 | "label": "HTML file Directory",
33 | "defaultValue": "",
34 | "required": true,
35 | "helpMarkDown": "HTML file directory where PublishHtmlReport is run."
36 | }
37 | ],
38 | "execution": {
39 | "Node10": {
40 | "target": "index.js",
41 | "argumentFormat": ""
42 | }
43 | }
44 | }
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 | const CopyWebpackPlugin = require("copy-webpack-plugin");
3 | const webpack = require('webpack');
4 |
5 | module.exports = {
6 | entry: {
7 | tabContent: "./src/tabContent.tsx",
8 | },
9 |
10 | resolve: {
11 | extensions: [".ts", ".tsx", ".js"],
12 | alias: {
13 | "azure-devops-extension-sdk": path.resolve("node_modules/azure-devops-extension-sdk")
14 | },
15 | },
16 | stats: {
17 | warnings: false
18 | },
19 | module: {
20 | rules: [
21 | {
22 | test: /\.tsx?$/,
23 | loader: "ts-loader"
24 | },
25 | {
26 | test: /\.scss$/,
27 | use: ["style-loader", "css-loader", "azure-devops-ui/buildScripts/css-variables-loader", "sass-loader"]
28 | },
29 | {
30 | test: /\.css$/,
31 | use: ["style-loader", "css-loader"],
32 | },
33 | {
34 | test: /\.woff$/,
35 | use: [{
36 | loader: 'base64-inline-loader'
37 | }]
38 | },
39 | {
40 | test: /\.html$/,
41 | loader: "file-loader"
42 | }
43 | ]
44 | },
45 | plugins: [
46 | new CopyWebpackPlugin([
47 | { from: "*.html", context: "src/" },
48 | ]),
49 | new webpack.SourceMapDevToolPlugin({})
50 | ]
51 | };
--------------------------------------------------------------------------------
/src/tabContent.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "azure-pipelines-html-report",
3 | "version": "1.0.8",
4 | "private": true,
5 | "author": "Jakub Rumpca",
6 | "dependencies": {
7 | "@material-ui/core": "^4.10.1",
8 | "@material-ui/icons": "^4.9.1",
9 | "azure-devops-extension-api": "^1.157.0",
10 | "azure-devops-extension-sdk": "^2.0.11",
11 | "azure-devops-ui": "^2.165.1",
12 | "dashify": "^2.0.0",
13 | "material-table": "^1.60.0",
14 | "mustache": "^3.0.1",
15 | "node-fetch": "^2.6.1",
16 | "node-sass": "^4.14.1",
17 | "react": "^16.13.1",
18 | "react-dom": "^16.13.1",
19 | "react-object-inspector": "^0.2.1"
20 | },
21 | "devDependencies": {
22 | "@types/node": "^13.13.30",
23 | "@types/node-fetch": "^2.5.5",
24 | "@types/react": "^16.9.25",
25 | "@types/react-dom": "^16.9.5",
26 | "base64-inline-loader": "^1.1.1",
27 | "copy-webpack-plugin": "^5.1.1",
28 | "css-loader": "^3.4.2",
29 | "file-loader": "^6.0.0",
30 | "jsdom": "^16.2.1",
31 | "rimraf": "^3.0.2",
32 | "sass-loader": "^8.0.2",
33 | "style-loader": "^1.1.3",
34 | "tfx-cli": "^0.7.11",
35 | "ts-loader": "^6.2.1",
36 | "typescript": "^3.8.3",
37 | "webpack": "^4.42.0",
38 | "webpack-cli": "^3.3.11"
39 | },
40 | "scripts": {
41 | "clean": "rimraf ./dist",
42 | "build:cidev": "npm run clean && webpack --mode development",
43 | "build": "npm run clean && webpack --mode development",
44 | "postbuild": "npm run package-extension",
45 | "postinstall": "cd PublishHtmlReport && npm install",
46 | "test": "echo No test available",
47 | "prune": "npm prune --production --ignore-scripts",
48 | "package-extension": "tfx extension create --manifest-globs azure-devops-extension.json --overrides-file dev_manifest.json"
49 | },
50 | "eslintConfig": {
51 | "extends": "react-app"
52 | },
53 | "browserslist": {
54 | "production": [
55 | ">0.2%",
56 | "not dead",
57 | "not op_mini all"
58 | ],
59 | "development": [
60 | "last 1 chrome version",
61 | "last 1 firefox version",
62 | "last 1 safari version"
63 | ]
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/azure-devops-extension.json:
--------------------------------------------------------------------------------
1 | {
2 | "manifestVersion": 1,
3 | "id": "azure-pipelines-html-report",
4 | "publisher": "JakubRumpca",
5 | "version": "1.0.8",
6 | "author": "Jakub Rumpca",
7 | "name": "Html Viewer Dev",
8 | "description": "Embed HTML report in Azure Pipelines",
9 | "public": false,
10 | "categories": ["Azure Pipelines"],
11 | "icons": {
12 | "default": "icon.png"
13 | },
14 | "tags": ["Preview"],
15 | "targets": [
16 | {
17 | "id": "Microsoft.VisualStudio.Services"
18 | }
19 | ],
20 | "repository": {
21 | "type": "git",
22 | "uri": "https://github.com/JakubRumpca/azure-pipeline-html-report"
23 | },
24 | "content": {
25 | "details": {
26 | "path": "README.md"
27 | },
28 | "license": {
29 | "path": "LICENSE"
30 | }
31 | },
32 | "scopes": [
33 | "vso.build_execute"
34 | ],
35 | "demands": [
36 | "api-version/3.0"
37 | ],
38 | "contributions": [
39 | {
40 | "id": "build-html-report-tab",
41 | "type": "ms.vss-build-web.build-results-tab",
42 | "description": "Embed HTML files viewer in Azure Pipelines Release",
43 | "targets": ["ms.vss-build-web.build-results-view"],
44 | "properties": {
45 | "name": "HTML Viewer",
46 | "uri": "dist/tabContent.html",
47 | "registeredObjectId": "registerBuild",
48 | "supportsTasks": ["bf52d8fd-c399-4acd-98c7-a03ceee2a974"],
49 | "dynamic": true
50 | },
51 | "includes": ["ms.vss-releaseManagement-web.release-service-data-external"]
52 | },
53 | {
54 | "id": "PublishHtmlReport",
55 | "type": "ms.vss-distributed-task.task",
56 | "targets": ["ms.vss-distributed-task.tasks"],
57 | "properties": {
58 | "name": "PublishHtmlReport",
59 | "displayName": "Publish HTML Report"
60 | }
61 | }
62 | ],
63 | "files": [
64 | {
65 | "path": "./PublishHtmlReport",
66 | "packagePath": "PublishHtmlReport",
67 | "addressable": false
68 | },
69 | {
70 | "path": "./dist",
71 | "packagePath": "dist",
72 | "addressable": true
73 | }
74 | ]
75 | }
--------------------------------------------------------------------------------
/PublishHtmlReport/index.js:
--------------------------------------------------------------------------------
1 | const tl = require('azure-pipelines-task-lib');
2 | const { resolve, basename, join } = require('path');
3 | const dashify = require('dashify')
4 | const globby = require('globby')
5 | const { readFileSync, writeFileSync } = require('fs')
6 | const { load } = require('cheerio')
7 |
8 | function run () {
9 | let reportDir = tl.getPathInput('reportDir', true, true);
10 |
11 | let files = globby.sync([reportDir.replace(/\\/g, '/')], {expandDirectories : {files: ['*'], extensions: ['html']}})
12 |
13 | const fileProperties = []
14 |
15 | files.forEach(file => {
16 | tl.debug(`Reading report ${file}`)
17 | const fileContent = readFileSync(file).toString()
18 | const document = load(fileContent)
19 | writeFileSync(file, document.html())
20 |
21 | const attachmentProperties = {
22 | name: generateName(basename(file)),
23 | type: 'report-html'
24 | }
25 |
26 | fileProperties.push(attachmentProperties)
27 | tl.command('task.addattachment', attachmentProperties, file)
28 |
29 | })
30 |
31 | const jobName = dashify(tl.getVariable('Agent.JobName'))
32 | const stageName = dashify(tl.getVariable('System.StageDisplayName'))
33 | const stageAttempt = tl.getVariable('System.StageAttempt')
34 | const tabName = tl.getInput('tabName', false ) || 'Html-Report'
35 | const summaryPath = resolve(reportDir)
36 | writeFileSync(summaryPath, JSON.stringify(fileProperties))
37 | console.log(summaryPath)
38 | tl.addAttachment('report-html', `${tabName}.${jobName}.${stageName}.${stageAttempt}`, summaryPath)
39 | }
40 | function generateName (fileName) {
41 | const jobName = dashify(tl.getVariable('Agent.JobName'))
42 | const stageName = dashify(tl.getVariable('System.StageDisplayName'))
43 | const stageAttempt = tl.getVariable('System.StageAttempt')
44 | const tabName = tl.getInput('tabName', false ) || 'Html-Report'
45 |
46 | return `${tabName}.${jobName}.${stageName}.${stageAttempt}.${fileName}`
47 | }
48 |
49 | try {
50 | let reportDir = tl.getPathInput('reportDir', true, true);
51 | const jobName = dashify(tl.getVariable('Agent.JobName'))
52 | const stageName = dashify(tl.getVariable('System.StageDisplayName'))
53 | const stageAttempt = tl.getVariable('System.StageAttempt')
54 | const tabName = tl.getInput('tabName', false ) || 'Html-Report'
55 | let path = resolve(reportDir)
56 | console.log(path)
57 | tl.addAttachment('report-html', `${tabName}.${jobName}.${stageName}.${stageAttempt}`, path)
58 | } catch (error) {
59 | tl.setResult(tl.TaskResult.SucceededWithIssues, error.message);
60 | }
--------------------------------------------------------------------------------
/azure-pipelines.yaml:
--------------------------------------------------------------------------------
1 | steps:
2 | - task: NodeTool@0
3 | inputs:
4 | versionSpec: '12.x'
5 |
6 | - task: Npm@1
7 | displayName: 'NPM: Install Task Dependencies'
8 | inputs:
9 | workingDir: PublishHtmlReport
10 | verbose: false
11 |
12 | - task: Npm@1
13 | displayName: 'npm install extension'
14 | inputs:
15 | workingDir: .
16 | verbose: false
17 |
18 | - task: Npm@1
19 | displayName: 'build extension'
20 | inputs:
21 | command: custom
22 | workingDir: .
23 | verbose: false
24 | customCommand: 'run build:cidev'
25 |
26 | - task: PackageAzureDevOpsExtension@2
27 | displayName: 'TFX: Package Extension Prod'
28 | inputs:
29 | rootFolder: .
30 | patternManifest: 'azure-devops-extension.json'
31 | publisherId: JakubRumpca
32 | extensionId: azure-pipelines-html-report
33 | extensionName: 'Html Viewer'
34 | extensionVisibility: public
35 | extensionPricing: free
36 | condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'main'))
37 |
38 | - task: PackageAzureDevOpsExtension@2
39 | displayName: 'TFX: Package Extension Dev'
40 | inputs:
41 | rootFolder: .
42 | patternManifest: 'azure-devops-extension.json'
43 | publisherId: JakubRumpca
44 | extensionId: azure-pipelines-html-report
45 | extensionTag: dev
46 | extensionName: 'Html Viewer Dev'
47 | extensionVersion: '1.0.$(Build.BuildId)'
48 | updateTasksVersion: true
49 | extensionVisibility: private
50 | extensionPricing: free
51 | condition: and(succeeded(), ne(variables['Build.SourceBranchName'], 'main'))
52 |
53 | - task: PublishAzureDevOpsExtension@2
54 | displayName: 'TFX: Publish Extension Dev'
55 | inputs:
56 | connectedServiceName: JakubMarketPlace
57 | rootFolder: .
58 | patternManifest: 'azure-devops-extension.json'
59 | publisherId: JakubRumpca
60 | extensionId: azure-pipelines-html-report
61 | extensionTag: dev
62 | extensionName: 'Html Viewer Dev'
63 | extensionVersion: '1.0.$(Build.BuildId)'
64 | extensionVisibility: private
65 | extensionPricing: free
66 | condition: and(succeeded(), ne(variables['Build.SourceBranchName'], 'main'))
67 |
68 | - task: ShareAzureDevOpsExtension@2
69 | displayName: 'TFX: Share Extension'
70 | inputs:
71 | connectedServiceName: JakubMarketPlace
72 | method: vsix
73 | vsixFile: '**.vsix'
74 | accounts: 'maciejmaciejewski-dev'
75 | condition: and(succeeded(), ne(variables['Build.SourceBranchName'], 'main'))
76 |
77 | - task: CopyFiles@2
78 | displayName: 'Copy Files'
79 | inputs:
80 | SourceFolder: '$(System.DefaultWorkingDirectory)'
81 | Contents: '**.vsix'
82 | TargetFolder: '$(Build.ArtifactStagingDirectory)/results'
83 | condition: succeededOrFailed()
84 |
85 | - task: PublishBuildArtifacts@1
86 | displayName: 'Publish Artifact'
87 | inputs:
88 | PathtoPublish: '$(Build.ArtifactStagingDirectory)/results'
89 | condition: succeededOrFailed()
90 |
--------------------------------------------------------------------------------
/src/tabContent.tsx:
--------------------------------------------------------------------------------
1 | import "./tabContent.scss"
2 |
3 | import * as React from "react"
4 | import * as ReactDOM from "react-dom"
5 | import * as SDK from "azure-devops-extension-sdk"
6 |
7 | import { getClient } from "azure-devops-extension-api"
8 | import { Build, BuildRestClient, Attachment } from "azure-devops-extension-api/Build"
9 |
10 | import { ObservableValue, ObservableObject } from "azure-devops-ui/Core/Observable"
11 | import { Observer } from "azure-devops-ui/Observer"
12 | import { Tab, TabBar, TabSize } from "azure-devops-ui/Tabs"
13 |
14 |
15 | const ATTACHMENT_TYPE = "report-html";
16 |
17 | SDK.init()
18 | SDK.ready().then(() => {
19 | try {
20 | const config = SDK.getConfiguration()
21 | config.onBuildChanged((build: Build) => {
22 | let buildAttachmentClient = new BuildAttachmentClient(build)
23 | buildAttachmentClient.init().then(() => {
24 | displayReports(buildAttachmentClient)
25 | }).catch(error => {throw new Error(error)})
26 | })
27 | } catch(error) {
28 | throw new Error(error)
29 | }
30 | })
31 |
32 | function displayReports(attachmentClient: AttachmentClient) {
33 | ReactDOM.render(, document.getElementById("html-report-extention-container"))
34 | }
35 |
36 | abstract class AttachmentClient {
37 | protected attachments: Attachment[] = []
38 | protected authHeaders: Object = undefined
39 | protected reportHtmlContent: string = undefined
40 | constructor() {}
41 |
42 | public getAttachments() : Attachment[] {
43 | return this.attachments
44 | }
45 |
46 | public getDownloadableAttachment(attachmentName: string): Attachment {
47 | const attachment = this.attachments.find((attachment) => { return attachment.name === attachmentName})
48 | if (!(attachment && attachment._links && attachment._links.self && attachment._links.self.href)) {
49 | throw new Error("Attachment " + attachmentName + " is not downloadable")
50 | }
51 | return attachment
52 | }
53 |
54 | public async getAttachmentContent(attachmentName: string): Promise {
55 | if (this.authHeaders === undefined) {
56 | console.log('Get access token')
57 | const accessToken = await SDK.getAccessToken()
58 | const b64encodedAuth = Buffer.from(':' + accessToken).toString('base64')
59 | this.authHeaders = { headers: {'Authorization': 'Basic ' + b64encodedAuth} }
60 | }
61 | console.log("Get " + attachmentName + " attachment content")
62 | const attachment = this.getDownloadableAttachment(attachmentName)
63 | const response = await fetch(attachment._links.self.href, this.authHeaders)
64 | if (!response.ok) {
65 | throw new Error(response.statusText)
66 | }
67 | const responseText = await response.text()
68 | console.log(responseText)
69 | return responseText
70 | }
71 |
72 | }
73 |
74 | class BuildAttachmentClient extends AttachmentClient {
75 | private build: Build
76 |
77 | constructor(build: Build) {
78 | super()
79 | this.build = build
80 | }
81 |
82 | public async init() {
83 | const buildClient: BuildRestClient = getClient(BuildRestClient)
84 | this.attachments = await buildClient.getAttachments(this.build.project.id, this.build.id, ATTACHMENT_TYPE)
85 | console.log(this.attachments)
86 | }
87 | }
88 |
89 |
90 | interface TaskAttachmentPanelProps {
91 | attachmentClient: AttachmentClient
92 | }
93 |
94 | export default class TaskAttachmentPanel extends React.Component {
95 | private selectedTabId: ObservableValue
96 | private tabContents: ObservableObject
97 | private tabInitialContent: string = ''
98 |
99 | constructor(props: TaskAttachmentPanelProps) {
100 | super(props);
101 | this.selectedTabId = new ObservableValue(props.attachmentClient.getAttachments()[0].name)
102 | this.tabContents = new ObservableObject()
103 | }
104 |
105 | public escapeHTML(str: string) {
106 | return str.replace(/[&<>'"]/g, tag => ({
107 | '&': '&',
108 | '<': '<',
109 | '>': '>',
110 | "'": ''',
111 | '"': '"'
112 | }[tag] || tag))
113 | }
114 |
115 | public render() {
116 | const attachments = this.props.attachmentClient.getAttachments()
117 | if (attachments.length == 0) {
118 | return (null)
119 | } else {
120 | const tabs = []
121 | for (const attachment of attachments) {
122 | const metadata = attachment.name.split('.')
123 | // Conditionally add counter for multistage pipeline
124 | const name = metadata[2] !== '__default' ? `${metadata[2]} #${metadata[3]}` : metadata[0]
125 |
126 | tabs.push()
127 | this.tabContents.add(attachment.name, this.tabInitialContent)
128 | }
129 | return (
130 |
131 | { attachments.length > 0 ?
132 |
136 | {tabs}
137 |
138 | : null }
139 |
140 | {(props: { selectedTabId: string }) => {
141 | if ( this.tabContents.get(props.selectedTabId) === this.tabInitialContent) {
142 | this.props.attachmentClient.getAttachmentContent(props.selectedTabId).then((content) => {
143 | this.tabContents.set(props.selectedTabId, '')
144 | })
145 | }
146 | return
147 | }}
148 |
149 |
150 | );
151 | }
152 | }
153 |
154 | private onSelectedTabChanged = (newTabId: string) => {
155 | this.selectedTabId.value = newTabId;
156 | }
157 | }
158 |
159 |
160 |
161 |
--------------------------------------------------------------------------------
/PublishHtmlReport/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "publish-html-report",
3 | "version": "1.0.8",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@nodelib/fs.scandir": {
8 | "version": "2.1.3",
9 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
10 | "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==",
11 | "requires": {
12 | "@nodelib/fs.stat": "2.0.3",
13 | "run-parallel": "^1.1.9"
14 | }
15 | },
16 | "@nodelib/fs.stat": {
17 | "version": "2.0.3",
18 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz",
19 | "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA=="
20 | },
21 | "@nodelib/fs.walk": {
22 | "version": "1.2.4",
23 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz",
24 | "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==",
25 | "requires": {
26 | "@nodelib/fs.scandir": "2.1.3",
27 | "fastq": "^1.6.0"
28 | }
29 | },
30 | "array-union": {
31 | "version": "2.1.0",
32 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/array-union/-/array-union-2.1.0.tgz",
33 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
34 | },
35 | "asap": {
36 | "version": "2.0.6",
37 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/asap/-/asap-2.0.6.tgz",
38 | "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
39 | },
40 | "azure-pipelines-task-lib": {
41 | "version": "2.11.3",
42 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/azure-pipelines-task-lib/-/azure-pipelines-task-lib-2.11.3.tgz",
43 | "integrity": "sha512-gXops6Npkloh7AKPIvptx0KY1kdf1yd+BFdp/ksnbyW7CS3uXzBQXU1Dermr7A895TrOd02PI6hmsL8cBlePNA==",
44 | "requires": {
45 | "minimatch": "3.0.4",
46 | "mockery": "^1.7.0",
47 | "q": "^1.1.2",
48 | "semver": "^5.1.0",
49 | "shelljs": "^0.3.0",
50 | "sync-request": "3.0.1",
51 | "uuid": "^3.0.1"
52 | }
53 | },
54 | "balanced-match": {
55 | "version": "1.0.0",
56 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/balanced-match/-/balanced-match-1.0.0.tgz",
57 | "integrity": "sha512-9Y0g0Q8rmSt+H33DfKv7FOc3v+iRI+o1lbzt8jGcIosYW37IIW/2XVYq5NPdmaD5NQ59Nk26Kl/vZbwW9Fr8vg=="
58 | },
59 | "boolbase": {
60 | "version": "1.0.0",
61 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/boolbase/-/boolbase-1.0.0.tgz",
62 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
63 | },
64 | "brace-expansion": {
65 | "version": "1.1.11",
66 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/brace-expansion/-/brace-expansion-1.1.11.tgz",
67 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
68 | "requires": {
69 | "balanced-match": "^1.0.0",
70 | "concat-map": "0.0.1"
71 | }
72 | },
73 | "braces": {
74 | "version": "3.0.2",
75 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/braces/-/braces-3.0.2.tgz",
76 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
77 | "requires": {
78 | "fill-range": "^7.0.1"
79 | }
80 | },
81 | "buffer-from": {
82 | "version": "1.1.1",
83 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/buffer-from/-/buffer-from-1.1.1.tgz",
84 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
85 | },
86 | "caseless": {
87 | "version": "0.11.0",
88 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/caseless/-/caseless-0.11.0.tgz",
89 | "integrity": "sha512-ODLXH644w9C2fMPAm7bMDQ3GRvipZWZfKc+8As6hIadRIelE0n0xZuN38NS6kiK3KPEVrpymmQD8bvncAHWQkQ=="
90 | },
91 | "cheerio": {
92 | "version": "1.0.0-rc.5",
93 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/cheerio/-/cheerio-1.0.0-rc.5.tgz",
94 | "integrity": "sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw==",
95 | "requires": {
96 | "cheerio-select-tmp": "^0.1.0",
97 | "dom-serializer": "~1.2.0",
98 | "domhandler": "^4.0.0",
99 | "entities": "~2.1.0",
100 | "htmlparser2": "^6.0.0",
101 | "parse5": "^6.0.0",
102 | "parse5-htmlparser2-tree-adapter": "^6.0.0"
103 | }
104 | },
105 | "cheerio-select-tmp": {
106 | "version": "0.1.1",
107 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz",
108 | "integrity": "sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ==",
109 | "requires": {
110 | "css-select": "^3.1.2",
111 | "css-what": "^4.0.0",
112 | "domelementtype": "^2.1.0",
113 | "domhandler": "^4.0.0",
114 | "domutils": "^2.4.4"
115 | }
116 | },
117 | "concat-map": {
118 | "version": "0.0.1",
119 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/concat-map/-/concat-map-0.0.1.tgz",
120 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
121 | },
122 | "concat-stream": {
123 | "version": "1.6.2",
124 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/concat-stream/-/concat-stream-1.6.2.tgz",
125 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
126 | "requires": {
127 | "buffer-from": "^1.0.0",
128 | "inherits": "^2.0.3",
129 | "readable-stream": "^2.2.2",
130 | "typedarray": "^0.0.6"
131 | }
132 | },
133 | "core-util-is": {
134 | "version": "1.0.2",
135 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/core-util-is/-/core-util-is-1.0.2.tgz",
136 | "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
137 | },
138 | "css-select": {
139 | "version": "3.1.2",
140 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/css-select/-/css-select-3.1.2.tgz",
141 | "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==",
142 | "requires": {
143 | "boolbase": "^1.0.0",
144 | "css-what": "^4.0.0",
145 | "domhandler": "^4.0.0",
146 | "domutils": "^2.4.3",
147 | "nth-check": "^2.0.0"
148 | }
149 | },
150 | "css-what": {
151 | "version": "4.0.0",
152 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/css-what/-/css-what-4.0.0.tgz",
153 | "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A=="
154 | },
155 | "dashify": {
156 | "version": "2.0.0",
157 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/dashify/-/dashify-2.0.0.tgz",
158 | "integrity": "sha512-hpA5C/YrPjucXypHPPc0oJ1l9Hf6wWbiOL7Ik42cxnsUOhWiCB/fylKbKqqJalW9FgkNQCw16YO8uW9Hs0Iy1A=="
159 | },
160 | "dir-glob": {
161 | "version": "3.0.1",
162 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/dir-glob/-/dir-glob-3.0.1.tgz",
163 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
164 | "requires": {
165 | "path-type": "^4.0.0"
166 | }
167 | },
168 | "dom-serializer": {
169 | "version": "1.2.0",
170 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/dom-serializer/-/dom-serializer-1.2.0.tgz",
171 | "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==",
172 | "requires": {
173 | "domelementtype": "^2.0.1",
174 | "domhandler": "^4.0.0",
175 | "entities": "^2.0.0"
176 | }
177 | },
178 | "domelementtype": {
179 | "version": "2.1.0",
180 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/domelementtype/-/domelementtype-2.1.0.tgz",
181 | "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
182 | },
183 | "domhandler": {
184 | "version": "4.0.0",
185 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/domhandler/-/domhandler-4.0.0.tgz",
186 | "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
187 | "requires": {
188 | "domelementtype": "^2.1.0"
189 | }
190 | },
191 | "domutils": {
192 | "version": "2.4.4",
193 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/domutils/-/domutils-2.4.4.tgz",
194 | "integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==",
195 | "requires": {
196 | "dom-serializer": "^1.0.1",
197 | "domelementtype": "^2.0.1",
198 | "domhandler": "^4.0.0"
199 | }
200 | },
201 | "entities": {
202 | "version": "2.1.0",
203 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/entities/-/entities-2.1.0.tgz",
204 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
205 | },
206 | "fast-glob": {
207 | "version": "3.2.4",
208 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/fast-glob/-/fast-glob-3.2.4.tgz",
209 | "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
210 | "requires": {
211 | "@nodelib/fs.stat": "^2.0.2",
212 | "@nodelib/fs.walk": "^1.2.3",
213 | "glob-parent": "^5.1.0",
214 | "merge2": "^1.3.0",
215 | "micromatch": "^4.0.2",
216 | "picomatch": "^2.2.1"
217 | }
218 | },
219 | "fastq": {
220 | "version": "1.9.0",
221 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/fastq/-/fastq-1.9.0.tgz",
222 | "integrity": "sha512-i7FVWL8HhVY+CTkwFxkN2mk3h+787ixS5S63eb78diVRc1MCssarHq3W5cj0av7YDSwmaV928RNag+U1etRQ7w==",
223 | "requires": {
224 | "reusify": "^1.0.4"
225 | }
226 | },
227 | "fill-range": {
228 | "version": "7.0.1",
229 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/fill-range/-/fill-range-7.0.1.tgz",
230 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
231 | "requires": {
232 | "to-regex-range": "^5.0.1"
233 | }
234 | },
235 | "fs": {
236 | "version": "0.0.2",
237 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/fs/-/fs-0.0.2.tgz",
238 | "integrity": "sha512-YAiVokMCrSIFZiroB1oz51hPiPRVcUtSa4x2U5RYXyhS9VAPdiFigKbPTnOSq7XY8wd3FIVPYmXpo5lMzFmxgg=="
239 | },
240 | "fs-extra": {
241 | "version": "8.1.0",
242 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/fs-extra/-/fs-extra-8.1.0.tgz",
243 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
244 | "requires": {
245 | "graceful-fs": "^4.2.0",
246 | "jsonfile": "^4.0.0",
247 | "universalify": "^0.1.0"
248 | }
249 | },
250 | "glob-parent": {
251 | "version": "5.1.1",
252 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/glob-parent/-/glob-parent-5.1.1.tgz",
253 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
254 | "requires": {
255 | "is-glob": "^4.0.1"
256 | }
257 | },
258 | "globby": {
259 | "version": "11.0.1",
260 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/globby/-/globby-11.0.1.tgz",
261 | "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==",
262 | "requires": {
263 | "array-union": "^2.1.0",
264 | "dir-glob": "^3.0.1",
265 | "fast-glob": "^3.1.1",
266 | "ignore": "^5.1.4",
267 | "merge2": "^1.3.0",
268 | "slash": "^3.0.0"
269 | }
270 | },
271 | "graceful-fs": {
272 | "version": "4.2.4",
273 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/graceful-fs/-/graceful-fs-4.2.4.tgz",
274 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
275 | },
276 | "hat": {
277 | "version": "0.0.3",
278 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/hat/-/hat-0.0.3.tgz",
279 | "integrity": "sha512-zpImx2GoKXy42fVDSEad2BPKuSQdLcqsCYa48K3zHSzM/ugWuYjLDr8IXxpVuL7uCLHw56eaiLxCRthhOzf5ug=="
280 | },
281 | "htmlparser2": {
282 | "version": "6.0.0",
283 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/htmlparser2/-/htmlparser2-6.0.0.tgz",
284 | "integrity": "sha512-numTQtDZMoh78zJpaNdJ9MXb2cv5G3jwUoe3dMQODubZvLoGvTE/Ofp6sHvH8OGKcN/8A47pGLi/k58xHP/Tfw==",
285 | "requires": {
286 | "domelementtype": "^2.0.1",
287 | "domhandler": "^4.0.0",
288 | "domutils": "^2.4.4",
289 | "entities": "^2.0.0"
290 | }
291 | },
292 | "http-basic": {
293 | "version": "2.5.1",
294 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/http-basic/-/http-basic-2.5.1.tgz",
295 | "integrity": "sha1-jORHvbW2xXf4pj4/p4BW7Eu02/s=",
296 | "requires": {
297 | "caseless": "~0.11.0",
298 | "concat-stream": "^1.4.6",
299 | "http-response-object": "^1.0.0"
300 | }
301 | },
302 | "http-response-object": {
303 | "version": "1.1.0",
304 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/http-response-object/-/http-response-object-1.1.0.tgz",
305 | "integrity": "sha1-p8TnWq6C87tJBOT0P2FWc7TVGMM="
306 | },
307 | "ignore": {
308 | "version": "5.1.8",
309 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/ignore/-/ignore-5.1.8.tgz",
310 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
311 | },
312 | "inherits": {
313 | "version": "2.0.4",
314 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/inherits/-/inherits-2.0.4.tgz",
315 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
316 | },
317 | "is-extglob": {
318 | "version": "2.1.1",
319 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/is-extglob/-/is-extglob-2.1.1.tgz",
320 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
321 | },
322 | "is-glob": {
323 | "version": "4.0.1",
324 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/is-glob/-/is-glob-4.0.1.tgz",
325 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
326 | "requires": {
327 | "is-extglob": "^2.1.1"
328 | }
329 | },
330 | "is-number": {
331 | "version": "7.0.0",
332 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/is-number/-/is-number-7.0.0.tgz",
333 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
334 | },
335 | "isarray": {
336 | "version": "1.0.0",
337 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/isarray/-/isarray-1.0.0.tgz",
338 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
339 | },
340 | "jsonfile": {
341 | "version": "4.0.0",
342 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/jsonfile/-/jsonfile-4.0.0.tgz",
343 | "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
344 | "requires": {
345 | "graceful-fs": "^4.1.6"
346 | }
347 | },
348 | "merge2": {
349 | "version": "1.4.1",
350 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/merge2/-/merge2-1.4.1.tgz",
351 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
352 | },
353 | "micromatch": {
354 | "version": "4.0.2",
355 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/micromatch/-/micromatch-4.0.2.tgz",
356 | "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
357 | "requires": {
358 | "braces": "^3.0.1",
359 | "picomatch": "^2.0.5"
360 | }
361 | },
362 | "minimatch": {
363 | "version": "3.0.4",
364 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/minimatch/-/minimatch-3.0.4.tgz",
365 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
366 | "requires": {
367 | "brace-expansion": "^1.1.7"
368 | }
369 | },
370 | "mockery": {
371 | "version": "1.7.0",
372 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/mockery/-/mockery-1.7.0.tgz",
373 | "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8="
374 | },
375 | "nth-check": {
376 | "version": "2.0.0",
377 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/nth-check/-/nth-check-2.0.0.tgz",
378 | "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==",
379 | "requires": {
380 | "boolbase": "^1.0.0"
381 | }
382 | },
383 | "parse5": {
384 | "version": "6.0.1",
385 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/parse5/-/parse5-6.0.1.tgz",
386 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
387 | },
388 | "parse5-htmlparser2-tree-adapter": {
389 | "version": "6.0.1",
390 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
391 | "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
392 | "requires": {
393 | "parse5": "^6.0.1"
394 | }
395 | },
396 | "path-type": {
397 | "version": "4.0.0",
398 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/path-type/-/path-type-4.0.0.tgz",
399 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
400 | },
401 | "picomatch": {
402 | "version": "2.2.2",
403 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/picomatch/-/picomatch-2.2.2.tgz",
404 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
405 | },
406 | "process-nextick-args": {
407 | "version": "2.0.1",
408 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
409 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
410 | },
411 | "promise": {
412 | "version": "7.3.1",
413 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/promise/-/promise-7.3.1.tgz",
414 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
415 | "requires": {
416 | "asap": "~2.0.3"
417 | }
418 | },
419 | "q": {
420 | "version": "1.5.1",
421 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/q/-/q-1.5.1.tgz",
422 | "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
423 | },
424 | "qs": {
425 | "version": "6.9.4",
426 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/qs/-/qs-6.9.4.tgz",
427 | "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
428 | },
429 | "readable-stream": {
430 | "version": "2.3.7",
431 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/readable-stream/-/readable-stream-2.3.7.tgz",
432 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
433 | "requires": {
434 | "core-util-is": "~1.0.0",
435 | "inherits": "~2.0.3",
436 | "isarray": "~1.0.0",
437 | "process-nextick-args": "~2.0.0",
438 | "safe-buffer": "~5.1.1",
439 | "string_decoder": "~1.1.1",
440 | "util-deprecate": "~1.0.1"
441 | }
442 | },
443 | "reusify": {
444 | "version": "1.0.4",
445 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/reusify/-/reusify-1.0.4.tgz",
446 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
447 | },
448 | "run-parallel": {
449 | "version": "1.1.10",
450 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/run-parallel/-/run-parallel-1.1.10.tgz",
451 | "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw=="
452 | },
453 | "safe-buffer": {
454 | "version": "5.1.2",
455 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/safe-buffer/-/safe-buffer-5.1.2.tgz",
456 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
457 | },
458 | "semver": {
459 | "version": "5.7.1",
460 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/semver/-/semver-5.7.1.tgz",
461 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
462 | },
463 | "shelljs": {
464 | "version": "0.3.0",
465 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/shelljs/-/shelljs-0.3.0.tgz",
466 | "integrity": "sha512-Ny0KN4dyT8ZSCE0frtcbAJGoM/HTArpyPkeli1/00aYfm0sbD/Gk/4x7N2DP9QKGpBsiQH7n6rpm1L79RtviEQ=="
467 | },
468 | "slash": {
469 | "version": "3.0.0",
470 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/slash/-/slash-3.0.0.tgz",
471 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
472 | },
473 | "string_decoder": {
474 | "version": "1.1.1",
475 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/string_decoder/-/string_decoder-1.1.1.tgz",
476 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
477 | "requires": {
478 | "safe-buffer": "~5.1.0"
479 | }
480 | },
481 | "sync-request": {
482 | "version": "3.0.1",
483 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/sync-request/-/sync-request-3.0.1.tgz",
484 | "integrity": "sha1-yqEjWq+Im6UBB2oYNMQ2gwqC+3M=",
485 | "requires": {
486 | "concat-stream": "^1.4.7",
487 | "http-response-object": "^1.0.1",
488 | "then-request": "^2.0.1"
489 | }
490 | },
491 | "then-request": {
492 | "version": "2.2.0",
493 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/then-request/-/then-request-2.2.0.tgz",
494 | "integrity": "sha1-ZnizL6DKIY/laZgbvYhxtZQGDYE=",
495 | "requires": {
496 | "caseless": "~0.11.0",
497 | "concat-stream": "^1.4.7",
498 | "http-basic": "^2.5.1",
499 | "http-response-object": "^1.1.0",
500 | "promise": "^7.1.1",
501 | "qs": "^6.1.0"
502 | }
503 | },
504 | "to-regex-range": {
505 | "version": "5.0.1",
506 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/to-regex-range/-/to-regex-range-5.0.1.tgz",
507 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
508 | "requires": {
509 | "is-number": "^7.0.0"
510 | }
511 | },
512 | "typedarray": {
513 | "version": "0.0.6",
514 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/typedarray/-/typedarray-0.0.6.tgz",
515 | "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
516 | },
517 | "universalify": {
518 | "version": "0.1.2",
519 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/universalify/-/universalify-0.1.2.tgz",
520 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
521 | },
522 | "util-deprecate": {
523 | "version": "1.0.2",
524 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/util-deprecate/-/util-deprecate-1.0.2.tgz",
525 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
526 | },
527 | "uuid": {
528 | "version": "3.4.0",
529 | "resolved": "https://alm-npmjs/nexus/repository/npm_group/uuid/-/uuid-3.4.0.tgz",
530 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
531 | }
532 | }
533 | }
534 |
--------------------------------------------------------------------------------