From 7410d602c0c17532abffe74f76feeb2399e87575 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sat, 1 Sep 2018 09:57:36 -0500 Subject: [PATCH 01/34] WIP on new site --- .gitignore | 6 +- package.json | 15 + src/docs/.vuepress/config.js | 33 + src/docs/.vuepress/override.styl | 3 + src/docs/.vuepress/public/logo+type.orig.svg | 110 + src/docs/.vuepress/public/logo+type.svg | 6099 ++++++++++++++++ src/docs/.vuepress/public/logo.orig.svg | 64 + src/docs/.vuepress/public/logo.svg | 3835 ++++++++++ src/docs/.vuepress/style.styl | 1 + src/docs/README.md | 12 + src/docs/about/README.md | 51 + src/docs/application-plugin/README.md | 43 + src/docs/asciidoc/90-changes.adoc | 4 +- src/docs/changes/README.md | 200 + src/docs/configuration/README.md | 103 + src/docs/configuration/dependencies/README.md | 138 + src/docs/configuration/filtering/README.md | 32 + src/docs/configuration/merging/README.md | 143 + src/docs/configuration/minimizing/README.md | 25 + src/docs/configuration/relocation/README.md | 74 + .../reproducible-builds/README.md | 15 + src/docs/custom-tasks/README.md | 19 + src/docs/getting-started/README.md | 91 + src/docs/introduction/README.md | 43 + src/docs/multi-project/README.md | 20 + src/docs/plugins/README.md | 43 + src/docs/publishing/README.md | 67 + yarn.lock | 6187 +++++++++++++++++ 28 files changed, 17473 insertions(+), 3 deletions(-) create mode 100644 package.json create mode 100644 src/docs/.vuepress/config.js create mode 100644 src/docs/.vuepress/override.styl create mode 100644 src/docs/.vuepress/public/logo+type.orig.svg create mode 100644 src/docs/.vuepress/public/logo+type.svg create mode 100644 src/docs/.vuepress/public/logo.orig.svg create mode 100644 src/docs/.vuepress/public/logo.svg create mode 100644 src/docs/.vuepress/style.styl create mode 100644 src/docs/README.md create mode 100644 src/docs/about/README.md create mode 100644 src/docs/application-plugin/README.md create mode 100644 src/docs/changes/README.md create mode 100644 src/docs/configuration/README.md create mode 100644 src/docs/configuration/dependencies/README.md create mode 100644 src/docs/configuration/filtering/README.md create mode 100644 src/docs/configuration/merging/README.md create mode 100644 src/docs/configuration/minimizing/README.md create mode 100644 src/docs/configuration/relocation/README.md create mode 100644 src/docs/configuration/reproducible-builds/README.md create mode 100644 src/docs/custom-tasks/README.md create mode 100644 src/docs/getting-started/README.md create mode 100644 src/docs/introduction/README.md create mode 100644 src/docs/multi-project/README.md create mode 100644 src/docs/plugins/README.md create mode 100644 src/docs/publishing/README.md create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 071cccc92..b392c75d7 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,8 @@ build out .gradletasknamecache .gradle-test-kit -classes/ \ No newline at end of file +classes/ +node_modules/ +yarn-error.log +src/docs/.vuepress/dist/ +.DS_Store diff --git a/package.json b/package.json new file mode 100644 index 000000000..134d1527b --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "shadow", + "version": "1.0.0", + "main": "index.js", + "repository": "git@github.com:johnrengelman/shadow.git", + "author": "John Engelman ", + "license": "MIT", + "devDependencies": { + "vuepress": "^0.14.2" + }, + "scripts": { + "docs:build": "vuepress build src/docs", + "docs:dev": "vuepress dev src/docs" + } +} diff --git a/src/docs/.vuepress/config.js b/src/docs/.vuepress/config.js new file mode 100644 index 000000000..b1718c9a1 --- /dev/null +++ b/src/docs/.vuepress/config.js @@ -0,0 +1,33 @@ +module.exports = { + base: "/shadow-new-site/", + themeConfig: { + repo: "johnrengelman/shadow", + editLinks: true, + editLinkText: 'Help improve these docs!', + logo: '/logo+type.svg', + docsDir: 'src/docs/vuepress', + title: 'Gradle Shadow Plugin', + nav: [ + { text: 'User Guide', link: '/introduction/' } + ], + sidebar: [ + '/', + '/introduction/', + '/getting-started/', + '/configuration/', + '/configuration/filtering/', + '/configuration/dependencies/', + '/configuration/merging/', + '/configuration/relocation/', + '/configuration/minimizing/', + '/configuration/reproducible-builds/', + '/custom-tasks/', + '/application-plugin/', + '/publishing/', + '/multi-project/', + '/plugins/', + '/changes/', + '/about/' + ] + } +} diff --git a/src/docs/.vuepress/override.styl b/src/docs/.vuepress/override.styl new file mode 100644 index 000000000..c4f85f6b5 --- /dev/null +++ b/src/docs/.vuepress/override.styl @@ -0,0 +1,3 @@ +$accentColor = #B66E3C +$textColor = #5F3416 +$borderColor = #9FB2CC diff --git a/src/docs/.vuepress/public/logo+type.orig.svg b/src/docs/.vuepress/public/logo+type.orig.svg new file mode 100644 index 000000000..b1d3e39d0 --- /dev/null +++ b/src/docs/.vuepress/public/logo+type.orig.svg @@ -0,0 +1,110 @@ + + + + + + diff --git a/src/docs/.vuepress/public/logo+type.svg b/src/docs/.vuepress/public/logo+type.svg new file mode 100644 index 000000000..1fa96b75d --- /dev/null +++ b/src/docs/.vuepress/public/logo+type.svg @@ -0,0 +1,6099 @@ + + + + diff --git a/src/docs/.vuepress/public/logo.orig.svg b/src/docs/.vuepress/public/logo.orig.svg new file mode 100644 index 000000000..41debcfdd --- /dev/null +++ b/src/docs/.vuepress/public/logo.orig.svg @@ -0,0 +1,64 @@ + + + + + + diff --git a/src/docs/.vuepress/public/logo.svg b/src/docs/.vuepress/public/logo.svg new file mode 100644 index 000000000..4dbc6611b --- /dev/null +++ b/src/docs/.vuepress/public/logo.svg @@ -0,0 +1,3835 @@ + + + + diff --git a/src/docs/.vuepress/style.styl b/src/docs/.vuepress/style.styl new file mode 100644 index 000000000..3049d58bc --- /dev/null +++ b/src/docs/.vuepress/style.styl @@ -0,0 +1 @@ +@import "~prismjs/themes/prism-tomorrow.css" diff --git a/src/docs/README.md b/src/docs/README.md new file mode 100644 index 000000000..1e75df5d0 --- /dev/null +++ b/src/docs/README.md @@ -0,0 +1,12 @@ +--- +home: true +heroText: Gradle Shadow Plugin +heroImage: /logo.svg +tagline: The library author's dependency toolkit +actionText: User Guide → +actionLink: /introduction/ +--- + +John Engelman - @johnrengelman + +[API Docs](api/index.html) diff --git a/src/docs/about/README.md b/src/docs/about/README.md new file mode 100644 index 000000000..94adc5a23 --- /dev/null +++ b/src/docs/about/README.md @@ -0,0 +1,51 @@ +# About This Project + +I started this project in December of 2012. We were working on converting from a monolithic application into the +new hot jazz of "microservices" using Dropwizard. +I had also just started learning about Gradle and I knew that the incremental build system it provided would benefit +our development team greatly. +Unfortunately, the closest thing that Gradle had to Maven's Shade plugin was its ability to create application TARs and +ZIPs. + +So, Charlie Knudsen and myself set out to port the existing Shade code into a Gradle plugin. +This port is what existed up until the `0.9` milestone releases for Shadow. +It functioned, but it wasn't idiomatic Gradle by any means. + +Starting with 0.9, Shadow was rewritten from the ground up as standard Gradle plugin and leveraged as much of Gradle's +classes and concepts as possible. +At the same time as the 0.9 release, Gradle was announcing the [Gradle Plugin Portal](https://plugins.gradle.org) and +so Shadow was published there. + +## Maintainers + +* [John Engelman](https://github.com/johnrengelman) + +## Contributors + +* [Charlie Knudsen](https://github.com/charliek) +* [Fedor Korotkov](https://github.com/fkorotkov) +* [Haw-Bin Chai](https://github.com/hbchai) +* [Serban Iordache](https://github.com/siordache) +* [Minecrell](https://github.com/Minecrell) +* [Matt Hurne](https://github.com/mhurne) +* [Andres Almiray](https://github.com/aalmiray) +* [Brandon Kearby](https://github.com/brandonkearby) +* [John Szakmeister](https://github.com/jszakmeister) +* [Ethan Hall](https://github.com/ethankhall) +* [Piotr Kubowicz](https://github.com/pkubowicz) +* [Marc Philipp](https://github.com/marcphilipp) +* [Rob Spieldenner](https://github.com/rspieldenner) +* [Marke Vieira](https://github.com/mark-vieira) +* [Ben Adazza](https://github.com/ben-adazza) +* [Tyler Benson](https://github.com/tylerbenson) +* [Scott Newson](https://github.com/sgnewson) +* [Martin Sadowski](https://github.com/ttsiebzehntt) +* [debanne](https://github.com/debanne) +* [Felipe Lima](https://github.com/felipecsl) +* [Paul N. Baker](https://github.com/paul-nelson-baker) +* [Chris Cowan](https://github.com/Macil) +* [Sergey Tselovalnikov](https://github.com/SerCeMan) +* [Osip Fatkullin](https://github.com/osipxd) +* [Victor Tso](https://github.com/roxchkplusony) +* [Petar Petrov](https://github.com/petarov) + diff --git a/src/docs/application-plugin/README.md b/src/docs/application-plugin/README.md new file mode 100644 index 000000000..1f7aa503b --- /dev/null +++ b/src/docs/application-plugin/README.md @@ -0,0 +1,43 @@ +# Integrating with Application Plugin + +Shadow reacts to the presence of Gradle's +[`application`](https://docs.gradle.org/current/userguide/application_plugin.html) plugin and will automatically +configure additional tasks for running the shadowed JAR and creating distributions containing the shadowed JAR. + +Just like the normal `jar` task, when the `application` plugin is applied, the `shadowJar` manifest will be +configured to contain the `Main-Class` attribute with the value specified in the project's `mainClassName` attribute. + +```groovy +// Using Shadow with Application Plugin +apply plugin: 'java' +apply plugin: 'application' +apply plugin: 'com.github.johnrengelman.shadow' + +mainClassName = 'myapp.Main' +``` + +## Running the Shadow JAR + +When applied along with the `application` plugin, the `runShadow` task will be created for starting +the application from the shadowed JAR. +The `runShadow` task is a [`JavaExec`](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html) +task that is configured to execute `java -jar myproject-all.jar`. +It can be configured the same as any other `JavaExec` task. + +```groovy +// Configuring the runShadow Task +runShadow { + args 'foo' +} +``` + +## Distributing the Shadow JAR + +The Shadow plugin will also configure distribution tasks when in the presence of the `application` plugin. +The plugin will create `shadowDistZip` and `shadowDistTar` which creates Zip and Tar distributions +respectively. +Each distribution will contain the shadowed JAR file along with the necessary start scripts to launch +the application. + +Additionally, the plugin will create the `installShadowDist` and `startShadowScripts` tasks which stages the necessary +files for a distribution to `build/install/-shadow/`. diff --git a/src/docs/asciidoc/90-changes.adoc b/src/docs/asciidoc/90-changes.adoc index 0b448345d..c802bc812 100644 --- a/src/docs/asciidoc/90-changes.adoc +++ b/src/docs/asciidoc/90-changes.adoc @@ -36,8 +36,8 @@ [discrete] === v2.0.3 (2018-03-24) -* https://github.com/ttsiebzehntt[ttsiebzehntt] - Update to ASM 6.1 -* https://github.com/sgnewson[sgnewson] - Fix deprecated Gradle warnings https://github.com/johnrengelman/shadow/pull/356[#356] +* https://github.com/ttsiebzehntt[Martin Sadowski] - Update to ASM 6.1 +* https://github.com/sgnewson[Scott Newson] - Fix deprecated Gradle warnings https://github.com/johnrengelman/shadow/pull/356[#356] [discrete] === v2.0.2 (2017-12-12) diff --git a/src/docs/changes/README.md b/src/docs/changes/README.md new file mode 100644 index 000000000..8c62d4273 --- /dev/null +++ b/src/docs/changes/README.md @@ -0,0 +1,200 @@ +# Change Log + +## v4.0.2 (2018-10-27) +* [Petar Petrov](https://github.com/petarov) - Update to ASM 7.0-beta and jdependency 2.1.1 to support Java 11, [#415](https://github.com/johnrengelman/shadow/pull/415) +* [Victor Tso](https://github.com/roxchkplusony) - Ensure input streams are closed, [#411](https://github.com/johnrengelman/shadow/pull/411) +* [Osip Fatkullin](https://github.com/osipxd) - Exclude `api` configuration from minimization, [#405](https://github.com/johnrengelman/shadow/pull/405) + +## v4.0.1 (2018-09-30) +* **Breaking Change!** `Transform.modifyOutputStream(ZipOutputStream os)` to `Transform.modifyOutputStream(ZipOutputStream jos, boolean preserveFileTimestamps)`. + Typically breaking changes are reserved for major version releases, but this change was necessary for `preserverFileTimestamps` (introduced in v4.0.0) to work correctly + in the presence of transformers, [#404](https://github.com/johnrengelman/shadow/issues/404) +* Fix regression in support Java 10+ during relocation, [#403](https://github.com/johnrengelman/shadow/issues/403) + +## v4.0.0 (2018-09-25) + +* **Breaking Change!** Restrict Plugin to Gradle 4.0+. Shadow major versions will align with Gradle major versions going forward. +* **Breaking Change!** For clarity purposes `com.github.johnrengelman.plugin-shadow` has been removed. If you intend to use this feature, you will need to declare your own `ConfigureShadowRelocation` task. See section [2.9.2](http://imperceptiblethoughts.com/shadow/#automatically_relocating_dependencies) of the User Guide +* [Sergey Tselovalnikov](https://github.com/SerCeMan) - Upgrade to ASM 6.2.1 to support Java 11 +* [Chris Cowan](https://github.com/Macil) - Add support for `shadowJar.preserveFileTimestamps` property. See [Jar.preserveFileTimestamps](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html#org.gradle.api.tasks.bundling.Jar:preserveFileTimestamps) +* [Paul N. Baker](https://github.com/paul-nelson-baker) - Add `Log4j2PluginsCacheFileTransformer` to process Log4j DAT files during merge. +* [Felipe Lima](https://github.com/felipecsl) - Fix the long standing "No property `mainClassName`" issue. +* [debanne](https://github.com/debanne) - Implement JAR minimization actions. This will attempt to exclude unused classes in your shadowed JAR. +* Configure exclusion of `module-info.class` from `shadowJar` when using the Shadow the Java plugin, [#352](https://github.com/johnrengelman/shadow/issues/352) + +## v2.0.4 (2018-04-27) + +* Update to ASM 6.1.1 to address performance issues - [ASM Issue 317816](https://gitlab.ow2.org/asm/asm/issues/317816) +* Close InputStreams after using them, [#364](https://github.com/johnrengelman/shadow/issues/364) +* Remove usage of Gradle internal `AbstractFileCollection`. +* Add task annotations to remove warnings when validating plugin. + +## v2.0.3 (2018-03-24) + +* [Martin Sadowski](https://github.com/ttsiebzehntt) - Update to ASM 6.1 +* [Scott Newson](https://github.com/sgnewson) - Fix deprecated Gradle warnings, [#356](https://github.com/johnrengelman/shadow/pull/356) + +## v2.0.2 (2017-12-12) + +* [Ben Adazza](https://github.com/ben-adazza), [Tyler Benson](https://github.com/tylerbenson) - documentation +* [Marke Vieira](https://github.com/mark-vieira) - Support multi-project builds with Build-Scan integration +* Upgrade to ASM 6, [#294]https://github.com/johnrengelman/shadow/issues/294, [#303](https://github.com/johnrengelman/shadow/issues/303) +* [Rob Spieldenner](https://github.com/rspieldenner) - Fix integration with `application` plugin in Gradle 4.3, [#339](https://github.com/johnrengelman/shadow/issues/339) +* Fixed deprecation warning from Gradle 4.2+, [#326](https://github.com/johnrengelman/shadow/issues/326) + +## v2.0.1 (2017-06-23) + +* Fix `null+configuration` error, [#297](https://github.com/johnrengelman/shadow/issues/297) + +## v2.0.0 (2017-05-09) + +* **Breaking Change!** Restrict Plugin to Gradle 3.0+ +* **Breaking Change!** Build with Java 7 +* **Breaking Change!** Updated `Transformer` interface to accept `TransformerContext` object instead of individual values +* **Breaking Change!** Updated `Relocator` interface to accept `RelocatePathContext` and `RelocateClassContext` objects +* **Breaking Change!** Distribution tasks `distShadowZip` and `distShadowTar` have been removed and replaced with the standard `shadowDistZip` and `shadowDistTar` from the Gradle Distribution plugin. +* **Breaking Change!** The `installShadowApp` task has been removed and replaced with the standard `installShadowDist` task from the Gradle Distribution plugin. +* **Breaking Change!** The new `installShadowDist` task outputs to `build/install/-shadow` per the standard (formerly was `build/installShadow`) +* **Breaking Change!** `component.shadow` removed in favor of `project.shadow.component(publication)` so as to remove dependency on internal Gradle APIs. +* _NEW_ Introducing `ConfigureShadowRelocation` task and `com.github.johnrengelman.plugin-shadow` plugin to automatically configure package relocation for Gradle plugins. +* _NEW_ Integration with Gradle Build Scans. When running a `ShadowJar` task with Build Scans, custom values including dependencies merged anc package relocations are published in the scan. +* Build Shadow w/ Shadow. This will help prevent any future classpath conflicts with Gradle. +* Replace `startShadowScripts` tasks with Gradle's built-in `CreateStartScripts` type. +* Build with Gradle 3.1 +* [Marc Philipp](https://github.com/marcphilipp) - Add `keyTransformer` property to `PropertiesFileTransformer` +* Update to ASM 5.2 +* [Piotr Kubowicz](https://github.com/pkubowicz) - Support `api`, `implementation`, `runtimeOnly` dependency configurations introdcued in Gradle 3.3 + +## v1.2.4 (2016-11-03) +* Don't resolve dependency configurations during config phase, [#128](https://github.com/johnrengelman/shadow/issues/129) +* Build plugin with Gradle 2.14 +* Fix docs regarding inheriting Jar manifest, [#251](https://github.com/johnrengelman/shadow/issues/251) +* [Ethan Hall](https://github.com/ethankhall) - Support projects that configure uploading to Ivy repositories, [#256](https://github.com/johnrengelman/shadow/pull/256) +* Force task to depend on dependency configuration, [#152](https://github.com/johnrengelman/shadow/issues/152) +* Do not explode ZIP files into shadow jar, [#196](https://github.com/johnrengelman/shadow/issues/196) +* [John Szakmeister](https://github.com/jszakmeister) - Preserve timestamps on merged jar entries, [#260](https://github.com/johnrengelman/shadow/pull/260) + +## v1.2.3 (2016-01-25) + +* Support for Gradle 2.11-rc-1, [#177](https://github.com/johnrengelman/shadow/issues/177) +* Convert internal framework to [Gradle TestKit](https://docs.gradle.org/current/userguide/test_kit.html) +* [Fedor Korotkov](https://github.com/fkorotkov) - Use BufferedOutputStream when writing the Zip file, [#171](https://github.com/johnrengelman/shadow/pull/171[) +* [Haw-Bin Chai](https://github.com/hbchai) - Quote Jar path in Windows start script as it may contain spaces, [#170](https://github.com/johnrengelman/shadow/pull/170) +* [Serban Iordache](https://github.com/siordache) - Evaluate relocation specs when merging service descriptors, [#165](https://github.com/johnrengelman/shadow/pull/165) + +## v1.2.2 (2015-07-17) + +* [Minecrell](https://github.com/Minecrell) - Gradle 2.5 compatibility, [#147](https://github.com/johnrengelman/shadow/issues/147) + +## v1.2.1 (2015-01-23) + +* Apply package relocations to dependency resources, [#114](https://github.com/johnrengelman/shadow/issues/114) + +## v1.2.0 (2014-11-24) + +* Re-organize some code to remove need for forcing the Gradle API ClassLoader to allow the `org.apache.tools.zip` package. +* Upgrade JDOM library from 1.1 to 2.0.5 (change dependency from `jdom:jdom:1.1` to `org.jdom:jdom2:2.0.5`), [#98](https://github.com/johnrengelman/shadow/issues/98) +* Convert ShadowJar.groovy to ShadowJar.java to workaround binary incompatibility introduced by Gradle 2.2, [#106](https://github.com/johnrengelman/shadow/issues/106) +* Updated ASM library to `5.0.3` to support JDK8, [#97](https://github.com/johnrengelman/shadow/issues/97) +* Allows for regex pattern matching in the `dependency` string when including/excluding, [#83](https://github.com/johnrengelman/shadow/issues/83) +* Apply package relocations to resource files, [#93](https://github.com/johnrengelman/shadow/issues/93) + +## v1.1.2 (2014-09-09) + +* fix bug in `runShadow` where dependencies from the `shadow` configuration are not available, [#94](https://github.com/johnrengelman/shadow/issues/94) + +## v1.1.1 (2014-08-27) + +* Fix bug in `'createStartScripts'` task that was causing it to not execute `'shadowJar'` task, [#90](https://github.com/johnrengelman/shadow/issues/90) +* Do not include `null` in ShadowJar Manifest `'Class-Path'` value when `jar` task does not specify a value for it, [#92](https://github.com/johnrengelman/shadow/issues/92) +* ShadowJar Manifest `'Class-Path'` should reference jars from `'shadow'` config as relative to location of `shadowJar` output, [#91](https://github.com/johnrengelman/shadow/issues/91) + +## v1.1.0 (2014-08-26) + +* **Breaking Change!** Fix leaking of `shadowJar.manifest` into `jar.manifest`, [#82](https://github.com/johnrengelman/shadow/issues/82) + To simplify behavior, the `shadowJar.appendManifest` method has been removed. Replace uses with `shadowJar.manifest` +* `ShadowTask` now has a `configurations` property that is resolved to the files in the resolved configuration before + being added to the copy spec. This allows for an easier implementation for filtering. The default 'shadowJar' task + has the convention of adding the `'runtime'` scope to this list. Manually created instances of `ShadowTask` have no + configurations added by default and can be configured by setting `task.configurations`. +* Properly configure integration with the `'maven'` plugin when added. When adding `'maven'` the `'uploadShadow'` task + will now properly configure the POM dependencies by removing the `'compile'` and `'runtime'` configurations from the + POM and adding the `'shadow'` configuration as a `RUNTIME` scope in the POM. This behavior matches the behavior when + using the `'maven-publish'` plugin. +* [Matt Hurne](https://github.com/mhurne) - Allow `ServiceFileTransformer` to specify include/exclude patterns for + files within the configured path to merge. +* [Matt Hurne](https://github.com/mhurne) - Added `GroovyExtensionModuleTransformer` for merging Groovy Extension module + descriptor files. The existing `ServiceFileTransformer` now excludes Groovy Extension Module descriptors by default. +* `distShadowZip` and `distShadowZip` now contain the shadow library and run scripts instead of the default from the + `'application'` plugin, [#89](https://github.com/johnrengelman/shadow/issues/89) + +## v1.0.3 (2014-07-29) + +* Make service files root path configurable for `ServiceFileTransformer`, [#72](https://github.com/johnrengelman/shadow/issues/72) +* [Andres Almiray](https://github.com/aalmiray - Added PropertiesFileTransformer, [#73](https://github.com/johnrengelman/shadow/issues/73) +* [Brandon Kearby](https://github.com/brandonkearby) - Fixed StackOverflow when a cycle occurs in the resolved dependency grap, [#69](https://github.com/johnrengelman/shadow/pull/69) +* Apply Transformers to project resources, [#70](https://github.com/johnrengelman/shadow/issues/70), [#71](https://github.com/johnrengelman/shadow/issues/71) +* [Minecrell](https://github.com/Minecrell) - Do not drop non-class files from dependencies when relocation is enabled, [#61](https://github.com/johnrengelman/shadow/issues/61) +* Remove support for applying individual sub-plugins by Id (easier maintenance and cleaner presentation in Gradle Portal) + +## v1.0.2 (2014-07-07) + +* Do not add an empty Class-Path attribute to the manifest when the `shadow` configuration contains no dependencies. +* `runShadow` now registers `shadowJar` as an input. Previously, `runShadow` did not execute `shadowJar` and an error occurred. +* Support Gradle 2.0, [#66](https://github.com/johnrengelman/shadow/issues/66) +* Do not override existing 'Class-Path' Manifest attribute settings from Jar configuration. Instead combine, [#65](https://github.com/johnrengelman/shadow/issues/65) + +## v1.0.1 (2014-06-28) + +* Fix issue where non-class files are dropped when using relocation, [#58](https://github.com/johnrengelman/shadow/issues/58) +* Do not create a `/` directory inside the output jar. +* Fix `runShadow` task to evaluate the `shadowJar.archiveFile` property at execution time, [#60](https://github.com/johnrengelman/shadow/issues/60) + +## v1.0.0 (2014-06-27) + +* Previously known as v0.9.0 +* All changes from 0.9.0-M1 to 0.9.0-M5 +* Properly configure the ShadowJar task inputs to observe the include/excludes from the `dependencies` block. This + allows UP-TO-DATE checking to work properly when changing the `dependencies` rulea, [#54](https://github.com/johnrengelman/shadow/issues/54) +* Apply relocation remappings to classes and imports in source project, [#55](https://github.com/johnrengelman/shadow/issues/55) +* Do not create directories in jar for source of remapped class, created directories in jar for destination of remapped classes, [#53](https://github.com/johnrengelman/shadow/issues/53) + +## v0.9.0-M5 + +* Add commons-io to compile classpath +* Update asm library to 4.1 + +## v0.9.0-M4 + +* Break plugin into multiple sub-plugins. `ShadowBasePlugin` is always applied. + `ShadowJavaPlugin` and `ShadowApplicationPlugin` are applied in reaction to applying the `java` and `application` + plugins respectively. +* Shadow does not applied `java` plugin automatically. `java` or `groovy` must be applied in conjunction with `shadow`. +* Moved artifact filtering to `dependencies {}` block underneath `shadowJar`. This allows better include/exclude control + for dependencies. +* Dependencies added to the `shadow` configuration are automatically added to the `Class-Path` attribute in the manifest + for `shadowJar` +* Applying `application` plugin and settings `mainClassName` automatically configures the `Main-Class` attribute in + the manifest for `shadowJar` +* `runShadow` now utilizes the output of the `shadowJar` and executes using `java -jar ` +* Start Scripts for shadow distribution now utilize `java -jar` to execute instead of placing all files on classpath + and executing main class. +* Excluding/Including dependencies no longer includes transitive dependencies. All dependencies for inclusion/exclusion + must be explicitly configured via a spec. + +## v0.9.0-M3 + +* Use commons.io FilenameUtils to determine name of resolved jars for including/excluding + +## v0.9.0-M2 + +* Added integration with `application` plugin to replace old `OutputSignedJars` task +* Fixed bug that resulted in duplicate file entries in the resulting Jar +* Changed plugin id to 'com.github.johnrengelman.shadow' to support Gradle 2.x plugin infrastructure. + +## v0.9.0-M1 + +* Rewrite based on Gradle Jar Task +* `ShadowJar` now extends `Jar` +* Removed `signedCompile` and `signedRuntime` configurations in favor of `shadow` configuration +* Removed `OutputSignedJars` task diff --git a/src/docs/configuration/README.md b/src/docs/configuration/README.md new file mode 100644 index 000000000..a79f01441 --- /dev/null +++ b/src/docs/configuration/README.md @@ -0,0 +1,103 @@ +--- +api: api/com/github/jengelman/gradle/plugins/shadow +--- + +# Configuring Shadow + +The [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type extends from Gradle's +[`Jar`](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) type. +This means that all attributes and methods available on `Jar` are also available on +[`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html). +Refer the _Gradle User Guide_ for [Jar](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) for +details. + +## Configuring Output Name + +Shadow configures the default `shadowJar` task to set the output JAR's `destinationDir`, `baseName`, `appendix`, +`version`, and `extension` to the same default values as Gradle does for all `Jar` tasks. +Additionally, it configures the `classifier` to be `all`. + +If working with a Gradle project with the name `myApp` and version `1.0`, the default `shadowJar` task will output a +file at: `build/libs/myApp-1.0-all.jar` + +As with all `Jar` tasks in Gradle, these values can be overridden: + +```groovy +// Output to build/libs/shadow.jar +shadowJar { + baseName = 'shadow' + classifier = null + version = null +} +``` + +## Configuring the Runtime Classpath + +Each Java JAR file contains a manifest file that provides meta data about the contents of the JAR file itself. +When using a shadowed JAR file as an executable JAR, it is assumed that all necessary runtime classes are contained +within the JAR itself. +There may be situations where the desire is to **not** bundle select dependencies into the shadowed JAR file but +they are still required for runtime execution. + +In these scenarios, Shadow creates a `shadow` configuration to declare these dependencies. +Dependencies added to the `shadow` configuration are **not** bundled into the output JAR. +Think of `configurations.shadow` as unmerged, runtime dependencies. +The integration with the `maven` and `maven-publish` plugins will automatically configure dependencies added +to `configurations.shadow` as `RUNTIME` scope dependencies in the resulting POM file. + +Additionally, Shadow automatically configures the manifest of the `shadowJar` task to contain a `Class-Path` entry +in the JAR manifest. +The value of the `Class-Path` entry is the name of all dependencies resolved in the `shadow` configuration +for the project. + +```groovy +dependencies { + shadow 'junit:junit:3.8.2' +} +``` + +Inspecting the `META-INF/MANIFEST.MF` entry in the JAR file will reveal the following attribute: + +```property +Class-Path: junit-3.8.2.jar +``` + +When deploying a shadowed JAR as an execution JAR, it is important to note that any non-bundled runtime dependencies +**must** be deployed in the location specified in the `Class-Path` entry in the manifest. + +## Configuring the JAR Manifest + +Beyond the automatic configuration of the `Class-Path` entry, the `shadowJar` manifest is configured in a number of ways. +First, the manifest for the `shadowJar` task is configured to __inherit__ from the manifest of the standard `jar` task. +This means that any configuration performed on the `jar` task will propagate to the `shadowJar` tasks. + +```groovy +jar { + manifest { + attributes 'Class-Path': '/libs/a.jar' + } +} +``` + +Inspecting the `META-INF/MANIFEST.MF` entry in the JAR file will revel the following attribute: + +```property +Class-Path: /libs/a.jar +``` + +If it is desired to inherit a manifest from a JAR task other than the standard `jar` task, the `inheritFrom` methods +on the `shadowJar.manifest` object can be used to configure the upstream. + +```groovy +task testJar(type: Jar) { + manifest { + attributes 'Description': 'This is an application JAR' + } +} + +shadowJar { + manifest { + inheritFrom project.tasks.testJar.manifest + } +} +``` diff --git a/src/docs/configuration/dependencies/README.md b/src/docs/configuration/dependencies/README.md new file mode 100644 index 000000000..6e05f448f --- /dev/null +++ b/src/docs/configuration/dependencies/README.md @@ -0,0 +1,138 @@ +# Configuring Shadowed Dependencies + +Shadow configures the default `shadowJar` task to merge all dependencies from the project's `runtime` configuration +into the final JAR. +The configurations to from which to source dependencies for the merging can be configured using the `configurations` property +of the [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type. + +```groovy +shadowJar { + configurations = [project.configurations.compile] +} +``` + +The above code sample would configure the `shadowJar` task to merge depdencies from only the `compile` configuration. +This means any dependency declared in the `runtime` configuration would be **not** be included in the final JAR. + +> Note the literal use of `project.configurations` when setting the `configurations` attribute of a +[`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. +This is **required**. It maybe be tempting to specify `configurations = [configurations.compile]` but this will not +have the intended effect, as `configurations.compile` will try to delegate to the `configurations` property of the +the [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task instead of the `project` + +## Embedding Jar Files Inside Your Shadow Jar + +Because of the way that Gradle handles dependency configuration, from a plugin perspective, shadow is unable to +distinguish between a jar file configured as a dependency and a jar file included in the resource folder. This means +that any jar found in a resource directory will be merged into the shadow jar the same as any other dependency. If +your intention is to embed the jar inside, you must rename the jar as to not end with `.jar` before the shadow task +begins. + +## Filtering Dependencies + +Individual dependencies can be filtered from the final JAR by using the `dependencies` block of a +[`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. +Dependency filtering does **not** apply to transitive dependencies. +That is, excluding a dependency does not exclude any of its dependencies from the final JAR. + +The `dependency` blocks provides a number of methods for resolving dependencies using the notations familiar from +Gradle's `configurations` block. + +```groovy +// Exclude an Module Dependency +dependencies { + compile 'shadow:d:1.0' +} + +shadowJar { + dependencies { + exclude(dependency('shadow:d:1.0')) + } +} +``` + +```groovy +// Exclude a Project Dependency +dependencies { + compile project(':client') +} + +shadowJar { + dependencies { + exclude(project(':client')) + } +} +``` + +> While not being able to filter entire transitive dependency graphs might seem like an oversight, it is necessary +because it would not be possible to intelligently determine the build author's intended results when there is a +common dependency between two 1st level dependencies when one is excluded and the other is not. + +### Using Regex Patterns to Filter Dependencies + +Dependencies can be filtered using regex patterns. +Coupled with the `::` notation for dependencies, this allows for excluding/including +using any of these individual fields. + +```groovy +// Exclude Any Version of a Dependency +dependencies { + compile 'shadow:d:1.0' +} + +shadowJar { + dependencies { + exclude(dependency('shadow:d:.*')) + } +} +``` + +Any of the individual fields can be safely absent and will function as though a wildcard was specified. + +```groovy +// Ignore Dependency Version +shadowJar { + dependencies { + exclude(dependency('shadow:d')) + } +} +``` + +The above code snippet is functionally equivalent to the previous example. + +This same patten can be used for any of the dependency notation fields. + +```groovy +// Ignoring An Artifact Regardless of Group +shadowJar { + dependencies { + exclude(dependency(':d:1.0')) + } +} +``` + +```groovy +// Excluding All Artifacts From Group +shadowJar { + dependencies { + exclude(dependency('shadow::1.0')) + } +} +``` + +### Programmatically Selecting Dependencies to Filter + +If more complex decisions are needed to select the dependencies to be included, the +[`dependencies`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#dependencies(Action)) +block provides a method that accepts a `Closure` for selecting dependencies. + +```groovy +// Selecting Dependencies to Filter With a Spec +shadowJar { + dependencies { + exclude(dependency { + it.moduleGroup == 'junit' + }) + } +} +``` diff --git a/src/docs/configuration/filtering/README.md b/src/docs/configuration/filtering/README.md new file mode 100644 index 000000000..f4bf4216d --- /dev/null +++ b/src/docs/configuration/filtering/README.md @@ -0,0 +1,32 @@ +# Filtering Shadow Jar Contents + +The final contents of a shadow JAR can be filtered using the `exclude` and `include` methods inherited from Gradle's +`Jar` task type. + +Refer to the [Jar](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) documentation for details +on the various versions of the methods and their behavior. + +When using `exclude`/`include` with a `ShadowJar` task, the resulting copy specs are applied to the _final_ JAR +contents. +This means that, the configuration is applied to the individual files from both the project source set or _any_ +of the dependencies to be merged. + +```groovy +// Exclude a file from Shadow Jar +shadowJar { + exclude 'a2.properties' +} +``` + + +Excludes and includes can be combined just like a normal `Jar` task, with `excludes` taking precedence over `includes`. +Additionally, ANT style patterns can be used to match multiple files. + +```groovy +// Configuring output using ANT patterns +shadowJar { + include '*.jar' + include '*.properties' + exclude 'a2.properties' +} +``` diff --git a/src/docs/configuration/merging/README.md b/src/docs/configuration/merging/README.md new file mode 100644 index 000000000..86418cb30 --- /dev/null +++ b/src/docs/configuration/merging/README.md @@ -0,0 +1,143 @@ +# Controlling JAR Content Merging + +Shadow allows for customizing the process by which the output JAR is generated through the +[`Transformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) interface. +This is a concept that has been carried over from the original Maven Shade implementation. +A [`Transformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) is invoked for each +entry in the JAR before being written to the final output JAR. +This allows a [`Transformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) to +determine if it should process a particular entry and apply any modifications before writing the stream to the output. + +```groovy +// Adding a Transformer +shadowJar { + transform(MyTransformer.class) +} +``` + +Additionally, a `Transformer` can accept a `Closure` to configure the provided `Transformer`. + +```groovy +// Configuring a Transformer +shadowJar { + transform(MyTransformer.class) { + enable = true + } +} +``` + +An instantiated instance of a `Transformer` can also be provided. + +```groovy +// Adding a Transformer Instance +shadowJar { + transform(new MyTransformer(enabled: true)) +} +``` + +## Merging Service Descriptor Files + +Java libraries often contain service descriptors files in the `META-INF/services` directory of the JAR. +A service descriptor typically contains a line delimited list of classes that are supported for a particular _service_. +At runtime, this file is read and used to configure library or application behavior. + +Multiple dependencies may use the same service descriptor file name. +In this case, it is generally desired to merge the content of each instance of the file into a single output file. +The [`ServiceFileTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +class is used to perform this merging. By default, it will merge each copy of a file under `META-INF/services` into a +single file in the output JAR. + +```groovy +// Merging Service Files +shadowJar { + mergeServiceFiles() +} +``` + +The above code snippet is a convenience syntax for calling +[`transform(ServiceFileTransformer.class)`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#transform(Class)). + +> Groovy Extension Module descriptor files (located at `META-INF/services/org.codehaus.groovy.runtime.ExtensionModule`) +are ignored by the [`ServiceFileTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html). +This is due to these files having a different syntax than standard service descriptor files. +Use the [`mergeGroovyExtensionModules()`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#mergeGroovyExtensionModules()) method to merge +these files if your dependencies contain them. + +### Configuring the Location of Service Descriptor Files + +By default the [`ServiceFileTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +is configured to merge files in `META-INF/services`. +This directory can be overridden to merge descriptor files in a different location. + +```groovy +// Merging Service Files in a Specific Directory +shadowJar { + mergeServiceFiles { + path = 'META-INF/custom' + } +} +``` + +#### Excluding/Including Specific Service Descriptor Files From Merging + +The [`ServiceFileTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +class supports specifying specific files to include or exclude from merging. + +```groovy +// Excluding a Service Descriptor From Merging +shadowJar { + mergeServiceFiles { + exclude 'META-INF/services/com.acme.*' + } +} +``` + +## Merging Groovy Extension Modules + +Shadow provides a specific transformer for dealing with Groovy extension module files. +This is due to their special syntax and how they need to be merged together. +The l[`GroovyExtensionModuleTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformer.html) +will handle these files. +The [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task also provides a short syntax +method to add this transformer. + +```groovy +// Merging Groovy Extension Modules +shadowJar { + mergeGroovyExtensionModules() +} +``` + +## Appending Text Files + +Generic text files can be appended together using the +[`AppendingTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer.html). +Each file is appended using new lines to separate content. +The [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task provides a short syntax +method of +[`append(String)`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#append(java.lang.String)) to +configure this transformer. + +```groovy +// Appending a Property File +shadowJar { + append 'test.properties' +} +``` + +## Appending XML Files + +XML files require a special transformer for merging. +The l[`XmlAppendingTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html) +reads each XML document and merges each root element into a single document. +There is no short syntax method for the [`XmlAppendingTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html). +It must be added using the [`transform`](/api/com/github/jengelman/gradle/plugins/shadow//tasks/ShadowJar.html#transform(Class)) methods. + +```groovy +// Appending a XML File +shadowJar { + tranform(XmlAppendingTransformer.class) { + resource = 'properties.xml' + } +} +``` \ No newline at end of file diff --git a/src/docs/configuration/minimizing/README.md b/src/docs/configuration/minimizing/README.md new file mode 100644 index 000000000..fba428179 --- /dev/null +++ b/src/docs/configuration/minimizing/README.md @@ -0,0 +1,25 @@ +# Minimizing + +Shadow can automatically remove all classes of dependencies that are not used by the project, thereby minimizing the resulting shadowed JAR. + +```groovy +// Minimizing an shadow JAR +shadowJar { + minimize() +} +``` + +A dependency can be excluded from the minimization process thereby forcing it's inclusion the shadow JAR. +This is useful when the dependency analyzer cannot find the usage of a class programmatically, for example if the class +is loaded dynamically via `Class.forName(String)`. + +```groovy +// Force a class to be retained during minimization +shadowJar { + minimize { + exclude(dependency('org.scala-lang:.*:.*')) + } +} +``` + +> Dependencies scoped as `api` will automatically excluded from minimization and used as "entry points" on minimization. diff --git a/src/docs/configuration/relocation/README.md b/src/docs/configuration/relocation/README.md new file mode 100644 index 000000000..ecb36d693 --- /dev/null +++ b/src/docs/configuration/relocation/README.md @@ -0,0 +1,74 @@ +# Relocating Packages + +Shadow is capable of scanning a project's classes and relocating specific dependencies to a new location. +This is often required when one of the dependencies is susceptible to breaking changes in versions or +to classpath pollution in a downstream project. + +> Google's Guava and the ASM library are typical cases where package relocation can come in handy. + +Shadow uses the ASM library to modify class byte code to replace the package name and any import +statements for a class. +Any non-class files that are stored within a package structure are also relocated to the new location. + +```groovy +// Relocating a Package +shadowJar { + relocate 'junit.framework', 'shadow.junit' +} +``` + +The code snippet will rewrite the location for any class in the `junit.framework` to be `shadow.junit`. +For example, the class `junit.textui.TestRunner` becomes `shadow.junit.TestRunner`. +In the resulting JAR, the class file is relocated from `junit/textui/TestRunner.class` to +`shadow/junit/TestRunner.class`. + +> Relocation operates at a package level. +It is not necessary to specify any patterns for matching, it will operate simply on the prefix +provided. + +> Relocation will be applied globally to all instance of the matched prefix. +That is, it does **not** scope to _only_ the dependencies being shadowed. +Be specific as possible when configuring relocation as to avoid unintended relocations. + +## Filtering Relocation + +Specific classes or files can be `included`/`excluded` from the relocation operation if necessary. + +```groovy +// Configuring Filtering for Relocation +shadowJar { + relocate('junit.textui', 'a') { + exclude 'junit.textui.TestRunner' + } + relocate('junit.framework', 'b') { + include 'junit.framework.Test*' + } +} +``` + +## Automatically Relocating Dependencies + +Shadow ships with a task that can be used to automatically configure all packages from all dependencies to be relocated. +This feature was formally shipped into a 2nd plugin (`com.github.johnrengelman.plugin-shadow`) but has been +removed for clarity reasons in version 4.0.0. + +To configure automatic dependency relocation, declare a task of type `ConfigureShadowRelocation` and configure the +`target` parameter to be the `ShadowJar` task you wish to auto configure. You will also need to declared a task +dependency so the tasks execute in the correct order. + +```groovy +// Configure Auto Relocation +task relocateShadowJar(type: ConfigureShadowRelocation) { + target = tasks.shadowJar + prefix = "myapp" // Default value is "shadow" + +} + +tasks.shadowJar.dependsOn tasks.relocateShadowJar +``` + +> Configuring package auto relocation can add significant time to the shadow process as it will process all dependencies +in the configurations declared to be shadowed. By default, this is the `runtime` or `runtimeClasspath` configurations. +Be mindful that some Gradle plugins (such as `java-gradle-plugin` will automatically add dependencies to your class path +(e.g. `java-gradle-plugin` automatically adds the full Gradle API to your `compile` configuratinon. You may need to +remove these dependencies if you do not intend to shadow them into your library. \ No newline at end of file diff --git a/src/docs/configuration/reproducible-builds/README.md b/src/docs/configuration/reproducible-builds/README.md new file mode 100644 index 000000000..feac281c7 --- /dev/null +++ b/src/docs/configuration/reproducible-builds/README.md @@ -0,0 +1,15 @@ +# Reproducible Builds + +Because JAR files contain the timestamp of the included files, it is often difficult to create reproducible builds +from a source commit that results in a hash identical file. +Gradle supports reproducible JAR creation by setting the timestamps of included files to a consistent value. +Shadow includes support for overriding file timestamps starting in version 4.0.0. By default, Shadow will preserve +the file timestamps when creating the Shadow JAR. To set timestamps to a consistent value (1980/1/1 00:00:00), +set the `preserveFileTimestamps` property to `false` on the `ShadowJar` task. + +```groovy +// Reset file timestamps +shadowJar { + preserveFileTimestamps = false +} +``` diff --git a/src/docs/custom-tasks/README.md b/src/docs/custom-tasks/README.md new file mode 100644 index 000000000..6c73b3439 --- /dev/null +++ b/src/docs/custom-tasks/README.md @@ -0,0 +1,19 @@ +# Creating a Custom ShadowJar Task + +The built in `shadowJar` task only provides an output for the `main` source set of the project. +It is possible to add arbitrary [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) +tasks to a project. When doing so, ensure that the `configurations` property is specified to inform Shadow which +dependencies to merge into the output. + +```groovy +// Shadowing Test Sources and Dependencies +task testJar(type: ShadowJar) { + classifier = 'tests' + from sourceSets.test.output + configurations = [project.configurations.testRuntime] +} +``` + +The code snippet above will geneated a shadowed JAR contain both the `main` and `test` sources as well as all `runtime` +and `testRuntime` dependencies. +The file is output to `build/libs/--tests.jar`. diff --git a/src/docs/getting-started/README.md b/src/docs/getting-started/README.md new file mode 100644 index 000000000..6540aaf50 --- /dev/null +++ b/src/docs/getting-started/README.md @@ -0,0 +1,91 @@ +# Getting Started + +```groovy +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.github.jengelman.gradle.plugins:shadow:{project-version}' + } +} + +apply plugin: 'com.github.johnrengelman.shadow' +apply plugin: 'java' +``` + +Alternatively, the Gradle Plugin syntax can be used: + +```groovy +plugins { + id 'com.github.johnrengelman.shadow' version '{project-version}' + id 'java' +} +``` + +Shadow is a reactive plugin. +This means that applying Shadow by itself will perform no configuration on your project. +Instead, Shadow _reacts_ +This means, that for most users, the `java` or `groovy` plugins must be _explicitly_ applied +to have the desired effect. + +## Default Java/Groovy Tasks + +In the presence of the `java` or `groovy` plugins, Shadow will automatically configure the +following behavior: + +* Adds a `shadowJar` task to the project. +* Adds a `shadow` configuration to the project. +* Configures the `shadowJar` task to include all sources from the project's `main` sourceSet. +* Configures the `shadowJar` task to bundle all dependencies from the `runtime` configuration. +* Configures the _classifier_ attribute of the `shadowJar` task to be `'all'` . +* Configures the `shadowJar` task to generate a `Manifest` with: + * Inheriting all configuration from the standard `jar` task. + * Adds a `Class-Path` attribute to the `Manifest` that appends all dependencies from the `shadow` configuration +* Configures the `shadowJar` task to _exclude_ any JAR index or cryptographic signature files matching the following patterns: + * `META-INF/INDEX.LIST` + * `META-INF/*.SF` + * `META-INF/*.DSA` + * `META-INF/*.RSA` +* Creates and registers the `shadow` component in the project (used for integrating with `maven-publish`). +* Configures the `uploadShadow` task (as part of the `maven` plugin) with the following behavior: +** Removes the `compile` and `runtime` configurations from the `pom.xml` file mapping. +** Adds the `shadow` configuration to the `pom.xml` file as `RUNTIME` scope. + +## Shadowing Gradle Plugins + +Starting with v2.0.0, Shadow is capable of automatically configuring package relocation for your dependencies. +This is useful especially when building Gradle plugins where you want your dependencies to not conflict with versions +provided by the Gradle runtime. + +```groovy +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.github.jengelman.gradle.plugins:shadow:{project-version}' + } +} + +apply plugin: 'com.github.johnrengelman.plugin-shadow' +apply plugin: 'java' +``` + +Alternatively, the Gradle Plugin syntax can be used: + +```groovy +plugins { + id 'com.github.johnrengelman.plugin-shadow' version '{project-version}' + id 'java' +} +``` + +Applying the `plugin-shadow` plugin is the same as applying the standard `shadow` plugin with the additional creation +of the `configureRelocationShadowJar` task. +This task runs before the `shadowJar` task and scans the packages present in the dependencies that will be merged into +the final jar and automatically configures relocation for them. +By default the tasks relocates all packages to the `shadow.` prefix. For example `org.jdom2.JDOMException` becomes +`shadow.org.jdom2.JDOMException` + +For more details see the section [Using Shadow to Package Gradle Plugins](/shadowing-plugins/) diff --git a/src/docs/introduction/README.md b/src/docs/introduction/README.md new file mode 100644 index 000000000..fd0b18fc4 --- /dev/null +++ b/src/docs/introduction/README.md @@ -0,0 +1,43 @@ +# Introduction + +Shadow is a Gradle plugin for combining dependency classes and resources with a project's into a single +output Jar. +The combined Jar is often referred to a _fat-jar_ or _uber-jar_. +Shadow utilizes `JarInputStream` and `JarOutputStream` to efficiently process dependent libraries +into the output jar without incurring the I/O overhead of expanding the jars to disk. + +## Benefits of Shadow + +Shadowing a project output has 2 major use cases: + +1. Creating an _executable_ JAR distribution +1. Bundling and relocating common dependencies in libraries to avoid classpath conflicts + +### Executable Distributions + +Executable distribution is the main use case for _application_ an be deployed and executed/run in the runtime +environment. +In the case of Shadow, this is a single _uber_ or _fat_ JAR. +The JAR file contains all the application code and dependent libraries to execute (not including the standard JVM +libraries). +The shadow JAR does **not** include the JRE itself. +It must be available on the target system. + +Executable JARs contain a JAR MANIFEST that specifies the application Main Class. +This allows the application to be started with a single command: + +```bash +$ java -jar application-shadow.jar +``` + +### Library Bundling + +Dependency bundling and relocation is the main use case for _library_ authors. +The goal of a bundled library is to create a pre-packaged dependency for other libraries or applications to utilize. +Often in these scenarios, a library may contain a dependency that a downstream library or application also uses. +In _some_ cases, different versions of this common dependency can cause an issue in either the upstream library or +the downstream application. +These issues often manifest themselves as binary incompatibilities in either the library or application code. + +By utilizing Shadow's ability to _relocate_ the package names for dependencies, a library author can ensure that the +library's dependencies will not conflict with the same dependency being declared by the downstream application. diff --git a/src/docs/multi-project/README.md b/src/docs/multi-project/README.md new file mode 100644 index 000000000..8ce0ff88f --- /dev/null +++ b/src/docs/multi-project/README.md @@ -0,0 +1,20 @@ +# Using Shadow in Multi-Project Builds + +When using Shadow in a multi-project build, project dependencies will be treated the same as +external dependencies. +That is a project dependency will be merged into the `shadowJar` output of the project that +is applying the Shadow plugin. + +## Depending on the Shadow Jar from Another Project + +In a multi-project build there may be one project that applies Shadow and another that +requires the shadowed JAR as a dependency. +In this case, use Gradle's normal dependency declaration mechanism to depend on the `shadow` +configuration of the shadowed project. + +```groovy +// Depending On Shadow Output of Project +dependencies { + compile project(path: 'api', configuration: 'shadow') +} +``` \ No newline at end of file diff --git a/src/docs/plugins/README.md b/src/docs/plugins/README.md new file mode 100644 index 000000000..d4082e7a5 --- /dev/null +++ b/src/docs/plugins/README.md @@ -0,0 +1,43 @@ +# Using Shadow to Package Gradle Plugins + +In some scenarios, writing a Gradle plugin can be problematic because your plugin may depend on a version that +conflicts with the same dependency provided by the Gradle runtime. If this is the case, then you can utilize Shadow +to relocate your dependencies to a different package name to avoid the collision. + +Configuring the relocation has always been possible, but the build author is required to know all the package names +before hand. Shadow v2.0 corrects this by introducing a new task type `ConfigureShadowRelocation`. +Tasks of this type are configured to target an instance of a `ShadowJar` task and run immediately before it. + +The `ConfigureShadowRelocation` task, scans the dependencies from the configurations specified on the associated +`ShadowJar` task and collects the package names contained within them. It then configures relocation for these +packages using the specified `prefix` on the associated `ShadowJar` task. + +While this is useful for developing Gradle plugins, nothing about the `ConfigureShadowRelocation` task is tied to +Gradle projects. It can be used for standard Java or Groovy projects. + +A simple Gradle plugin can use this feature by applying the `plugin-shadow` plugin and configuring the dependencies +like so: + +```groovy +plugins { + id 'com.github.johnrengelman.plugin-shadow' version '{project-version}' + id 'java' +} + +dependencies { + shadow localGroovy() + shadow gradleApi() + + compile 'org.jdom:jdom2:2.0.6' + compile 'org.ow2.asm:asm:6.0' + compile 'org.ow2.asm:asm-commons:6.0' + compile 'commons-io:commons-io:2.4' + compile 'org.apache.ant:ant:1.9.4' + compile 'org.codehaus.plexus:plexus-utils:2.0.6' +} +``` + +Note that the `localGroovy()` and `gradleApi()` dependencies are added to the `shadow` configuration instead of the +normal `compile` configuration. These 2 dependencies are provided by Gradle to compile your project but are ultimately +provided by the Gradle runtime when executing the plugin. Thus, it is **not** advisable to bundle these dependencies +with your plugin. \ No newline at end of file diff --git a/src/docs/publishing/README.md b/src/docs/publishing/README.md new file mode 100644 index 000000000..1d3905239 --- /dev/null +++ b/src/docs/publishing/README.md @@ -0,0 +1,67 @@ +# Publishing Shadow JARs + +## Publishing with Maven-Publish Plugin + +The Shadow plugin will automatically configure the necessary tasks in the presence of Gradle's +`maven-publish` plugin. +The plugin provides the `component` method from the `shadow` extension to configure the +publication with the necessary artifact and dependencies in the POM file. + +```groovy +// Publishing a Shadow JAR with the Maven-Publish Plugin +apply plugin: 'java' +apply plugin: 'maven-publish' +apply plugin: 'com.github.johnrengelman.shadow' + +publishing { + publications { + shadow(MavenPublication) { publication -> + project.shadow.component(publication) + } + } + repositories { + maven { + url "http://repo.myorg.com" + } + } +} +``` + +## Publishing with Maven Plugin + +The Shadow plugin will automatically configure the necessary tasks in the presence of Gradle's +`maven` plugin. +To publish the JAR, simply configure the publish location for the `uploadShadow` task and execute it. + +```groovy +// Publishing a Shadow JAR with the Maven Plugin +apply plugin: 'java' +apply plugin: 'maven' +apply plugin: 'com.github.johnrengelman.shadow' + +uploadShadow { + repositories { + mavenDeployer { + repository(url: "http://repo.myorg.com") + } + } +} +``` + +## Shadow Configuration and Publishing + +The Shadow plugin provides a custom configuration (`configurations.shadow`) to specify +runtime dependencies that are **not** merged into the final JAR file. +When configuring publishing with the Shadow plugin, the dependencies in the `shadow` +configuration, are translated to become `RUNTIME` scoped dependencies of the +published artifact. + +No other dependencies are automatically configured for inclusion in the POM file. +For example, excluded dependencies are **not** automatically added to the POM file or +if the configuration for merging are modified by specifying +`shadowJar.configurations = [configurations.myconfiguration]`, there is no automatic +configuration of the POM file. + +This automatic configuration occurs _only_ when using the above methods for +configuring publishing. If this behavior is not desirable, then publishing **must** +be manually configured. diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..82805b9af --- /dev/null +++ b/yarn.lock @@ -0,0 +1,6187 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.47.tgz#d18c2f4c4ba8d093a2bcfab5616593bfe2441a27" + dependencies: + "@babel/highlight" "7.0.0-beta.47" + +"@babel/core@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0-beta.47.tgz#b9c164fb9a1e1083f067c236a9da1d7a7d759271" + dependencies: + "@babel/code-frame" "7.0.0-beta.47" + "@babel/generator" "7.0.0-beta.47" + "@babel/helpers" "7.0.0-beta.47" + "@babel/template" "7.0.0-beta.47" + "@babel/traverse" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + babylon "7.0.0-beta.47" + convert-source-map "^1.1.0" + debug "^3.1.0" + json5 "^0.5.0" + lodash "^4.17.5" + micromatch "^2.3.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.47.tgz#1835709f377cc4d2a4affee6d9258a10bbf3b9d1" + dependencies: + "@babel/types" "7.0.0-beta.47" + jsesc "^2.5.1" + lodash "^4.17.5" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-annotate-as-pure@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.47.tgz#354fb596055d9db369211bf075f0d5e93904d6f6" + dependencies: + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-builder-binary-assignment-operator-visitor@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.47.tgz#d5917c29ee3d68abc2c72f604bc043f6e056e907" + dependencies: + "@babel/helper-explode-assignable-expression" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-call-delegate@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.47.tgz#96b7804397075f722a4030d3876f51ec19d8829b" + dependencies: + "@babel/helper-hoist-variables" "7.0.0-beta.47" + "@babel/traverse" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-define-map@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.47.tgz#43a9def87c5166dc29630d51b3da9cc4320c131c" + dependencies: + "@babel/helper-function-name" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + lodash "^4.17.5" + +"@babel/helper-explode-assignable-expression@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.47.tgz#56b688e282a698f4d1cf135453a11ae8af870a19" + dependencies: + "@babel/traverse" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-function-name@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.47.tgz#8057d63e951e85c57c02cdfe55ad7608d73ffb7d" + dependencies: + "@babel/helper-get-function-arity" "7.0.0-beta.47" + "@babel/template" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-get-function-arity@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.47.tgz#2de04f97c14b094b55899d3fa83144a16d207510" + dependencies: + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-hoist-variables@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.47.tgz#ce295d1d723fe22b2820eaec748ed701aa5ae3d0" + dependencies: + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-member-expression-to-functions@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0-beta.47.tgz#35bfcf1d16dce481ef3dec66d5a1ae6a7d80bb45" + dependencies: + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-module-imports@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.47.tgz#5af072029ffcfbece6ffbaf5d9984c75580f3f04" + dependencies: + "@babel/types" "7.0.0-beta.47" + lodash "^4.17.5" + +"@babel/helper-module-transforms@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.47.tgz#7eff91fc96873bd7b8d816698f1a69bbc01f3c38" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.47" + "@babel/helper-simple-access" "7.0.0-beta.47" + "@babel/helper-split-export-declaration" "7.0.0-beta.47" + "@babel/template" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + lodash "^4.17.5" + +"@babel/helper-optimise-call-expression@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.47.tgz#085d864d0613c5813c1b7c71b61bea36f195929e" + dependencies: + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-plugin-utils@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.47.tgz#4f564117ec39f96cf60fafcde35c9ddce0e008fd" + +"@babel/helper-regex@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0-beta.47.tgz#b8e3b53132c4edbb04804242c02ffe4d60316971" + dependencies: + lodash "^4.17.5" + +"@babel/helper-remap-async-to-generator@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.47.tgz#444dc362f61470bd61a745ebb364431d9ca186c2" + dependencies: + "@babel/helper-annotate-as-pure" "7.0.0-beta.47" + "@babel/helper-wrap-function" "7.0.0-beta.47" + "@babel/template" "7.0.0-beta.47" + "@babel/traverse" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-replace-supers@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.47.tgz#310b206a302868a792b659455ceba27db686cbb7" + dependencies: + "@babel/helper-member-expression-to-functions" "7.0.0-beta.47" + "@babel/helper-optimise-call-expression" "7.0.0-beta.47" + "@babel/traverse" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-simple-access@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.47.tgz#234d754acbda9251a10db697ef50181eab125042" + dependencies: + "@babel/template" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + lodash "^4.17.5" + +"@babel/helper-split-export-declaration@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.47.tgz#e11277855472d8d83baf22f2d0186c4a2059b09a" + dependencies: + "@babel/types" "7.0.0-beta.47" + +"@babel/helper-wrap-function@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.47.tgz#6528b44a3ccb4f3aeeb79add0a88192f7eb81161" + dependencies: + "@babel/helper-function-name" "7.0.0-beta.47" + "@babel/template" "7.0.0-beta.47" + "@babel/traverse" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + +"@babel/helpers@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0-beta.47.tgz#f9b42ed2e4d5f75ec0fb2e792c173e451e8d40fd" + dependencies: + "@babel/template" "7.0.0-beta.47" + "@babel/traverse" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + +"@babel/highlight@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.47.tgz#8fbc83fb2a21f0bd2b95cdbeb238cf9689cad494" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +"@babel/plugin-proposal-async-generator-functions@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.47.tgz#571142284708c5ad4ec904d9aa705461a010be53" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-remap-async-to-generator" "7.0.0-beta.47" + "@babel/plugin-syntax-async-generators" "7.0.0-beta.47" + +"@babel/plugin-proposal-class-properties@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.0.0-beta.47.tgz#08c1a1dfc92d0f5c37b39096c6fb883e1ca4b0f5" + dependencies: + "@babel/helper-function-name" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-replace-supers" "7.0.0-beta.47" + "@babel/plugin-syntax-class-properties" "7.0.0-beta.47" + +"@babel/plugin-proposal-decorators@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.0.0-beta.47.tgz#5e8943c8f8eb3301f911ef0dcd3ed64cf28c723e" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-syntax-decorators" "7.0.0-beta.47" + +"@babel/plugin-proposal-export-namespace-from@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.0.0-beta.47.tgz#38171dd0fd5f54aee377d338ed41bb92e25d6720" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-syntax-export-namespace-from" "7.0.0-beta.47" + +"@babel/plugin-proposal-function-sent@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.0.0-beta.47.tgz#3ad46c04a277a887731f21843013292d254f7ba9" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-wrap-function" "7.0.0-beta.47" + "@babel/plugin-syntax-function-sent" "7.0.0-beta.47" + +"@babel/plugin-proposal-numeric-separator@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.0.0-beta.47.tgz#3ace5cbacb62c3fa223c3c0b66c0c16e63a8e259" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-syntax-numeric-separator" "7.0.0-beta.47" + +"@babel/plugin-proposal-object-rest-spread@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.47.tgz#e1529fddc88e948868ee1d0edaa27ebd9502322d" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.47" + +"@babel/plugin-proposal-optional-catch-binding@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.47.tgz#8c6453919537517ea773bb8f3fceda4250795efa" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.47" + +"@babel/plugin-proposal-throw-expressions@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.0.0-beta.47.tgz#9a67f8b0852b4b0b255eff5d6d25fa436928424f" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-syntax-throw-expressions" "7.0.0-beta.47" + +"@babel/plugin-proposal-unicode-property-regex@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.47.tgz#34d7e4811bdc4f512400bb29d01051842528c8d5" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-regex" "7.0.0-beta.47" + regexpu-core "^4.1.4" + +"@babel/plugin-syntax-async-generators@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.47.tgz#8ab94852bf348badc866af85bd852221f0961256" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-class-properties@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.0.0-beta.47.tgz#de52bed12fd472c848e1562f57dd4a202fe27f11" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-decorators@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.0.0-beta.47.tgz#a42f10fcd651940bc475d93b3ac23432b4a8a293" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-dynamic-import@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.0.0-beta.47.tgz#ee964915014a687701ee8e15c289e31a7c899e60" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-export-namespace-from@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.0.0-beta.47.tgz#fd446c76c59849f15e6cde235b5b8e153413f21e" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-function-sent@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.0.0-beta.47.tgz#8d15536f55b21acdf9bfaa177c46591a589fe8b0" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-import-meta@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.0.0-beta.47.tgz#8ab5174209a954b91e327004a7d16737bcc4774d" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-jsx@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.0.0-beta.47.tgz#f3849d94288695d724bd205b4f6c3c99e4ec24a4" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-numeric-separator@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.0.0-beta.47.tgz#9f06cb770a94f464b3b2889d2110080bc302fc80" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-object-rest-spread@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.47.tgz#21da514d94c138b2261ca09f0dec9abadce16185" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-optional-catch-binding@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.47.tgz#0b1c52b066aa36893c41450773a5adb904cd4024" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-syntax-throw-expressions@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.0.0-beta.47.tgz#8ca197bab3534f443eecd7eb79da47e199dafaf7" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-arrow-functions@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.47.tgz#d6eecda4c652b909e3088f0983ebaf8ec292984b" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-async-to-generator@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.47.tgz#5723816ea1e91fa313a84e6ee9cc12ff31d46610" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-remap-async-to-generator" "7.0.0-beta.47" + +"@babel/plugin-transform-block-scoped-functions@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.47.tgz#e422278e06c797b43c45f459d83c7af9d6237002" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-block-scoping@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.47.tgz#b737cc58a81bea57efd5bda0baef9a43a25859ad" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + lodash "^4.17.5" + +"@babel/plugin-transform-classes@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.47.tgz#7aff9cbe7b26fd94d7a9f97fa90135ef20c93fb6" + dependencies: + "@babel/helper-annotate-as-pure" "7.0.0-beta.47" + "@babel/helper-define-map" "7.0.0-beta.47" + "@babel/helper-function-name" "7.0.0-beta.47" + "@babel/helper-optimise-call-expression" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-replace-supers" "7.0.0-beta.47" + "@babel/helper-split-export-declaration" "7.0.0-beta.47" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.47.tgz#56ef2a021769a2b65e90a3e12fd10b791da9f3e0" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-destructuring@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.47.tgz#452b607775fd1c4d10621997837189efc0a6d428" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-dotall-regex@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.47.tgz#d8da9b706d4bfc68dec9d565661f83e6e8036636" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-regex" "7.0.0-beta.47" + regexpu-core "^4.1.3" + +"@babel/plugin-transform-duplicate-keys@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.47.tgz#4aabeda051ca3007e33a207db08f1a0cf9bd253b" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-exponentiation-operator@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.47.tgz#930e1abf5db9f4db5b63dbf97f3581ad0be1e907" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-for-of@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.47.tgz#527d5dc24e4a4ad0fc1d0a3990d29968cb984e76" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-function-name@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.47.tgz#fb443c81cc77f3206a863b730b35c8c553ce5041" + dependencies: + "@babel/helper-function-name" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-literals@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.47.tgz#448fad196f062163684a38f10f14e83315892e9c" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-modules-amd@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.47.tgz#84564419b11c1be6b9fcd4c7b3a6737f2335aac4" + dependencies: + "@babel/helper-module-transforms" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-modules-commonjs@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.47.tgz#dfe5c6d867aa9614e55f7616736073edb3aab887" + dependencies: + "@babel/helper-module-transforms" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-simple-access" "7.0.0-beta.47" + +"@babel/plugin-transform-modules-systemjs@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.47.tgz#8514dbcdfca3345abd690059e7e8544e16ecbf05" + dependencies: + "@babel/helper-hoist-variables" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-modules-umd@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.47.tgz#6dcfb9661fdd131b20b721044746a7a309882918" + dependencies: + "@babel/helper-module-transforms" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-new-target@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.47.tgz#4b5cb7ce30d7bffa105a1f43ed07d6ae206a4155" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-object-super@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.47.tgz#ca8e5f326c5011c879f3a6ed749e58bd10fff05d" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-replace-supers" "7.0.0-beta.47" + +"@babel/plugin-transform-parameters@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.47.tgz#46a4236040a6552a5f165fb3ddd60368954b0ddd" + dependencies: + "@babel/helper-call-delegate" "7.0.0-beta.47" + "@babel/helper-get-function-arity" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-regenerator@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.47.tgz#86500e1c404055fb98fc82b73b09bd053cacb516" + dependencies: + regenerator-transform "^0.12.3" + +"@babel/plugin-transform-runtime@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.0.0-beta.47.tgz#1700938fa8710909cbf28f7dd39f9b40688b09fd" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-shorthand-properties@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.47.tgz#00be44c4fad8fe2c00ed18ea15ea3c88dd519dbb" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-spread@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.47.tgz#3feadb02292ed1e9b75090d651b9df88a7ab5c50" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-sticky-regex@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.47.tgz#c0aa347d76b5dc87d3b37ac016ada3f950605131" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-regex" "7.0.0-beta.47" + +"@babel/plugin-transform-template-literals@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.47.tgz#5f7b5badf64c4c5da79026aeab03001e62a6ee5f" + dependencies: + "@babel/helper-annotate-as-pure" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-typeof-symbol@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.47.tgz#03c612ec09213eb386a81d5fa67c234ee4b2034c" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + +"@babel/plugin-transform-unicode-regex@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.47.tgz#efed0b2f1dfbf28283502234a95b4be88f7fdcb6" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/helper-regex" "7.0.0-beta.47" + regexpu-core "^4.1.3" + +"@babel/preset-env@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0-beta.47.tgz#a3dab3b5fac4de56e3510bdbcb528f1cbdedbe2d" + dependencies: + "@babel/helper-module-imports" "7.0.0-beta.47" + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.47" + "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.47" + "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.47" + "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.47" + "@babel/plugin-syntax-async-generators" "7.0.0-beta.47" + "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.47" + "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.47" + "@babel/plugin-transform-arrow-functions" "7.0.0-beta.47" + "@babel/plugin-transform-async-to-generator" "7.0.0-beta.47" + "@babel/plugin-transform-block-scoped-functions" "7.0.0-beta.47" + "@babel/plugin-transform-block-scoping" "7.0.0-beta.47" + "@babel/plugin-transform-classes" "7.0.0-beta.47" + "@babel/plugin-transform-computed-properties" "7.0.0-beta.47" + "@babel/plugin-transform-destructuring" "7.0.0-beta.47" + "@babel/plugin-transform-dotall-regex" "7.0.0-beta.47" + "@babel/plugin-transform-duplicate-keys" "7.0.0-beta.47" + "@babel/plugin-transform-exponentiation-operator" "7.0.0-beta.47" + "@babel/plugin-transform-for-of" "7.0.0-beta.47" + "@babel/plugin-transform-function-name" "7.0.0-beta.47" + "@babel/plugin-transform-literals" "7.0.0-beta.47" + "@babel/plugin-transform-modules-amd" "7.0.0-beta.47" + "@babel/plugin-transform-modules-commonjs" "7.0.0-beta.47" + "@babel/plugin-transform-modules-systemjs" "7.0.0-beta.47" + "@babel/plugin-transform-modules-umd" "7.0.0-beta.47" + "@babel/plugin-transform-new-target" "7.0.0-beta.47" + "@babel/plugin-transform-object-super" "7.0.0-beta.47" + "@babel/plugin-transform-parameters" "7.0.0-beta.47" + "@babel/plugin-transform-regenerator" "7.0.0-beta.47" + "@babel/plugin-transform-shorthand-properties" "7.0.0-beta.47" + "@babel/plugin-transform-spread" "7.0.0-beta.47" + "@babel/plugin-transform-sticky-regex" "7.0.0-beta.47" + "@babel/plugin-transform-template-literals" "7.0.0-beta.47" + "@babel/plugin-transform-typeof-symbol" "7.0.0-beta.47" + "@babel/plugin-transform-unicode-regex" "7.0.0-beta.47" + browserslist "^3.0.0" + invariant "^2.2.2" + semver "^5.3.0" + +"@babel/preset-stage-2@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/preset-stage-2/-/preset-stage-2-7.0.0-beta.47.tgz#deb930c44d7d6e519a33174bba121a2a630ed654" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-proposal-decorators" "7.0.0-beta.47" + "@babel/plugin-proposal-export-namespace-from" "7.0.0-beta.47" + "@babel/plugin-proposal-function-sent" "7.0.0-beta.47" + "@babel/plugin-proposal-numeric-separator" "7.0.0-beta.47" + "@babel/plugin-proposal-throw-expressions" "7.0.0-beta.47" + "@babel/preset-stage-3" "7.0.0-beta.47" + +"@babel/preset-stage-3@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/preset-stage-3/-/preset-stage-3-7.0.0-beta.47.tgz#17028f3b5dddc548d80404c86ed62622f601597b" + dependencies: + "@babel/helper-plugin-utils" "7.0.0-beta.47" + "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.47" + "@babel/plugin-proposal-class-properties" "7.0.0-beta.47" + "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.47" + "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.47" + "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.47" + "@babel/plugin-syntax-dynamic-import" "7.0.0-beta.47" + "@babel/plugin-syntax-import-meta" "7.0.0-beta.47" + +"@babel/runtime@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.47.tgz#273f5e71629e80f6cbcd7507503848615e59f7e0" + dependencies: + core-js "^2.5.3" + regenerator-runtime "^0.11.1" + +"@babel/template@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.47.tgz#0473970a7c0bee7a1a18c1ca999d3ba5e5bad83d" + dependencies: + "@babel/code-frame" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + babylon "7.0.0-beta.47" + lodash "^4.17.5" + +"@babel/traverse@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.47.tgz#0e57fdbb9ff3a909188b6ebf1e529c641e6c82a4" + dependencies: + "@babel/code-frame" "7.0.0-beta.47" + "@babel/generator" "7.0.0-beta.47" + "@babel/helper-function-name" "7.0.0-beta.47" + "@babel/helper-split-export-declaration" "7.0.0-beta.47" + "@babel/types" "7.0.0-beta.47" + babylon "7.0.0-beta.47" + debug "^3.1.0" + globals "^11.1.0" + invariant "^2.2.0" + lodash "^4.17.5" + +"@babel/types@7.0.0-beta.47": + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.47.tgz#e6fcc1a691459002c2671d558a586706dddaeef8" + dependencies: + esutils "^2.0.2" + lodash "^4.17.5" + to-fast-properties "^2.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.0.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.1.tgz#53f349bb986ab273d601175aa1b25a655ab90ee3" + +"@shellscape/koa-send@^4.1.0": + version "4.1.3" + resolved "https://registry.yarnpkg.com/@shellscape/koa-send/-/koa-send-4.1.3.tgz#1a7c8df21f63487e060b7bfd8ed82e1d3c4ae0b0" + dependencies: + debug "^2.6.3" + http-errors "^1.6.1" + mz "^2.6.0" + resolve-path "^1.3.3" + +"@shellscape/koa-static@^4.0.4": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@shellscape/koa-static/-/koa-static-4.0.5.tgz#b329b55bfd41056a6981c584ae6bace30b5b6b3b" + dependencies: + "@shellscape/koa-send" "^4.1.0" + debug "^2.6.8" + +"@vue/babel-preset-app@3.0.0-beta.11": + version "3.0.0-beta.11" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-3.0.0-beta.11.tgz#c8b889aa73464050f9cd3f9dc621951d85c24508" + dependencies: + "@babel/plugin-syntax-jsx" "7.0.0-beta.47" + "@babel/plugin-transform-runtime" "7.0.0-beta.47" + "@babel/preset-env" "7.0.0-beta.47" + "@babel/preset-stage-2" "7.0.0-beta.47" + "@babel/runtime" "7.0.0-beta.47" + babel-helper-vue-jsx-merge-props "^2.0.3" + babel-plugin-dynamic-import-node "^1.2.0" + babel-plugin-transform-vue-jsx "^4.0.1" + +"@vue/component-compiler-utils@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@vue/component-compiler-utils/-/component-compiler-utils-2.2.0.tgz#bbbb7ed38a9a8a7c93abe7ef2e54a90a04b631b4" + dependencies: + consolidate "^0.15.1" + hash-sum "^1.0.2" + lru-cache "^4.1.2" + merge-source-map "^1.1.0" + postcss "^6.0.20" + postcss-selector-parser "^3.1.1" + prettier "1.13.7" + source-map "^0.5.6" + vue-template-es2015-compiler "^1.6.0" + +"@webassemblyjs/ast@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25" + dependencies: + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/floating-point-hex-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298" + +"@webassemblyjs/helper-api-error@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59" + +"@webassemblyjs/helper-buffer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e" + dependencies: + debug "^3.1.0" + +"@webassemblyjs/helper-code-frame@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58" + dependencies: + "@webassemblyjs/wast-printer" "1.5.13" + +"@webassemblyjs/helper-fsm@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924" + +"@webassemblyjs/helper-module-context@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5" + dependencies: + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747" + +"@webassemblyjs/helper-wasm-section@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/ieee754@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364" + dependencies: + ieee754 "^1.1.11" + +"@webassemblyjs/leb128@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee" + dependencies: + long "4.0.0" + +"@webassemblyjs/utf8@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469" + +"@webassemblyjs/wasm-edit@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/helper-wasm-section" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + "@webassemblyjs/wast-printer" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-gen@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wasm-opt@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wast-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/floating-point-hex-parser" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-code-frame" "1.5.13" + "@webassemblyjs/helper-fsm" "1.5.13" + long "^3.2.0" + mamacro "^0.0.3" + +"@webassemblyjs/wast-printer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" + long "^3.2.0" + +"@webpack-contrib/config-loader@^1.1.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@webpack-contrib/config-loader/-/config-loader-1.2.1.tgz#5b3dd474e207437939d294d200c68b7b00008e04" + dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + chalk "^2.1.0" + cosmiconfig "^5.0.2" + is-plain-obj "^1.1.0" + loud-rejection "^1.6.0" + merge-options "^1.0.1" + minimist "^1.2.0" + resolve "^1.6.0" + webpack-log "^1.1.2" + +"@webpack-contrib/schema-utils@^1.0.0-beta.0": + version "1.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chalk "^2.3.2" + strip-ansi "^4.0.0" + text-table "^0.2.0" + webpack-log "^1.1.2" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +accepts@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-dynamic-import@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" + dependencies: + acorn "^5.0.0" + +acorn@^5.0.0, acorn@^5.6.2: + version "5.7.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" + +agentkeepalive@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" + +ajv-errors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59" + +ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + +ajv@^6.0.1, ajv@^6.1.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +algoliasearch@^3.24.5: + version "3.30.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.30.0.tgz#355585e49b672e5f71d45b9c2b371ecdff129cd1" + dependencies: + agentkeepalive "^2.2.0" + debug "^2.6.8" + envify "^4.0.0" + es6-promise "^4.1.0" + events "^1.1.0" + foreach "^2.0.5" + global "^4.3.2" + inherits "^2.0.1" + isarray "^2.0.1" + load-script "^1.0.0" + object-keys "^1.0.11" + querystring-es3 "^0.2.1" + reduce "^1.0.1" + semver "^5.1.0" + tunnel-agent "^0.6.0" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +any-promise@^1.0.0, any-promise@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +app-root-path@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +arch@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.1.tgz#8f5c2731aa35a30929221bb0640eed65175ec84e" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +assert@^1.1.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + +autocomplete.js@^0.29.0: + version "0.29.0" + resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.29.0.tgz#0185f7375ee9daf068f7d52d794bc90dcd739fd7" + dependencies: + immediate "^3.2.3" + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +autoprefixer@^8.2.0: + version "8.6.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" + dependencies: + browserslist "^3.2.8" + caniuse-lite "^1.0.30000864" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.23" + postcss-value-parser "^3.2.3" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-helper-vue-jsx-merge-props@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz#22aebd3b33902328e513293a8e4992b384f9f1b6" + +babel-loader@8.0.0-beta.3: + version "8.0.0-beta.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.0-beta.3.tgz#49efeea6e8058d5af860a18a6de88b8c1450645b" + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + util.promisify "^1.0.0" + +babel-plugin-dynamic-import-node@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.2.0.tgz#f91631e703e0595e47d4beafbb088576c87fbeee" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-transform-vue-jsx@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-4.0.1.tgz#2c8bddce87a6ef09eaa59869ff1bfbeeafc5f88d" + dependencies: + esutils "^2.0.2" + +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babylon@7.0.0-beta.47: + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +bluebird@^3.1.1, bluebird@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +braces@^2.3.0, braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^3.0.0, browserslist@^3.2.8: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +cacache@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + +cache-loader@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-1.2.2.tgz#6d5c38ded959a09cc5d58190ab5af6f73bd353f5" + dependencies: + loader-utils "^1.1.0" + mkdirp "^0.5.1" + neo-async "^2.5.0" + schema-utils "^0.4.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + +camelcase@^4.0.0, camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000878" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000878.tgz#0d0c6d8500c3aea21441fad059bce4b8f3f509df" + +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864: + version "1.0.30000878" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000878.tgz#c644c39588dd42d3498e952234c372e5a40a4123" + +capture-stack-trace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + +chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2, chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^2.0.2, chokidar@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + lodash.debounce "^4.0.8" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.5" + optionalDependencies: + fsevents "^1.2.2" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + dependencies: + tslib "^1.9.0" + +ci-info@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.4.0.tgz#4841d53cad49f11b827b648ebde27a6e189b412f" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + dependencies: + chalk "^1.1.3" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.2.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + dependencies: + source-map "~0.6.0" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + +cli-cursor@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +clipboard@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.1.tgz#a12481e1c13d8a50f5f036b0560fe5d16d74e46a" + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + +clipboardy@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-1.2.3.tgz#0526361bf78724c1f20be248d428e365433c07ef" + dependencies: + arch "^2.1.0" + execa "^0.8.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + dependencies: + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.3.0, color-convert@^1.9.0: + version "1.9.2" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" + dependencies: + color-name "1.1.1" + +color-name@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" + +color-name@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +commander@2.17.x, commander@^2.15.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + +commander@~2.16.0: + version "2.16.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + +common-tags@^1.4.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +connect-history-api-fallback@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + +consola@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-1.4.3.tgz#945e967e05430ddabd3608b37f5fa37fcfacd9dd" + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + lodash "^4.17.5" + std-env "^1.1.0" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +consolidate@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" + dependencies: + bluebird "^3.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +content-disposition@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^1.1.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + +cookies@~0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" + dependencies: + depd "~1.1.1" + keygrip "~1.0.2" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +copy-webpack-plugin@^4.5.1: + version "4.5.2" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.2.tgz#d53444a8fea2912d806e78937390ddd7e632ee5c" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + globby "^7.1.1" + is-glob "^4.0.0" + loader-utils "^1.1.0" + minimatch "^3.0.4" + p-limit "^1.0.0" + serialize-javascript "^1.4.0" + +core-js@^2.4.0, core-js@^2.5.3: + version "2.5.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +cosmiconfig@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-4.0.0.tgz#760391549580bbd2df1e562bc177b13c290972dc" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + require-from-string "^2.0.1" + +cosmiconfig@^5.0.2: + version "5.0.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@^0.28.11: + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-parse@1.7.x: + version "1.7.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-1.7.0.tgz#321f6cf73782a6ff751111390fc05e2c657d8c9b" + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + +d@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + +debug@*, debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +deepmerge@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-1.5.2.tgz#10499d868844cdad4fee0842df8c7f6f0c95a753" + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@^1.1.2, depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +diacritics@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/diacritics/-/diacritics-1.3.0.tgz#3efa87323ebb863e6696cebb0082d48ff3d6f7a1" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +docsearch.js@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/docsearch.js/-/docsearch.js-2.5.2.tgz#1a3521c92e5f252cc522c57357ef1c47b945b381" + dependencies: + algoliasearch "^3.24.5" + autocomplete.js "^0.29.0" + hogan.js "^3.0.2" + to-factory "^1.0.0" + +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.0, dot-prop@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47: + version "1.3.61" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.61.tgz#a8ac295b28d0f03d85e37326fd16b6b6b17a1795" + +elliptic@^6.0.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +envify@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" + dependencies: + esprima "^4.0.0" + through "~2.3.4" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + dependencies: + is-arrayish "^0.2.1" + +error-inject@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" + +es-abstract@^1.5.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.46" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "1" + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.1.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +events@^1.0.0, events@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + +fast-glob@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.0.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + +file-loader@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + dependencies: + locate-path "^2.0.0" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +flush-write-stream@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + +for-in@^1.0.1, for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.2.2: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-port@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + +glob@7.0.x: + version "7.0.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.6.tgz#211bafaf49e525b8cd93260d14ab136152b3f57a" + dependencies: + 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" + +glob@^7.0.5, glob@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + dependencies: + ini "^1.3.4" + +global@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + +globals@^11.1.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + dependencies: + delegate "^3.1.2" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +gray-matter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.1.tgz#375263c194f0d9755578c277e41b1c1dfdf22c7d" + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.1.x, he@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hoek@4.x.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + +hogan.js@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" + dependencies: + mkdirp "0.3.0" + nopt "1.0.10" + +hosted-git-info@^2.1.4: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-minifier@^3.2.3: + version "3.5.20" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14" + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.1.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-assert@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" + dependencies: + deep-equal "~1.0.1" + http-errors "~1.6.1" + +http-errors@^1.6.1, http-errors@^1.6.3: + version "1.7.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.0.tgz#b6d36492a201c7888bdcb5dd0471140423c4ad2a" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.1, http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.11, ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + +immediate@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + dependencies: + import-from "^2.1.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + dependencies: + resolve-from "^3.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +invariant@^2.2.0, invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + +is-ci@^1.0.10, is-ci@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.0.tgz#3f4a08d6303a09882cef3f0fb97439c5f5ce2d53" + dependencies: + ci-info "^1.3.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-generator-function@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isarray@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.4.tgz#38e7bcbb0f3ba1b7933c86ba1894ddfc3781bbb7" + +isemail@3.x.x: + version "3.1.3" + resolved "https://registry.yarnpkg.com/isemail/-/isemail-3.1.3.tgz#64f37fc113579ea12523165c3ebe3a71a56ce571" + dependencies: + punycode "2.x.x" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +javascript-stringify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz#142d111f3a6e3dae8f4a9afd77d45855b5a9cce3" + +joi@^11.1.1: + version "11.4.0" + resolved "https://registry.yarnpkg.com/joi/-/joi-11.4.0.tgz#f674897537b625e9ac3d0b7e1604c828ad913ccb" + dependencies: + hoek "4.x.x" + isemail "3.x.x" + topo "2.x.x" + +js-base64@^2.1.9: + version "2.4.8" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.8.tgz#57a9b130888f956834aa40c5b165ba59c758f033" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + +js-yaml@^3.11.0, js-yaml@^3.9.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + optionalDependencies: + graceful-fs "^4.1.6" + +keygrip@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" + +killable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +koa-compose@^3.0.0, koa-compose@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-3.2.1.tgz#a85ccb40b7d986d8e5a345b3a1ace8eabcf54de7" + dependencies: + any-promise "^1.1.0" + +koa-compose@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" + +koa-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/koa-connect/-/koa-connect-2.0.1.tgz#2acad159c33862de1d73aa4562a48de13f137c0f" + +koa-convert@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" + dependencies: + co "^4.6.0" + koa-compose "^3.0.0" + +koa-is-json@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" + +koa-mount@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/koa-mount/-/koa-mount-3.0.0.tgz#08cab3b83d31442ed8b7e75c54b1abeb922ec197" + dependencies: + debug "^2.6.1" + koa-compose "^3.2.1" + +koa-range@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/koa-range/-/koa-range-0.3.0.tgz#3588e3496473a839a1bd264d2a42b1d85bd7feac" + dependencies: + stream-slice "^0.1.2" + +koa-send@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-4.1.3.tgz#0822207bbf5253a414c8f1765ebc29fa41353cb6" + dependencies: + debug "^2.6.3" + http-errors "^1.6.1" + mz "^2.6.0" + resolve-path "^1.4.0" + +koa-static@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-4.0.3.tgz#5f93ad00fb1905db9ce46667c0e8bb7d22abfcd8" + dependencies: + debug "^3.1.0" + koa-send "^4.1.3" + +koa-webpack@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/koa-webpack/-/koa-webpack-4.0.0.tgz#1d9b83c109db106d8ef65db376f910a45ba964c7" + dependencies: + app-root-path "^2.0.1" + merge-options "^1.0.0" + webpack-dev-middleware "^3.0.0" + webpack-hot-client "^3.0.0" + webpack-log "^1.1.1" + +koa@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.5.2.tgz#f2bda7f3e70be54924e7e5e9789a249f77256fe3" + dependencies: + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.7.1" + debug "^3.1.0" + delegates "^1.0.0" + depd "^1.1.2" + destroy "^1.0.4" + error-inject "^1.0.0" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" + koa-convert "^1.2.0" + koa-is-json "^1.0.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + +linkify-it@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.0.3.tgz#d94a4648f9b1c179d64fa97291268bdb6ce9434f" + dependencies: + uc.micro "^1.0.1" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +load-script@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash._reinterpolate@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.template@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + dependencies: + lodash._reinterpolate "~3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + dependencies: + lodash._reinterpolate "~3.0.0" + +lodash.throttle@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +loglevelnext@^1.0.1, loglevelnext@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" + dependencies: + es6-symbol "^3.1.1" + object.assign "^4.1.0" + +long@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + +long@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.0.0, loud-rejection@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + +lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + dependencies: + pify "^3.0.0" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +markdown-it-anchor@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.0.2.tgz#cdd917a05b7bf92fb736a6dae3385c6d0d0fa552" + +markdown-it-container@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/markdown-it-container/-/markdown-it-container-2.0.0.tgz#0019b43fd02eefece2f1960a2895fba81a404695" + +markdown-it-emoji@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/markdown-it-emoji/-/markdown-it-emoji-1.4.0.tgz#9bee0e9a990a963ba96df6980c4fddb05dfb4dcc" + +markdown-it-table-of-contents@^0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/markdown-it-table-of-contents/-/markdown-it-table-of-contents-0.4.3.tgz#6453925a76e49b9b3d9569a0d89f1c2168b46982" + +markdown-it@^8.4.1: + version "8.4.2" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-8.4.2.tgz#386f98998dc15a37722aa7722084f4020bdd9b54" + dependencies: + argparse "^1.0.7" + entities "~1.1.1" + linkify-it "^2.0.0" + mdurl "^1.0.1" + uc.micro "^1.0.5" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + +merge-options@^1.0.0, merge-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-options/-/merge-options-1.0.1.tgz#2a64b24457becd4e4dc608283247e94ce589aa32" + dependencies: + is-plain-obj "^1.1" + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + dependencies: + source-map "^0.6.1" + +merge2@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + +micromatch@^2.3.11: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@~1.35.0: + version "1.35.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" + +mime-types@^2.1.18, mime-types@~2.1.18: + version "2.1.19" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" + dependencies: + mime-db "~1.35.0" + +mime@^2.0.3, mime@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + +mini-css-extract-plugin@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.2.tgz#b3ecc0d6b1bbe5ff14add42b946a7b200cf78651" + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" + +mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +mz@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.9.2: + version "2.10.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + +nanoassert@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-1.1.0.tgz#4f3152e09540fde28c76f44b19bbcd1d5a42478d" + +nanobus@^4.3.1: + version "4.3.3" + resolved "https://registry.yarnpkg.com/nanobus/-/nanobus-4.3.3.tgz#a9635d38c687853641e2646bb2be6510cf966233" + dependencies: + nanotiming "^7.2.0" + remove-array-items "^1.0.0" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +nanoscheduler@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/nanoscheduler/-/nanoscheduler-1.0.3.tgz#6ca027941bf3e04139ea4bab6227ea6ad803692f" + dependencies: + nanoassert "^1.1.0" + +nanotiming@^7.2.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/nanotiming/-/nanotiming-7.3.1.tgz#dc5cf8d9d8ad401a4394d1a9b7a16714bccfefda" + dependencies: + nanoassert "^1.1.0" + nanoscheduler "^1.0.2" + +needle@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.2.tgz#1120ca4c41f2fcc6976fd28a8968afe239929418" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +neo-async@^2.5.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc" + +next-tick@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + +nice-try@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + dependencies: + lower-case "^1.1.1" + +node-libs-browser@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.0" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +nopt@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + hosted-git-info "^2.1.4" + is-builtin-module "^1.0.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-bundled@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + +npm-packlist@^1.1.6: + version "1.1.11" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@~1.0.0: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +on-finished@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +only@~0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" + +opn@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-4.0.3.tgz#4f714e276b279700892c4a6202b7e22812d6f683" + dependencies: + cssnano "^3.10.0" + last-call-webpack-plugin "^3.0.0" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.0.0, p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + dependencies: + no-case "^2.2.0" + +parse-asn1@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parseurl@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + +path-is-absolute@1.0.1, path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.0.16" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +portfinder@^1.0.13: + version "1.0.17" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + dependencies: + postcss "^5.0.4" + +postcss-load-config@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.0.0.tgz#f1312ddbf5912cd747177083c5ef7a19d62ee484" + dependencies: + cosmiconfig "^4.0.0" + import-cwd "^2.0.0" + +postcss-loader@^2.1.5: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.1.6.tgz#1d7dd7b17c6ba234b9bed5af13e0bea40a42d740" + dependencies: + loader-utils "^1.1.0" + postcss "^6.0.0" + postcss-load-config "^2.0.0" + schema-utils "^0.4.0" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.20, postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +prepend-http@^1.0.0, prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +prettier@1.13.7: + version "1.13.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.13.7.tgz#850f3b8af784a49a6ea2d2eaa7ed1428a34b7281" + +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + +prismjs@^1.13.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" + optionalDependencies: + clipboard "^2.0.0" + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +pump@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@2.x.x, punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0, querystring-es3@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + +randomatic@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + 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" + +readable-stream@1.0: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +reduce@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/reduce/-/reduce-1.0.1.tgz#14fa2e5ff1fc560703a020cbb5fbaab691565804" + dependencies: + object-keys "~1.0.0" + +regenerate-unicode-properties@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" + dependencies: + regenerate "^1.4.0" + +regenerate@^1.2.1, regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + +regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.12.3: + version "0.12.4" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.12.4.tgz#aa9b6c59f4b97be080e972506c560b3bccbfcff0" + dependencies: + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^4.1.3, regexpu-core@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^7.0.0" + regjsgen "^0.4.0" + regjsparser "^0.3.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.0.2" + +register-service-worker@^1.5.1: + version "1.5.2" + resolved "https://registry.yarnpkg.com/register-service-worker/-/register-service-worker-1.5.2.tgz#a4631896c38d6ec5597358f44988cc46a911912d" + +registry-auth-token@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsgen@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + +remove-array-items@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remove-array-items/-/remove-array-items-1.0.0.tgz#07bf42cb332f4cf6e85ead83b5e4e896d2326b21" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +require-from-string@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-path@^1.3.3, resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" + dependencies: + http-errors "~1.6.2" + path-is-absolute "1.0.1" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +resolve@^1.2.0, resolve@^1.3.2, resolve@^1.6.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sax@0.5.x: + version "0.5.8" + resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" + +sax@^1.2.4, sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +schema-utils@^0.4.0, schema-utils@^0.4.2, schema-utils@^0.4.4, schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" + +serialize-javascript@^1.3.0, serialize-javascript@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@0.1.x: + version "0.1.43" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +ssri@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + dependencies: + safe-buffer "^5.1.1" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +std-env@^1.1.0, std-env@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-1.3.1.tgz#4e1758412439e9ece1d437b1b098551911aa44ee" + dependencies: + is-ci "^1.1.0" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +stream-slice@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/stream-slice/-/stream-slice-0.1.2.tgz#2dc4f4e1b936fb13f3eb39a2def1932798d07a4b" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +stylus-loader@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/stylus-loader/-/stylus-loader-3.0.2.tgz#27a706420b05a38e038e7cacb153578d450513c6" + dependencies: + loader-utils "^1.0.2" + lodash.clonedeep "^4.5.0" + when "~3.6.x" + +stylus@^0.54.5: + version "0.54.5" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.5.tgz#42b9560931ca7090ce8515a798ba9e6aa3d6dc79" + dependencies: + css-parse "1.7.x" + debug "*" + glob "7.0.x" + mkdirp "0.5.x" + sax "0.5.x" + source-map "0.1.x" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + dependencies: + has-flag "^3.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +table@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + dependencies: + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tapable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" + +tar@^4: + version "4.4.6" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.3.3" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + dependencies: + any-promise "^1.0.0" + +through2@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + dependencies: + readable-stream "^2.1.5" + xtend "~4.0.1" + +through@~2.3.4: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +time-fix-plugin@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/time-fix-plugin/-/time-fix-plugin-2.0.3.tgz#b6b1ead519099bc621e28edb77dac7531918b7e1" + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +timers-browserify@^2.0.4: + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + dependencies: + setimmediate "^1.0.4" + +tiny-emitter@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-factory@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-factory/-/to-factory-1.0.0.tgz#8738af8bd97120ad1d4047972ada5563bf9479b1" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + +toml@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/toml/-/toml-2.3.3.tgz#8d683d729577cb286231dfc7a8affe58d31728fb" + +topo@2.x.x: + version "2.0.2" + resolved "https://registry.yarnpkg.com/topo/-/topo-2.0.2.tgz#cd5615752539057c0dc0491a621c3bc6fbe1d182" + dependencies: + hoek "4.x.x" + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +type-is@^1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +uc.micro@^1.0.1, uc.micro@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" + +uglify-es@^3.3.4: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +uglify-js@3.4.x: + version "3.4.7" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.7.tgz#4df6b92e54789aa921a254cb1e33704d6ec12b89" + dependencies: + commander "~2.16.0" + source-map "~0.6.1" + +uglifyjs-webpack-plugin@^1.2.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +upath@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + +update-notifier@^2.3.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-join@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-3.0.0.tgz#26e8113ace195ea30d0fc38186e45400f9cea672" + +url-join@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" + +url-loader@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1" + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util.promisify@1.0.0, util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + dependencies: + inherits "2.0.3" + +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + +uuid@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +v8-compile-cache@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +vendors@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +vue-hot-reload-api@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz#97976142405d13d8efae154749e88c4e358cf926" + +vue-loader@^15.2.4: + version "15.4.0" + resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-15.4.0.tgz#8c90f94ece61c6b4707e87b4a58617f97faa125b" + dependencies: + "@vue/component-compiler-utils" "^2.0.0" + hash-sum "^1.0.2" + loader-utils "^1.1.0" + vue-hot-reload-api "^2.3.0" + vue-style-loader "^4.1.0" + +vue-router@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.0.1.tgz#d9b05ad9c7420ba0f626d6500d693e60092cc1e9" + +vue-server-renderer@^2.5.16: + version "2.5.17" + resolved "https://registry.yarnpkg.com/vue-server-renderer/-/vue-server-renderer-2.5.17.tgz#c1f24815a4b12a2797c154549b29b44b6be004b5" + dependencies: + chalk "^1.1.3" + hash-sum "^1.0.2" + he "^1.1.0" + lodash.template "^4.4.0" + lodash.uniq "^4.5.0" + resolve "^1.2.0" + serialize-javascript "^1.3.0" + source-map "0.5.6" + +vue-style-loader@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.1.2.tgz#dedf349806f25ceb4e64f3ad7c0a44fba735fcf8" + dependencies: + hash-sum "^1.0.2" + loader-utils "^1.0.2" + +vue-template-compiler@^2.5.16: + version "2.5.17" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz#52a4a078c327deb937482a509ae85c06f346c3cb" + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + +vue-template-es2015-compiler@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18" + +vue@^2.5.16: + version "2.5.17" + resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.17.tgz#0f8789ad718be68ca1872629832ed533589c6ada" + +vuepress-html-webpack-plugin@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vuepress-html-webpack-plugin/-/vuepress-html-webpack-plugin-3.2.0.tgz#219be272ad510faa8750d2d4e70fd028bfd1c16e" + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +vuepress@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/vuepress/-/vuepress-0.14.2.tgz#48e5e102178370980d1408e230c0263d768435b7" + dependencies: + "@babel/core" "7.0.0-beta.47" + "@vue/babel-preset-app" "3.0.0-beta.11" + autoprefixer "^8.2.0" + babel-loader "8.0.0-beta.3" + cache-loader "^1.2.2" + chalk "^2.3.2" + chokidar "^2.0.3" + commander "^2.15.1" + connect-history-api-fallback "^1.5.0" + copy-webpack-plugin "^4.5.1" + cross-spawn "^6.0.5" + css-loader "^0.28.11" + diacritics "^1.3.0" + docsearch.js "^2.5.2" + escape-html "^1.0.3" + file-loader "^1.1.11" + fs-extra "^5.0.0" + globby "^8.0.1" + gray-matter "^4.0.1" + js-yaml "^3.11.0" + koa-connect "^2.0.1" + koa-mount "^3.0.0" + koa-range "^0.3.0" + koa-static "^4.0.2" + loader-utils "^1.1.0" + lodash.throttle "^4.1.1" + lru-cache "^4.1.2" + markdown-it "^8.4.1" + markdown-it-anchor "^5.0.2" + markdown-it-container "^2.0.0" + markdown-it-emoji "^1.4.0" + markdown-it-table-of-contents "^0.4.0" + mini-css-extract-plugin "^0.4.1" + nprogress "^0.2.0" + optimize-css-assets-webpack-plugin "^4.0.0" + portfinder "^1.0.13" + postcss-loader "^2.1.5" + prismjs "^1.13.0" + register-service-worker "^1.5.1" + semver "^5.5.0" + stylus "^0.54.5" + stylus-loader "^3.0.2" + toml "^2.3.3" + url-loader "^1.0.1" + vue "^2.5.16" + vue-loader "^15.2.4" + vue-router "^3.0.1" + vue-server-renderer "^2.5.16" + vue-template-compiler "^2.5.16" + vuepress-html-webpack-plugin "^3.2.0" + webpack "^4.8.1" + webpack-chain "^4.6.0" + webpack-merge "^4.1.2" + webpack-serve "^1.0.2" + webpackbar "^2.6.1" + workbox-build "^3.1.0" + +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +webpack-chain@^4.6.0: + version "4.9.0" + resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-4.9.0.tgz#2f0794d34d79a7cc5db1416f497b76ad33df30ee" + dependencies: + deepmerge "^1.5.2" + javascript-stringify "^1.6.0" + +webpack-dev-middleware@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.1.3.tgz#8b32aa43da9ae79368c1bf1183f2b6cf5e1f39ed" + dependencies: + loud-rejection "^1.6.0" + memory-fs "~0.4.1" + mime "^2.1.0" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + url-join "^4.0.0" + webpack-log "^1.0.1" + +webpack-hot-client@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/webpack-hot-client/-/webpack-hot-client-3.0.0.tgz#b714f257a264001275bc1491741685779cde12f2" + dependencies: + json-stringify-safe "^5.0.1" + loglevelnext "^1.0.2" + strip-ansi "^4.0.0" + uuid "^3.1.0" + webpack-log "^1.1.1" + ws "^4.0.0" + +webpack-log@^1.0.1, webpack-log@^1.1.1, webpack-log@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + +webpack-merge@^4.1.2: + version "4.1.4" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" + dependencies: + lodash "^4.17.5" + +webpack-serve@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/webpack-serve/-/webpack-serve-1.0.4.tgz#d1c83955926969ba195e5032f978da92ef07829c" + dependencies: + "@shellscape/koa-static" "^4.0.4" + "@webpack-contrib/config-loader" "^1.1.1" + chalk "^2.3.0" + clipboardy "^1.2.2" + cosmiconfig "^5.0.2" + debug "^3.1.0" + find-up "^2.1.0" + get-port "^3.2.0" + import-local "^1.0.0" + killable "^1.0.0" + koa "^2.4.1" + koa-webpack "^4.0.0" + lodash "^4.17.5" + loud-rejection "^1.6.0" + meow "^5.0.0" + nanobus "^4.3.1" + opn "^5.1.0" + resolve "^1.6.0" + time-fix-plugin "^2.0.0" + update-notifier "^2.3.0" + url-join "3.0.0" + v8-compile-cache "^2.0.0" + webpack-hot-client "^3.0.0" + webpack-log "^1.1.2" + +webpack-sources@^1.0.1, webpack-sources@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.8.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.17.1.tgz#0f026e3d823f3fc604f811ed3ea8f0d9b267fb1e" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/wasm-edit" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + acorn "^5.6.2" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.0.0" + uglifyjs-webpack-plugin "^1.2.4" + watchpack "^1.5.0" + webpack-sources "^1.0.1" + +webpackbar@^2.6.1: + version "2.6.3" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-2.6.3.tgz#4f2d0078375acfe95c0e55227771a2ed98ecc5c9" + dependencies: + chalk "^2.4.1" + consola "^1.4.3" + figures "^2.0.0" + loader-utils "^1.1.0" + lodash "^4.17.10" + log-update "^2.3.0" + pretty-time "^1.1.0" + schema-utils "^1.0.0" + std-env "^1.3.1" + table "^4.0.3" + +when@~3.6.x: + version "3.6.4" + resolved "https://registry.yarnpkg.com/when/-/when-3.6.4.tgz#473b517ec159e2b85005497a13983f095412e34e" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + dependencies: + string-width "^2.1.1" + +workbox-background-sync@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-3.4.1.tgz#6957a0ff622ee08b7af958d561cf2d4821edb640" + dependencies: + workbox-core "^3.4.1" + +workbox-broadcast-cache-update@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-broadcast-cache-update/-/workbox-broadcast-cache-update-3.4.1.tgz#9861cd2b6d874d41be26a34bc5bdd7a794d3badf" + dependencies: + workbox-core "^3.4.1" + +workbox-build@^3.1.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-build/-/workbox-build-3.4.1.tgz#65af4c81b05dac6a1819c88b8a2a944ddf5cec04" + dependencies: + babel-runtime "^6.26.0" + common-tags "^1.4.0" + fs-extra "^4.0.2" + glob "^7.1.2" + joi "^11.1.1" + lodash.template "^4.4.0" + pretty-bytes "^4.0.2" + workbox-background-sync "^3.4.1" + workbox-broadcast-cache-update "^3.4.1" + workbox-cache-expiration "^3.4.1" + workbox-cacheable-response "^3.4.1" + workbox-core "^3.4.1" + workbox-google-analytics "^3.4.1" + workbox-navigation-preload "^3.4.1" + workbox-precaching "^3.4.1" + workbox-range-requests "^3.4.1" + workbox-routing "^3.4.1" + workbox-strategies "^3.4.1" + workbox-streams "^3.4.1" + workbox-sw "^3.4.1" + +workbox-cache-expiration@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-cache-expiration/-/workbox-cache-expiration-3.4.1.tgz#6c92317ca43be7e3030662ffbb3fd413c1689f18" + dependencies: + workbox-core "^3.4.1" + +workbox-cacheable-response@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-cacheable-response/-/workbox-cacheable-response-3.4.1.tgz#5517b4d5a86c2ad5d48000109335c5af23f47e40" + dependencies: + workbox-core "^3.4.1" + +workbox-core@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-core/-/workbox-core-3.4.1.tgz#dd6d8ad7398a0e6224c04b079841045af0c62e1f" + +workbox-google-analytics@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-google-analytics/-/workbox-google-analytics-3.4.1.tgz#98f407b7d157be68087e0f3edb432cba291fd614" + dependencies: + workbox-background-sync "^3.4.1" + workbox-core "^3.4.1" + workbox-routing "^3.4.1" + workbox-strategies "^3.4.1" + +workbox-navigation-preload@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-navigation-preload/-/workbox-navigation-preload-3.4.1.tgz#d3eb75239cc4eed9314b25e233da2ba282dcc84d" + dependencies: + workbox-core "^3.4.1" + +workbox-precaching@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-precaching/-/workbox-precaching-3.4.1.tgz#2d4a3f6ae8d825e17ef51dddc51aae5ef2876fb5" + dependencies: + workbox-core "^3.4.1" + +workbox-range-requests@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-range-requests/-/workbox-range-requests-3.4.1.tgz#098474efecce49148ba925c75753e0ac96a8dd9a" + dependencies: + workbox-core "^3.4.1" + +workbox-routing@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-routing/-/workbox-routing-3.4.1.tgz#c5ac213480869da29a91a88db57b679ba7ddf58a" + dependencies: + workbox-core "^3.4.1" + +workbox-strategies@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-strategies/-/workbox-strategies-3.4.1.tgz#96f7947a9611ea599fcb71d44a5abab503fbe288" + dependencies: + workbox-core "^3.4.1" + +workbox-streams@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-streams/-/workbox-streams-3.4.1.tgz#b639843431ea38825909a557e54108fdc469f0eb" + dependencies: + workbox-core "^3.4.1" + +workbox-sw@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/workbox-sw/-/workbox-sw-3.4.1.tgz#7b51fc14c44b4e880c369f97681472cf6e117113" + +worker-farm@^1.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + dependencies: + errno "~0.1.7" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + +ylru@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" From 8fa711c80816e1c34ac1f7e7f524339222b3005f Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sun, 28 Oct 2018 16:24:39 -0500 Subject: [PATCH 02/34] more work on new site --- build.gradle | 8 +- gradle/asciidoc.gradle | 28 --- gradle/ghPages.gradle | 6 +- gradle/vuepress.gradle | 8 + package.json | 4 +- src/docs/.vuepress/components/ApiLink.vue | 13 + src/docs/.vuepress/config.js | 1 + src/docs/README.md | 2 +- src/docs/asciidoc/00-intro.adoc | 48 ---- src/docs/asciidoc/01-getting-started.adoc | 96 -------- src/docs/asciidoc/10-configuring.adoc | 106 --------- src/docs/asciidoc/11-filtering-contents.adoc | 27 --- .../asciidoc/12-controlling-dependencies.adoc | 118 --------- src/docs/asciidoc/13-controlling-merging.adoc | 151 ------------ src/docs/asciidoc/14-package-relocation.adoc | 80 ------- src/docs/asciidoc/15-minimizing.adoc | 30 --- src/docs/asciidoc/16-reproducible-builds.adoc | 16 -- src/docs/asciidoc/20-custom-tasks.adoc | 20 -- src/docs/asciidoc/30-application-plugin.adoc | 45 ---- src/docs/asciidoc/40-publishing.adoc | 69 ------ .../asciidoc/50-multi-project-builds.adoc | 21 -- src/docs/asciidoc/60-shadowing-plugins.adoc | 44 ---- src/docs/asciidoc/80-examples.adoc | 0 src/docs/asciidoc/90-changes.adoc | 224 ------------------ src/docs/asciidoc/99-about.adoc | 34 --- src/docs/asciidoc/index.adoc | 31 --- src/docs/configuration/README.md | 6 +- src/docs/configuration/dependencies/README.md | 10 +- src/docs/configuration/merging/README.md | 34 +-- src/docs/custom-tasks/README.md | 2 +- src/docs/getting-started/README.md | 2 +- 31 files changed, 58 insertions(+), 1226 deletions(-) delete mode 100644 gradle/asciidoc.gradle create mode 100644 gradle/vuepress.gradle create mode 100644 src/docs/.vuepress/components/ApiLink.vue delete mode 100644 src/docs/asciidoc/00-intro.adoc delete mode 100644 src/docs/asciidoc/01-getting-started.adoc delete mode 100644 src/docs/asciidoc/10-configuring.adoc delete mode 100644 src/docs/asciidoc/11-filtering-contents.adoc delete mode 100644 src/docs/asciidoc/12-controlling-dependencies.adoc delete mode 100644 src/docs/asciidoc/13-controlling-merging.adoc delete mode 100644 src/docs/asciidoc/14-package-relocation.adoc delete mode 100644 src/docs/asciidoc/15-minimizing.adoc delete mode 100644 src/docs/asciidoc/16-reproducible-builds.adoc delete mode 100644 src/docs/asciidoc/20-custom-tasks.adoc delete mode 100644 src/docs/asciidoc/30-application-plugin.adoc delete mode 100644 src/docs/asciidoc/40-publishing.adoc delete mode 100644 src/docs/asciidoc/50-multi-project-builds.adoc delete mode 100644 src/docs/asciidoc/60-shadowing-plugins.adoc delete mode 100644 src/docs/asciidoc/80-examples.adoc delete mode 100644 src/docs/asciidoc/90-changes.adoc delete mode 100644 src/docs/asciidoc/99-about.adoc delete mode 100644 src/docs/asciidoc/index.adoc diff --git a/build.gradle b/build.gradle index 57b238cd5..dc14929a9 100644 --- a/build.gradle +++ b/build.gradle @@ -11,13 +11,9 @@ buildscript { classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.1' classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4.7.5" classpath "com.gradle.publish:plugin-publish-plugin:0.10.0" - classpath 'org.asciidoctor:asciidoctor-gradle-plugin:1.5.3' - classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.11' - classpath 'org.asciidoctor:asciidoctorj-groovy-dsl:1.0.0.preview2' - classpath "com.bluepapa32:gradle-watch-plugin:0.1.5" - classpath "org.kordamp.gradle:livereload-gradle-plugin:0.2.1" classpath 'org.ajoberstar:grgit:2.1.1' classpath 'org.ajoberstar:gradle-git-publish:0.3.3' + classpath "com.moowork.gradle:gradle-node-plugin:1.2.0" } } @@ -57,7 +53,7 @@ buildScan { apply from: file('gradle/docs.gradle') apply from: file('gradle/publish.gradle') -apply from: file('gradle/asciidoc.gradle') +apply from: file('gradle/vuepress.gradle') apply from: file('gradle/ghPages.gradle') apply from: file('gradle/dependencies.gradle') diff --git a/gradle/asciidoc.gradle b/gradle/asciidoc.gradle deleted file mode 100644 index 9abe44574..000000000 --- a/gradle/asciidoc.gradle +++ /dev/null @@ -1,28 +0,0 @@ -apply plugin: 'org.asciidoctor.convert' - -asciidoctorj { - version = '1.5.4' -} - -asciidoctor { - sourceDir = new File("$rootDir/src/docs/asciidoc") - sources { - include 'index.adoc' - } - backends = ['html5', 'pdf'] - - attributes toc :'left', - 'source-highlighter': 'coderay', - icons : 'font', - numbered : '', - idprefix : '', - 'docinfo1' : 'true' - resources { - from project.tasks.groovydoc { - into 'api' - } - } - inputs.files project.sourceSets.test.allSource -} - -project.tasks.asciidoctor.dependsOn project.tasks.groovydoc \ No newline at end of file diff --git a/gradle/ghPages.gradle b/gradle/ghPages.gradle index ecfedaf72..d4d93fab3 100644 --- a/gradle/ghPages.gradle +++ b/gradle/ghPages.gradle @@ -10,12 +10,12 @@ gitPublish { branch = 'gh-pages' contents { - from 'build/asciidoc/html5' + from 'build/site' into('api') { from project.tasks.groovydoc } } } -tasks.gitPublishPush.dependsOn asciidoctor -tasks.gitPublishPush.dependsOn groovydoc +tasks.gitPublishCopy.dependsOn yarn_build +tasks.gitPublishCopy.dependsOn groovydoc diff --git a/gradle/vuepress.gradle b/gradle/vuepress.gradle new file mode 100644 index 000000000..6e7839b70 --- /dev/null +++ b/gradle/vuepress.gradle @@ -0,0 +1,8 @@ +apply plugin: "com.moowork.node" + +node { + yarnVersion = '1.5.1' +} + +tasks.yarn_build.inputs.files project.fileTree('src/docs') +tasks.yarn_build.outputs.dir project.file('build/site') \ No newline at end of file diff --git a/package.json b/package.json index 134d1527b..d6230ab82 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "vuepress": "^0.14.2" }, "scripts": { - "docs:build": "vuepress build src/docs", - "docs:dev": "vuepress dev src/docs" + "build": "vuepress build src/docs", + "start": "vuepress dev src/docs" } } diff --git a/src/docs/.vuepress/components/ApiLink.vue b/src/docs/.vuepress/components/ApiLink.vue new file mode 100644 index 000000000..ed6f89394 --- /dev/null +++ b/src/docs/.vuepress/components/ApiLink.vue @@ -0,0 +1,13 @@ + + + \ No newline at end of file diff --git a/src/docs/.vuepress/config.js b/src/docs/.vuepress/config.js index b1718c9a1..9f717d193 100644 --- a/src/docs/.vuepress/config.js +++ b/src/docs/.vuepress/config.js @@ -1,5 +1,6 @@ module.exports = { base: "/shadow-new-site/", + dest: "build/site", themeConfig: { repo: "johnrengelman/shadow", editLinks: true, diff --git a/src/docs/README.md b/src/docs/README.md index 1e75df5d0..aa422d53f 100644 --- a/src/docs/README.md +++ b/src/docs/README.md @@ -9,4 +9,4 @@ actionLink: /introduction/ John Engelman - @johnrengelman -[API Docs](api/index.html) +[API Docs](http://imperceptiblethoughts.com/shadow-new-site/api/index.html) diff --git a/src/docs/asciidoc/00-intro.adoc b/src/docs/asciidoc/00-intro.adoc deleted file mode 100644 index dc64af69e..000000000 --- a/src/docs/asciidoc/00-intro.adoc +++ /dev/null @@ -1,48 +0,0 @@ -:tests: ../../test/groovy/com/github/jengelman/gradle/plugins/shadow -== Introduction - -Shadow is a Gradle plugin for combining dependency classes and resources with a project's into a single -output Jar. -The combined Jar is often referred to a __fat-jar__ or __uber-jar__. -Shadow utilizes `JarInputStream` and `JarOutputStream` to efficiently process dependent libraries -into the output jar without incurring the I/O overhead of expanding the jars to disk. - -=== Benefits of Shadow - -Shadowing a project output has 2 major use cases: - -. Creating an __executable__ JAR distribution -. Bundling and relocating common dependencies in libraries to avoid classpath conflicts - -==== Executable Distributions - -Executable distribution is the main use case for __application__ developers. -The goal of an executable distribution is a single file that can be deployed and executed/run in the runtime -environment. -In the case of Shadow, this is a single __uber__ or __fat__ JAR. -The JAR file contains all the application code and dependent libraries to execute (not including the standard JVM -libraries). -The shadow JAR does **not** include the JRE itself. -It must be available on the target system. - -Executable JARs contain a JAR MANIFEST that specifies the application Main Class. -This allows the application to be started with a single command: - -[source, bash, subs="verbatim,attributes"] ----- -$ java -jar application-shadow.jar ----- - -==== Library Bundling - -Dependency bundling and relocation is the main use case for __library__ authors. -The goal of a bundled library is to create a pre-packaged dependency for other libraries or applications to utilize. -Often in these scenarios, a library may contain a dependency that a downstream library or application also uses. -In __some__ cases, different versions of this common dependency can cause an issue in either the upstream library or -the downstream application. -These issues often manifest themselves as binary incompatibilities in either the library or application code. - -By utilizing Shadow's ability to __relocate__ the package names for dependencies, a library author can ensure that the -library's dependencies will not conflict with the same dependency being declared by the downstream application. - -include::01-getting-started.adoc[] diff --git a/src/docs/asciidoc/01-getting-started.adoc b/src/docs/asciidoc/01-getting-started.adoc deleted file mode 100644 index ec19e5b52..000000000 --- a/src/docs/asciidoc/01-getting-started.adoc +++ /dev/null @@ -1,96 +0,0 @@ -=== Getting Started - -[source,groovy,subs="+attributes"] ----- -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:{project-version}' - } -} - -apply plugin: 'com.github.johnrengelman.shadow' -apply plugin: 'java' ----- - -Alternatively, the Gradle Plugin syntax can be used: - -[source,groovy,subs="+attributes"] ----- -plugins { - id 'com.github.johnrengelman.shadow' version '{project-version}' - id 'java' -} ----- - -Shadow is a reactive plugin. -This means that applying Shadow by itself will perform no configuration on your project. -Instead, Shadow __reacts__ to the application of other plugins to decorate the project. - -This means, that for most users, the `java` or `groovy` plugins must be __explicitly__ applied -to have the desired effect. - -=== Default Java/Groovy Tasks - -In the presence of the `java` or `groovy` plugins, Shadow will automatically configure the -following behavior: - -* Adds a `shadowJar` task to the project. -* Adds a `shadow` configuration to the project. -* Configures the `shadowJar` task to include all sources from the project's `main` sourceSet. -* Configures the `shadowJar` task to bundle all dependencies from the `runtime` configuration. -* Configures the __classifier__ attribute of the `shadowJar` task to be `'all'` . -* Configures the `shadowJar` task to generate a `Manifest` with: -** Inheriting all configuration from the standard `jar` task. -** Adds a `Class-Path` attribute to the `Manifest` that appends all dependencies from the `shadow` configuration -* Configures the `shadowJar` task to __exclude__ any JAR index or cryptographic signature files matching the following patterns: -** `META-INF/INDEX.LIST` -** `META-INF/*.SF` -** `META-INF/*.DSA` -** `META-INF/*.RSA` -* Creates and registers the `shadow` component in the project (used for integrating with `maven-publish`). -* Configures the `uploadShadow` task (as part of the `maven` plugin) with the following behavior: -** Removes the `compile` and `runtime` configurations from the `pom.xml` file mapping. -** Adds the `shadow` configuration to the `pom.xml` file as `RUNTIME` scope. - -=== Shadowing Gradle Plugins - -Starting with v2.0.0, Shadow is capable of automatically configuring package relocation for your dependencies. -This is useful especially when building Gradle plugins where you want your dependencies to not conflict with versions -provided by the Gradle runtime. - -[source,groovy,subs="+attributes"] ----- -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:{project-version}' - } -} - -apply plugin: 'com.github.johnrengelman.plugin-shadow' -apply plugin: 'java' ----- - -Alternatively, the Gradle Plugin syntax can be used: - -[source,groovy,subs="+attributes"] ----- -plugins { - id 'com.github.johnrengelman.plugin-shadow' version '{project-version}' - id 'java' -} ----- - -Applying the `plugin-shadow` plugin is the same as applying the standard `shadow` plugin with the additional creation -of the `configureRelocationShadowJar` task. -This task runs before the `shadowJar` task and scans the packages present in the dependencies that will be merged into -the final jar and automatically configures relocation for them. -By default the tasks relocates all packages to the `shadow.` prefix. For example `org.jdom2.JDOMException` becomes -`shadow.org.jdom2.JDOMException` - -For more details see the sectinon <> \ No newline at end of file diff --git a/src/docs/asciidoc/10-configuring.adoc b/src/docs/asciidoc/10-configuring.adoc deleted file mode 100644 index 4305ca02d..000000000 --- a/src/docs/asciidoc/10-configuring.adoc +++ /dev/null @@ -1,106 +0,0 @@ -== Configuring Shadow - -The link:{api}/tasks/ShadowJar.html[`ShadowJar`] task type extends from Gradle's -https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html[`Jar`] type. -This means that all attributes and methods available on `Jar` are also available on -link:{api}/tasks/ShadowJar.html[`ShadowJar`]. -Refer the __Gradle User Guide__ for https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html[Jar] for -details. - -=== Configuring Output Name - -Shadow configures the default `shadowJar` task to set the output JAR's `destinationDir`, `baseName`, `appendix`, -`version`, and `extension` to the same default values as Gradle does for all `Jar` tasks. -Additionally, it configures the `classifier` to be `all`. - -If working with a Gradle project with the name `myApp` and version `1.0`, the default `shadowJar` task will output a -file at: `build/libs/myApp-1.0-all.jar` - -As with all `Jar` tasks in Gradle, these values can be overridden: - -.Output to `build/libs/shadow.jar` -[source,groovy,indent=0] ----- -include::{tests}/ShadowPluginSpec.groovy[tags=rename] ----- - -=== Configuring the Runtime Classpath - -Each Java JAR file contains a manifest file that provides meta data about the contents of the JAR file itself. -When using a shadowed JAR file as an executable JAR, it is assumed that all necessary runtime classes are contained -within the JAR itself. -There may be situations where the desire is to **not** bundle select dependencies into the shadowed JAR file but -they are still required for runtime execution. - -In these scenarios, Shadow creates a `shadow` configuration to declare these dependencies. -Dependencies added to the `shadow` configuration are *not* bundled into the output JAR. -Think of `configurations.shadow` as unmerged, runtime dependencies. -The integration with the `maven` and `maven-publish` plugins will automatically configure dependencies added -to `configurations.shadow` as `RUNTIME` scope dependencies in the resulting POM file. - -Additionally, Shadow automatically configures the manifest of the `shadowJar` task to contain a `Class-Path` entry -in the JAR manifest. -The value of the `Class-Path` entry is the name of all dependencies resolved in the `shadow` configuration -for the project. - -[source,groovy,indent=0] ----- -include::{tests}/ShadowPluginSpec.groovy[tags=shadowConfig] ----- - -Inspecting the `META-INF/MANIFEST.MF` entry in the JAR file will reveal the following attribute: -[source,property,indent=0] ----- -Class-Path: junit-3.8.2.jar ----- - -When deploying a shadowed JAR as an execution JAR, it is important to note that any non-bundled runtime dependencies -**must** be deployed in the location specified in the `Class-Path` entry in the manifest. - -=== Configuring the JAR Manifest - -Beyond the automatic configuration of the `Class-Path` entry, the `shadowJar` manifest is configured in a number of ways. -First, the manifest for the `shadowJar` task is configured to __inherit__ from the manifest of the standard `jar` task. -This means that any configuration performed on the `jar` task will propagate to the `shadowJar` tasks. - -[source,groovy,indent=0] ----- -include::{tests}/ShadowPluginSpec.groovy[tags=jarManifest] ----- - -Inspecting the `META-INF/MANIFEST.MF` entry in the JAR file will revel the following attribute: -[source,property,indent=0] ----- -Class-Path: /libs/a.jar ----- - -If it is desired to inherit a manifest from a JAR task other than the standard `jar` task, the `inheritFrom` methods -on the `shadowJar.manifest` object can be used to configure the upstream. - -[source,groovy,indent=0] ----- - -task testJar(type: Jar) { - manifest { - attributes 'Description': 'This is an application JAR' - } -} - -shadowJar { - manifest { - inheritFrom project.tasks.testJar.manifest - } -} ----- - -include::11-filtering-contents.adoc[] - -include::12-controlling-dependencies.adoc[] - -include::13-controlling-merging.adoc[] - -include::14-package-relocation.adoc[] - -include::15-minimizing.adoc[] - -include::16-reproducible-builds.adoc[] diff --git a/src/docs/asciidoc/11-filtering-contents.adoc b/src/docs/asciidoc/11-filtering-contents.adoc deleted file mode 100644 index a8825a3d3..000000000 --- a/src/docs/asciidoc/11-filtering-contents.adoc +++ /dev/null @@ -1,27 +0,0 @@ -=== Filtering Shadow Jar Contents - -The final contents of a shadow JAR can be filtered using the `exclude` and `include` methods inherited from Gradle's -`Jar` task type. - -Refer to the https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html[Jar] documentation for details -on the various versions of the methods and their behavior. - -When using `exclude`/`include` with a `ShadowJar` task, the resulting copy specs are applied to the __final__ JAR -contents. -This means that, the configuration is applied to the individual files from both the project source set or __any__ -of the dependencies to be merged. - -.Exclude a file from Shadow Jar -[source,groovy,indent=0] ----- -include::{tests}/FilteringSpec.groovy[tags=excludeFile] ----- - -Excludes and includes can be combined just like a normal `Jar` task, with `excludes` taking precendence over `includes`. -Additionally, ANT style patterns can be used to match multiple files. - -.Configuring output using ANT patterns -[source,groovy,indent=0] ----- -include::{tests}/FilteringSpec.groovy[tags=excludeOverInclude] ----- \ No newline at end of file diff --git a/src/docs/asciidoc/12-controlling-dependencies.adoc b/src/docs/asciidoc/12-controlling-dependencies.adoc deleted file mode 100644 index 021588f45..000000000 --- a/src/docs/asciidoc/12-controlling-dependencies.adoc +++ /dev/null @@ -1,118 +0,0 @@ -=== Configuring Shadowed Dependencies - -Shadow configures the default `shadowJar` task to merge all dependencies from the project's `runtime` configuration -into the final JAR. -The configurations to from which to source dependencies for the merging can be configured using the `configurations` property -of the link:{api}/tasks/ShadowJar.html[`ShadowJar`] task type. - -[source,groovy,indent=0] ----- -shadowJar { - configurations = [project.configurations.compile] -} ----- - -The above code sample would configure the `shadowJar` task to merge dependencies from only the `compile` configuration. -This means any dependency declared in the `runtime` configuration would be **not** be included in the final JAR. - -[NOTE] -==== -Note the literal use of `project.configurations` when setting the `configurations` attribute of a -link:{api}/tasks/ShadowJar.html[`ShadowJar`] task. -This is **required**. It maybe be tempting to specify `configurations = [configurations.compile]` but this will not -have the intended effect, as `configurations.compile` will try to delegate to the `configurations` property of the -the link:{api}/tasks/ShadowJar.html[`ShadowJar`] task instead of the `project` -==== - -=== Embedding Jar Files Inside Your Shadow Jar - -Because of the way that Gradle handles dependency configuration, from a plugin perspective, shadow is unable to distinguish between a jar file configured as a dependency and a jar file included in the resource folder. This means that any jar found in a resource directory will be merged into the shadow jar the same as any other dependency. If your intention is to embed the jar inside, you must rename the jar as to not end with `.jar` before the shadow task begins. - -=== Filtering Dependencies - -Individual dependencies can be filtered from the final JAR by using the `dependencies` block of a -link:{api}/tasks/ShadowJar.html[`ShadowJar`] task. -Dependency filtering does **not** apply to transitive dependencies. -That is, excluding a dependency does not exclude any of its dependencies from the final JAR. - -The `dependency` blocks provides a number of methods for resolving dependencies using the notations familiar from -Gradle's `configurations` block. - -.Exclude an Module Dependency -[source,groovy,indent=0] ----- -include::{tests}/FilteringSpec.groovy[tags=excludeDep] ----- - -.Exclude a Project Dependency -[source,groovy,indent=0] ----- -include::{tests}/FilteringSpec.groovy[tags=excludeProject] ----- - -[NOTE] -==== -While not being able to filter entire transitive dependency graphs might seem like an oversight, it is necessary -because it would not be possible to intelligently determine the build author's intended results when there is a -common dependency between two 1st level dependencies when one is excluded and the other is not. -==== - -==== Using Regex Patterns to Filter Dependencies - -Dependencies can be filtered using regex patterns. -Coupled with the `::` notation for dependencies, this allows for excluding/including -using any of these individual fields. - -.Exclude Any Version of a Dependency -[source,groovy,indent=0] ----- -include::{tests}/FilteringSpec.groovy[tags=excludeDepWildcard] ----- - -Any of the individual fields can be safely absent and will function as though a wildcard was specified. - -.Ignore Dependency Version -[source,groovy,indent=0] ----- -shadowJar { - dependencies { - exclude(dependency('shadow:d')) - } -} ----- - -The above code snippet is functionally equivalent to the previous example. - -This same patten can be used for any of the dependency notation fields. - -.Ignoring An Artifact Regardless of Group -[source,groovy,indent=0] ----- -shadowJar { - dependencies { - exclude(dependency(':d:1.0')) - } -} ----- - -.Excluding All Artifacts From Group -[source,groovy,indent=0] ----- -shadowJar { - dependencies { - exclude(dependency('shadow::1.0')) - } -} ----- - -==== Programmatically Selecting Dependencies to Filter - -If more complex decisions are needed to select the dependencies to be included, the -link:{api}/tasks/ShadowJar.html#dependencies(Action)[`dependencies`] block provides a -method that accepts a `Closure` for selecting dependencies. - -.Selecting Dependencies to Filter With a Spec -[source,groovy,indent=0] ----- -include::{tests}/FilteringSpec.groovy[tags=excludeSpec] ----- diff --git a/src/docs/asciidoc/13-controlling-merging.adoc b/src/docs/asciidoc/13-controlling-merging.adoc deleted file mode 100644 index de121ae89..000000000 --- a/src/docs/asciidoc/13-controlling-merging.adoc +++ /dev/null @@ -1,151 +0,0 @@ -=== Controlling JAR Content Merging - -Shadow allows for customizing the process by which the output JAR is generated through the -link:{api}/transformers/Transformer.html[`Transformer`] interface. -This is a concept that has been carried over from the original Maven Shade implementation. -A link:{api}/transformers/Transformer.html[`Transformer`] is invoked for each entry in the JAR before being written to -the final output JAR. -This allows a link:{api}/transformers/Transformer.html[`Transformer`] to determine if it should process a particular -entry and apply any modifications beforewriting the stream to the output. - -.Adding a Transformer -[source,groovy,indent=0] ----- -shadowJar { - transform(MyTransformer.class) -} ----- - -Additionally, a `Transformer` can accept a `Closure` to configure the provided `Transformer`. - -.Configuring a Transformer -[source,groovy,indent=0] ----- -shadowJar { - transform(MyTransformer.class) { - enable = true - } -} ----- - -An instantiated instance of a `Transformer` can also be provided. - -.Adding a Transformer Instance -[source,groovy,indent=0] ----- -shadowJar { - transform(new MyTransformer(enabled: true)) -} ----- - -==== Merging Service Descriptor Files - -Java libraries often contain service descriptors files in the `META-INF/services` directory of the JAR. -A service descriptor typically contains a line delimited list of classes that are supported for a particular __service__. -At runtime, this file is read and used to configure library or application behavior. - -Multiple dependencies may use the same service descriptor file name. -In this case, it is generally desired to merge the content of each instance of the file into a single output file. -The link:{api}/transformers/ServiceFileTransformer.html[`ServiceFileTransformer`] class is used to perform this merging. -By default, it will merge each copy of a file under `META-INF/services` into a single file in the output JAR. - -.Merging Service Files -[source,groovy,indent=0] ----- -shadowJar { - mergeServiceFiles() -} ----- - -The above code snippet is a convenience syntax for calling -link:{api}/tasks/ShadowJar.html#transform(Class++++)[`transform(ServiceFileTransformer.class)`]. - -[NOTE] -==== -Groovy Extension Module descriptor files (located at `META-INF/services/org.codehaus.groovy.runtime.ExtensionModule`) -are ignored by the link:{api}/transformers/ServiceFileTransformer.html[`ServiceFileTransformer`]. -This is due to these files having a different syntax than standard service descriptor files. -Use the link:{api}/tasks/ShadowJar.html#mergeGroovyExtensionModules()[`mergeGroovyExtensionModules()`] method to merge -these files if your dependencies contain them. -==== - -===== Configuring the Location of Service Descriptor Files - -By default the link:{api}/transformers/ServiceFileTransformer.html[`ServiceFileTransformer`] is configured to merge -files in `META-INF/services`. -This directory can be overridden to merge descriptor files in a different location. - -.Merging Service Files in a Specific Directory -[source,groovy,indent=0] ----- -shadowJar { - mergeServiceFiles { - path = 'META-INF/custom' - } -} ----- - -===== Excluding/Including Specific Service Descriptor Files From Merging - -The link:{api}/transformers/ServiceFileTransformer.html[`ServiceFileTransformer`] class supports specifying specific -files to include or exclude from merging. - -.Excluding a Service Descriptor From Merging -[source,groovy,indent=0] ----- -shadowJar { - mergeServiceFiles { - exclude 'META-INF/services/com.acme.*' - } -} ----- - -==== Merging Groovy Extension Modules - -Shadow provides a specific transformer for dealing with Groovy extension module files. -This is due to their special syntax and how they need to be merged together. -The link:{api}/transformers/GroovyExtensionModuleTransformer.html[`GroovyExtensionModuleTransformer`] will handle these -files. -The link:{api}/tasks/ShadowJar.html[`ShadowJar`] task also provides a short syntax method to add this transformer. - -.Merging Groovy Extension Modules -[source,groovy,indent=0] ----- -shadowJar { - mergeGroovyExtensionModules() -} ----- - -==== Appending Text Files - -Generic text files can be appended together using the -link:{api}/transformers/AppendingTransformer.html[`AppendingTransformer`]. -Each file is appended using new lines to separate content. -The link:{api}/tasks/ShadowJar.html[`ShadowJar`] task provides a short syntax method of -link:{api}/tasks/ShadowJar.html#append(java.lang.String)[`append(String)`] to configure this transformer. - -.Appending a Property File -[source,groovy,indent=0] ----- -shadowJar { - append 'test.properties' -} ----- - -==== Appending XML Files - -XML files require a special transformer for merging. -The link:{api}/transformers/XmlAppendingTransformer.html[`XmlAppendingTransformer`] reads each XML document and merges -each root element into a single document. -There is no short syntax method for the link:{api}/transformers/XmlAppendingTransformer.html[`XmlAppendingTransformer`]. -It must be added using the link:{api}/tasks/ShadowJar.html#transform(++Class++)[`transform`] methods. - -.Appending a XML File -[source,groovy,indent=0] ----- -shadowJar { - tranform(XmlAppendingTransformer.class) { - resource = 'properties.xml' - } -} ----- \ No newline at end of file diff --git a/src/docs/asciidoc/14-package-relocation.adoc b/src/docs/asciidoc/14-package-relocation.adoc deleted file mode 100644 index 0a491a150..000000000 --- a/src/docs/asciidoc/14-package-relocation.adoc +++ /dev/null @@ -1,80 +0,0 @@ -=== Relocating Packages - -Shade is capable of scanning a project's classes and relocating specific dependencies to a new location. -This is often required when one of the dependencies is susceptible to breaking changes in versions or -to classpath pollution in a downstream project. - -[NOTE] -==== -Google's Guava and the ASM library are typical cases where package relocation can come in handy. -==== - -Shadow uses the ASM library to modify class byte code to replace the package name and any import -statements for a class. -Any non-class files that are stored within a package structure are also relocated to the new location. - -.Relocating a Package -[source,groovy,indent=0] ----- -include::{tests}/RelocationSpec.groovy[tags=relocate] ----- - -The code snippet will rewrite the location for any class in the `junit.framework` to be `shadow.junit`. -For example, the class `junit.textui.TestRunner` becomes `shadow.junit.TestRunner`. -In the resulting JAR, the class file is relocated from `junit/textui/TestRunner.class` to -`shadow/junit/TestRunner.class`. - -[NOTE] -==== -Relocation operates at a package level. -It is not necessary to specify any patterns for matching, it will operate simply on the prefix -provided. -==== - -[NOTE] -==== -Relocation will be applied globally to all instance of the matched prefix. -That is, it does **not** scope to __only__ the dependencies being shadowed. -Be specific as possible when configuring relocation as to avoid unintended relocations. -==== - -==== Filtering Relocation - -Specific classes or files can be `included`/`excluded` from the relocation operation if necessary. - -.Configuring Filtering for Relocation -[source,groovy,indent=0] ----- -include::{tests}/RelocationSpec.groovy[tags=relocateFilter] ----- - -==== Automatically Relocating Dependencies - -Shadow ships with a task that can be used to automatically configure all packages from all dependencies to be relocated. -This feature was formally shipped into a 2nd plugin (`com.github.johnrengelman.plugin-shadow`) but has been -removed for clarity reasons in version 4.0.0. - -To configure automatic dependency relocation, declare a task of type `ConfigureShadowRelocation` and configure the -`target` parameter to be the `ShadowJar` task you wish to auto configure. You will also need to declared a task -dependency so the tasks execute in the correct order. - -.Configure Auto Relocation -[source,groovy] ----- -task relocateShadowJar(type: ConfigureShadowRelocation) { - target = tasks.shadowJar - prefix = "myapp" // Default value is "shadow" - -} - -tasks.shadowJar.dependsOn tasks.relocateShadowJar ----- - -[NOTE] -==== -Configuring package auto relocation can add significant time to the shadow process as it will process all dependencies -in the configurations declared to be shadowed. By default, this is the `runtime` or `runtimeClasspath` configurations. -Be mindful that some Gradle plugins (such as `java-gradle-plugin` will automatically add dependencies to your class path -(e.g. `java-gradle-plugin` automatically adds the full Gradle API to your `compile` configuratinon. You may need to -remove these dependencies if you do not intend to shadow them into your library. -==== \ No newline at end of file diff --git a/src/docs/asciidoc/15-minimizing.adoc b/src/docs/asciidoc/15-minimizing.adoc deleted file mode 100644 index 48c6365b8..000000000 --- a/src/docs/asciidoc/15-minimizing.adoc +++ /dev/null @@ -1,30 +0,0 @@ -=== Minimizing - -Shadow can automatically remove all classes of dependencies that are not used by the project, thereby minimizing the resulting shadowed JAR. - -.Minimizing an shadow JAR -[source,groovy,indent=0] ----- -shadowJar { - minimize() -} ----- - -A dependency can be excluded from the minimization process thereby forcing it's inclusion the shadow JAR. -This is useful when the dependency analyzer cannot find the usage of a class programmatically, for example if the class -is loaded dynamically via `Class.forName(String)`. - -.Force a class to be retained during minimization -[source,groovy,indent=0] ----- -shadowJar { - minimize { - exclude(dependency('org.scala-lang:.*:.*')) - } -} ----- - -[NOTE] -==== -Dependencies scoped as `api` will automatically excluded from minimization and used as "entry points" on minimization. -==== diff --git a/src/docs/asciidoc/16-reproducible-builds.adoc b/src/docs/asciidoc/16-reproducible-builds.adoc deleted file mode 100644 index 21c77dc8b..000000000 --- a/src/docs/asciidoc/16-reproducible-builds.adoc +++ /dev/null @@ -1,16 +0,0 @@ -=== Reproducible Builds - -Because JAR files contain the timestamp of the included files, it is often difficult to create reproducible builds -from a source commit that results in a hash identical file. -Gradle supports reproducible JAR creation by setting the timestamps of included files to a consistent value. -Shadow includes support for overriding file timestamps starting in version 4.0.0. By default, Shadow will preserve -the file timestamps when creating the Shadow JAR. To set timestamps to a consistent value (1980/1/1 00:00:00), -set the `preserveFileTimestamps` property to `false` on the `ShadowJar` task. - -.Reset file timestamps -[source,groovy,indent=0] ----- -shadowJar { - preserveFileTimestamps = false -} ----- diff --git a/src/docs/asciidoc/20-custom-tasks.adoc b/src/docs/asciidoc/20-custom-tasks.adoc deleted file mode 100644 index 812e3b555..000000000 --- a/src/docs/asciidoc/20-custom-tasks.adoc +++ /dev/null @@ -1,20 +0,0 @@ -== Creating a Custom ShadowJar Task - -The built in `shadowJar` task only provides an output for the `main` source set of the project. -It is possible to add arbitrary link:{api}/tasks/ShadowJar.html[`ShadowJar`] tasks to a project. -When doing so, ensure that the `configurations` property is specified to inform Shadow which dependencies to merge -into the output. - -.Shadowing Test Sources and Dependencies -[source,groovy,indent=0] ----- -task testJar(type: ShadowJar) { - classifier = 'tests' - from sourceSets.test.output - configurations = [project.configurations.testRuntime] -} ----- - -The code snippet above will geneated a shadowed JAR contain both the `main` and `test` sources as well as all `runtime` -and `testRuntime` dependencies. -The file is output to `build/libs/--tests.jar`. diff --git a/src/docs/asciidoc/30-application-plugin.adoc b/src/docs/asciidoc/30-application-plugin.adoc deleted file mode 100644 index c46684973..000000000 --- a/src/docs/asciidoc/30-application-plugin.adoc +++ /dev/null @@ -1,45 +0,0 @@ -== Integrating with Application Plugin - -Shadow reacts to the presence of Gradle's -https://docs.gradle.org/current/userguide/application_plugin.html[`application`] plugin and will automatically -configure additional tasks for running the shadowed JAR and creating distributions containing the shadowed JAR. - -Just like the normal `jar` task, when the `application` plugin is applied, the `shadowJar` manifest will be -configured to contain the `Main-Class` attribute with the value specified in the project's `mainClassName` attribute. - -.Using Shadow with Application Plugin -[source,groovy,indent=0] ----- -apply plugin: 'java' -apply plugin: 'application' -apply plugin: 'com.github.johnrengelman.shadow' - -mainClassName = 'myapp.Main' ----- - -=== Running the Shadow JAR - -When applied along with the `application` plugin, the `runShadow` task will be created for starting -the application from the shadowed JAR. -The `runShadow` task is a https://docs.gradle.org/current/dsl/org.gradle.api.tasks.JavaExec.html[`JavaExec`] -task that is configured to execute `java -jar myproject-all.jar`. -It can be configured the same as any other `JavaExec` task. - -.Configuring the runShadow Task -[source,groovy,indent=0] ----- -runShadow { - args 'foo' -} ----- - -=== Distributing the Shadow JAR - -The Shadow plugin will also configure distribution tasks when in the presence of the `application` plugin. -The plugin will create `shadowDistZip` and `shadowDistTar` which creates Zip and Tar distributions -respectively. -Each distribution will contain the shadowed JAR file along with the necessary start scripts to launch -the application. - -Additionally, the plugin will create the `installShadowDist` and `startShadowScripts` tasks which stages the necessary -files for a distribution to `build/install/-shadow/`. diff --git a/src/docs/asciidoc/40-publishing.adoc b/src/docs/asciidoc/40-publishing.adoc deleted file mode 100644 index c605348af..000000000 --- a/src/docs/asciidoc/40-publishing.adoc +++ /dev/null @@ -1,69 +0,0 @@ -== Publishing Shadow JARs - -=== Publishing with Maven-Publish Plugin - -The Shadow plugin will automatically configure the necessary tasks in the presence of Gradle's -`maven-publish` plugin. -The plugin provides the `component` method from the `shadow` extension to configure the -publication with the necessary artifact and dependencies in the POM file. - -.Publishing a Shadow JAR with the Maven-Publish Plugin -[source,groovy,indent=0] ----- -apply plugin: 'java' -apply plugin: 'maven-publish' -apply plugin: 'com.github.johnrengelman.shadow' - -publishing { - publications { - shadow(MavenPublication) { publication -> - project.shadow.component(publication) - } - } - repositories { - maven { - url "http://repo.myorg.com" - } - } -} ----- - -=== Publishing with Maven Plugin - -The Shadow plugin will automatically configure the necessary tasks in the presence of Gradle's -`maven` plugin. -To publish the JAR, simply configure the publish location for the `uploadShadow` task and execute it. - -.Publishing a Shadow JAR with the Maven Plugin -[source,groovy,indent=0] ----- -apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'com.github.johnrengelman.shadow' - -uploadShadow { - repositories { - mavenDeployer { - repository(url: "http://repo.myorg.com") - } - } -} ----- - -=== Shadow Configuration and Publishing - -The Shadow plugin provides a custom configuration (`configurations.shadow`) to specify -runtime dependencies that are *not* merged into the final JAR file. -When configuring publishing with the Shadow plugin, the dependencies in the `shadow` -configuration, are translated to become `RUNTIME` scoped dependencies of the -published artifact. - -No other dependencies are automatically configured for inclusion in the POM file. -For example, excluded dependencies are *not* automatically added to the POM file or -if the configuration for merging are modified by specifying -`shadowJar.configurations = [configurations.myconfiguration]`, there is no automatic -configuration of the POM file. - -This automatic configuration occurs _only_ when using the above methods for -configuring publishing. If this behavior is not desirable, then publishing *must* -be manually configured. diff --git a/src/docs/asciidoc/50-multi-project-builds.adoc b/src/docs/asciidoc/50-multi-project-builds.adoc deleted file mode 100644 index e69d06958..000000000 --- a/src/docs/asciidoc/50-multi-project-builds.adoc +++ /dev/null @@ -1,21 +0,0 @@ -== Using Shadow in Multi-Project Builds - -When using Shadow in a multi-project build, project dependencies will be treated the same as -external dependencies. -That is a project dependency will be merged into the `shadowJar` output of the project that -is applying the Shadow plugin. - -=== Depending on the Shadow Jar from Another Project - -In a multi-project build there may be one project that applies Shadow and another that -requires the shadowed JAR as a dependency. -In this case, use Gradle's normal dependency declaration mechanism to depend on the `shadow` -configuration of the shadowed project. - -.Depending On Shadow Output of Project -[source,groovy,indent=0] ----- -dependencies { - compile project(path: 'api', configuration: 'shadow') -} ----- \ No newline at end of file diff --git a/src/docs/asciidoc/60-shadowing-plugins.adoc b/src/docs/asciidoc/60-shadowing-plugins.adoc deleted file mode 100644 index 747306eba..000000000 --- a/src/docs/asciidoc/60-shadowing-plugins.adoc +++ /dev/null @@ -1,44 +0,0 @@ -== Using Shadow to Package Gradle Plugins - -In some scenarios, writing a Gradle plugin can be problematic because your plugin may depend on a version that -conflicts with the same dependency provided by the Gradle runtime. If this is the case, then you can utilize Shadow -to relocate your dependencies to a different package name to avoid the collision. - -Configuring the relocation has always been possible, but the build author is required to know all the package names -before hand. Shadow v2.0 corrects this by introducing a new task type `ConfigureShadowRelocation`. -Tasks of this type are configured to target an instance of a `ShadowJar` task and run immediately before it. - -The `ConfigureShadowRelocation` task, scans the dependencies from the configurations specified on the associated -`ShadowJar` task and collects the package names contained within them. It then configures relocation for these -packages using the specified `prefix` on the associated `ShadowJar` task. - -While this is useful for developing Gradle plugins, nothing about the `ConfigureShadowRelocation` task is tied to -Gradle projects. It can be used for standard Java or Groovy projects. - -A simple Gradle plugin can use this feature by applying the `plugin-shadow` plugin and configuring the dependencies -like so: - -[source,groovy,subs="+attributes"] ----- -plugins { - id 'com.github.johnrengelman.plugin-shadow' version '{project-version}' - id 'java' -} - -dependencies { - shadow localGroovy() - shadow gradleApi() - - compile 'org.jdom:jdom2:2.0.6' - compile 'org.ow2.asm:asm:6.0' - compile 'org.ow2.asm:asm-commons:6.0' - compile 'commons-io:commons-io:2.4' - compile 'org.apache.ant:ant:1.9.4' - compile 'org.codehaus.plexus:plexus-utils:2.0.6' -} ----- - -Note that the `localGroovy()` and `gradleApi()` dependencies are added to the `shadow` configuration instead of the -normal `compile` configuration. These 2 dependencies are provided by Gradle to compile your project but are ultimately -provided by the Gradle runtime when executing the plugin. Thus, it is __not__ advisable to bundle these dependencies -with your plugin. \ No newline at end of file diff --git a/src/docs/asciidoc/80-examples.adoc b/src/docs/asciidoc/80-examples.adoc deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/docs/asciidoc/90-changes.adoc b/src/docs/asciidoc/90-changes.adoc deleted file mode 100644 index c802bc812..000000000 --- a/src/docs/asciidoc/90-changes.adoc +++ /dev/null @@ -1,224 +0,0 @@ -== Change Log -[discrete] -=== v4.0.2 (2018-10-27) -* https://github.com/petarov[Petar Petrov] - Update to ASM 7.0-beta and jdependency 2.1.1 to support Java 11, https://github.com/johnrengelman/shadow/pull/415 -* https://github.com/roxchkplusony[Victor Tso] - Ensure input streams are closed, https://github.com/johnrengelman/shadow/pull/411 -* https://github.com/osipxd[Osip Fatkullin] - Exclude `api` configuration from minimization, https://github.com/johnrengelman/shadow/pull/405 - -[discrete] -=== v4.0.1 (2018-09-30) -* **Breaking Change!** `Transform.modifyOutputStream(ZipOutputStream os)` to `Transform.modifyOutputStream(ZipOutputStream jos, boolean preserveFileTimestamps)`. - Typically breaking changes are reserved for major version releases, but this change was necessary for `preserverFileTimestamps` (introduced in v4.0.0) to work correctly - in the presence of transformers. https://github.com/johnrengelman/shadow/issues/404[#404] -* Fix regression in support Java 10+ during relocation https://github.com/johnrengelman/shadow/issues/403[#403] - -[discrete] -=== v4.0.0 (2018-09-25) - -* **Breaking Change!** Restrict Plugin to Gradle 4.0+. Shadow major versions will align with Gradle major versions going forward. -* **Breaking Change!** For clarity purposes `com.github.johnrengelman.plugin-shadow` has been removed. If you intend to use this feature, you will need to declare your own `ConfigureShadowRelocation` task. See section http://imperceptiblethoughts.com/shadow/#automatically_relocating_dependencies[2.9.2] of the User Guide -* https://github.com/SerCeMan[Sergey Tselovalnikov] - Upgrade to ASM 6.2.1 to support Java 11 -* https://github.com/Macil[Chris Cowan] - Add support for `shadowJar.preserveFileTimestamps` property. See https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html#org.gradle.api.tasks.bundling.Jar:preserveFileTimestamps -* https://github.com/paul-nelson-baker[Paul N. Baker] - Add `Log4j2PluginsCacheFileTransformer` to process Log4j DAT files during merge. -* https://github.com/felipecsl[Felipe Lima] - Fix the long standing "No property `mainClassName`" issue. -* https://github.com/debanne[debanne] - Implement JAR minimization actions. This will attempt to exclude unused classes in your shadowed JAR. -* Configure exclusion of `module-info.class` from `shadowJar` when using the Shadow the Java plugin. https://github.com/johnrengelman/shadow/issues/352[#352] - - -[discrete] -=== v2.0.4 (2018-04-27) - -* Update to ASM 6.1.1 to address performance issues - https://gitlab.ow2.org/asm/asm/issues/317816 -* Close InputStreams after using them (https://github.com/johnrengelman/shadow/issues/364[Issue #364]) -* Remove usage of Gradle internal `AbstractFileCollection`. -* Add task annotations to remove warnings when validating plugin. - -[discrete] -=== v2.0.3 (2018-03-24) - -* https://github.com/ttsiebzehntt[Martin Sadowski] - Update to ASM 6.1 -* https://github.com/sgnewson[Scott Newson] - Fix deprecated Gradle warnings https://github.com/johnrengelman/shadow/pull/356[#356] - -[discrete] -=== v2.0.2 (2017-12-12) - -* https://github.com/ben-adazza[Ben Adazza], https://github.com/tylerbenson[Tyler Benson] - documentation -* https://github.com/mark-vieira[Marke Vieira] - Support multi-project builds with Build-Scan integration -* Upgrade to ASM 6 https://github.com/johnrengelman/shadow/issues/294[Issue #294], https://github.com/johnrengelman/shadow/issues/303[Issue #303] -* https://github.com/rspieldenner[Rob Spieldenner] - Fix integration with `application` plugin in Gradle 4.3 https://github.com/johnrengelman/shadow/issues/339[Issues #339] -* Fixed deprecation warning from Gradle 4.2+ https://github.com/johnrengelman/shadow/issues/326[Issue #326] - -[discrete] -=== v2.0.1 (2017-06-23) - -* Fix `null+configuration` error (https://github.com/johnrengelman/shadow/issues/297[Issue #297]) - -[discrete] -=== v2.0.0 (2017-05-09) - -* **Breaking Change!** Restrict Plugin to Gradle 3.0+ -* **Breaking Change!** Build with Java 7 -* **Breaking Change!** Updated `Transformer` interface to accept `TransformerContext` object instead of individual values -* **Breaking Change!** Updated `Relocator` interface to accept `RelocatePathContext` and `RelocateClassContext` objects -* **Breaking Change!** Distribution tasks `distShadowZip` and `distShadowTar` have been removed and replaced with the standard `shadowDistZip` and `shadowDistTar` from the Gradle Distribution plugin. -* **Breaking Change!** The `installShadowApp` task has been removed and replaced with the standard `installShadowDist` task from the Gradle Distribution plugin. -* **Breaking Change!** The new `installShadowDist` task outputs to `build/install/-shadow` per the standard (formerly was `build/installShadow`) -* **Breaking Change!** `component.shadow` removed in favor of `project.shadow.component(publication)` so as to remove dependency on internal Gradle APIs. -* __NEW__ Introducing `ConfigureShadowRelocation` task and `com.github.johnrengelman.plugin-shadow` plugin to automatically configure package relocation for Gradle plugins. -* __NEW__ Integration with Gradle Build Scans. When running a `ShadowJar` task with Build Scans, custom values including dependencies merged anc package relocations are published in the scan. -* Build Shadow w/ Shadow. This will help prevent any future classpath conflicts with Gradle. -* Replace `startShadowScripts` tasks with Gradle's built-in `CreateStartScripts` type. -* Build with Gradle 3.1 -* https://github.com/marcphilipp[Marc Philipp] - Add `keyTransformer` property to `PropertiesFileTransformer` -* Update to ASM 5.2 -* https://github.com/pkubowicz[Piotr Kubowicz] - Support `api`, `implementation`, `runtimeOnly` dependency configurations introdcued in Gradle 3.3 - -[discrete] -=== v1.2.4 (2016-11-03) -* Don't resolve dependency configurations during config phase (https://github.com/johnrengelman/shadow/issues/129[Issue #128]) -* Build plugin with Gradle 2.14 -* Fix docs regarding inheriting Jar manifest (https://github.com/johnrengelman/shadow/issues/251[Issue #251]) -* https://github.com/ethankhall[Ethan Hall] - Support projects that configure uploading to Ivy repositories (https://github.com/johnrengelman/shadow/pull/256[Pull Request #256]) -* Force task to depend on dependency configuration (https://github.com/johnrengelman/shadow/issues/152[Issue #152]) -* Do not explode ZIP files into shadow jar (https://github.com/johnrengelman/shadow/issues/196[Issue #196]) -* https://github.com/jszakmeister[John Szakmeister] - Preserve timestamps on merged jar entries (https://github.com/johnrengelman/shadow/pull/260[Pull Request #260]) - -[discrete] -=== v1.2.3 (2016-01-25) - -* Support for Gradle 2.11-rc-1 (https://github.com/johnrengelman/shadow/issues/177[Issue #177]) -* Convert internal framework to https://docs.gradle.org/current/userguide/test_kit.html[Gradle TestKit] -* https://github.com/fkorotkov[Fedor Korotkov] - Use BufferedOutputStream when writing the Zip file (https://github.com/johnrengelman/shadow/pull/171[PR #171]) -* https://github.com/hbchai[Haw-Bin Chai] - Quote Jar path in Windows start script as it may contain spaces (https://github.com/johnrengelman/shadow/pull/170[PR #170]) -* https://github.com/siordache[Serban Iordache] - Evaluate relocation specs when merging service descriptors (https://github.com/johnrengelman/shadow/pull/165[PR #165]) - -[discrete] -=== v1.2.2 (2015-07-17) - -* https://github.com/Minecrell[Minecrell] - Gradle 2.5 compatibility (https://github.com/johnrengelman/shadow/issues/147[Issue #147]) - -[discrete] -=== v1.2.1 (2015-01-23) - -* Apply package relocations to dependency resources (https://github.com/johnrengelman/shadow/issues/114[Issue #114]) - -[discrete] -=== v1.2.0 (2014-11-24) - -* Re-organize some code to remove need for forcing the Gradle API ClassLoader to allow the `org.apache.tools.zip` package. -* Upgrade JDOM library from 1.1 to 2.0.5 (change dependency from `jdom:jdom:1.1` to `org.jdom:jdom2:2.0.5`) (https://github.com/johnrengelman/shadow/issues/98[Issue #98]) -* Convert ShadowJar.groovy to ShadowJar.java to workaround binary incompatibility introduced by Gradle 2.2 ((https://github.com/johnrengelman/shadow/issues/106[Issue #106]) -* Updated ASM library to `5.0.3` to support JDK8 (https://github.com/johnrengelman/shadow/issues/97[Issue #97]) -* Allows for regex pattern matching in the `dependency` string when including/excluding (https://github.com/johnrengelman/shadow/issues/83[Issue #83]) -* Apply package relocations to resource files (https://github.com/johnrengelman/shadow/issues/93[Issue #93]) - -[discrete] -=== v1.1.2 (2014-09-09) - -* fix bug in `runShadow` where dependencies from the `shadow` configuration are not available (https://github.com/johnrengelman/shadow/issues/94[Issue #94]) - -[discrete] -=== v1.1.1 (2014-08-27) - -* Fix bug in `'createStartScripts'` task that was causing it to not execute `'shadowJar'` task (https://github.com/johnrengelman/shadow/issues/90[Issue #90]) -* Do not include `null` in ShadowJar Manifest `'Class-Path'` value when `jar` task does not specify a value for it. (https://github.com/johnrengelman/shadow/issues/92[Issue #92]) -* ShadowJar Manifest `'Class-Path'` should reference jars from `'shadow'` config as relative to location of `shadowJar` output (https://github.com/johnrengelman/shadow/issues/91[Issue #91]) - -[discrete] -=== v1.1.0 (2014-08-26) - -* **Breaking Change!** Fix leaking of `shadowJar.manifest` into `jar.manifest`. (https://github.com/johnrengelman/shadow/issues/82[Issue #82]) - To simplify behavior, the `shadowJar.appendManifest` method has been removed. Replace uses with `shadowJar.manifest` -* `ShadowTask` now has a `configurations` property that is resolved to the files in the resolved configuration before - being added to the copy spec. This allows for an easier implementation for filtering. The default 'shadowJar' task - has the convention of adding the `'runtime'` scope to this list. Manually created instances of `ShadowTask` have no - configurations added by default and can be configured by setting `task.configurations`. -* Properly configure integration with the `'maven'` plugin when added. When adding `'maven'` the `'uploadShadow'` task - will now properly configure the POM dependencies by removing the `'compile'` and `'runtime'` configurations from the - POM and adding the `'shadow'` configuration as a `RUNTIME` scope in the POM. This behavior matches the behavior when - using the `'maven-publish'` plugin. -* https://github.com/mhurne[Matt Hurne] - Allow `ServiceFileTransformer` to specify include/exclude patterns for - files within the configured path to merge. -* https://github.com/mhurne[Matt Hurne] - Added `GroovyExtensionModuleTransformer` for merging Groovy Extension module - descriptor files. The existing `ServiceFileTransformer` now excludes Groovy Extension Module descriptors by default. -* `distShadowZip` and `distShadowZip` now contain the shadow library and run scripts instead of the default from the `'application'` plugin (https://github.com/johnrengelman/shadow/issues/89[Issue #89]) - -[discrete] -=== v1.0.3 (2014-07-29) - -* Make service files root path configurable for `ServiceFileTransformer` (https://github.com/johnrengelman/shadow/issues/72[Issue #72]) -* https://github.com/aalmiray[Andres Almiray] - Added PropertiesFileTransformer (https://github.com/johnrengelman/shadow/issues/73[Issue #73]) -* https://github.com/brandonkearby[Brandon Kearby] - Fixed StackOverflow when a cycle occurs in the resolved dependency graph (https://github.com/johnrengelman/shadow/pull/69[Issue #69]) -* Apply Transformers to project resources (https://github.com/johnrengelman/shadow/issues/70[Issue #70]), https://github.com/johnrengelman/shadow/issues/71[Issue #71]) -* Do not drop non-class files from dependencies when relocation is enabled. Thanks to https://github.com/Minecrell[Minecrell] for digging into this. (https://github.com/johnrengelman/shadow/issues/61[Issue #61]) -* Remove support for applying individual sub-plugins by Id (easier maintenance and cleaner presentation in Gradle Portal) - -[discrete] -=== v1.0.2 (2014-07-07) - -* Do not add an empty Class-Path attribute to the manifest when the `shadow` configuration contains no dependencies. -* `runShadow` now registers `shadowJar` as an input. Previously, `runShadow` did not execute `shadowJar` and an error occurred. -* Support Gradle 2.0 (https://github.com/johnrengelman/shadow/issues/66[Issue #66]) -* Do not override existing 'Class-Path' Manifest attribute settings from Jar configuration. Instead combine. (https://github.com/johnrengelman/shadow/issues/65[Issue #65]) - -[discrete] -=== v1.0.1 (2014-06-28) - -* Fix issue where non-class files are dropped when using relocation (https://github.com/johnrengelman/shadow/issues/58[Issue #58]) -* Do not create a `/` directory inside the output jar. -* Fix `runShadow` task to evaluate the `shadowJar.archiveFile` property at execution time. (https://github.com/johnrengelman/shadow/issues/60[Issue #60]) - -[discrete] -=== v1.0.0 (2014-06-27) - -* Previously known as v0.9.0 -* All changes from 0.9.0-M1 to 0.9.0-M5 -* Properly configure the ShadowJar task inputs to observe the include/excludes from the `dependencies` block. This - allows UP-TO-DATE checking to work properly when changing the `dependencies` rules (https://github.com/johnrengelman/shadow/issues/54[Issue #54]) -* Apply relocation remappings to classes and imports in source project (https://github.com/johnrengelman/shadow/issues/55[Issue #55]) -* Do not create directories in jar for source of remapped class, created directories in jar for destination of remapped classes (https://github.com/johnrengelman/shadow/issues/53[Issue #53]) - -[discrete] -=== v0.9.0-M5 - -* Add commons-io to compile classpath -* Update asm library to 4.1 - -[discrete] -=== v0.9.0-M4 - -* Break plugin into multiple sub-plugins. `ShadowBasePlugin` is always applied. - `ShadowJavaPlugin` and `ShadowApplicationPlugin` are applied in reaction to applying the `java` and `application` - plugins respectively. -* Shadow does not applied `java` plugin automatically. `java` or `groovy` must be applied in conjunction with `shadow`. -* Moved artifact filtering to `dependencies {}` block underneath `shadowJar`. This allows better include/exclude control - for dependencies. -* Dependencies added to the `shadow` configuration are automatically added to the `Class-Path` attribute in the manifest - for `shadowJar` -* Applying `application` plugin and settings `mainClassName` automatically configures the `Main-Class` attribute in - the manifest for `shadowJar` -* `runShadow` now utilizes the output of the `shadowJar` and executes using `java -jar ` -* Start Scripts for shadow distribution now utilize `java -jar` to execute instead of placing all files on classpath - and executing main class. -* Excluding/Including dependencies no longer includes transitive dependencies. All dependencies for inclusion/exclusion - must be explicitly configured via a spec. - -[discrete] -=== v0.9.0-M3 - -* Use commons.io FilenameUtils to determine name of resolved jars for including/excluding - -[discrete] -=== v0.9.0-M2 - -* Added integration with `application` plugin to replace old `OutputSignedJars` task -* Fixed bug that resulted in duplicate file entries in the resulting Jar -* Changed plugin id to 'com.github.johnrengelman.shadow' to support Gradle 2.x plugin infrastructure. - -[discrete] -=== v0.9.0-M1 - -* Rewrite based on Gradle Jar Task -* `ShadowJar` now extends `Jar` -* Removed `signedCompile` and `signedRuntime` configurations in favor of `shadow` configuration -* Removed `OutputSignedJars` task diff --git a/src/docs/asciidoc/99-about.adoc b/src/docs/asciidoc/99-about.adoc deleted file mode 100644 index e19ae3be9..000000000 --- a/src/docs/asciidoc/99-about.adoc +++ /dev/null @@ -1,34 +0,0 @@ -== About This Project - -I started this project in December of 2012. We were working on converting from a monolithic application into a the -new hot jazz of "microservices" using Dropwizard. -I had also just started learning about Gradle and I knew that the incremental build system it provided would benefit -our development team greatly. -Unfortunately, the closest thing that Gradle had to Maven's Shade plugin was its ability to create application TARs and -ZIPs. - -So, Charlie Knudsen and myself set out to port the existing Shade code into a Gradle plugin. -This port is what existing up until the `0.9` milestone releases for Shadow. -It functioned, but it wasn't idiomatic Gradle by any means. - -Starting with 0.9, Shadow was rewritten from the ground up as standard Gradle plugin and leveraged as much of Gradle's -classes and concepts as possible. -At the same time as the 0.9 release, Gradle was announcing the https://plugins.gradle.org[Gradle Plugin Portal] and -so Shadow was published there. - -Shadow has had nearly ~900,000 downloads from Bintray and countless more from the Gradle Plugin Portal. - -=== Maintainers - -* https://github.com/johnrengelman[John Engelman] - -=== Contributors - -* https://github.com/charliek[Charlie Knudsen] -* https://github.com/fkorotkov[Fedor Korotkov] -* https://github.com/hbchai[Haw-Bin Chai] -* https://github.com/siordache[Serban Iordache] -* https://github.com/Minecrell[Minecrell] -* https://github.com/mhurne[Matt Hurne] -* https://github.com/aalmiray[Andres Almiray] -* https://github.com/brandonkearby[Brandon Kearby] diff --git a/src/docs/asciidoc/index.adoc b/src/docs/asciidoc/index.adoc deleted file mode 100644 index ac9b53d67..000000000 --- a/src/docs/asciidoc/index.adoc +++ /dev/null @@ -1,31 +0,0 @@ -:src: ../ -:tests: {src}/test/groovy/com/github/jengelman/gradle/plugins/shadow -:api: api/com/github/jengelman/gradle/plugins/shadow -:docinfo1: -ifdef::env-github[] -:note-caption: :information-source: -endif::[] - -= Shadow Plugin User Guide & Examples -John Engelman - @johnrengelman -:revnumber: {project-version} - -link:api/index.html[API Docs] - -include::00-intro.adoc[] - -include::10-configuring.adoc[] - -include::20-custom-tasks.adoc[] - -include::30-application-plugin.adoc[] - -include::40-publishing.adoc[] - -include::50-multi-project-builds.adoc[] - -include::60-shadowing-plugins.adoc[] - -include::90-changes.adoc[] - -include::99-about.adoc[] \ No newline at end of file diff --git a/src/docs/configuration/README.md b/src/docs/configuration/README.md index a79f01441..418075f6b 100644 --- a/src/docs/configuration/README.md +++ b/src/docs/configuration/README.md @@ -4,10 +4,12 @@ api: api/com/github/jengelman/gradle/plugins/shadow # Configuring Shadow -The [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type extends from Gradle's +`ShadowJar` + +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type extends from Gradle's [`Jar`](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) type. This means that all attributes and methods available on `Jar` are also available on -[`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html). +[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html). Refer the _Gradle User Guide_ for [Jar](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) for details. diff --git a/src/docs/configuration/dependencies/README.md b/src/docs/configuration/dependencies/README.md index 6e05f448f..acaa90543 100644 --- a/src/docs/configuration/dependencies/README.md +++ b/src/docs/configuration/dependencies/README.md @@ -3,7 +3,7 @@ Shadow configures the default `shadowJar` task to merge all dependencies from the project's `runtime` configuration into the final JAR. The configurations to from which to source dependencies for the merging can be configured using the `configurations` property -of the [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type. +of the [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type. ```groovy shadowJar { @@ -15,10 +15,10 @@ The above code sample would configure the `shadowJar` task to merge depdencies f This means any dependency declared in the `runtime` configuration would be **not** be included in the final JAR. > Note the literal use of `project.configurations` when setting the `configurations` attribute of a -[`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. +[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. This is **required**. It maybe be tempting to specify `configurations = [configurations.compile]` but this will not have the intended effect, as `configurations.compile` will try to delegate to the `configurations` property of the -the [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task instead of the `project` +the [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task instead of the `project` ## Embedding Jar Files Inside Your Shadow Jar @@ -31,7 +31,7 @@ begins. ## Filtering Dependencies Individual dependencies can be filtered from the final JAR by using the `dependencies` block of a -[`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. +[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. Dependency filtering does **not** apply to transitive dependencies. That is, excluding a dependency does not exclude any of its dependencies from the final JAR. @@ -123,7 +123,7 @@ shadowJar { ### Programmatically Selecting Dependencies to Filter If more complex decisions are needed to select the dependencies to be included, the -[`dependencies`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#dependencies(Action)) +[`dependencies`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#dependencies(Action)) block provides a method that accepts a `Closure` for selecting dependencies. ```groovy diff --git a/src/docs/configuration/merging/README.md b/src/docs/configuration/merging/README.md index 86418cb30..1fbbf5769 100644 --- a/src/docs/configuration/merging/README.md +++ b/src/docs/configuration/merging/README.md @@ -1,11 +1,11 @@ # Controlling JAR Content Merging Shadow allows for customizing the process by which the output JAR is generated through the -[`Transformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) interface. +[`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) interface. This is a concept that has been carried over from the original Maven Shade implementation. -A [`Transformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) is invoked for each +A [`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) is invoked for each entry in the JAR before being written to the final output JAR. -This allows a [`Transformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) to +This allows a [`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) to determine if it should process a particular entry and apply any modifications before writing the stream to the output. ```groovy @@ -43,7 +43,7 @@ At runtime, this file is read and used to configure library or application behav Multiple dependencies may use the same service descriptor file name. In this case, it is generally desired to merge the content of each instance of the file into a single output file. -The [`ServiceFileTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) class is used to perform this merging. By default, it will merge each copy of a file under `META-INF/services` into a single file in the output JAR. @@ -55,17 +55,17 @@ shadowJar { ``` The above code snippet is a convenience syntax for calling -[`transform(ServiceFileTransformer.class)`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#transform(Class)). +[`transform(ServiceFileTransformer.class)`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#transform(Class)). > Groovy Extension Module descriptor files (located at `META-INF/services/org.codehaus.groovy.runtime.ExtensionModule`) -are ignored by the [`ServiceFileTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html). +are ignored by the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html). This is due to these files having a different syntax than standard service descriptor files. -Use the [`mergeGroovyExtensionModules()`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#mergeGroovyExtensionModules()) method to merge +Use the [`mergeGroovyExtensionModules()`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#mergeGroovyExtensionModules()) method to merge these files if your dependencies contain them. ### Configuring the Location of Service Descriptor Files -By default the [`ServiceFileTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +By default the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) is configured to merge files in `META-INF/services`. This directory can be overridden to merge descriptor files in a different location. @@ -80,7 +80,7 @@ shadowJar { #### Excluding/Including Specific Service Descriptor Files From Merging -The [`ServiceFileTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) class supports specifying specific files to include or exclude from merging. ```groovy @@ -96,9 +96,9 @@ shadowJar { Shadow provides a specific transformer for dealing with Groovy extension module files. This is due to their special syntax and how they need to be merged together. -The l[`GroovyExtensionModuleTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformer.html) +The l[`GroovyExtensionModuleTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformer.html) will handle these files. -The [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task also provides a short syntax +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task also provides a short syntax method to add this transformer. ```groovy @@ -111,11 +111,11 @@ shadowJar { ## Appending Text Files Generic text files can be appended together using the -[`AppendingTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer.html). +[`AppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer.html). Each file is appended using new lines to separate content. -The [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task provides a short syntax +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task provides a short syntax method of -[`append(String)`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#append(java.lang.String)) to +[`append(String)`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#append(java.lang.String)) to configure this transformer. ```groovy @@ -128,10 +128,10 @@ shadowJar { ## Appending XML Files XML files require a special transformer for merging. -The l[`XmlAppendingTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html) +The l[`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html) reads each XML document and merges each root element into a single document. -There is no short syntax method for the [`XmlAppendingTransformer`](/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html). -It must be added using the [`transform`](/api/com/github/jengelman/gradle/plugins/shadow//tasks/ShadowJar.html#transform(Class)) methods. +There is no short syntax method for the [`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html). +It must be added using the [`transform`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow//tasks/ShadowJar.html#transform(Class)) methods. ```groovy // Appending a XML File diff --git a/src/docs/custom-tasks/README.md b/src/docs/custom-tasks/README.md index 6c73b3439..5c678c697 100644 --- a/src/docs/custom-tasks/README.md +++ b/src/docs/custom-tasks/README.md @@ -1,7 +1,7 @@ # Creating a Custom ShadowJar Task The built in `shadowJar` task only provides an output for the `main` source set of the project. -It is possible to add arbitrary [`ShadowJar`](/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) +It is possible to add arbitrary [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) tasks to a project. When doing so, ensure that the `configurations` property is specified to inform Shadow which dependencies to merge into the output. diff --git a/src/docs/getting-started/README.md b/src/docs/getting-started/README.md index 6540aaf50..a803c8be5 100644 --- a/src/docs/getting-started/README.md +++ b/src/docs/getting-started/README.md @@ -88,4 +88,4 @@ the final jar and automatically configures relocation for them. By default the tasks relocates all packages to the `shadow.` prefix. For example `org.jdom2.JDOMException` becomes `shadow.org.jdom2.JDOMException` -For more details see the section [Using Shadow to Package Gradle Plugins](/shadowing-plugins/) +For more details see the section [Using Shadow to Package Gradle Plugins](/plugins/) From 06c437228a6f46f7edfe93d9d9f83c308f9f5f3a Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sun, 28 Oct 2018 16:26:17 -0500 Subject: [PATCH 03/34] add GA --- src/docs/.vuepress/config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/docs/.vuepress/config.js b/src/docs/.vuepress/config.js index 9f717d193..2a60ed0e3 100644 --- a/src/docs/.vuepress/config.js +++ b/src/docs/.vuepress/config.js @@ -1,6 +1,7 @@ module.exports = { base: "/shadow-new-site/", dest: "build/site", + ga: "UA-321220-4", themeConfig: { repo: "johnrengelman/shadow", editLinks: true, From f1d4399cc9e0a83ac8f9221dad7f63e3c1af7642 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sun, 28 Oct 2018 16:28:39 -0500 Subject: [PATCH 04/34] remove last bit of asciidoc --- src/docs/asciidoc/docinfo-footer.html | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 src/docs/asciidoc/docinfo-footer.html diff --git a/src/docs/asciidoc/docinfo-footer.html b/src/docs/asciidoc/docinfo-footer.html deleted file mode 100644 index 02a530785..000000000 --- a/src/docs/asciidoc/docinfo-footer.html +++ /dev/null @@ -1,10 +0,0 @@ - \ No newline at end of file From 7dea0d1d51fadb352aeaa86da5f3f555e95b6036 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sun, 28 Oct 2018 16:30:56 -0500 Subject: [PATCH 05/34] remove test component --- src/docs/configuration/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/docs/configuration/README.md b/src/docs/configuration/README.md index 418075f6b..d21d7d7c7 100644 --- a/src/docs/configuration/README.md +++ b/src/docs/configuration/README.md @@ -4,8 +4,6 @@ api: api/com/github/jengelman/gradle/plugins/shadow # Configuring Shadow -`ShadowJar` - The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type extends from Gradle's [`Jar`](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) type. This means that all attributes and methods available on `Jar` are also available on From f45f5334de15c12f6e73732a8650969f981caf1d Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sun, 28 Oct 2018 16:35:36 -0500 Subject: [PATCH 06/34] fix up some links --- src/docs/configuration/README.md | 4 +-- src/docs/configuration/dependencies/README.md | 10 +++--- src/docs/configuration/merging/README.md | 34 +++++++++---------- src/docs/custom-tasks/README.md | 2 +- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/docs/configuration/README.md b/src/docs/configuration/README.md index d21d7d7c7..5fb9bb365 100644 --- a/src/docs/configuration/README.md +++ b/src/docs/configuration/README.md @@ -4,10 +4,10 @@ api: api/com/github/jengelman/gradle/plugins/shadow # Configuring Shadow -The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type extends from Gradle's +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type extends from Gradle's [`Jar`](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) type. This means that all attributes and methods available on `Jar` are also available on -[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html). +[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html). Refer the _Gradle User Guide_ for [Jar](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) for details. diff --git a/src/docs/configuration/dependencies/README.md b/src/docs/configuration/dependencies/README.md index acaa90543..2fe325606 100644 --- a/src/docs/configuration/dependencies/README.md +++ b/src/docs/configuration/dependencies/README.md @@ -3,7 +3,7 @@ Shadow configures the default `shadowJar` task to merge all dependencies from the project's `runtime` configuration into the final JAR. The configurations to from which to source dependencies for the merging can be configured using the `configurations` property -of the [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type. +of the [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type. ```groovy shadowJar { @@ -15,10 +15,10 @@ The above code sample would configure the `shadowJar` task to merge depdencies f This means any dependency declared in the `runtime` configuration would be **not** be included in the final JAR. > Note the literal use of `project.configurations` when setting the `configurations` attribute of a -[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. +[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. This is **required**. It maybe be tempting to specify `configurations = [configurations.compile]` but this will not have the intended effect, as `configurations.compile` will try to delegate to the `configurations` property of the -the [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task instead of the `project` +the [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task instead of the `project` ## Embedding Jar Files Inside Your Shadow Jar @@ -31,7 +31,7 @@ begins. ## Filtering Dependencies Individual dependencies can be filtered from the final JAR by using the `dependencies` block of a -[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. +[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. Dependency filtering does **not** apply to transitive dependencies. That is, excluding a dependency does not exclude any of its dependencies from the final JAR. @@ -123,7 +123,7 @@ shadowJar { ### Programmatically Selecting Dependencies to Filter If more complex decisions are needed to select the dependencies to be included, the -[`dependencies`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#dependencies(Action)) +[`dependencies`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#dependencies(Action)) block provides a method that accepts a `Closure` for selecting dependencies. ```groovy diff --git a/src/docs/configuration/merging/README.md b/src/docs/configuration/merging/README.md index 1fbbf5769..cd96b48eb 100644 --- a/src/docs/configuration/merging/README.md +++ b/src/docs/configuration/merging/README.md @@ -1,11 +1,11 @@ # Controlling JAR Content Merging Shadow allows for customizing the process by which the output JAR is generated through the -[`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) interface. +[`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) interface. This is a concept that has been carried over from the original Maven Shade implementation. -A [`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) is invoked for each +A [`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) is invoked for each entry in the JAR before being written to the final output JAR. -This allows a [`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) to +This allows a [`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) to determine if it should process a particular entry and apply any modifications before writing the stream to the output. ```groovy @@ -43,7 +43,7 @@ At runtime, this file is read and used to configure library or application behav Multiple dependencies may use the same service descriptor file name. In this case, it is generally desired to merge the content of each instance of the file into a single output file. -The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) class is used to perform this merging. By default, it will merge each copy of a file under `META-INF/services` into a single file in the output JAR. @@ -55,17 +55,17 @@ shadowJar { ``` The above code snippet is a convenience syntax for calling -[`transform(ServiceFileTransformer.class)`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#transform(Class)). +[`transform(ServiceFileTransformer.class)`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#transform(Class)). > Groovy Extension Module descriptor files (located at `META-INF/services/org.codehaus.groovy.runtime.ExtensionModule`) -are ignored by the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html). +are ignored by the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html). This is due to these files having a different syntax than standard service descriptor files. -Use the [`mergeGroovyExtensionModules()`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#mergeGroovyExtensionModules()) method to merge +Use the [`mergeGroovyExtensionModules()`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#mergeGroovyExtensionModules()) method to merge these files if your dependencies contain them. ### Configuring the Location of Service Descriptor Files -By default the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +By default the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) is configured to merge files in `META-INF/services`. This directory can be overridden to merge descriptor files in a different location. @@ -80,7 +80,7 @@ shadowJar { #### Excluding/Including Specific Service Descriptor Files From Merging -The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) class supports specifying specific files to include or exclude from merging. ```groovy @@ -96,9 +96,9 @@ shadowJar { Shadow provides a specific transformer for dealing with Groovy extension module files. This is due to their special syntax and how they need to be merged together. -The l[`GroovyExtensionModuleTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformer.html) +The [`GroovyExtensionModuleTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformer.html) will handle these files. -The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task also provides a short syntax +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task also provides a short syntax method to add this transformer. ```groovy @@ -111,11 +111,11 @@ shadowJar { ## Appending Text Files Generic text files can be appended together using the -[`AppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer.html). +[`AppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer.html). Each file is appended using new lines to separate content. -The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task provides a short syntax +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task provides a short syntax method of -[`append(String)`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#append(java.lang.String)) to +[`append(String)`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#append(java.lang.String)) to configure this transformer. ```groovy @@ -128,10 +128,10 @@ shadowJar { ## Appending XML Files XML files require a special transformer for merging. -The l[`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html) +The [`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html) reads each XML document and merges each root element into a single document. -There is no short syntax method for the [`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html). -It must be added using the [`transform`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow//tasks/ShadowJar.html#transform(Class)) methods. +There is no short syntax method for the [`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html). +It must be added using the [`transform`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow//tasks/ShadowJar.html#transform(Class)) methods. ```groovy // Appending a XML File diff --git a/src/docs/custom-tasks/README.md b/src/docs/custom-tasks/README.md index 5c678c697..34ee3131a 100644 --- a/src/docs/custom-tasks/README.md +++ b/src/docs/custom-tasks/README.md @@ -1,7 +1,7 @@ # Creating a Custom ShadowJar Task The built in `shadowJar` task only provides an output for the `main` source set of the project. -It is possible to add arbitrary [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) +It is possible to add arbitrary [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) tasks to a project. When doing so, ensure that the `configurations` property is specified to inform Shadow which dependencies to merge into the output. From c0afd46b6eb4b7fdde1449c6d6c156d039028a17 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sun, 28 Oct 2018 19:42:16 -0500 Subject: [PATCH 07/34] copy over ratpack code snippet test framework --- .../shadow/docs/ManualCodeSnippetTests.groovy | 47 ++++++++++++ .../extractor/ManualSnippetExtractor.groovy | 73 +++++++++++++++++++ .../plugins/shadow/docs/internal/Block.java | 11 +++ .../snippets/CodeSnippetTestCase.java | 23 ++++++ .../internal/snippets/CodeSnippetTests.java | 7 ++ .../snippets/DefaultCodeSnippetTests.groovy | 20 +++++ .../internal/snippets/TestCodeSnippet.java | 41 +++++++++++ .../snippets/executer/CompileException.java | 18 +++++ .../executer/ExceptionTransformer.groovy | 39 ++++++++++ .../snippets/executer/SnippetExecuter.java | 12 +++ .../snippets/fixture/SnippetFixture.java | 27 +++++++ .../snippets/junit/DelegatingTestRunner.java | 55 ++++++++++++++ .../snippets/junit/RunnerProvider.java | 11 +++ .../snippets/junit/SnippetRunner.java | 55 ++++++++++++++ 14 files changed, 439 insertions(+) create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/Block.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/CodeSnippetTestCase.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/CodeSnippetTests.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/DefaultCodeSnippetTests.groovy create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/TestCodeSnippet.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/CompileException.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/ExceptionTransformer.groovy create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/SnippetExecuter.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/fixture/SnippetFixture.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/DelegatingTestRunner.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/RunnerProvider.java create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/SnippetRunner.java diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy new file mode 100644 index 000000000..84de75d24 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy @@ -0,0 +1,47 @@ +package com.github.jengelman.gradle.plugins.shadow.docs + +import com.github.jengelman.gradle.plugins.shadow.docs.extractor.ManualSnippetExtractor +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.CodeSnippetTestCase +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.CodeSnippetTests +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.SnippetExecuter +import com.google.common.base.StandardSystemProperty + +class ManualCodeSnippetTests extends CodeSnippetTestCase { + + public static final LinkedHashMap FIXTURES = [ +// "language-groovy groovy-chain-dsl": new GroovySnippetExecuter(true, new GroovyChainDslFixture()), +// "language-groovy groovy-ratpack" : new GroovySnippetExecuter(true, new GroovyRatpackDslNoRunFixture()), +// "language-groovy groovy-handlers" : new GroovySnippetExecuter(true, new GroovyHandlersFixture()), +// "language-groovy gradle" : new GradleSnippetExecuter(new SnippetFixture()), +// "language-groovy tested" : new GroovySnippetExecuter(true, new GroovyScriptFixture()), +// "language-java" : new JavaSnippetExecuter(new SnippetFixture()), +// "language-java hello-world" : new HelloWorldAppSnippetExecuter(new JavaSnippetExecuter(new SnippetFixture())), +// "language-groovy hello-world" : new HelloWorldAppSnippetExecuter(new GroovySnippetExecuter(true, new GroovyScriptRatpackDslFixture())), +// "language-groovy hello-world-grab": new HelloWorldAppSnippetExecuter(new GroovySnippetExecuter(true, new GroovyScriptRatpackDslFixture() { +// @Override +// String transform(String text) { +// return text.readLines()[4..-1].join("\n") +// } +// })) + ] + + @Override + protected void addTests(CodeSnippetTests tests) { + File cwd = new File(StandardSystemProperty.USER_DIR.value()) + File root + if (new File(cwd, "ratpack-manual.gradle").exists()) { + root = cwd.parentFile + } else { + root = cwd + } + + def content = new File(root, "ratpack-manual/src/content/chapters") + + FIXTURES.each { selector, executer -> + ManualSnippetExtractor.extract(content, selector, executer).each { + tests.add(it) + } + } + } + +} \ No newline at end of file diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy new file mode 100644 index 000000000..1d02a752d --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy @@ -0,0 +1,73 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.extractor + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.TestCodeSnippet +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.ExceptionTransformer +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.SnippetExecuter + +import java.util.regex.Pattern + +class ManualSnippetExtractor { + + static List extract(File root, String cssClass, SnippetExecuter executer) { + List snippets = [] + + def snippetBlockPattern = Pattern.compile(/(?ims)```$cssClass\n(.*?)\n```/) + def filenames = new FileNameFinder().getFileNames(root.absolutePath, "*.md") + + filenames.each { filename -> + def file = new File(filename) + addSnippets(snippets, file, snippetBlockPattern, executer) + } + + snippets + } + + private static void addSnippets(List snippets, File file, Pattern snippetBlockPattern, SnippetExecuter executer) { + def source = file.text + String testName = file.name + Map snippetsByLine = findSnippetsByLine(source, snippetBlockPattern) + + snippetsByLine.each { lineNumber, snippet -> + snippets << createSnippet(testName, file, lineNumber, snippet, executer) + } + } + + private static List findSnippetBlocks(String code, Pattern snippetTagPattern) { + List tags = [] + code.eachMatch(snippetTagPattern) { matches -> + tags.add(matches[0]) + } + tags + } + + private static Map findSnippetsByLine(String source, Pattern snippetTagPattern) { + List snippetBlocks = findSnippetBlocks(source, snippetTagPattern) + Map snippetBlocksByLine = [:] + + int codeIndex = 0 + snippetBlocks.each { block -> + codeIndex = source.indexOf(block, codeIndex) + def lineNumber = source.substring(0, codeIndex).readLines().size() + 2 + snippetBlocksByLine.put(lineNumber, performSubstitutions(extractSnippetFromBlock(block))) + codeIndex += block.size() + } + + snippetBlocksByLine + } + + private static String extractSnippetFromBlock(String tag) { + tag.substring(tag.indexOf("\n") + 1, tag.lastIndexOf("\n")) + } + + /** + * Perform the substitutions that {@code :ratpack-manual:tokeniseManual} would perform, as required by tested snippets. + */ + private static String performSubstitutions(String snippet) { +// return snippet.replaceAll("@ratpack-version@", RatpackVersion.version) + } + + private static TestCodeSnippet createSnippet(String sourceClassName, File sourceFile, int lineNumber, String snippet, SnippetExecuter executer) { + new TestCodeSnippet(snippet, sourceClassName, sourceClassName + ":$lineNumber", executer, new ExceptionTransformer(sourceClassName, sourceFile.name, lineNumber)) + } + +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/Block.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/Block.java new file mode 100644 index 000000000..6be5676e3 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/Block.java @@ -0,0 +1,11 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal; + +public interface Block { + + /** + * Execute the action. + * + * @throws Exception any + */ + void execute() throws Exception; +} \ No newline at end of file diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/CodeSnippetTestCase.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/CodeSnippetTestCase.java new file mode 100644 index 000000000..ba305419d --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/CodeSnippetTestCase.java @@ -0,0 +1,23 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets; + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.junit.DelegatingTestRunner; +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.junit.RunnerProvider; +import org.junit.runner.RunWith; +import org.junit.runner.Runner; + +import java.util.LinkedList; +import java.util.List; + +@RunWith(DelegatingTestRunner.class) +abstract public class CodeSnippetTestCase implements RunnerProvider { + + protected abstract void addTests(CodeSnippetTests tests); + + public final List getRunners() { + List runners = new LinkedList<>(); + CodeSnippetTests tests = new DefaultCodeSnippetTests(getClass(), runners); + addTests(tests); + return runners; + } + +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/CodeSnippetTests.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/CodeSnippetTests.java new file mode 100644 index 000000000..68b34c908 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/CodeSnippetTests.java @@ -0,0 +1,7 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets; + +public interface CodeSnippetTests { + + void add(TestCodeSnippet testCodeSnippet); + +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/DefaultCodeSnippetTests.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/DefaultCodeSnippetTests.groovy new file mode 100644 index 000000000..ec613c8e4 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/DefaultCodeSnippetTests.groovy @@ -0,0 +1,20 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.junit.SnippetRunner; +import org.junit.runner.Runner + +class DefaultCodeSnippetTests implements CodeSnippetTests { + + private final Class clazz + private final List runners + + DefaultCodeSnippetTests(Class clazz, List runners) { + this.clazz = clazz + this.runners = runners + } + + void add(TestCodeSnippet snippet) { + runners.add(new SnippetRunner(clazz, snippet)) + } + +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/TestCodeSnippet.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/TestCodeSnippet.java new file mode 100644 index 000000000..6db49029c --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/TestCodeSnippet.java @@ -0,0 +1,41 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets; + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.ExceptionTransformer; +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.SnippetExecuter; + +public class TestCodeSnippet { + + private final String snippet; + private final String className; + private final String testName; + private final SnippetExecuter executer; + private final ExceptionTransformer exceptionTransformer; + + public TestCodeSnippet(String snippet, String className, String testName, SnippetExecuter executer, ExceptionTransformer exceptionTransformer) { + this.snippet = snippet; + this.className = className; + this.testName = testName; + this.executer = executer; + this.exceptionTransformer = exceptionTransformer; + } + + public String getSnippet() { + return snippet; + } + + public String getClassName() { + return className; + } + + public String getTestName() { + return testName; + } + + public ExceptionTransformer getExceptionTransformer() { + return exceptionTransformer; + } + + public SnippetExecuter getExecuter() { + return executer; + } +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/CompileException.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/CompileException.java new file mode 100644 index 000000000..90768b3f3 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/CompileException.java @@ -0,0 +1,18 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer; + +public class CompileException extends RuntimeException { + + private static final long serialVersionUID = 0; + + private final int lineNo; + + public CompileException(Throwable cause, int lineNo) { + super(cause); + this.lineNo = lineNo; + } + + public int getLineNo() { + return lineNo; + } + +} \ No newline at end of file diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/ExceptionTransformer.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/ExceptionTransformer.groovy new file mode 100644 index 000000000..cee765c2c --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/ExceptionTransformer.groovy @@ -0,0 +1,39 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer + +class ExceptionTransformer { + + final String sourceClassName + final String sourceFileName + final Integer lineNumber + + ExceptionTransformer(String sourceClassName, String sourceFileName, Integer lineNumber) { + this.sourceClassName = sourceClassName + this.sourceFileName = sourceFileName + this.lineNumber = lineNumber + } + + Throwable transform(Throwable throwable, Integer offset) throws Exception { + def errorLine = 0 + + if (throwable instanceof CompileException) { + errorLine = throwable.lineNo + } else { + def frame = throwable.getStackTrace().find { it.fileName == sourceClassName } + if (frame) { + errorLine = frame.lineNumber + } else { + frame = throwable.getStackTrace().find { it.fileName == "Example.java" } + if (frame) { + errorLine = frame.lineNumber + } + } + } + errorLine = errorLine - offset + StackTraceElement[] stack = throwable.getStackTrace() + List newStack = new ArrayList(stack.length + 1) + newStack.add(new StackTraceElement(sourceClassName, "javadoc", sourceFileName, lineNumber + errorLine)) + newStack.addAll(stack) + throwable.setStackTrace(newStack as StackTraceElement[]) + throwable + } +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/SnippetExecuter.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/SnippetExecuter.java new file mode 100644 index 000000000..f97e4055c --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/executer/SnippetExecuter.java @@ -0,0 +1,12 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer; + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.fixture.SnippetFixture; +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.TestCodeSnippet; + +public interface SnippetExecuter { + + SnippetFixture getFixture(); + + void execute(TestCodeSnippet snippet) throws Exception; + +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/fixture/SnippetFixture.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/fixture/SnippetFixture.java new file mode 100644 index 000000000..b59402d40 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/fixture/SnippetFixture.java @@ -0,0 +1,27 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.fixture; + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.Block; + +public class SnippetFixture { + + public void around(Block action) throws Exception { + action.execute(); + } + + public String transform(String text) { + return text; + } + + public String pre() { + return ""; + } + + public String post() { + return ""; + } + + public Integer getOffset() { + return pre().split("\n").length; + } + +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/DelegatingTestRunner.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/DelegatingTestRunner.java new file mode 100644 index 000000000..c0d93de22 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/DelegatingTestRunner.java @@ -0,0 +1,55 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.junit; + +import org.junit.runner.Runner; +import org.junit.runners.Suite; +import org.junit.runners.model.InitializationError; +import org.junit.runners.model.RunnerScheduler; + +import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class DelegatingTestRunner extends Suite { + + public DelegatingTestRunner(Class clazz) throws InitializationError { + super(clazz, extractRunners(clazz)); + + setScheduler(new RunnerScheduler() { + + private final ExecutorService service = Executors.newFixedThreadPool( + Boolean.getBoolean("cloudCi") ? 1 : Runtime.getRuntime().availableProcessors() + ); + + public void schedule(Runnable childStatement) { + service.submit(childStatement); + } + + public void finished() { + try { + service.shutdown(); + service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); + } catch (InterruptedException e) { + e.printStackTrace(System.err); + } + } + }); + } + + @SuppressWarnings("unchecked") + private static List extractRunners(Class clazz) throws InitializationError { + if (!RunnerProvider.class.isAssignableFrom(clazz)) { + throw new InitializationError(clazz.getName() + " does not implement " + RunnerProvider.class.getName()); + } + + Class asType = (Class) clazz; + RunnerProvider instance; + try { + instance = asType.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new InitializationError(e); + } + + return instance.getRunners(); + } +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/RunnerProvider.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/RunnerProvider.java new file mode 100644 index 000000000..3faf73d90 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/RunnerProvider.java @@ -0,0 +1,11 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.junit; + +import org.junit.runner.Runner; + +import java.util.List; + +public interface RunnerProvider { + + List getRunners(); + +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/SnippetRunner.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/SnippetRunner.java new file mode 100644 index 000000000..8742cc716 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/SnippetRunner.java @@ -0,0 +1,55 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.junit; + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.TestCodeSnippet; +import org.junit.runner.Description; +import org.junit.runner.Runner; +import org.junit.runner.notification.Failure; +import org.junit.runner.notification.RunNotifier; + +public class SnippetRunner extends Runner { + + private final Description description; + private final TestCodeSnippet snippet; + + public SnippetRunner(Class testClass, TestCodeSnippet snippet) { + this.description = Description.createTestDescription(testClass, snippet.getTestName()); + this.snippet = snippet; + } + + @Override + public Description getDescription() { + return description; + } + + @Override + public void run(RunNotifier notifier) { + Description description = getDescription(); + String filter = System.getProperty("filter"); + if (filter != null && !filter.equals(description.getMethodName())) { + notifier.fireTestIgnored(description); + return; + } + + try { + notifier.fireTestStarted(description); + snippet.getExecuter().execute(snippet); + } catch (Throwable t) { + Throwable transform; + try { + transform = snippet.getExceptionTransformer().transform(t, snippet.getExecuter().getFixture().getOffset()); + } catch (Exception e) { + throw new RuntimeException(e); + } + notifier.fireTestFailure(new Failure(description, transform)); + } finally { + notifier.fireTestFinished(description); + } + } + + @Override + public int testCount() { + return 1; + } + + +} From 6c23aa50085a2389eba9bb84d3bd8f5599ac70be Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sun, 28 Oct 2018 20:45:37 -0500 Subject: [PATCH 08/34] Implement groovy dsl gradle builds. This has failing snippets in it still. --- .../shadow/docs/ManualCodeSnippetTests.groovy | 11 ++-- .../docs/executer/GradleBuildExecuter.groovy | 57 +++++++++++++++++++ .../extractor/ManualSnippetExtractor.groovy | 3 +- .../docs/fixture/GroovyDslFixture.groovy | 44 ++++++++++++++ .../fixture/GroovyScriptFixture.groovy | 10 ++++ 5 files changed, 117 insertions(+), 8 deletions(-) create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/fixture/GroovyScriptFixture.groovy diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy index 84de75d24..744d1ad5e 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy @@ -1,6 +1,8 @@ package com.github.jengelman.gradle.plugins.shadow.docs +import com.github.jengelman.gradle.plugins.shadow.docs.executer.GradleBuildExecuter import com.github.jengelman.gradle.plugins.shadow.docs.extractor.ManualSnippetExtractor +import com.github.jengelman.gradle.plugins.shadow.docs.fixture.GroovyDslFixture import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.CodeSnippetTestCase import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.CodeSnippetTests import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.SnippetExecuter @@ -23,19 +25,14 @@ class ManualCodeSnippetTests extends CodeSnippetTestCase { // return text.readLines()[4..-1].join("\n") // } // })) + "groovy": new GradleBuildExecuter("build.gradle", new GroovyDslFixture(), new GroovyDslFixture.ImportsExtractor()) ] @Override protected void addTests(CodeSnippetTests tests) { File cwd = new File(StandardSystemProperty.USER_DIR.value()) - File root - if (new File(cwd, "ratpack-manual.gradle").exists()) { - root = cwd.parentFile - } else { - root = cwd - } - def content = new File(root, "ratpack-manual/src/content/chapters") + def content = new File(cwd, "src/docs") FIXTURES.each { selector, executer -> ManualSnippetExtractor.extract(content, selector, executer).each { diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy new file mode 100644 index 000000000..d888616af --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy @@ -0,0 +1,57 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.executer + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.TestCodeSnippet +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.SnippetExecuter +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.fixture.SnippetFixture +import org.gradle.testkit.runner.GradleRunner +import org.junit.rules.TemporaryFolder + +import java.util.function.Function + +class GradleBuildExecuter implements SnippetExecuter { + + private final SnippetFixture fixture + private final String buildFile + private final Function> importExtractor + + private List arguments = ["build", "-m"] + + GradleBuildExecuter(String buildFile, SnippetFixture fixture, Function> importExtractor) { + this.buildFile = buildFile + this.fixture = fixture + this.importExtractor = importExtractor + } + + GradleBuildExecuter(String buildFile, List arguments, SnippetFixture fixture, Function> importExtractor) { + this(buildFile, fixture, importExtractor) + this.arguments = arguments + } + + @Override + SnippetFixture getFixture() { + return fixture + } + + @Override + void execute(TestCodeSnippet snippet) throws Exception { + TemporaryFolder tempDir = new TemporaryFolder() + tempDir.create() + File dir = tempDir.newFolder(snippet.testName) + + File buildFile = new File(dir, buildFile) + + + List importsAndSnippet = importExtractor.apply(snippet.getSnippet()) + + String imports = importsAndSnippet.get(0) + String snippetMinusImports = fixture.transform(importsAndSnippet.get(1)) + String fullSnippet = imports + fixture.pre() + snippetMinusImports + fixture.post() + + buildFile.text = fullSnippet + + GradleRunner runner = GradleRunner.create().withProjectDir(dir)withPluginClasspath() + + runner.withArguments("build", "-m").build() + + } +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy index 1d02a752d..1f107634a 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy @@ -12,7 +12,7 @@ class ManualSnippetExtractor { List snippets = [] def snippetBlockPattern = Pattern.compile(/(?ims)```$cssClass\n(.*?)\n```/) - def filenames = new FileNameFinder().getFileNames(root.absolutePath, "*.md") + def filenames = new FileNameFinder().getFileNames(root.absolutePath, "**/*.md") filenames.each { filename -> def file = new File(filename) @@ -64,6 +64,7 @@ class ManualSnippetExtractor { */ private static String performSubstitutions(String snippet) { // return snippet.replaceAll("@ratpack-version@", RatpackVersion.version) + return snippet } private static TestCodeSnippet createSnippet(String sourceClassName, File sourceFile, int lineNumber, String snippet, SnippetExecuter executer) { diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy new file mode 100644 index 000000000..5082de55f --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy @@ -0,0 +1,44 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.fixture + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.fixture.GroovyScriptFixture + +import java.util.function.Function + +class GroovyDslFixture extends GroovyScriptFixture { + + @Override + String pre() { + """ +plugins { + id 'java' + id 'com.github.johnrengelman.shadow' + id 'application' +} + +version = "1.0" +group = 'shadow' +""" + } + + static class ImportsExtractor implements Function> { + + @Override + List apply(String snippet) { + StringBuilder imports = new StringBuilder() + StringBuilder scriptMinusImports = new StringBuilder() + + for (String line : snippet.split("\\n")) { + StringBuilder target + if (line.trim().startsWith("import ")) { + target = imports + } else { + target = scriptMinusImports + } + + target.append(line).append("\n") + } + + return Arrays.asList(imports.toString(), scriptMinusImports.toString()) + } + } +} diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/fixture/GroovyScriptFixture.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/fixture/GroovyScriptFixture.groovy new file mode 100644 index 000000000..2bd9dd765 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/fixture/GroovyScriptFixture.groovy @@ -0,0 +1,10 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.fixture; + +class GroovyScriptFixture extends SnippetFixture { + + @Override + String post() { + "\n;0;" + } + +} From 4d7acd66be79ffbfd205c624d941501521a1dda0 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Mon, 29 Oct 2018 08:14:14 -0500 Subject: [PATCH 09/34] better test names --- .../plugins/shadow/docs/executer/GradleBuildExecuter.groovy | 2 +- .../plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy index d888616af..dd6a544ff 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy @@ -36,7 +36,7 @@ class GradleBuildExecuter implements SnippetExecuter { void execute(TestCodeSnippet snippet) throws Exception { TemporaryFolder tempDir = new TemporaryFolder() tempDir.create() - File dir = tempDir.newFolder(snippet.testName) + File dir = tempDir.newFolder() File buildFile = new File(dir, buildFile) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy index 1f107634a..9c1a19d03 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy @@ -24,7 +24,7 @@ class ManualSnippetExtractor { private static void addSnippets(List snippets, File file, Pattern snippetBlockPattern, SnippetExecuter executer) { def source = file.text - String testName = file.name + String testName = file.parentFile.name + "/" +file.name Map snippetsByLine = findSnippetsByLine(source, snippetBlockPattern) snippetsByLine.each { lineNumber, snippet -> From 1d5c2b70b901adcb657d12c1f22ce2f508dce8b9 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Mon, 29 Oct 2018 08:33:02 -0500 Subject: [PATCH 10/34] fix some docs with imports --- src/docs/configuration/merging/README.md | 57 ++++++++++++++++++++- src/docs/configuration/relocation/README.md | 2 + src/docs/custom-tasks/README.md | 2 + 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/docs/configuration/merging/README.md b/src/docs/configuration/merging/README.md index cd96b48eb..0500a6c46 100644 --- a/src/docs/configuration/merging/README.md +++ b/src/docs/configuration/merging/README.md @@ -10,6 +10,21 @@ determine if it should process a particular entry and apply any modifications be ```groovy // Adding a Transformer +import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer +import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext +import org.apache.tools.zip.ZipOutputStream +import org.gradle.api.file.FileTreeElement + +class MyTransformer implements Transformer { + boolean canTransformResource(FileTreeElement element) { true } + + void transform(TransformerContext context) {} + + boolean hasTransformedResource() { true } + + void modifyOutputStream(ZipOutputStream jos, boolean preserveFileTimestamps) {} +} + shadowJar { transform(MyTransformer.class) } @@ -19,9 +34,27 @@ Additionally, a `Transformer` can accept a `Closure` to configure the provided ` ```groovy // Configuring a Transformer +import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer +import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext +import org.apache.tools.zip.ZipOutputStream +import org.gradle.api.file.FileTreeElement + +class MyTransformer implements Transformer { + + boolean enabled + + boolean canTransformResource(FileTreeElement element) { true } + + void transform(TransformerContext context) {} + + boolean hasTransformedResource() { true } + + void modifyOutputStream(ZipOutputStream jos, boolean preserveFileTimestamps) {} +} + shadowJar { transform(MyTransformer.class) { - enable = true + enabled = true } } ``` @@ -30,6 +63,24 @@ An instantiated instance of a `Transformer` can also be provided. ```groovy // Adding a Transformer Instance +import com.github.jengelman.gradle.plugins.shadow.transformers.Transformer +import com.github.jengelman.gradle.plugins.shadow.transformers.TransformerContext +import org.apache.tools.zip.ZipOutputStream +import org.gradle.api.file.FileTreeElement + +class MyTransformer implements Transformer { + + boolean enabled + + boolean canTransformResource(FileTreeElement element) { true } + + void transform(TransformerContext context) {} + + boolean hasTransformedResource() { true } + + void modifyOutputStream(ZipOutputStream jos, boolean preserveFileTimestamps) {} +} + shadowJar { transform(new MyTransformer(enabled: true)) } @@ -135,8 +186,10 @@ It must be added using the [`transform`](http://imperceptiblethoughts.com/shadow ```groovy // Appending a XML File +import com.github.jengelman.gradle.plugins.shadow.transformers.XmlAppendingTransformer + shadowJar { - tranform(XmlAppendingTransformer.class) { + transform(XmlAppendingTransformer.class) { resource = 'properties.xml' } } diff --git a/src/docs/configuration/relocation/README.md b/src/docs/configuration/relocation/README.md index ecb36d693..1f267d08e 100644 --- a/src/docs/configuration/relocation/README.md +++ b/src/docs/configuration/relocation/README.md @@ -58,6 +58,8 @@ dependency so the tasks execute in the correct order. ```groovy // Configure Auto Relocation +import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation + task relocateShadowJar(type: ConfigureShadowRelocation) { target = tasks.shadowJar prefix = "myapp" // Default value is "shadow" diff --git a/src/docs/custom-tasks/README.md b/src/docs/custom-tasks/README.md index 34ee3131a..a15675490 100644 --- a/src/docs/custom-tasks/README.md +++ b/src/docs/custom-tasks/README.md @@ -7,6 +7,8 @@ dependencies to merge into the output. ```groovy // Shadowing Test Sources and Dependencies +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar + task testJar(type: ShadowJar) { classifier = 'tests' from sourceSets.test.output From 6acf5c6f0c6384b10ea505e3823f16a90423273b Mon Sep 17 00:00:00 2001 From: John Engelman Date: Mon, 29 Oct 2018 09:56:48 -0500 Subject: [PATCH 11/34] fix some more things --- src/docs/getting-started/README.md | 39 ++----------------- .../shadow/docs/ManualCodeSnippetTests.groovy | 4 +- .../docs/fixture/GroovyDslFixture.groovy | 4 ++ 3 files changed, 11 insertions(+), 36 deletions(-) diff --git a/src/docs/getting-started/README.md b/src/docs/getting-started/README.md index a803c8be5..f817a064e 100644 --- a/src/docs/getting-started/README.md +++ b/src/docs/getting-started/README.md @@ -1,6 +1,6 @@ # Getting Started -```groovy +```groovy no-plugins buildscript { repositories { jcenter() @@ -16,7 +16,7 @@ apply plugin: 'java' Alternatively, the Gradle Plugin syntax can be used: -```groovy +```groovy no-plugins plugins { id 'com.github.johnrengelman.shadow' version '{project-version}' id 'java' @@ -54,38 +54,7 @@ following behavior: ## Shadowing Gradle Plugins -Starting with v2.0.0, Shadow is capable of automatically configuring package relocation for your dependencies. -This is useful especially when building Gradle plugins where you want your dependencies to not conflict with versions -provided by the Gradle runtime. - -```groovy -buildscript { - repositories { - jcenter() - } - dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:{project-version}' - } -} - -apply plugin: 'com.github.johnrengelman.plugin-shadow' -apply plugin: 'java' -``` - -Alternatively, the Gradle Plugin syntax can be used: - -```groovy -plugins { - id 'com.github.johnrengelman.plugin-shadow' version '{project-version}' - id 'java' -} -``` - -Applying the `plugin-shadow` plugin is the same as applying the standard `shadow` plugin with the additional creation -of the `configureRelocationShadowJar` task. -This task runs before the `shadowJar` task and scans the packages present in the dependencies that will be merged into -the final jar and automatically configures relocation for them. -By default the tasks relocates all packages to the `shadow.` prefix. For example `org.jdom2.JDOMException` becomes -`shadow.org.jdom2.JDOMException` +Shadow ships with a companion task that can be used to automatically discover dependency packages and configure +them for relocation. This is useful in projects if you want to relocate all dependencies. For more details see the section [Using Shadow to Package Gradle Plugins](/plugins/) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy index 744d1ad5e..e0e64c4be 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy @@ -6,6 +6,7 @@ import com.github.jengelman.gradle.plugins.shadow.docs.fixture.GroovyDslFixture import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.CodeSnippetTestCase import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.CodeSnippetTests import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.SnippetExecuter +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.fixture.GroovyScriptFixture import com.google.common.base.StandardSystemProperty class ManualCodeSnippetTests extends CodeSnippetTestCase { @@ -25,7 +26,8 @@ class ManualCodeSnippetTests extends CodeSnippetTestCase { // return text.readLines()[4..-1].join("\n") // } // })) - "groovy": new GradleBuildExecuter("build.gradle", new GroovyDslFixture(), new GroovyDslFixture.ImportsExtractor()) + "groovy": new GradleBuildExecuter("build.gradle", new GroovyDslFixture(), new GroovyDslFixture.ImportsExtractor()), + "groovy no-plugins": new GradleBuildExecuter("build.gradle", new GroovyScriptFixture(), new GroovyDslFixture.ImportsExtractor()) ] @Override diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy index 5082de55f..cdfe2e31f 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy @@ -17,6 +17,10 @@ plugins { version = "1.0" group = 'shadow' + +repositories { + mavenLocal() +} """ } From 36926451bd09962899cfa4306799cb5e2764f61e Mon Sep 17 00:00:00 2001 From: John Engelman Date: Mon, 29 Oct 2018 12:11:04 -0500 Subject: [PATCH 12/34] Replace @version@ with version of plugin. --- gradle/ghPages.gradle | 3 +++ src/docs/getting-started/README.md | 4 ++-- src/docs/plugins/README.md | 4 ++-- .../shadow/docs/executer/GradleBuildExecuter.groovy | 7 ++++++- .../docs/extractor/ManualSnippetExtractor.groovy | 10 +--------- .../plugins/shadow/util/PluginSpecification.groovy | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/gradle/ghPages.gradle b/gradle/ghPages.gradle index d4d93fab3..4eb66cd9b 100644 --- a/gradle/ghPages.gradle +++ b/gradle/ghPages.gradle @@ -1,3 +1,5 @@ +import org.apache.tools.ant.filters.ReplaceTokens + apply plugin: 'org.ajoberstar.git-publish' if (project.hasProperty('githubToken')) { @@ -14,6 +16,7 @@ gitPublish { into('api') { from project.tasks.groovydoc } + filter(ReplaceTokens, tokens: [version: project.version]) } } diff --git a/src/docs/getting-started/README.md b/src/docs/getting-started/README.md index f817a064e..c080b5785 100644 --- a/src/docs/getting-started/README.md +++ b/src/docs/getting-started/README.md @@ -6,7 +6,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.github.jengelman.gradle.plugins:shadow:{project-version}' + classpath 'com.github.jengelman.gradle.plugins:shadow:@version@' } } @@ -18,7 +18,7 @@ Alternatively, the Gradle Plugin syntax can be used: ```groovy no-plugins plugins { - id 'com.github.johnrengelman.shadow' version '{project-version}' + id 'com.github.johnrengelman.shadow' version '@version@' id 'java' } ``` diff --git a/src/docs/plugins/README.md b/src/docs/plugins/README.md index d4082e7a5..d46048a77 100644 --- a/src/docs/plugins/README.md +++ b/src/docs/plugins/README.md @@ -18,9 +18,9 @@ Gradle projects. It can be used for standard Java or Groovy projects. A simple Gradle plugin can use this feature by applying the `plugin-shadow` plugin and configuring the dependencies like so: -```groovy +```groovy no-plugins plugins { - id 'com.github.johnrengelman.plugin-shadow' version '{project-version}' + id 'com.github.johnrengelman.plugin-shadow' version '@version@' id 'java' } diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy index dd6a544ff..df1add175 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy @@ -3,6 +3,7 @@ package com.github.jengelman.gradle.plugins.shadow.docs.executer import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.TestCodeSnippet import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.SnippetExecuter import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.fixture.SnippetFixture +import com.github.jengelman.gradle.plugins.shadow.util.PluginSpecification import org.gradle.testkit.runner.GradleRunner import org.junit.rules.TemporaryFolder @@ -47,11 +48,15 @@ class GradleBuildExecuter implements SnippetExecuter { String snippetMinusImports = fixture.transform(importsAndSnippet.get(1)) String fullSnippet = imports + fixture.pre() + snippetMinusImports + fixture.post() - buildFile.text = fullSnippet + buildFile.text = replaceTokens(fullSnippet) GradleRunner runner = GradleRunner.create().withProjectDir(dir)withPluginClasspath() runner.withArguments("build", "-m").build() } + + private static String replaceTokens(String snippet) { + return snippet.replaceAll("@shadow-version@", PluginSpecification.SHADOW_VERSION + '-SNAPSHOT') + } } diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy index 9c1a19d03..84749042d 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/extractor/ManualSnippetExtractor.groovy @@ -48,7 +48,7 @@ class ManualSnippetExtractor { snippetBlocks.each { block -> codeIndex = source.indexOf(block, codeIndex) def lineNumber = source.substring(0, codeIndex).readLines().size() + 2 - snippetBlocksByLine.put(lineNumber, performSubstitutions(extractSnippetFromBlock(block))) + snippetBlocksByLine.put(lineNumber, extractSnippetFromBlock(block)) codeIndex += block.size() } @@ -59,14 +59,6 @@ class ManualSnippetExtractor { tag.substring(tag.indexOf("\n") + 1, tag.lastIndexOf("\n")) } - /** - * Perform the substitutions that {@code :ratpack-manual:tokeniseManual} would perform, as required by tested snippets. - */ - private static String performSubstitutions(String snippet) { -// return snippet.replaceAll("@ratpack-version@", RatpackVersion.version) - return snippet - } - private static TestCodeSnippet createSnippet(String sourceClassName, File sourceFile, int lineNumber, String snippet, SnippetExecuter executer) { new TestCodeSnippet(snippet, sourceClassName, sourceClassName + ":$lineNumber", executer, new ExceptionTransformer(sourceClassName, sourceFile.name, lineNumber)) } diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/util/PluginSpecification.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/util/PluginSpecification.groovy index de90f5b69..63d4bf08f 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/util/PluginSpecification.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/util/PluginSpecification.groovy @@ -15,7 +15,7 @@ class PluginSpecification extends Specification { @Rule TemporaryFolder dir - private static final String SHADOW_VERSION = PluginSpecification.classLoader.getResource("shadow-version.txt").text.trim() + static final String SHADOW_VERSION = PluginSpecification.classLoader.getResource("shadow-version.txt").text.trim() AppendableMavenFileRepository repo From 8695b0000128f068aa83e18f2bddbb38810019ee Mon Sep 17 00:00:00 2001 From: John Engelman Date: Tue, 30 Oct 2018 11:45:47 -0500 Subject: [PATCH 13/34] (chore) next version --- src/main/resources/shadow-version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/shadow-version.txt b/src/main/resources/shadow-version.txt index 4d54daddb..c4e41f945 100644 --- a/src/main/resources/shadow-version.txt +++ b/src/main/resources/shadow-version.txt @@ -1 +1 @@ -4.0.2 +4.0.3 From fd50d055f945f86950ea81d39068e6b5584fbb9f Mon Sep 17 00:00:00 2001 From: John Engelman Date: Tue, 30 Oct 2018 11:49:25 -0500 Subject: [PATCH 14/34] (fix) fix site base address. --- src/docs/.vuepress/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/.vuepress/config.js b/src/docs/.vuepress/config.js index 2a60ed0e3..a9d9c2e60 100644 --- a/src/docs/.vuepress/config.js +++ b/src/docs/.vuepress/config.js @@ -1,5 +1,5 @@ module.exports = { - base: "/shadow-new-site/", + base: "/shadow/", dest: "build/site", ga: "UA-321220-4", themeConfig: { From b1853b32fbf96b04c5e00ff83bb1eba7ab1674ec Mon Sep 17 00:00:00 2001 From: John Engelman Date: Tue, 30 Oct 2018 11:51:32 -0500 Subject: [PATCH 15/34] (fix) base site for links --- src/docs/.vuepress/components/ApiLink.vue | 2 +- src/docs/README.md | 2 +- src/docs/configuration/README.md | 4 +-- src/docs/configuration/dependencies/README.md | 10 +++--- src/docs/configuration/merging/README.md | 34 +++++++++---------- src/docs/custom-tasks/README.md | 2 +- 6 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/docs/.vuepress/components/ApiLink.vue b/src/docs/.vuepress/components/ApiLink.vue index ed6f89394..6ff50a958 100644 --- a/src/docs/.vuepress/components/ApiLink.vue +++ b/src/docs/.vuepress/components/ApiLink.vue @@ -6,7 +6,7 @@ export default { data () { return { - absolutePath: "http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/" + this.path + absolutePath: "http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/" + this.path } } } diff --git a/src/docs/README.md b/src/docs/README.md index aa422d53f..7675f3dfa 100644 --- a/src/docs/README.md +++ b/src/docs/README.md @@ -9,4 +9,4 @@ actionLink: /introduction/ John Engelman - @johnrengelman -[API Docs](http://imperceptiblethoughts.com/shadow-new-site/api/index.html) +[API Docs](http://imperceptiblethoughts.com/shadow/api/index.html) diff --git a/src/docs/configuration/README.md b/src/docs/configuration/README.md index 5fb9bb365..42057a72e 100644 --- a/src/docs/configuration/README.md +++ b/src/docs/configuration/README.md @@ -4,10 +4,10 @@ api: api/com/github/jengelman/gradle/plugins/shadow # Configuring Shadow -The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type extends from Gradle's +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type extends from Gradle's [`Jar`](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) type. This means that all attributes and methods available on `Jar` are also available on -[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html). +[`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html). Refer the _Gradle User Guide_ for [Jar](https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html) for details. diff --git a/src/docs/configuration/dependencies/README.md b/src/docs/configuration/dependencies/README.md index 2fe325606..cffc53da7 100644 --- a/src/docs/configuration/dependencies/README.md +++ b/src/docs/configuration/dependencies/README.md @@ -3,7 +3,7 @@ Shadow configures the default `shadowJar` task to merge all dependencies from the project's `runtime` configuration into the final JAR. The configurations to from which to source dependencies for the merging can be configured using the `configurations` property -of the [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type. +of the [`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task type. ```groovy shadowJar { @@ -15,10 +15,10 @@ The above code sample would configure the `shadowJar` task to merge depdencies f This means any dependency declared in the `runtime` configuration would be **not** be included in the final JAR. > Note the literal use of `project.configurations` when setting the `configurations` attribute of a -[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. +[`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. This is **required**. It maybe be tempting to specify `configurations = [configurations.compile]` but this will not have the intended effect, as `configurations.compile` will try to delegate to the `configurations` property of the -the [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task instead of the `project` +the [`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task instead of the `project` ## Embedding Jar Files Inside Your Shadow Jar @@ -31,7 +31,7 @@ begins. ## Filtering Dependencies Individual dependencies can be filtered from the final JAR by using the `dependencies` block of a -[`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. +[`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task. Dependency filtering does **not** apply to transitive dependencies. That is, excluding a dependency does not exclude any of its dependencies from the final JAR. @@ -123,7 +123,7 @@ shadowJar { ### Programmatically Selecting Dependencies to Filter If more complex decisions are needed to select the dependencies to be included, the -[`dependencies`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#dependencies(Action)) +[`dependencies`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#dependencies(Action)) block provides a method that accepts a `Closure` for selecting dependencies. ```groovy diff --git a/src/docs/configuration/merging/README.md b/src/docs/configuration/merging/README.md index 0500a6c46..9240e3207 100644 --- a/src/docs/configuration/merging/README.md +++ b/src/docs/configuration/merging/README.md @@ -1,11 +1,11 @@ # Controlling JAR Content Merging Shadow allows for customizing the process by which the output JAR is generated through the -[`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) interface. +[`Transformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) interface. This is a concept that has been carried over from the original Maven Shade implementation. -A [`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) is invoked for each +A [`Transformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) is invoked for each entry in the JAR before being written to the final output JAR. -This allows a [`Transformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) to +This allows a [`Transformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/Transformer.html) to determine if it should process a particular entry and apply any modifications before writing the stream to the output. ```groovy @@ -94,7 +94,7 @@ At runtime, this file is read and used to configure library or application behav Multiple dependencies may use the same service descriptor file name. In this case, it is generally desired to merge the content of each instance of the file into a single output file. -The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) class is used to perform this merging. By default, it will merge each copy of a file under `META-INF/services` into a single file in the output JAR. @@ -106,17 +106,17 @@ shadowJar { ``` The above code snippet is a convenience syntax for calling -[`transform(ServiceFileTransformer.class)`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#transform(Class)). +[`transform(ServiceFileTransformer.class)`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#transform(Class)). > Groovy Extension Module descriptor files (located at `META-INF/services/org.codehaus.groovy.runtime.ExtensionModule`) -are ignored by the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html). +are ignored by the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html). This is due to these files having a different syntax than standard service descriptor files. -Use the [`mergeGroovyExtensionModules()`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#mergeGroovyExtensionModules()) method to merge +Use the [`mergeGroovyExtensionModules()`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#mergeGroovyExtensionModules()) method to merge these files if your dependencies contain them. ### Configuring the Location of Service Descriptor Files -By default the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +By default the [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) is configured to merge files in `META-INF/services`. This directory can be overridden to merge descriptor files in a different location. @@ -131,7 +131,7 @@ shadowJar { #### Excluding/Including Specific Service Descriptor Files From Merging -The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) +The [`ServiceFileTransformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.html) class supports specifying specific files to include or exclude from merging. ```groovy @@ -147,9 +147,9 @@ shadowJar { Shadow provides a specific transformer for dealing with Groovy extension module files. This is due to their special syntax and how they need to be merged together. -The [`GroovyExtensionModuleTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformer.html) +The [`GroovyExtensionModuleTransformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/GroovyExtensionModuleTransformer.html) will handle these files. -The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task also provides a short syntax +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task also provides a short syntax method to add this transformer. ```groovy @@ -162,11 +162,11 @@ shadowJar { ## Appending Text Files Generic text files can be appended together using the -[`AppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer.html). +[`AppendingTransformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/AppendingTransformer.html). Each file is appended using new lines to separate content. -The [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task provides a short syntax +The [`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) task provides a short syntax method of -[`append(String)`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#append(java.lang.String)) to +[`append(String)`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html#append(java.lang.String)) to configure this transformer. ```groovy @@ -179,10 +179,10 @@ shadowJar { ## Appending XML Files XML files require a special transformer for merging. -The [`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html) +The [`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html) reads each XML document and merges each root element into a single document. -There is no short syntax method for the [`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html). -It must be added using the [`transform`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow//tasks/ShadowJar.html#transform(Class)) methods. +There is no short syntax method for the [`XmlAppendingTransformer`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/transformers/XmlAppendingTransformer.html). +It must be added using the [`transform`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow//tasks/ShadowJar.html#transform(Class)) methods. ```groovy // Appending a XML File diff --git a/src/docs/custom-tasks/README.md b/src/docs/custom-tasks/README.md index a15675490..14dcbb0d9 100644 --- a/src/docs/custom-tasks/README.md +++ b/src/docs/custom-tasks/README.md @@ -1,7 +1,7 @@ # Creating a Custom ShadowJar Task The built in `shadowJar` task only provides an output for the `main` source set of the project. -It is possible to add arbitrary [`ShadowJar`](http://imperceptiblethoughts.com/shadow-new-site/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) +It is possible to add arbitrary [`ShadowJar`](http://imperceptiblethoughts.com/shadow/api/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowJar.html) tasks to a project. When doing so, ensure that the `configurations` property is specified to inform Shadow which dependencies to merge into the output. From fcb1f797d1373b3ab27a197ccc66ae4ddc22fe29 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sat, 3 Nov 2018 07:47:01 -0500 Subject: [PATCH 16/34] fix more examples for testing --- src/docs/configuration/dependencies/README.md | 32 ++++++++++++++----- src/docs/getting-started/README.md | 18 +++++------ src/docs/plugins/README.md | 14 ++++++-- .../docs/executer/GradleBuildExecuter.groovy | 3 +- .../docs/fixture/GroovyDslFixture.groovy | 1 + 5 files changed, 47 insertions(+), 21 deletions(-) diff --git a/src/docs/configuration/dependencies/README.md b/src/docs/configuration/dependencies/README.md index cffc53da7..3dbee2c8f 100644 --- a/src/docs/configuration/dependencies/README.md +++ b/src/docs/configuration/dependencies/README.md @@ -41,12 +41,12 @@ Gradle's `configurations` block. ```groovy // Exclude an Module Dependency dependencies { - compile 'shadow:d:1.0' + compile 'org.apache.logging.log4j:log4j-core:2.11.1' } shadowJar { dependencies { - exclude(dependency('shadow:d:1.0')) + exclude(dependency('org.apache.logging.log4j:log4j-core:2.11.1')) } } ``` @@ -77,12 +77,12 @@ using any of these individual fields. ```groovy // Exclude Any Version of a Dependency dependencies { - compile 'shadow:d:1.0' + compile 'org.apache.logging.log4j:log4j-core:2.11.1' } shadowJar { dependencies { - exclude(dependency('shadow:d:.*')) + exclude(dependency('org.apache.logging.log4j:log4j-core:.*')) } } ``` @@ -91,9 +91,13 @@ Any of the individual fields can be safely absent and will function as though a ```groovy // Ignore Dependency Version +dependencies { + compile 'org.apache.logging.log4j:log4j-core:2.11.1' +} + shadowJar { dependencies { - exclude(dependency('shadow:d')) + exclude(dependency('org.apache.logging.log4j:log4j-core')) } } ``` @@ -104,18 +108,26 @@ This same patten can be used for any of the dependency notation fields. ```groovy // Ignoring An Artifact Regardless of Group +dependencies { + compile 'org.apache.logging.log4j:log4j-core:2.11.1' +} + shadowJar { dependencies { - exclude(dependency(':d:1.0')) + exclude(dependency(':log4j-core:2.11.1')) } } ``` ```groovy // Excluding All Artifacts From Group +dependencies { + compile 'org.apache.logging.log4j:log4j-core:2.11.1' +} + shadowJar { dependencies { - exclude(dependency('shadow::1.0')) + exclude(dependency('org.apache.logging.log4j::2.11.1')) } } ``` @@ -128,10 +140,14 @@ block provides a method that accepts a `Closure` for selecting dependencies. ```groovy // Selecting Dependencies to Filter With a Spec +dependencies { + compile 'org.apache.logging.log4j:log4j-core:2.11.1' +} + shadowJar { dependencies { exclude(dependency { - it.moduleGroup == 'junit' + it.moduleGroup == 'org.apache.logging.log4j' }) } } diff --git a/src/docs/getting-started/README.md b/src/docs/getting-started/README.md index c080b5785..8993d17b0 100644 --- a/src/docs/getting-started/README.md +++ b/src/docs/getting-started/README.md @@ -1,5 +1,14 @@ # Getting Started +```groovy no-plugins +plugins { + id 'com.github.johnrengelman.shadow' version '@version@' + id 'java' +} +``` + +Alternatively, the plugin can be added to the buildscript classpath and applied: + ```groovy no-plugins buildscript { repositories { @@ -14,15 +23,6 @@ apply plugin: 'com.github.johnrengelman.shadow' apply plugin: 'java' ``` -Alternatively, the Gradle Plugin syntax can be used: - -```groovy no-plugins -plugins { - id 'com.github.johnrengelman.shadow' version '@version@' - id 'java' -} -``` - Shadow is a reactive plugin. This means that applying Shadow by itself will perform no configuration on your project. Instead, Shadow _reacts_ diff --git a/src/docs/plugins/README.md b/src/docs/plugins/README.md index d46048a77..d3f674a7b 100644 --- a/src/docs/plugins/README.md +++ b/src/docs/plugins/README.md @@ -15,12 +15,14 @@ packages using the specified `prefix` on the associated `ShadowJar` task. While this is useful for developing Gradle plugins, nothing about the `ConfigureShadowRelocation` task is tied to Gradle projects. It can be used for standard Java or Groovy projects. -A simple Gradle plugin can use this feature by applying the `plugin-shadow` plugin and configuring the dependencies -like so: +A simple Gradle plugin can use this feature by applying the `shadow` plugin and configuring the relocation task +to execute before the `shadowJar` tasks: ```groovy no-plugins +import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation + plugins { - id 'com.github.johnrengelman.plugin-shadow' version '@version@' + id 'com.github.johnrengelman.shadow' version '@version@' id 'java' } @@ -35,6 +37,12 @@ dependencies { compile 'org.apache.ant:ant:1.9.4' compile 'org.codehaus.plexus:plexus-utils:2.0.6' } + +task relocateShadowJar(type: ConfigureShadowRelocation) { + target = tasks.shadowJar +} + +tasks.shadowJar.dependsOn tasks.relocateShadowJar ``` Note that the `localGroovy()` and `gradleApi()` dependencies are added to the `shadow` configuration instead of the diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy index df1add175..ec685a76a 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy @@ -57,6 +57,7 @@ class GradleBuildExecuter implements SnippetExecuter { } private static String replaceTokens(String snippet) { - return snippet.replaceAll("@shadow-version@", PluginSpecification.SHADOW_VERSION + '-SNAPSHOT') +// return snippet.replaceAll() + return snippet.replaceAll("@version@", PluginSpecification.SHADOW_VERSION + '-SNAPSHOT') } } diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy index cdfe2e31f..af3af3822 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/fixture/GroovyDslFixture.groovy @@ -20,6 +20,7 @@ group = 'shadow' repositories { mavenLocal() + jcenter() } """ } From 97f315b8c6884667b004fe9dff0667f95c2e85f8 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sat, 3 Nov 2018 09:44:50 -0500 Subject: [PATCH 17/34] (fix) fix up last of manual examples --- settings.gradle | 5 +-- src/docs/configuration/dependencies/README.md | 4 +-- src/docs/getting-started/README.md | 2 +- src/docs/multi-project/README.md | 2 +- .../shadow/docs/ManualCodeSnippetTests.groovy | 18 ++-------- .../docs/executer/GradleBuildExecuter.groovy | 33 ++++++++++++++++--- .../shadow/docs/executer/NoopExecuter.groovy | 18 ++++++++++ 7 files changed, 57 insertions(+), 25 deletions(-) create mode 100644 src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/NoopExecuter.groovy diff --git a/settings.gradle b/settings.gradle index 2a78ee8c6..f7991d848 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,3 @@ -rootProject.name = 'shadow' -enableFeaturePreview('STABLE_PUBLISHING') + +rootProject.name = 'shadowTest' +include 'api', 'main' diff --git a/src/docs/configuration/dependencies/README.md b/src/docs/configuration/dependencies/README.md index 3dbee2c8f..7d4a832bc 100644 --- a/src/docs/configuration/dependencies/README.md +++ b/src/docs/configuration/dependencies/README.md @@ -54,12 +54,12 @@ shadowJar { ```groovy // Exclude a Project Dependency dependencies { - compile project(':client') + compile project(':api') } shadowJar { dependencies { - exclude(project(':client')) + exclude(project(':api')) } } ``` diff --git a/src/docs/getting-started/README.md b/src/docs/getting-started/README.md index 8993d17b0..89a59f419 100644 --- a/src/docs/getting-started/README.md +++ b/src/docs/getting-started/README.md @@ -9,7 +9,7 @@ plugins { Alternatively, the plugin can be added to the buildscript classpath and applied: -```groovy no-plugins +```groovy no-run buildscript { repositories { jcenter() diff --git a/src/docs/multi-project/README.md b/src/docs/multi-project/README.md index 8ce0ff88f..8e1a56dba 100644 --- a/src/docs/multi-project/README.md +++ b/src/docs/multi-project/README.md @@ -15,6 +15,6 @@ configuration of the shadowed project. ```groovy // Depending On Shadow Output of Project dependencies { - compile project(path: 'api', configuration: 'shadow') + compile project(path: ':api', configuration: 'shadow') } ``` \ No newline at end of file diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy index e0e64c4be..c1cd22e0e 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/ManualCodeSnippetTests.groovy @@ -1,6 +1,7 @@ package com.github.jengelman.gradle.plugins.shadow.docs import com.github.jengelman.gradle.plugins.shadow.docs.executer.GradleBuildExecuter +import com.github.jengelman.gradle.plugins.shadow.docs.executer.NoopExecuter import com.github.jengelman.gradle.plugins.shadow.docs.extractor.ManualSnippetExtractor import com.github.jengelman.gradle.plugins.shadow.docs.fixture.GroovyDslFixture import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.CodeSnippetTestCase @@ -12,22 +13,9 @@ import com.google.common.base.StandardSystemProperty class ManualCodeSnippetTests extends CodeSnippetTestCase { public static final LinkedHashMap FIXTURES = [ -// "language-groovy groovy-chain-dsl": new GroovySnippetExecuter(true, new GroovyChainDslFixture()), -// "language-groovy groovy-ratpack" : new GroovySnippetExecuter(true, new GroovyRatpackDslNoRunFixture()), -// "language-groovy groovy-handlers" : new GroovySnippetExecuter(true, new GroovyHandlersFixture()), -// "language-groovy gradle" : new GradleSnippetExecuter(new SnippetFixture()), -// "language-groovy tested" : new GroovySnippetExecuter(true, new GroovyScriptFixture()), -// "language-java" : new JavaSnippetExecuter(new SnippetFixture()), -// "language-java hello-world" : new HelloWorldAppSnippetExecuter(new JavaSnippetExecuter(new SnippetFixture())), -// "language-groovy hello-world" : new HelloWorldAppSnippetExecuter(new GroovySnippetExecuter(true, new GroovyScriptRatpackDslFixture())), -// "language-groovy hello-world-grab": new HelloWorldAppSnippetExecuter(new GroovySnippetExecuter(true, new GroovyScriptRatpackDslFixture() { -// @Override -// String transform(String text) { -// return text.readLines()[4..-1].join("\n") -// } -// })) "groovy": new GradleBuildExecuter("build.gradle", new GroovyDslFixture(), new GroovyDslFixture.ImportsExtractor()), - "groovy no-plugins": new GradleBuildExecuter("build.gradle", new GroovyScriptFixture(), new GroovyDslFixture.ImportsExtractor()) + "groovy no-plugins": new GradleBuildExecuter("build.gradle", new GroovyScriptFixture(), new GroovyDslFixture.ImportsExtractor()), + "groovy no-run": new NoopExecuter() ] @Override diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy index ec685a76a..dd7567df4 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy @@ -39,7 +39,16 @@ class GradleBuildExecuter implements SnippetExecuter { tempDir.create() File dir = tempDir.newFolder() - File buildFile = new File(dir, buildFile) + addSubProject(dir) + File settings = new File(dir, "settings.gradle") + settings.text = """ +rootProject.name = 'shadowTest' +include 'api', 'main' +""" + + File mainDir = new File(dir, "main") + mainDir.mkdirs() + File buildFile = new File(mainDir, buildFile) List importsAndSnippet = importExtractor.apply(snippet.getSnippet()) @@ -50,14 +59,30 @@ class GradleBuildExecuter implements SnippetExecuter { buildFile.text = replaceTokens(fullSnippet) - GradleRunner runner = GradleRunner.create().withProjectDir(dir)withPluginClasspath() + GradleRunner runner = GradleRunner.create().withProjectDir(dir).withPluginClasspath() + + runner.withArguments(":main:build", "-m").build() + + } - runner.withArguments("build", "-m").build() + private void addSubProject(File dir) { + File api = new File(dir, "api") + api.mkdirs() + File build = new File(api, "build.gradle") + build.text = """ +plugins { + id 'java' + id 'com.github.johnrengelman.shadow' +} +repositories { + mavenLocal() + jcenter() +} +""" } private static String replaceTokens(String snippet) { -// return snippet.replaceAll() return snippet.replaceAll("@version@", PluginSpecification.SHADOW_VERSION + '-SNAPSHOT') } } diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/NoopExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/NoopExecuter.groovy new file mode 100644 index 000000000..21f9a4885 --- /dev/null +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/NoopExecuter.groovy @@ -0,0 +1,18 @@ +package com.github.jengelman.gradle.plugins.shadow.docs.executer + +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.TestCodeSnippet +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.executer.SnippetExecuter +import com.github.jengelman.gradle.plugins.shadow.docs.internal.snippets.fixture.SnippetFixture + +class NoopExecuter implements SnippetExecuter { + + @Override + SnippetFixture getFixture() { + return null + } + + @Override + void execute(TestCodeSnippet snippet) throws Exception { + + } +} From b9270eb014c8f305e8e8d33e136397638bccebe5 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sat, 3 Nov 2018 18:00:10 -0500 Subject: [PATCH 18/34] (fix) forward output so we do not run in the daemon --- .../plugins/shadow/docs/executer/GradleBuildExecuter.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy index dd7567df4..073536fff 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy @@ -59,7 +59,7 @@ include 'api', 'main' buildFile.text = replaceTokens(fullSnippet) - GradleRunner runner = GradleRunner.create().withProjectDir(dir).withPluginClasspath() + GradleRunner runner = GradleRunner.create().withProjectDir(dir).withPluginClasspath().forwardOutput() runner.withArguments(":main:build", "-m").build() From 93392732977fc27396aee2582a225d82d3cdd4e9 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sat, 3 Nov 2018 18:00:26 -0500 Subject: [PATCH 19/34] (chore) update prismjs --- package.json | 3 ++- yarn.lock | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d6230ab82..d3e968a1e 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "author": "John Engelman ", "license": "MIT", "devDependencies": { - "vuepress": "^0.14.2" + "vuepress": "^0.14.2", + "prismjs": "^1.15.0" }, "scripts": { "build": "vuepress build src/docs", diff --git a/yarn.lock b/yarn.lock index 82805b9af..7d36f9ce8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4576,7 +4576,7 @@ pretty-time@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" -prismjs@^1.13.0: +prismjs@^1.13.0, prismjs@^1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" optionalDependencies: From 3eb733631fba7c70050b51f105e517955506bf95 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sat, 3 Nov 2018 18:00:39 -0500 Subject: [PATCH 20/34] (fix) add groovy/kotlin headers in code blocks --- src/docs/.vuepress/style.styl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/docs/.vuepress/style.styl b/src/docs/.vuepress/style.styl index 3049d58bc..5b6988268 100644 --- a/src/docs/.vuepress/style.styl +++ b/src/docs/.vuepress/style.styl @@ -1 +1,9 @@ @import "~prismjs/themes/prism-tomorrow.css" + +div[class~="language-groovy"] + &:before + content "groovy" + +div[class~="language-kotlin"] + &:before + content "kotlin" From f09b12d4c7db5208eeb5bacb27696a6fed37bee3 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sat, 3 Nov 2018 18:52:39 -0500 Subject: [PATCH 21/34] (chore): trying to get this building in CI --- .../plugins/shadow/docs/executer/GradleBuildExecuter.groovy | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy index 073536fff..f9ab92342 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy @@ -44,6 +44,10 @@ class GradleBuildExecuter implements SnippetExecuter { settings.text = """ rootProject.name = 'shadowTest' include 'api', 'main' +""" + File properties = new File(dir, "gradle.properties") + properties.text = """ +or.gradle.daemon=false """ File mainDir = new File(dir, "main") From 1071204fa5ab6d8292573c9685692d336bb2580b Mon Sep 17 00:00:00 2001 From: John Engelman Date: Sat, 3 Nov 2018 19:30:05 -0500 Subject: [PATCH 22/34] (fix) configure the snippet test runner properly in CI --- .../plugins/shadow/docs/executer/GradleBuildExecuter.groovy | 4 ---- .../docs/internal/snippets/junit/DelegatingTestRunner.java | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy index f9ab92342..073536fff 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/executer/GradleBuildExecuter.groovy @@ -44,10 +44,6 @@ class GradleBuildExecuter implements SnippetExecuter { settings.text = """ rootProject.name = 'shadowTest' include 'api', 'main' -""" - File properties = new File(dir, "gradle.properties") - properties.text = """ -or.gradle.daemon=false """ File mainDir = new File(dir, "main") diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/DelegatingTestRunner.java b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/DelegatingTestRunner.java index c0d93de22..abf87701c 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/DelegatingTestRunner.java +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/docs/internal/snippets/junit/DelegatingTestRunner.java @@ -18,7 +18,7 @@ public DelegatingTestRunner(Class clazz) throws InitializationError { setScheduler(new RunnerScheduler() { private final ExecutorService service = Executors.newFixedThreadPool( - Boolean.getBoolean("cloudCi") ? 1 : Runtime.getRuntime().availableProcessors() + System.getenv("CI") != null ? 1 : Runtime.getRuntime().availableProcessors() ); public void schedule(Runnable childStatement) { From 70e88f98907f749f512652036d2f74d340bd0935 Mon Sep 17 00:00:00 2001 From: Mark Vieira Date: Tue, 20 Nov 2018 20:47:06 -0800 Subject: [PATCH 23/34] Avoid leaking plugin classes into Gradle's pattern spec result cache --- .../shadow/tasks/ShadowCopyAction.groovy | 19 +++++++++++-------- .../ServiceFileTransformer.groovy | 4 +++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.groovy b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.groovy index f94f1f3b3..8a0940a23 100644 --- a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.groovy +++ b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/tasks/ShadowCopyAction.groovy @@ -24,6 +24,7 @@ import org.gradle.api.file.FileTreeElement import org.gradle.api.file.RelativePath import org.gradle.api.internal.DocumentationRegistry import org.gradle.api.internal.file.CopyActionProcessingStreamAction +import org.gradle.api.internal.file.DefaultFileTreeElement import org.gradle.api.internal.file.copy.CopyAction import org.gradle.api.internal.file.copy.CopyActionProcessingStream import org.gradle.api.internal.file.copy.FileCopyDetailsInternal @@ -253,11 +254,11 @@ class ShadowCopyAction implements CopyAction { ZipFile archive = new ZipFile(fileDetails.file) try { List archiveElements = archive.entries.collect { - new ArchiveFileTreeElement(new RelativeArchivePath(it, fileDetails)) + new ArchiveFileTreeElement(new RelativeArchivePath(it)) } Spec patternSpec = patternSet.getAsSpec() List filteredArchiveElements = archiveElements.findAll { ArchiveFileTreeElement archiveElement -> - patternSpec.isSatisfiedBy(archiveElement) + patternSpec.isSatisfiedBy(archiveElement.asFileTreeElement()) } filteredArchiveElements.each { ArchiveFileTreeElement archiveElement -> if (archiveElement.relativePath.file) { @@ -314,7 +315,7 @@ class ShadowCopyAction implements CopyAction { private void remapClass(RelativeArchivePath file, ZipFile archive) { if (file.classFile) { ZipEntry zipEntry = setArchiveTimes(new ZipEntry(remapper.mapPath(file) + '.class')) - addParentDirectories(new RelativeArchivePath(zipEntry, null)) + addParentDirectories(new RelativeArchivePath(zipEntry)) InputStream is = archive.getInputStream(file.entry) try { remapClass(is, file.pathString, file.entry.time) @@ -373,7 +374,7 @@ class ShadowCopyAction implements CopyAction { String mappedPath = remapper.map(archiveFile.entry.name) ZipEntry entry = new ZipEntry(mappedPath) entry.setTime(getArchiveTimeFor(archiveFile.entry.time)) - RelativeArchivePath mappedFile = new RelativeArchivePath(entry, archiveFile.details) + RelativeArchivePath mappedFile = new RelativeArchivePath(entry) addParentDirectories(mappedFile) zipOutStr.putNextEntry(mappedFile.entry) InputStream is = archive.getInputStream(archiveFile.entry) @@ -434,12 +435,10 @@ class ShadowCopyAction implements CopyAction { class RelativeArchivePath extends RelativePath { ZipEntry entry - FileCopyDetails details - RelativeArchivePath(ZipEntry entry, FileCopyDetails fileDetails) { + RelativeArchivePath(ZipEntry entry) { super(!entry.directory, entry.name.split('/')) this.entry = entry - this.details = fileDetails } boolean isClassFile() { @@ -452,7 +451,7 @@ class ShadowCopyAction implements CopyAction { } else { //Parent is always a directory so add / to the end of the path String path = segments[0..-2].join('/') + '/' - return new RelativeArchivePath(setArchiveTimes(new ZipEntry(path)), null) + return new RelativeArchivePath(setArchiveTimes(new ZipEntry(path))) } } } @@ -523,5 +522,9 @@ class ShadowCopyAction implements CopyAction { int getMode() { return archivePath.entry.unixMode } + + FileTreeElement asFileTreeElement() { + return new DefaultFileTreeElement(null, new RelativePath(!isDirectory(), archivePath.segments), null, null) + } } } diff --git a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.groovy b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.groovy index 61aa2fcb0..e91f8fbb2 100644 --- a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.groovy +++ b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/transformers/ServiceFileTransformer.groovy @@ -20,6 +20,7 @@ package com.github.jengelman.gradle.plugins.shadow.transformers import com.github.jengelman.gradle.plugins.shadow.relocation.RelocateClassContext +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowCopyAction import org.apache.tools.zip.ZipEntry import org.apache.tools.zip.ZipOutputStream import org.gradle.api.file.FileTreeElement @@ -59,7 +60,8 @@ class ServiceFileTransformer implements Transformer, PatternFilterable { @Override boolean canTransformResource(FileTreeElement element) { - return patternSet.asSpec.isSatisfiedBy(element) + FileTreeElement target = element instanceof ShadowCopyAction.ArchiveFileTreeElement ? element.asFileTreeElement() : element + return patternSet.asSpec.isSatisfiedBy(target) } @Override From a363ca7490bfd0086077ab514d7c4d26ac10ab30 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 08:49:33 -0600 Subject: [PATCH 24/34] (chore) Update changes for release --- src/docs/about/README.md | 2 +- src/docs/changes/README.md | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/docs/about/README.md b/src/docs/about/README.md index 94adc5a23..3df0c23fd 100644 --- a/src/docs/about/README.md +++ b/src/docs/about/README.md @@ -48,4 +48,4 @@ so Shadow was published there. * [Osip Fatkullin](https://github.com/osipxd) * [Victor Tso](https://github.com/roxchkplusony) * [Petar Petrov](https://github.com/petarov) - +* [Mark Vieira](https://github.com/mark-vieira) diff --git a/src/docs/changes/README.md b/src/docs/changes/README.md index 8c62d4273..f8c178c31 100644 --- a/src/docs/changes/README.md +++ b/src/docs/changes/README.md @@ -1,5 +1,8 @@ # Change Log +## v4.0.3 (2018-11-21) +* [Mark Vieira](https://github.com/mark-vieira) - Don't leak plugin classes to Gradle's Spec cache [#430](https://github.com/johnrengelman/shadow/pull/430) + ## v4.0.2 (2018-10-27) * [Petar Petrov](https://github.com/petarov) - Update to ASM 7.0-beta and jdependency 2.1.1 to support Java 11, [#415](https://github.com/johnrengelman/shadow/pull/415) * [Victor Tso](https://github.com/roxchkplusony) - Ensure input streams are closed, [#411](https://github.com/johnrengelman/shadow/pull/411) @@ -125,7 +128,7 @@ files within the configured path to merge. * [Matt Hurne](https://github.com/mhurne) - Added `GroovyExtensionModuleTransformer` for merging Groovy Extension module descriptor files. The existing `ServiceFileTransformer` now excludes Groovy Extension Module descriptors by default. -* `distShadowZip` and `distShadowZip` now contain the shadow library and run scripts instead of the default from the +* `distShadowZip` and `distShadowZip` now contain the shadow library and run scripts instead of the default from the `'application'` plugin, [#89](https://github.com/johnrengelman/shadow/issues/89) ## v1.0.3 (2014-07-29) From 0f2c91a0185717186ae424f27c84c1c786e117f5 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 09:13:39 -0600 Subject: [PATCH 25/34] (chore) Add 5.0-rc-4 compat check --- .../jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy index ea18ebc83..42ef2d45a 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy @@ -86,7 +86,7 @@ class ShadowPluginSpec extends PluginSpecification { assert output.exists() where: - version << ['4.0', '4.1', '4.2', '4.3', '4.4', '4.5', '4.6', '4.7', '4.8', '4.9', '4.10'] + version << ['4.0', '4.1', '4.2', '4.3', '4.4', '4.5', '4.6', '4.7', '4.8', '4.9', '4.10', '5.0-rc-4'] } def 'Error in Gradle versions < 4.0'() { @@ -358,8 +358,8 @@ class ShadowPluginSpec extends PluginSpecification { file('api/build.gradle') << """ apply plugin: 'java' repositories { maven { url "${repo.uri}" } } - dependencies { - compile 'junit:junit:3.8.2' + dependencies { + compile 'junit:junit:3.8.2' compile project(':lib') } """.stripIndent() From cfc8891838cfb41d730e6940e9ae98cf1d64577e Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 09:21:55 -0600 Subject: [PATCH 26/34] (fix) revert changes to settings.gradle --- settings.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings.gradle b/settings.gradle index f7991d848..b00e398eb 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,3 @@ -rootProject.name = 'shadowTest' -include 'api', 'main' +rootProject.name = 'shadow' +enableFeaturePreview('STABLE_PUBLISHING') From 8f6c7824f9d6fe2ec467b5633e5edecf1c8ed30c Mon Sep 17 00:00:00 2001 From: "James X. Nelson" Date: Wed, 21 Nov 2018 11:45:53 -0800 Subject: [PATCH 27/34] Support SelfResolvingDependency in shadowJars --- .../gradle/plugins/shadow/internal/UnusedTracker.groovy | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/internal/UnusedTracker.groovy b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/internal/UnusedTracker.groovy index cde3ec5eb..25f942265 100644 --- a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/internal/UnusedTracker.groovy +++ b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/internal/UnusedTracker.groovy @@ -3,6 +3,7 @@ package com.github.jengelman.gradle.plugins.shadow.internal import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.artifacts.SelfResolvingDependency import org.gradle.api.file.FileCollection import org.gradle.api.tasks.SourceSet import org.vafer.jdependency.Clazz @@ -58,6 +59,8 @@ class UnusedTracker { if (dep instanceof ProjectDependency) { apiJars.addAll(getApiJarsFromProject(dep.dependencyProject)) apiJars.add(runtimeConfiguration.find { it.name.endsWith("${dep.name}.jar") } as File) + } else if (dep instanceof SelfResolvingDependency) { + apiJars.addAll(dep.resolve()) } else { apiJars.add(runtimeConfiguration.find { it.name.startsWith("${dep.name}-") } as File) } From 8abb9be4a25301dfd810155219c11340a4560101 Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Wed, 21 Nov 2018 14:50:09 -0800 Subject: [PATCH 28/34] Recommend standard gradle config for reproducible builds * Documentation didn't mention reproducibleFileOrder option, and implied that file timestamps were the only issue. * Documentation now uses standard Gradle config for reproducible builds. * Now links to Gradle's documentation for more info. --- .../configuration/reproducible-builds/README.md | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/docs/configuration/reproducible-builds/README.md b/src/docs/configuration/reproducible-builds/README.md index feac281c7..e5595c168 100644 --- a/src/docs/configuration/reproducible-builds/README.md +++ b/src/docs/configuration/reproducible-builds/README.md @@ -1,15 +1,14 @@ # Reproducible Builds -Because JAR files contain the timestamp of the included files, it is often difficult to create reproducible builds -from a source commit that results in a hash identical file. -Gradle supports reproducible JAR creation by setting the timestamps of included files to a consistent value. -Shadow includes support for overriding file timestamps starting in version 4.0.0. By default, Shadow will preserve -the file timestamps when creating the Shadow JAR. To set timestamps to a consistent value (1980/1/1 00:00:00), -set the `preserveFileTimestamps` property to `false` on the `ShadowJar` task. +By default, JAR files generated by Gradle (with or without Shadow) for a single project with the same source code may not be identical to each other. Sometimes it's desireable to configure a project to consistently output a byte-for-byte identical JAR on every build. Gradle supports this with the following configuration, and Shadow will correctly respect these settings too: ```groovy -// Reset file timestamps -shadowJar { - preserveFileTimestamps = false +tasks.withType(AbstractArchiveTask) { + preserveFileTimestamps = false + reproducibleFileOrder = true } ``` + +One effect that this configuration will have is that the timestamps of all files in the JAR will be reset to a single consistent value. If your code or any files being included into the JAR depend on the timestamps being set accurately within the JAR, then this may not be the correct choice for you. + +See the [Reproducible archives section in Gradle's documentation](https://docs.gradle.org/4.9/userguide/working_with_files.html#sec:reproducible_archives) for more information. From e2745e88e96405061b54a5178628dead4468dae5 Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 18:03:37 -0600 Subject: [PATCH 29/34] (chore) next version [SKIP CI] --- src/main/resources/shadow-version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/shadow-version.txt b/src/main/resources/shadow-version.txt index c4e41f945..c5106e6d1 100644 --- a/src/main/resources/shadow-version.txt +++ b/src/main/resources/shadow-version.txt @@ -1 +1 @@ -4.0.3 +4.0.4 From 8acccbf6df82f186883256da150d0918597e4d7a Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 18:03:52 -0600 Subject: [PATCH 30/34] (chore) copy CI config to gh-pages branch --- gradle/ghPages.gradle | 1 + src/docs/changes/README.md | 5 +++ .../shadow/ShadowApplicationPlugin.groovy | 4 +++ .../plugins/shadow/PublishingSpec.groovy | 32 +++++++++++++++++++ 4 files changed, 42 insertions(+) diff --git a/gradle/ghPages.gradle b/gradle/ghPages.gradle index 4eb66cd9b..93f287a04 100644 --- a/gradle/ghPages.gradle +++ b/gradle/ghPages.gradle @@ -13,6 +13,7 @@ gitPublish { contents { from 'build/site' + from '.circleci' into('api') { from project.tasks.groovydoc } diff --git a/src/docs/changes/README.md b/src/docs/changes/README.md index f8c178c31..3852e0590 100644 --- a/src/docs/changes/README.md +++ b/src/docs/changes/README.md @@ -1,5 +1,10 @@ # Change Log +## v4.0.4 (2018-11-21) +* Automatically configure `classifier` (to `shadow`) on `shadowDistZip` and `shadowDistTar` so that the `maven` plugin + doesn't error when using `shadow`, `maven`, and `application` plugin together. This change may result in new file names + for the artifacts created and published by these tasks. [#347](https://github.com/johnrengelman/shadow/issues/347) + ## v4.0.3 (2018-11-21) * [Mark Vieira](https://github.com/mark-vieira) - Don't leak plugin classes to Gradle's Spec cache [#430](https://github.com/johnrengelman/shadow/pull/430) diff --git a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy index 471935792..5bdf123ff 100644 --- a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy +++ b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy @@ -5,6 +5,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import org.gradle.api.GradleException import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.api.Task import org.gradle.api.distribution.Distribution import org.gradle.api.distribution.DistributionContainer import org.gradle.api.file.CopySpec @@ -30,6 +31,9 @@ class ShadowApplicationPlugin implements Plugin { DistributionContainer distributions = project.extensions.getByName("distributions") Distribution distribution = distributions.create("shadow") + project.tasks.shadowDistZip.classifier = 'shadow' + project.tasks.shadowDistTar.classifier = 'shadow' + addRunTask(project) addCreateScriptsTask(project) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/PublishingSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/PublishingSpec.groovy index b45ad8ae6..bbe43155e 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/PublishingSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/PublishingSpec.groovy @@ -2,6 +2,7 @@ package com.github.jengelman.gradle.plugins.shadow import com.github.jengelman.gradle.plugins.shadow.util.AppendableMavenFileRepository import com.github.jengelman.gradle.plugins.shadow.util.PluginSpecification +import spock.lang.Issue class PublishingSpec extends PluginSpecification { @@ -70,6 +71,37 @@ class PublishingSpec extends PluginSpecification { assert dependency.version.text() == '1.0' } + @Issue('SHADOW-347') + def "maven install with application plugin"() { + given: + repo.module('shadow', 'a', '1.0') + .insertFile('a.properties', 'a') + .insertFile('a2.properties', 'a2') + .publish() + repo.module('shadow', 'b', '1.0') + .insertFile('b.properties', 'b') + .publish() + + settingsFile << "rootProject.name = 'maven'" + buildFile << """ + apply plugin: 'maven' + apply plugin: 'application' + + mainClassName = 'my.App' + + dependencies { + compile 'shadow:a:1.0' + shadow 'shadow:b:1.0' + } + """.stripIndent() + + when: + runner.withArguments('install').withDebug(true).build() + + then: + noExceptionThrown() + } + def "publish shadow jar with maven-publish plugin"() { given: repo.module('shadow', 'a', '1.0') From a824e4f6e4618785deb7f084c4a80ce1b78fc4fd Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 19:21:37 -0600 Subject: [PATCH 31/34] (fix) remove shadowDistZip and shadowDistTar from configurations.archives --- src/docs/changes/README.md | 6 +++--- .../shadow/ShadowApplicationPlugin.groovy | 15 ++++++++++--- .../plugins/shadow/ApplicationSpec.groovy | 8 +++---- .../plugins/shadow/FilteringSpec.groovy | 6 ++++-- .../plugins/shadow/RelocationSpec.groovy | 2 +- .../plugins/shadow/ShadowPluginSpec.groovy | 21 ++++++++++++------- .../plugins/shadow/TransformerSpec.groovy | 4 ++-- .../shadow/util/PluginSpecification.groovy | 12 +++++++---- 8 files changed, 48 insertions(+), 26 deletions(-) diff --git a/src/docs/changes/README.md b/src/docs/changes/README.md index 3852e0590..ce2740af9 100644 --- a/src/docs/changes/README.md +++ b/src/docs/changes/README.md @@ -1,9 +1,9 @@ # Change Log ## v4.0.4 (2018-11-21) -* Automatically configure `classifier` (to `shadow`) on `shadowDistZip` and `shadowDistTar` so that the `maven` plugin - doesn't error when using `shadow`, `maven`, and `application` plugin together. This change may result in new file names - for the artifacts created and published by these tasks. [#347](https://github.com/johnrengelman/shadow/issues/347) +* When using `shadow`, `application`, and `maven` plugins together, remove `shadowDistZip` and `shadowDistTar` from + `configurations.archives` so they are not published or installed by default with the `uploadArchives` or `install` + tasks. [#347](https://github.com/johnrengelman/shadow/issues/347) ## v4.0.3 (2018-11-21) * [Mark Vieira](https://github.com/mark-vieira) - Don't leak plugin classes to Gradle's Spec cache [#430](https://github.com/johnrengelman/shadow/pull/430) diff --git a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy index 5bdf123ff..c4fbb039c 100644 --- a/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy +++ b/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowApplicationPlugin.groovy @@ -11,6 +11,7 @@ import org.gradle.api.distribution.DistributionContainer import org.gradle.api.file.CopySpec import org.gradle.api.plugins.ApplicationPlugin import org.gradle.api.plugins.ApplicationPluginConvention +import org.gradle.api.plugins.MavenPlugin import org.gradle.api.tasks.Sync import org.gradle.api.tasks.application.CreateStartScripts @@ -31,9 +32,6 @@ class ShadowApplicationPlugin implements Plugin { DistributionContainer distributions = project.extensions.getByName("distributions") Distribution distribution = distributions.create("shadow") - project.tasks.shadowDistZip.classifier = 'shadow' - project.tasks.shadowDistTar.classifier = 'shadow' - addRunTask(project) addCreateScriptsTask(project) @@ -41,6 +39,17 @@ class ShadowApplicationPlugin implements Plugin { configureJarMainClass(project) configureInstallTask(project) + + project.plugins.withType(MavenPlugin) { + project.configurations.archives.with { + artifacts.findAll { + it.provider.get().is(project.tasks.shadowDistZip) || + it.provider.get().is(project.tasks.shadowDistTar) + }.each { + artifacts.remove it + } + } + } } protected void configureJarMainClass(Project project) { diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ApplicationSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ApplicationSpec.groovy index 3975df16c..c7e991156 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ApplicationSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ApplicationSpec.groovy @@ -58,7 +58,7 @@ class ApplicationSpec extends PluginSpecification { assert result.output.contains('TestApp: Hello World! (foo)') and: 'Check that the proper jar file was installed' - File installedJar = file('build/install/myapp-shadow/lib/myapp-1.0-all.jar') + File installedJar = getFile('build/install/myapp-shadow/lib/myapp-1.0-all.jar') assert installedJar.exists() and: 'And that jar file as the correct files in it' @@ -70,7 +70,7 @@ class ApplicationSpec extends PluginSpecification { assert attributes.getValue('Main-Class') == 'myapp.Main' then: 'Check that the start scripts is written out and has the correct Java invocation' - File startScript = file('build/install/myapp-shadow/bin/myapp') + File startScript = getFile('build/install/myapp-shadow/bin/myapp') assert startScript.exists() assert startScript.text.contains("CLASSPATH=\$APP_HOME/lib/myapp-1.0-all.jar") assert startScript.text.contains("eval \\\"\$JAVACMD\\\" \$JVM_OPTS -jar \\\"\$CLASSPATH\\\" \$APP_ARGS") @@ -116,7 +116,7 @@ class ApplicationSpec extends PluginSpecification { runner.withArguments('shadowDistZip', '--stacktrace').build() then: 'Check that the distribution zip was created' - File zip = file('build/distributions/myapp-shadow-1.0.zip') + File zip = getFile('build/distributions/myapp-shadow-1.0.zip') assert zip.exists() and: 'Check that the zip contains the correct library files & scripts' @@ -166,7 +166,7 @@ class ApplicationSpec extends PluginSpecification { runner.withArguments(ShadowApplicationPlugin.SHADOW_INSTALL_TASK_NAME).build() then: 'Check that the proper jar file was installed' - File installedJar = file('build/install/myapp-shadow/lib/myapp-1.0-all.jar') + File installedJar = getFile('build/install/myapp-shadow/lib/myapp-1.0-all.jar') assert installedJar.exists() } } diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy index eed7fb550..8b31b21bd 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/FilteringSpec.groovy @@ -302,12 +302,13 @@ class FilteringSpec extends PluginSpecification { // end::excludeProject[] """.stripIndent() - File serverOutput = file('server/build/libs/server-1.0-all.jar') + File serverOutput = getFile('server/build/libs/server-1.0-all.jar') when: runner.withArguments(':server:shadowJar').build() then: + serverOutput.exists() doesNotContain(serverOutput, [ 'client/Client.class', ]) @@ -355,12 +356,13 @@ class FilteringSpec extends PluginSpecification { // end::excludeSpec[] """.stripIndent() - File serverOutput = file('server/build/libs/server-1.0-all.jar') + File serverOutput = getFile('server/build/libs/server-1.0-all.jar') when: runner.withArguments(':server:shadowJar').build() then: + serverOutput.exists() doesNotContain(serverOutput, [ 'junit/framework/Test.class' ]) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/RelocationSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/RelocationSpec.groovy index 0f4b0dcd7..673f8d862 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/RelocationSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/RelocationSpec.groovy @@ -232,7 +232,7 @@ class RelocationSpec extends PluginSpecification { runner.withArguments(':app:shadowJar').build() then: - File appOutput = file('app/build/libs/app-all.jar') + File appOutput = getFile('app/build/libs/app-all.jar') assert appOutput.exists() and: diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy index 42ef2d45a..94b1d537f 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy @@ -195,12 +195,13 @@ class ShadowPluginSpec extends PluginSpecification { """.stripIndent() - File serverOutput = file('server/build/libs/server-all.jar') + File serverOutput = getFile('server/build/libs/server-all.jar') when: runner.withArguments(':server:shadowJar').build() then: + serverOutput.exists() contains(serverOutput, [ 'client/Client.class', 'server/Server.class', @@ -251,12 +252,13 @@ class ShadowPluginSpec extends PluginSpecification { dependencies { compile project(':client') } """.stripIndent() - File serverOutput = file('server/build/libs/server-all.jar') + File serverOutput = getFile('server/build/libs/server-all.jar') when: runner.withArguments(':server:shadowJar', '--stacktrace').withDebug(true).build() then: + serverOutput.exists() contains(serverOutput, [ 'client/Client.class', 'server/Server.class' @@ -305,12 +307,13 @@ class ShadowPluginSpec extends PluginSpecification { dependencies { compile project(':client') } """.stripIndent() - File serverOutput = file('server/build/libs/server-all.jar') + File serverOutput = getFile('server/build/libs/server-all.jar') when: runner.withArguments(':server:shadowJar', '--stacktrace').withDebug(true).build() then: + serverOutput.exists() contains(serverOutput, [ 'server/Server.class', 'junit/framework/Test.class' @@ -382,12 +385,13 @@ class ShadowPluginSpec extends PluginSpecification { dependencies { api project(':api') } """.stripIndent() - File serverOutput = file('impl/build/libs/impl-all.jar') + File serverOutput = getFile('impl/build/libs/impl-all.jar') when: runner.withArguments(':impl:shadowJar', '--stacktrace').withDebug(true).build() then: + serverOutput.exists() contains(serverOutput, [ 'impl/SimpleEntity.class', 'api/Entity.class', @@ -457,12 +461,13 @@ class ShadowPluginSpec extends PluginSpecification { dependencies { api project(':api') } """.stripIndent() - File serverOutput = file('impl/build/libs/impl-all.jar') + File serverOutput = getFile('impl/build/libs/impl-all.jar') when: runner.withArguments(':impl:shadowJar', '--stacktrace').withDebug(true).build() then: + serverOutput.exists() contains(serverOutput, [ 'impl/SimpleEntity.class', 'api/Entity.class', @@ -510,12 +515,13 @@ class ShadowPluginSpec extends PluginSpecification { dependencies { compile project(path: ':client', configuration: 'shadow') } """.stripIndent() - File serverOutput = file('server/build/libs/server.jar') + File serverOutput = getFile('server/build/libs/server.jar') when: runner.withArguments(':server:jar').build() then: + serverOutput.exists() contains(serverOutput, [ 'server/Server.class' ]) @@ -567,12 +573,13 @@ class ShadowPluginSpec extends PluginSpecification { dependencies { compile project(path: ':client', configuration: 'shadow') } """.stripIndent() - File serverOutput = file('server/build/libs/server-all.jar') + File serverOutput = getFile('server/build/libs/server-all.jar') when: runner.withArguments(':server:shadowJar').build() then: + exerverOutput.exists() contains(serverOutput, [ 'client/Client.class', 'client/junit/framework/Test.class', diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/TransformerSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/TransformerSpec.groovy index b360bc0aa..46575b669 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/TransformerSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/TransformerSpec.groovy @@ -511,7 +511,7 @@ two # NOTE: No newline terminates this line/file runner.withArguments('jar', 'shadowJar').build() then: - File jar = file('build/libs/shadow-1.0.jar') + File jar = getFile('build/libs/shadow-1.0.jar') assert jar.exists() assert output.exists() @@ -571,7 +571,7 @@ two # NOTE: No newline terminates this line/file runner.withArguments('jar', 'shadowJar').build() then: - File jar = file('build/libs/shadow-1.0.jar') + File jar = getFile('build/libs/shadow-1.0.jar') assert jar.exists() assert output.exists() diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/util/PluginSpecification.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/util/PluginSpecification.groovy index 63d4bf08f..560434c02 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/util/PluginSpecification.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/util/PluginSpecification.groovy @@ -81,6 +81,10 @@ class PluginSpecification extends Specification { return f } + File getFile(String path) { + new File(dir.root, path) + } + AppendableMavenFileRepository repo(String path = 'maven-repo') { new AppendableMavenFileRepository(new TestFile(dir.root, path)) } @@ -119,12 +123,12 @@ class PluginSpecification extends Specification { return new AppendableJar(file(path)) } - protected getOutput() { - file('build/libs/shadow-1.0-all.jar') + protected File getOutput() { + getFile('build/libs/shadow-1.0-all.jar') } - protected output(String name) { - file("build/libs/${name}") + protected File output(String name) { + getFile("build/libs/${name}") } protected File getTestJar(String name = 'junit-3.8.2.jar') { From 363e12470f85d8e4c409b9f60bc6f378760b53ad Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 19:30:03 -0600 Subject: [PATCH 32/34] (fix) bad copy and paste in test --- .../jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy index 94b1d537f..4e967cbd9 100644 --- a/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy +++ b/src/test/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowPluginSpec.groovy @@ -579,7 +579,7 @@ class ShadowPluginSpec extends PluginSpecification { runner.withArguments(':server:shadowJar').build() then: - exerverOutput.exists() + serverOutput.exists() contains(serverOutput, [ 'client/Client.class', 'client/junit/framework/Test.class', From 049b25691b62ba7004a7cdabc8329cdd51c43f4d Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 21:30:28 -0600 Subject: [PATCH 33/34] (chore) update change log and contributors --- src/docs/about/README.md | 1 + src/docs/changes/README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/src/docs/about/README.md b/src/docs/about/README.md index 3df0c23fd..29454afc1 100644 --- a/src/docs/about/README.md +++ b/src/docs/about/README.md @@ -49,3 +49,4 @@ so Shadow was published there. * [Victor Tso](https://github.com/roxchkplusony) * [Petar Petrov](https://github.com/petarov) * [Mark Vieira](https://github.com/mark-vieira) +* [James Nelson](https://github.com/JamesXNelson) diff --git a/src/docs/changes/README.md b/src/docs/changes/README.md index ce2740af9..01ee0e35e 100644 --- a/src/docs/changes/README.md +++ b/src/docs/changes/README.md @@ -4,6 +4,7 @@ * When using `shadow`, `application`, and `maven` plugins together, remove `shadowDistZip` and `shadowDistTar` from `configurations.archives` so they are not published or installed by default with the `uploadArchives` or `install` tasks. [#347](https://github.com/johnrengelman/shadow/issues/347) +* [James Nelson](https://github.com/JamesXNelson) Fix `null` path when using Jar minimization and Gradle's `api` configuration. [#424](https://github.com/johnrengelman/shadow/issues/424), [#425](https://github.com/johnrengelman/shadow/issues/425) ## v4.0.3 (2018-11-21) * [Mark Vieira](https://github.com/mark-vieira) - Don't leak plugin classes to Gradle's Spec cache [#430](https://github.com/johnrengelman/shadow/pull/430) From 1f1d2162884388fada70ff5fdd9fa71ada98d17c Mon Sep 17 00:00:00 2001 From: John Engelman Date: Wed, 21 Nov 2018 21:50:51 -0600 Subject: [PATCH 34/34] (fix) Site links to edit doc pages. Closes #432. --- src/docs/.vuepress/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/docs/.vuepress/config.js b/src/docs/.vuepress/config.js index a9d9c2e60..d2741137c 100644 --- a/src/docs/.vuepress/config.js +++ b/src/docs/.vuepress/config.js @@ -7,7 +7,7 @@ module.exports = { editLinks: true, editLinkText: 'Help improve these docs!', logo: '/logo+type.svg', - docsDir: 'src/docs/vuepress', + docsDir: 'src/docs', title: 'Gradle Shadow Plugin', nav: [ { text: 'User Guide', link: '/introduction/' }