build: publish docs-content bazel artifacts (#14634)

This commit is contained in:
Paul Gschwendtner
2019-01-16 04:55:24 +01:00
committed by vivian-hu
parent 5773a5b694
commit 2307489dff
10 changed files with 62 additions and 510 deletions
+1 -1
View File
@@ -40,7 +40,7 @@ test --experimental_ui
# Configures script to do version stamping.
# See https://docs.bazel.build/versions/master/user-manual.html#flag--workspace_status_command
build:release --workspace_status_command=./tools/bazel-stamp-vars.sh
build:release --workspace_status_command="node ./tools/bazel-stamp-vars.js"
###############################
# Typescript / Angular / Sass #
+9 -7
View File
@@ -63,7 +63,7 @@ var_9: &docker-firefox-image
# https://circleci.com/docs/2.0/workflows/#using-workspaces-to-share-data-among-jobs
var_10: &attach_release_output
attach_workspace:
at: dist/releases
at: dist/
# Branch filter that we can specify for jobs that should only run on publish branches. This filter
@@ -250,9 +250,9 @@ jobs:
# Store the release output in the workspace storage. This means that other jobs
# in the same workflow can attach the release output to their job.
- persist_to_workspace:
root: dist/releases
root: dist
paths:
- "**/*"
- "releases/**/*"
# Since there is no UMD bundle that includes everything from the CDK, we need to move
# all bundles into a directory. This allows us to store all CDK UMD bundles as job
@@ -293,6 +293,9 @@ jobs:
# to publish the build snapshots. In order to fix this, we unset the global option.
- run: git config --global --unset "url.ssh://git@github.com.insteadof"
# TODO(devversion): Ideally the "build_release_packages" job should build all packages with
# Bazel, but for now we mix up the Gulp and bazel setup, so we need to build the package here.
- run: bazel build src/material-examples:npm_package --config=release
- run: ./scripts/circleci/publish-snapshots.sh
@@ -320,9 +323,7 @@ jobs:
workflows:
version: 2
# Build and test workflow. A workflow includes multiple jobs that run in parallel. All jobs
# that build and test source code should be part of this workflow
build_and_test:
bazel_targets:
jobs:
- bazel_build_test:
filters: *ignore_presubmit_branch_filter
@@ -347,7 +348,8 @@ workflows:
release_output:
jobs:
- build_release_packages
- build_release_packages:
filters: *ignore_presubmit_branch_filter
- build_devapp_aot:
filters: *ignore_presubmit_branch_filter
requires:
-7
View File
@@ -19,8 +19,6 @@
"e2e": "gulp e2e",
"deploy": "gulp deploy:devapp",
"webdriver-manager": "webdriver-manager",
"docs": "gulp docs",
"api": "gulp api-docs",
"breaking-changes": "gulp breaking-changes",
"gulp": "gulp",
"stage-release": "ts-node --project tools/release/ tools/release/stage-release.ts",
@@ -92,15 +90,10 @@
"gulp-clean": "^0.3.2",
"gulp-clean-css": "^3.3.1",
"gulp-cli": "^2.0.1",
"gulp-dom": "^0.9.17",
"gulp-flatten": "^0.3.1",
"gulp-highlight-files": "^0.0.5",
"gulp-htmlmin": "^3.0.0",
"gulp-if": "^2.0.2",
"gulp-markdown": "^1.2.0",
"gulp-rename": "^1.2.2",
"gulp-sass": "^4.0.2",
"gulp-transform": "^2.0.0",
"gulp-util": "^3.0.8",
"hammerjs": "^2.0.8",
"highlight.js": "^9.11.0",
-3
View File
@@ -10,9 +10,6 @@ cd $(dirname ${0})/../..
# fetched from the CircleCI workspace storage.
./scripts/deploy/publish-build-artifacts.sh --no-build
# Build the docs output before publishing the docs content.
yarn gulp docs
# Deploy the docs content to the Github repository. We don't want to build the examples
# package here again because it's already fetched from the CircleCI workspace storage.
./scripts/deploy/publish-docs-content.sh --no-build
+6 -32
View File
@@ -14,11 +14,6 @@ if [ -z ${MATERIAL2_BUILDS_TOKEN} ]; then
exit 1
fi
if [[ ! ${*} == *--no-build* ]]; then
$(npm bin)/gulp material-examples:build-release:clean
$(npm bin)/gulp docs
fi
# Path to the project directory.
projectPath="$(pwd)"
@@ -28,8 +23,8 @@ docsDistPath="${projectPath}/dist/docs"
# Path to the cloned docs-content repository.
docsContentPath="${projectPath}/tmp/material2-docs-content"
# Path to the release output of the @angular/material-examples package.
examplesPackagePath="${projectPath}/dist/releases/material-examples"
# Path to the release output of the Bazel "@angular/material-examples" NPM package.
examplesPackagePath="$(bazel info bazel-bin)/src/material-examples/npm_package"
# Git clone URL for the material2-docs-content repository.
docsContentRepoUrl="https://github.com/angular/material2-docs-content"
@@ -79,33 +74,12 @@ fi
# Remove everything inside of the docs-content repository.
rm -Rf ${docsContentPath}/*
echo "Removed everything from the docs-content repository. Copying all files into repository.."
echo "Removed everything from the docs-content repository. Copying package output.."
# Create all folders that need to exist in the docs-content repository.
mkdir ${docsContentPath}/{overview,guides,api,examples,stackblitz,examples-package}
# Copy the package output to the docs-content repository.
cp -R ${examplesPackagePath}/* ${docsContentPath}
# Copy API and example files to the docs-content repository.
cp -R ${docsDistPath}/api/* ${docsContentPath}/api
cp -r ${docsDistPath}/examples/* ${docsContentPath}/examples
cp -r ${docsDistPath}/stackblitz/* ${docsContentPath}/stackblitz
# Copy the @angular/material-examples package to the docs-content repository.
cp -r ${examplesPackagePath}/* ${docsContentPath}/examples-package
# Copy the license file to the docs-content repository.
cp ${projectPath}/LICENSE ${docsContentPath}
# Copy all immediate children of the markdown output the guides/ directory.
for guidePath in $(find ${docsDistPath}/markdown/ -maxdepth 1 -type f); do
cp ${guidePath} ${docsContentPath}/guides
done
# All files that aren't immediate children of the markdown output are overview documents.
for overviewPath in $(find ${docsDistPath}/markdown/ -mindepth 2 -type f); do
cp ${overviewPath} ${docsContentPath}/overview
done
echo "Successfully copied all content into the docs-content repository."
echo "Successfully copied package output into the docs-content repository."
if [[ $(git ls-remote origin "refs/tags/${buildTagName}") ]]; then
echo "Skipping publish of docs-content because tag is already published. Exiting.."
+38
View File
@@ -0,0 +1,38 @@
#!/usr/bin/env node
/**
* Bazel workspace status script that is responsible for creating Bazel stamping variables.
* The stamping variables will be used by the NodeJS Bazel rules to provide proper version
* placeholder replacements. Read more about variable stamping within Bazel:
* https://docs.bazel.build/versions/master/user-manual.html#flag--workspace_status_command
*/
const spawnSync = require('child_process').spawnSync;
const packageJson = require('../package');
const currentCommitSha = getCurrentCommitSha();
// The "BUILD_SCM_VERSION" will be picked up by the "npm_package" and "ng_package" rule
// in order to replace the "0.0.0-PLACEHOLDER" with a proper version
console.log(`BUILD_SCM_VERSION ${packageJson.version}-${currentCommitSha.substr(0, 7)}`);
console.log(`BUILD_SCM_COMMIT_SHA ${currentCommitSha}`);
console.log(`BUILD_SCM_BRANCH ${getCurrentBranchName()}`);
console.log(`BUILD_SCM_USER ${getCurrentGitUser()}`);
/** Returns the commit SHA for the current git HEAD of the project. */
function getCurrentCommitSha() {
return spawnSync('git', ['rev-parse', 'HEAD']).stdout.toString().trim();
}
/** Returns the name of the currently checked out branch of the project. */
function getCurrentBranchName() {
return spawnSync('git', ['symbolic-ref', '--short', 'HEAD']).stdout.toString().trim();
}
/** Returns the name and email of the Git user that creates this release build. */
function getCurrentGitUser() {
const userName = spawnSync('git', ['config', 'user.name']).stdout.toString().trim();
const userEmail = spawnSync('git', ['config', 'user.email']).stdout.toString().trim();
return `${userName} <${userEmail}>`;
}
-43
View File
@@ -1,43 +0,0 @@
#!/usr/bin/env bash
# Generates the data used by the stamping feature in bazel.
# This script is intended to be used as a Bazel workspace_status_command, which
# prints out a set of key-value pairs.
# See https://github.com/angular/angular/blob/master/docs/BAZEL.md for more explanation
set -u -e -E -o pipefail
function onError {
echo "Failed to execute: $0"
echo ""
}
# Setup crash trap
trap 'onError' ERR
if [[ "$(git tag)" == "" ]]; then
echo "No git tags found, can't stamp the build."
echo "Either fetch the tags:"
echo " git fetch git@github.com:angular/material2.git --tags"
echo "or build without stamping by giving an empty workspace_status_command:"
echo " bazel build --workspace_status_command= ..."
echo ""
fi
# Gets a human-readable name for HEAD, e.g. "6.0.0-rc.0-15-g846ddfa"
git_version_raw=$(git describe --abbrev=7 --tags HEAD)
# Find out if there are any uncommitted local changes
if [[ $(git status --untracked-files=no --porcelain) ]]; then
local_changes_suffix=".with-local-changes";
else
local_changes_suffix="";
fi
# Reformat `git describe` version string into a more semver-ish string
# From: 5.2.0-rc.0-57-g757f886
# To: 5.2.0-rc.0+57.sha-757f886
# Or: 5.2.0-rc.0+57.sha-757f886.with-local-changes
semver_style_version="$(echo ${git_version_raw} | sed -E 's/-([0-9]+)-g/+\1.sha-/g')"
version_stamp="${semver_style_version}${local_changes_suffix}"
echo "BUILD_SCM_VERSION ${version_stamp}"
-1
View File
@@ -21,7 +21,6 @@ import './tasks/ci';
import './tasks/clean';
import './tasks/default';
import './tasks/development';
import './tasks/docs';
import './tasks/example-module';
import './tasks/lint';
import './tasks/material-release';
-216
View File
@@ -1,216 +0,0 @@
import {task, src, dest} from 'gulp';
import {Dgeni} from 'dgeni';
import * as path from 'path';
import {buildConfig, sequenceTask} from 'material2-build-tools';
import {apiDocsPackage} from '../../dgeni/index';
// There are no type definitions available for these imports.
const markdown = require('gulp-markdown');
const transform = require('gulp-transform');
const highlight = require('gulp-highlight-files');
const rename = require('gulp-rename');
const flatten = require('gulp-flatten');
const htmlmin = require('gulp-htmlmin');
const hljs = require('highlight.js');
const dom = require('gulp-dom');
const {outputDir, packagesDir} = buildConfig;
const DIST_DOCS = path.join(outputDir, 'docs');
// Our docs contain comments of the form `<!-- example(...) -->` which serve as placeholders where
// example code should be inserted. We replace these comments with divs that have a
// `material-docs-example` attribute which can be used to locate the divs and initialize the example
// viewer.
const EXAMPLE_PATTERN = /<!--\W*example\(([^)]+)\)\W*-->/g;
// Markdown files can contain links to other markdown files.
// Most of those links don't work in the Material docs, because the paths are invalid in the
// documentation page. Using a RegExp to rewrite links in HTML files to work in the docs.
const LINK_PATTERN = /(<a[^>]*) href="([^"]*)"/g;
// HTML tags in the markdown generated files that should receive a .docs-markdown-${tagName} class
// for styling purposes.
const MARKDOWN_TAGS_TO_CLASS_ALIAS = [
'a',
'h1',
'h2',
'h3',
'h4',
'h5',
'li',
'ol',
'p',
'table',
'tbody',
'td',
'th',
'tr',
'ul',
'pre',
'code',
];
// Options for the html-minifier that minifies the generated HTML files.
const htmlMinifierOptions = {
collapseWhitespace: true,
removeComments: true,
caseSensitive: true,
removeAttributeQuotes: false
};
const markdownOptions = {
// Add syntax highlight using highlight.js
highlight: (code: string, language: string): string => {
if (language) {
// highlight.js expects "typescript" written out, while Github supports "ts".
let lang = language.toLowerCase() === 'ts' ? 'typescript' : language;
return hljs.highlight(lang, code).value;
}
return code;
}
};
/** Generate all docs content. */
task('docs', sequenceTask(
[
'markdown-docs-material',
'markdown-docs-cdk',
'build-highlighted-examples',
'build-examples-module',
'api-docs',
'copy-stackblitz-examples'
],
'minify-html-files'
));
/** Generates html files from the markdown overviews and guides for material. */
task('markdown-docs-material', () => {
// Extend the renderer for custom heading anchor rendering
markdown.marked.Renderer.prototype.heading = (text: string, level: number): string => {
if (level === 3 || level === 4) {
const escapedText = text.toLowerCase().replace(/[^\w]+/g, '-');
return `
<h${level} id="${escapedText}" class="docs-header-link">
<span header-link="${escapedText}"></span>
${text}
</h${level}>
`;
} else {
return `<h${level}>${text}</h${level}>`;
}
};
return src(['src/lib/**/!(README).md', 'guides/*.md'])
.pipe(rename({prefix: 'material-'}))
.pipe(markdown(markdownOptions))
.pipe(transform(transformMarkdownFiles))
.pipe(dom(createTagNameAliaser('docs-markdown')))
.pipe(dest('dist/docs/markdown'));
});
// TODO(jelbourn): figure out how to avoid duplicating this task w/ material while still
// disambiguating the output.
/** Generates html files from the markdown overviews and guides for the cdk. */
task('markdown-docs-cdk', () => {
return src(['src/cdk/**/!(README).md'])
.pipe(rename({prefix: 'cdk-'}))
.pipe(markdown(markdownOptions))
.pipe(transform(transformMarkdownFiles))
.pipe(dom(createTagNameAliaser('docs-markdown')))
.pipe(dest('dist/docs/markdown'));
});
/**
* Creates syntax-highlighted html files from the examples to be used for the source view of
* live examples on the docs site.
*/
task('build-highlighted-examples', () => {
// rename files to fit format: [filename]-[filetype].html
const renameFile = (filePath: any) => {
const extension = filePath.extname.slice(1);
filePath.basename = `${filePath.basename}-${extension}`;
};
return src('src/material-examples/**/*.+(html|css|ts)')
.pipe(flatten())
.pipe(rename(renameFile))
.pipe(highlight())
.pipe(dest('dist/docs/examples'));
});
/** Generates API docs from the source JsDoc using dgeni. */
task('api-docs', () => {
const docs = new Dgeni([apiDocsPackage]);
return docs.generate();
});
/**
* Minifies all HTML files that have been generated. The HTML files for the
* highlighted examples can be skipped, because it won't have any effect.
*/
task('minify-html-files', () => {
return src('dist/docs/+(api|markdown)/**/*.html')
.pipe(htmlmin(htmlMinifierOptions))
.pipe(dest('dist/docs'));
});
/** Copies example sources to be used as stackblitz assets for the docs site. */
task('copy-stackblitz-examples', () => {
src(path.join(packagesDir, 'material-examples', '**/*'))
.pipe(dest(path.join(DIST_DOCS, 'stackblitz', 'examples')));
});
/** Updates the markdown file's content to work inside of the docs app. */
function transformMarkdownFiles(buffer: Buffer, file: any): string {
let content = buffer.toString('utf-8');
// Replace <!-- example(..) --> comments with HTML elements.
content = content.replace(EXAMPLE_PATTERN, (_match: string, name: string) =>
`<div material-docs-example="${name}"></div>`
);
// Replace the URL in anchor elements inside of compiled markdown files.
content = content.replace(LINK_PATTERN, (_match: string, head: string, link: string) =>
// The head is the first match of the RegExp and is necessary to ensure that the RegExp matches
// an anchor element. The head will be then used to re-create the existing anchor element.
// If the head is not prepended to the replaced value, then the first match will be lost.
`${head} href="${fixMarkdownDocLinks(link, file.path)}"`
);
// Finally, wrap the entire generated in a doc in a div with a specific class.
return `<div class="docs-markdown">${content}</div>`;
}
/** Fixes paths in the markdown files to work in the material-docs-io. */
function fixMarkdownDocLinks(link: string, filePath: string): string {
// As for now, only markdown links that are relative and inside of the guides/ directory
// will be rewritten.
if (!filePath.includes(path.normalize('guides/')) || link.startsWith('http')) {
return link;
}
let baseName = path.basename(link, path.extname(link));
// Temporary link the file to the /guide URL because that's the route where the
// guides can be loaded in the Material docs.
return `guide/${baseName}`;
}
/**
* Returns a function to be called with an HTML document as its context that aliases HTML tags by
* adding a class consisting of a prefix + the tag name.
* @param classPrefix The prefix to use for the alias class.
*/
function createTagNameAliaser(classPrefix: string) {
return function(this: HTMLElement) {
MARKDOWN_TAGS_TO_CLASS_ALIAS.forEach(tag => {
Array.from(this.querySelectorAll(tag)).forEach(el => {
el.classList.add(`${classPrefix}-${tag}`);
});
});
return this;
};
}
+8 -200
View File
@@ -852,11 +852,6 @@ a-sync-waterfall@^1.0.0:
resolved "https://registry.yarnpkg.com/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz#75b6b6aa72598b497a125e7a2770f14f4c8a1fa7"
integrity sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==
abab@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
@@ -875,18 +870,6 @@ accepts@~1.3.4, accepts@~1.3.5:
mime-types "~2.1.18"
negotiator "0.6.1"
acorn-globals@^1.0.4:
version "1.0.9"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf"
integrity sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=
dependencies:
acorn "^2.1.0"
acorn@^2.1.0, acorn@^2.4.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7"
integrity sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=
addressparser@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/addressparser/-/addressparser-1.0.1.tgz#47afbe1a2a9262191db6838e4fd1d39b40821746"
@@ -1140,11 +1123,6 @@ array-each@^1.0.1:
resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f"
integrity sha1-p5SvDAWrF1KEbudTofIRoFugxE8=
array-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
@@ -2547,11 +2525,6 @@ content-disposition@0.5.2:
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
content-type-parser@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7"
integrity sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==
content-type@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
@@ -2851,18 +2824,6 @@ cssesc@^0.1.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0":
version "0.3.4"
resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797"
integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==
"cssstyle@>= 0.2.36 < 0.3.0":
version "0.2.37"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=
dependencies:
cssom "0.3.x"
csv-streamify@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/csv-streamify/-/csv-streamify-3.0.4.tgz#4cb614c57e3f299cca17b63fdcb4ad167777f47a"
@@ -2918,7 +2879,7 @@ date-format@^1.2.0:
resolved "https://registry.yarnpkg.com/date-format/-/date-format-1.2.0.tgz#615e828e233dd1ab9bb9ae0950e0ceccfa6ecad8"
integrity sha1-YV6CjiM90aubua4JUODOzPpuytg=
dateformat@^1.0.11, dateformat@^1.0.7-1.2.3:
dateformat@^1.0.7-1.2.3:
version "1.0.12"
resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9"
integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=
@@ -3548,7 +3509,7 @@ escodegen@1.8.x:
optionalDependencies:
source-map "~0.2.0"
escodegen@1.x.x, escodegen@^1.6.1:
escodegen@1.x.x:
version "1.11.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589"
integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==
@@ -4853,32 +4814,6 @@ gulp-cli@^2.0.1:
v8flags "^3.0.1"
yargs "^7.1.0"
gulp-dom@^0.9.17:
version "0.9.17"
resolved "https://registry.yarnpkg.com/gulp-dom/-/gulp-dom-0.9.17.tgz#4a23c625b5da820bb73d4405459319c9922383ca"
integrity sha1-SiPGJbXaggu3PUQFRZMZyZIjg8o=
dependencies:
gulp-util "3.0.7"
jsdom "9.8.3"
through2 "2.0.1"
gulp-flatten@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/gulp-flatten/-/gulp-flatten-0.3.1.tgz#51e7fec13a33c404578d18c1589d1b5bc45fe1d6"
integrity sha1-Uef+wTozxARXjRjBWJ0bW8Rf4dY=
dependencies:
gulp-util "^3.0.7"
through2 "^2.0.0"
gulp-highlight-files@^0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/gulp-highlight-files/-/gulp-highlight-files-0.0.5.tgz#b24f4937785b1d9f179594d95b7d88f1a794fdc8"
integrity sha512-lGLApyg6ycB45MWsLx9WbsAv0iTPxGTUH+Lq8evAXUXCFBPITG2JmLxQ3OYWA1/AOItDeAX5yza1HdLlaIXIPA==
dependencies:
gulp-util "^3.0.8"
highlight.js "^9.12.0"
through2 "^2.0.3"
gulp-htmlmin@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/gulp-htmlmin/-/gulp-htmlmin-3.0.0.tgz#19ea8002d1231d6b1f18a12d20f2a66a77770fb3"
@@ -4900,15 +4835,6 @@ gulp-if@^2.0.2:
ternary-stream "^2.0.1"
through2 "^2.0.1"
gulp-markdown@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/gulp-markdown/-/gulp-markdown-1.2.0.tgz#37cdc61379fb039841fa6cab4984a8e79128a772"
integrity sha1-N83GE3n7A5hB+myrSYSo55Eop3I=
dependencies:
gulp-util "^3.0.0"
marked "^0.3.2"
through2 "^2.0.0"
gulp-match@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/gulp-match/-/gulp-match-1.0.3.tgz#91c7c0d7f29becd6606d57d80a7f8776a87aba8e"
@@ -4935,14 +4861,6 @@ gulp-sass@^4.0.2:
through2 "^2.0.0"
vinyl-sourcemaps-apply "^0.2.0"
gulp-transform@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/gulp-transform/-/gulp-transform-2.0.0.tgz#7ac7e3e3e06ed7ebc52847b9b4e2a3686b22e5a2"
integrity sha1-esfj4+Bu1+vFKEe5tOKjaGsi5aI=
dependencies:
gulp-util "^3.0.8"
lodash "^4.17.4"
gulp-util@*, gulp-util@^3.0.0, gulp-util@^3.0.7, gulp-util@^3.0.8:
version "3.0.8"
resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
@@ -4967,30 +4885,6 @@ gulp-util@*, gulp-util@^3.0.0, gulp-util@^3.0.7, gulp-util@^3.0.8:
through2 "^2.0.0"
vinyl "^0.5.0"
gulp-util@3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.7.tgz#78925c4b8f8b49005ac01a011c557e6218941cbb"
integrity sha1-eJJcS4+LSQBawBoBHFV+YhiUHLs=
dependencies:
array-differ "^1.0.0"
array-uniq "^1.0.2"
beeper "^1.0.0"
chalk "^1.0.0"
dateformat "^1.0.11"
fancy-log "^1.1.0"
gulplog "^1.0.0"
has-gulplog "^0.1.0"
lodash._reescape "^3.0.0"
lodash._reevaluate "^3.0.0"
lodash._reinterpolate "^3.0.0"
lodash.template "^3.0.0"
minimist "^1.1.0"
multipipe "^0.1.2"
object-assign "^3.0.0"
replace-ext "0.0.1"
through2 "^2.0.0"
vinyl "^0.5.0"
gulp-util@^2.2.14:
version "2.2.20"
resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-2.2.20.tgz#d7146e5728910bd8f047a6b0b1e549bc22dbd64c"
@@ -5191,7 +5085,7 @@ header-case@^1.0.0:
no-case "^2.2.0"
upper-case "^1.1.3"
highlight.js@^9.11.0, highlight.js@^9.12.0:
highlight.js@^9.11.0:
version "9.13.1"
resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e"
integrity sha512-Sc28JNQNDzaH6PORtRLMvif9RSn1mYuOoX3omVjnb0+HbpPygU2ALBI0R/wsiqCb4/fcp07Gdo8g+fhtFrQl6A==
@@ -5226,13 +5120,6 @@ hosted-git-info@^2.1.4:
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
html-encoding-sniffer@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
dependencies:
whatwg-encoding "^1.0.1"
html-minifier@^3.0.3:
version "3.5.21"
resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
@@ -5386,7 +5273,7 @@ iconv-lite@0.4.23:
dependencies:
safer-buffer ">= 2.1.2 < 3"
iconv-lite@0.4.24, iconv-lite@^0.4.13, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.11:
iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.11:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -6145,32 +6032,6 @@ jsbn@~0.1.0:
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
jsdom@9.8.3:
version "9.8.3"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.8.3.tgz#fde29c109c32a1131e0b6c65914e64198f97c370"
integrity sha1-/eKcEJwyoRMeC2xlkU5kGY+Xw3A=
dependencies:
abab "^1.0.0"
acorn "^2.4.0"
acorn-globals "^1.0.4"
array-equal "^1.0.0"
content-type-parser "^1.0.1"
cssom ">= 0.3.0 < 0.4.0"
cssstyle ">= 0.2.36 < 0.3.0"
escodegen "^1.6.1"
html-encoding-sniffer "^1.0.1"
iconv-lite "^0.4.13"
nwmatcher ">= 1.3.7 < 2.0.0"
parse5 "^1.5.1"
request "^2.55.0"
sax "^1.1.4"
symbol-tree ">= 3.1.0 < 4.0.0"
tough-cookie "^2.3.1"
webidl-conversions "^3.0.1"
whatwg-encoding "^1.0.1"
whatwg-url "^3.0.0"
xml-name-validator ">= 2.0.1 < 3.0.0"
jsesc@^2.5.1:
version "2.5.2"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
@@ -7899,11 +7760,6 @@ nunjucks@^3.1.6:
optionalDependencies:
chokidar "^2.0.0"
"nwmatcher@>= 1.3.7 < 2.0.0":
version "1.4.4"
resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e"
integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==
oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
@@ -8298,11 +8154,6 @@ parse-passwd@^1.0.0:
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
parse5@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=
parse5@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2"
@@ -8773,7 +8624,7 @@ pseudomap@^1.0.2:
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
psl@^1.1.24, psl@^1.1.28:
psl@^1.1.24:
version "1.1.29"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==
@@ -8800,7 +8651,7 @@ punycode@1.4.1, punycode@^1.3.2, punycode@^1.4.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
punycode@^2.1.0, punycode@^2.1.1:
punycode@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
@@ -9264,7 +9115,7 @@ request@2.75.x:
tough-cookie "~2.3.0"
tunnel-agent "~0.4.1"
request@2.88.0, request@^2.0.0, request@^2.55.0, request@^2.72.0, request@^2.74.0, request@^2.79.0, request@^2.81.0, request@^2.85.0, request@^2.87.0, request@^2.88.0:
request@2.88.0, request@^2.0.0, request@^2.72.0, request@^2.74.0, request@^2.79.0, request@^2.81.0, request@^2.85.0, request@^2.87.0, request@^2.88.0:
version "2.88.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
@@ -9575,7 +9426,7 @@ saucelabs@^1.4.0, saucelabs@^1.5.0:
dependencies:
https-proxy-agent "^2.2.1"
sax@>=0.6.0, sax@^1.1.4, sax@^1.2.4:
sax@>=0.6.0, sax@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
@@ -10612,11 +10463,6 @@ symbol-observable@1.0.1:
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
"symbol-tree@>= 3.1.0 < 4.0.0":
version "3.2.2"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
systemjs@0.19.43:
version "0.19.43"
resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.19.43.tgz#9902ce5bdaaba03413575902c6bb18bad2ddab8e"
@@ -10854,14 +10700,6 @@ to-regex@^3.0.1, to-regex@^3.0.2:
regex-not "^1.0.2"
safe-regex "^1.1.0"
tough-cookie@^2.3.1:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
dependencies:
psl "^1.1.28"
punycode "^2.1.1"
tough-cookie@~2.3.0:
version "2.3.4"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
@@ -10884,11 +10722,6 @@ toxic@^1.0.0:
dependencies:
lodash "^4.17.10"
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
"traverse@>=0.3.0 <0.4":
version "0.3.9"
resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9"
@@ -11613,11 +11446,6 @@ webdriver-manager@^12.0.6:
semver "^5.3.0"
xml2js "^0.4.17"
webidl-conversions@^3.0.0, webidl-conversions@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
websocket-driver@>=0.5.1:
version "0.7.0"
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
@@ -11631,21 +11459,6 @@ websocket-extensions@>=0.1.1:
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
whatwg-encoding@^1.0.1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
dependencies:
iconv-lite "0.4.24"
whatwg-url@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-3.1.0.tgz#7bdcae490f921aef6451fb6739ec6bbd8e907bf6"
integrity sha1-e9yuSQ+SGu9kUftnOexrvY6Qe/Y=
dependencies:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
when@^3.7.5, when@^3.7.7:
version "3.7.8"
resolved "https://registry.yarnpkg.com/when/-/when-3.7.8.tgz#c7130b6a7ea04693e842cdc9e7a1f2aa39a39f82"
@@ -11850,11 +11663,6 @@ xhr2@^0.1.4:
resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f"
integrity sha1-f4dliEdxbbUCYyOBL4GMras4el8=
"xml-name-validator@>= 2.0.1 < 3.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
integrity sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=
xml2js@^0.4.17:
version "0.4.19"
resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"